Ma bejelentette a Microsoft az SQL Server 2016-ot, Linuxra!

Nem gondoltam volna, hogy ez a nap valaha is eljön. Főleg azt nem gondoltam volna, hogy ilyen hamar, de úgy néz ki nem tétlenkednek Redmondban. Ha valamit nem tudsz megállítani, állj az élére! Ezt nagyon komolyan gondolják arrafele. Kíváncsi vagyok, hogy ez a stratégia sikerrel fog-e zárulni számukra, és én mint Microsoft felhasználó, fogok-e nyerni ezzel?

Valahol azt olvastam, hogy «Afganisztán volt a Szovjetúnió Vietnamja». Bár nem vagyok egyik téma szakértője sem, de ismereteim alapján az analógia egész jól megállja a helyét.

Régebben sok háborús filmet néztem, melyek közül sok a vietnami háborúban játszódott. A kor zenéje, és a képsorok alapján egyből ez a fenti aforizma jutott eszembe, amikor a uSSSy – booty dance dalát meghallgattam ezzel a klippel:

Az egész hangulata, ezzel a keleties hangzással, kissé hippis beütéssel a kissé más hangzás ellenére a vietnami korszak zenéinek hangulatát juttatta eszembe. Például ennek a Doors dalnak a hangulatát:

A dal pedig egy újabb példa arra, hogy ismét egyre jobban érdemes figyelni Oroszországra. Ahogy a világpolitika porondjára is igyekezik mostanában visszatérni, úgy a kultúra és technológia frontján is egyre inkább ismét megjelennek figyelemreméltó orosz alkotások.

A minap olvastam egy cikket egy jópofa hackről, amivel olyan szavakat is tudunk infix operátorként használni, amik amúgy nem overrideolható operátorok az adott nyelvben. A cikk pythonról szól, de nekem úgy tűnt, hogy bármilyen operator overloadingra képes nyelvben megoldható, ezért leporoltam a Visual Studiot, és a sok a Java után operator overloadoltam egy kicsit C#-ban.

Először a tesztet mutatom, amiből igaziból nyilvánvaló is, hogy mi a hack lényege:

using Xunit;

namespace Kodfodrasz.Infix.Test {

    public class InfixTest {
        [Fact]
        public void AddOperatorTest() {
            var add = new Infix.Infix<int, int, int>((a, b) => a + b);

            var result = 3 | add | 4;

            Assert.Equal(7, result);
        }
    }
}

Igen, a | operátor egy típuson értelmezve indítja a műveletet, illetve befejezi azt. A műveletet egy változóban lehet tárolni.

Hack? Igen!
Szép? Nem!
Jópofa ötlet? Igen!

És akkor egy lehetséges megvalósítás:

using System;

namespace Kodfodrasz.Infix {

    public class Infix<TLeft, TRight, TResult> {
        public Func<TLeft, TRight, TResult> operation;

        public Infix(Func<TLeft, TRight, TResult> operation) {
            this.operation = operation;
        }

        public static InfixHalfApplied<TLeft, TRight, TResult> operator |(TLeft left, Infix<TLeft, TRight, TResult> infix) {
            return new InfixHalfApplied<TLeft, TRight, TResult>(infix, left);
        }

        public class InfixHalfApplied<TLeft, TRight, TResult> {
            private Infix<TLeft, TRight, TResult> infix;
            private TLeft left;

            internal InfixHalfApplied(Infix<TLeft, TRight, TResult> infix, TLeft left) {
                this.infix = infix;
                this.left = left;
            }

            public static TResult operator |(InfixHalfApplied<TLeft, TRight, TResult> infixHalfApplied, TRight right) {
                return infixHalfApplied.infix.operation(infixHalfApplied.left, right);
            }
        }
    }
}

Igen, az inner class lehetne outer is, illetve ha már inner lehetnének a típusparamétereinek nevei mások, mert így (jogosan) warningol, de nekem így is megfelel, így talán szemléletesebb is. Amellett az is látható, hogy ezek az operátorok így nem tudnak polimorfikusak lenni, legfeljebb a C# 5 dynamic támogatásával. A Python verzióban persze ez az alap viselkedés.

Bár nem tudok olyan helyzetet elképzelni amiben ezt egy igazi projektben használnám, szerintem egész érdekes, és jó tudni, hátha az élet rácáfol erre az előítéletemre.

Mostanában ismét rákaptam a Payday 2 nevű kiváló svéd játékra.

A játék egy bankrabló/betörő szimulátor. Miután tegnap sikerült a legnehezebb fokozaton is teljesíteni a Shadow Raid nevű küldetést, már csak egy külön DLC-t nem igénylő achievement volt hátra: minden lehetséges zsákmánytípusból legalább egy darabot ellopni. Tegnap vagy nem osztott festményt a gép, vagy elfeledkeztünk róla, de a 16 (vagy 20?) zsák szajré közt egy sem volt. Ma – ugyan egyedül – de bepótoltam a tegnapi mulasztást.

Nagyon jó játék, tudom ajánlani. Legfeljebb 4 fős csapatban játszható, idegenekkel vagy barátokkal. Egy-egy küldetés 35 másodperctől (Tegnap megcsináltuk azt az achievementet is széfrobbantós speedrunnal…) akár több mint egy óráig is tarthat. (Shadow Raidben kivárni amíg a belépőkártyás ember olyan helyre megy, ahol a holtteste nem lesz feltűnő, mivel már elfogytak a hullazsákok, de nincs elég kártya még a széfhez…) Tipikusan 20-30 perc között van egy küldetés, ha sikerül.

Minden nem DLC-t igénylő achievement teljesítve a Shadow Raid küldetéshez Ez a festmény is kellett, hogy meglegyen az utolsó achievement

Régebben terveztem egy véleményt, ajánlót írni róla, de mindig elmaradt. Kedvcsinálónak a zenéit is ajánlom még! Nagyon feldobják az akciójeleneteket.

Értékelésem: Nagyon ajánlott 1010 ! (egy keveset kis bugokon, usability apróságokon bukik)

Megtörtént. A Microsoft felvásárolta a Xamarint.

Ez az üzlet régóta a levegőben lógott. A Xamarin pontos üzleti teljesítményét nem ismerem, de azt tudom, hogy többé-kevésbé működött a megoldásuk, mellyel keresztplatformos mobilalkalmazásokat lehetett fejleszteni C#-ban Windows Phonet, iOSt és Androidot egyaránt célozva, egyetlen projektben.

Nagyon hiányzott már ez a Microsoft palettájáról, mivel hiába ígér hasonlót a Visual Studio 2015 óta elérhető Apache Cordova is, mivel az JavaScript alapú, így egy jóérzésű ember igyekszik távol tartani magát tőle.

Kíváncsian várom a további fejleményeket a .Net háza táján, mivel a platform kissé mostohagyermek volt az elmúlt időszakban, és ráfér némi pezsgés. Túl jó ahhoz, hogy a süllyesztőbe kerüljön.

Hajrá Miguel!

Már csak az érdekel, hogy mi lesz a mono, Monodevelop/Xamarin Studio sorsa.