Scratch – Kinder lernen programmieren

Ohne Computer läuft heute gar nichts mehr. Umso wichtiger ist es, zu verstehen, wie sowohl Computer, als auch die darauf laufende Software, funktionieren. Um dieses so wichtige Verständnis zu schüren, sollten schon Kinder mit dem Thema des Programmierens in Berührung kommen.

Dazu gibt es unterschiedlichste Werkzeuge. Eines, das ich – aus Erfahrung – sehr empfehlen kann, ist Scratch.

Scratch ist ein tolles Hilfsmittel für Neueinsteiger, vor allem aber Kinder und Jugendliche. Programme bestehen hier aus interaktiven Komponenten, die zusammengesetzt und mit „Leben“ versehen werden können. Mittels unterschiedlicher Bausteine können die Komponenten bewegt werden, es ist möglich, auf Ereignisse zu reagieren oder aber auch Sound abzuspielen und vieles mehr.

Durch das Bausteinsystem werden Syntaxfehler vermieden. Statt Frust gibt es schnelle Erfolge und treiben zu weiteren „Spielereien“ ein. Innerhalb kürzester Zeit können so zum Beispiel kleine Spiele entwickelt werden.

Kinder lernen so spielerisch einige Grundkonzepte der Programmierung kennen und können so in kurzer Zeit auf komplexere Sprachen umsteigen und sich weiterentwickeln.

Die Voraussetzungen für Scratch sind gering: Ein Computer und ein Browser werden benötigt. Die Entwicklung findet komplett im Browser statt. Die Programme können abgespeichert oder geladen werden und stehen so auch sofort zur Verfügung. Es kann auch offline entwickelt werden. Dazu steht Scratch-Desktop für Windows 10 und MacOS 10.13+ zur Verfügung.

Scratch - Programmieren lernen
Scratch – Programmieren lernen

Damit man nicht ganz alleine starten muss, gibt es auch eine große Community und zahlreiche Hilfen für den Einstieg. Vielleicht gibt es ja auch in deiner Nähe ein CoderDojo. Hier in Österreich gibt es das CoderDojo Linz und das CoderDojo Graz. Hier bekommt man Unterstützung, wenn man als Elternteil nicht ganz so firm in diesen Dingen ist.

Besonders hilfreich ist die Liste der Übungsbeispiele des CoderDojo Linz zu Scratch und HTML.

In diesem Sinne wünsche ich Happy Coding und interessante, lehrreiche Stunden mit dem Nachwuchs.

Fazit Zero-Follower-Strategie auf Twitter

In So ist auch Twitter wieder nutzbar habe ich meine Nutzungsstragie auf Twitter komplett umgestellt. Ich folgte niemanden mehr, sondern arbeitete ausschließlich mit Listen.

Das erste Monat war richtig gut. Ich nutzte Twitter weiterhin und arbeitete mit meinen Listen, es funktionierte wunderbar. Die Timeline war leer und ich wurde auch nicht durch Unnötiges abgelenkt. Das äußerte sich darin, dass ich beginnend mit dem zweiten Monat meiner Umstellung Twitter immer seltener nutzte. Nun sind es fast vier Wochen, als ich das letzte Mal etwas getweetet habe. Meinen Zweitaccount (@ne_photos für die Fotografie) hatte ich daraufhin wieder umgestellt (wenngleich auch sehr halbherzig). Aber so richtig schlägt Twitter bei mir nicht mehr ein. Oder anders gesagt: Es hat seinen hohen Stellenwert bei mir verloren. Das liegt aber sicherlich auch darin, dass ich meine Online-Kommunikation sehr stark verlagert habe.

In der nächsten Zeit werde ich wohl meinen Hauptaccount wieder umstellen und dem einen oder anderen wieder folgen. Den Zweitaccount werde ich nicht weiter bedienen, für zwei Twitter-Accounts fehlt mir schlicht die Muse. Da müssen meine Follower damit leben, dass die Themenbereiche bunt gemischt sind.

So long, man sieht sich: @norberteder

ASP.NET Core: DateTime bei der Serialisierung formatieren

Im Standard wird das Datum ISO-konform serialisiert (z.B. dueDate=2019-02-21T00:00:00). In manchen Fällen möchte man das Format ändern, oder aber beispielsweise nur das Datum übertragen. Hierfür bietet JSON.NET (welches bis .NET Core kleiner 3.0 die eingesetzte JSON-Library ist) eine sehr einfache Lösung:

public class JsonDateConverter : IsoDateTimeConverter
{
    public JsonDateConverter()
    {
        DateTimeFormat = "yyyy-MM-dd";
    }
}

Nun muss der Converter noch für die gewünschte Eigenschaft konfiguriert werden:

[JsonConverter(typeof(JsonDateConverter))]
public DateTime? DueDate { get; set; }

Ab nun wird das Datum im angegebenen Format serialisiert.

Ab .NET Core 3.0 wird JSON.NET nicht mehr als führende Library eingesetzt, die Integration bleibt jedoch als zusätzliches Package erhalten und JSON.NET somit weiterhin offiziell supported.

HttpContext in .NET Core nutzen

In vielen Fällen ist der Zugriff auf den HttpContext notwendig, sei es nur, um an die aktuellen Benutzerinformationen zu gelangen.

Dies gestaltet sich in einem Controller sehr einfach, da diese Basisklasse den HttpContext über eine Eigenschaft nach außen gibt.

public class DemoController : Controller
{
    [HttpPut]
    public IActionResult Put([FromBody] Audit audit)
    {
        ClaimsPrincipal principal = this.HttpContext.User;

        if (principal.HasClaim(c => c.Type == "id"))
        {
            audit.ChangedBy = principal.Claims.First(c => c.Type == "userName").Value;
        }
        else
        {
            return BadRequest("error message");
        }

        // code goes here

        return Ok();
    }
}

Nun kann man diverse Aufgaben in eigenen Komponenten ausführen. Dort ist der HTTP-Kontext nicht verfügbar. Wie kann nun darauf zugegriffen werden?

Die Lösung besteht in der Verwendung des Schnittstelle IHttpContextAccessor in Verbindung mit der Dependency Injection, die .NET Core bietet:

public void ConfigureServices(IServiceCollection services) 
{
    // configuration goes here

    services.AddHttpContextAccessor();
}

Bei Nutzung der Dependency Injection wird die Abhängigkeit nun bei Klassen, die das Interface IHttpContextAccssor als Konstruktor-Parameter erwarten, übergeben.

public class Auditor
{
    private IHttpContextAccessor ContextAccessor { get; set; }

    public Auditor(IHttpContextAccessor httpContextAccessor) 
    {
        ContextAccessor = httpContextAccessor;
    }

    public void WriteAudit(T oldEntity, T newEntity) 
    {
        var user = ContextAccessor.HttpContext.User;

        // code goes here
    }
}

Diese Klasse muss natürlich noch beim Dependendy System registriert werden:

public void ConfigureServices(IServiceCollection services) 
{
    // configuration goes here

    services.AddHttpContextAccessor();

    services.AddTransient<Auditor>();
}

Happy Coding.

Du willst mehr zu .NET Core erfahren? Hier lang.

.NET Core: Eigenschaft nicht serialisieren

Ausgangspunkt: Du überträgst Daten von deiner API an den Client. Dabei werden Daten übertragen, die der Client nicht benötigt oder – aus anderen Gründen – nicht an ihn übergeben werden sollen. Dafür gibt es zwei Ansätze:

DataContract

Markiere eine Klasse mit dem DataContractAttribute. Nun werden nur Attribute serialisiert, welche durch das Attribut DataMemberAttribute markiert wurden.

[DataContract]
public class User
{
    [DataMember]
    public string UserName { get; set; }

    public string Password { get; set; }
}

In diesem Fall wird nur die Eigenschaft UserName serialisiert und an an den Client übertragen. Password wird dabei ignoriert.

IgnoreDataMember

Die zweite Variante besteht in der Verwendung des Attributs IgnoreDataMemberAttribute. Hier wird die Klasse nicht mit DataContract markiert und alle Attribute serialisiert, ausser, wenn sie mit dem IgnoreDataMemberAttribute ausgenommen werden.

public class User
{
    public string UserName { get; set; }

    [IgnoreDataMember]
    public string Password { get; set; }
}

Sobald eine Klasse mit DataContract markiert ist, wird das IgnoreDataMemberAttribute ignoriert.

.NET Core: Wiederkehrende Aufgaben im Hintergrund ausführen

In vielen Anwendungen gibt es die Notwendigkeit, bestimmte Aufgaben in regelmäßigen Zeitintervallen auszuführen. .NET Core bietet hierfür eine einfache Möglichkeit an.

IHostedService

Die Schnittstelle IHostedService stellt dem Entwickler die Möglichkeit bereit, einen Dienst zu implementieren, der einmal im Dependency System registriert, über die gesamte Laufzeit lebt und eine Aufgaben ausführen kann. Sie steht seit .NET Core 2.1 zur Verfügung.

Mit folgender Implementierung kann ein Job realisiert werden, der alle fünf Minuten ausgeführt wird:

public class MyImportJob : IHostedService, IDisposable
{
    private ILogger<MyImportJob> Logger { get; }
    private Timer _timer;

    public MyImportJob(ILogger<MyImportJob> logger)
    {
        Logger = logger;
    }

    public Task StartAsync(CancellationToken cancellationToken)
    {
        Logger.LogInformation("Starting Job [" + nameof(NormalizedUserCheckJob) + "]");

        _timer = new Timer(Check, null, TimeSpan.Zero, TimeSpan.FromMinutes(5));

        return Task.CompletedTask;
    }

    private void Check(object state)
    {
        Logger.LogInformation("Running [" + nameof(MyImportJob) + "]");

        // Do job here
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        Logger.LogInformation("Stopping Job [" + nameof(MyImportJob) + "]");

        _timer?.Change(Timeout.Infinite, 0);

        return Task.CompletedTask;
    }

    public void Dispose()
    {
        _timer?.Dispose();
    }
}

Nun fehlt noch die Registrierung.

Registrierung

Schlussendlich muss eine Registrierung erfolgen. Dies geschieht in Startup.ConfigureServices:

services.AddHostedService<MyImportJob>();

Mehr ist nicht notwendig und der Job wird ab Start des Hosts alle fünf Minuten ausgeführt.

Fazit

Wiederkehrende Aufgaben können sehr einfach über die Schnittstelle IHostedService implementiert und ausgeführt werden. .NET Core stellt die notwendige Infrastruktur zur Verfügung. Als Softwareentwickler können wir uns voll und ganz auf die Funktionalität konzentrieren.

So ist auch Twitter wieder nutzbar

Alexander Zeitler hat heute einen dahintümpelnden Gedanken wach gerüttelt, der sich zusehends im Gehirn breit macht und sogar unbewusst zu einigen Handlungen in den letzten Wochen geführt hat. Dabei geht es hauptsächlich um das hohe Grundrauschen aka Noice, dem wir auf Twitter mittlerweile ausgesetzt sind. Das hat mich bewegt, etwas zu ändern. Geschafft hat er das mit dem Retweet dieses Tweets:

Following 0

Wer mir auf Twitter folgt und auch öfter mit mir interagiert hat, hat sicher gemerkt, dass ich mich auch hier mittlerweile nur mehr selten blicken lasse. Microsoft-Gebashe hier, Apple-Gebashe dort, sinnlose Suderei darüber, was wo alles nicht funktioniert.

Destruktives Gehabe, das man sich unnötigerweise selbst angewöhnt. Das zieht Energie, die besser eingesetzt werden kann. Das brauch und will ich nicht mehr.

Und doch gibt es so viele interessante und hilfreiche Informationen auf Twitter. Diese möchte ich natürlich lesen und gerne auch an sinnvollen Diskussionen teilhaben. Damit das aber funktioniert, muss ich die Verwendung von Twitter ändern. Vom passiven User werde ich zum aktiven und gestalte meine „Timeline“ nun selbst.

Following 0 | Twitter | Norbert Eder

Ich folge niemandem mehr. Auch meinen besten Freunden nicht. Stattdessen setze ich auf andere Möglichkeiten.

Listen

Listen verwende ich schon lange. Halbherzig. Da ich niemandem mehr direkt folge, habe ich die interessanten Accounts in Listen kategorisiert, der Rest wurde nicht mehr berücksichtigt. Meine Timeline ist leer (außer den eigenen Tweets) und ich lese, worauf ich gerade Lust habe. Ob die eingesetzten Listen so passen, wie sie sind, wird sich zeigen. Aktuell habe ich 9 Listen.

Gespeicherte Suchen

Horizonterweiterung. Neue interessante Hinweise, Artikel und Diskussionen von mir unbekannten Accounts finde ich per Keyword-Suche. Accounts, die positiv auffallen, werden in meine Listen übernommen.

Zu meinen Interessen finde ich so viele tolle Informationen.

Geblockte Keywords

Listen setzen auf Accounts und dort wird manchmal über Themen getweetet, die mich nicht interessieren oder über die ich nicht informiert werden möchte. Mittlerweile blocke ich diese Keywords und habe meine Ruhe. Super, um unnötige Aufregungen – und Rauschen im Allgemeinen – zu vermeiden. Ein laufendes Anpassen muss wohl sein, da sich natürlich Interessen ändern, oder aber manche Themen dann möglicherweise dann doch wieder interessant werden.

Fazit

Mit diesen Maßnahmen lässt sich Twitter wieder wunderbar für Informations- und Erkenntnisgewinn, aber auch interessanten Gesprächen, nutzen. Der Rest bleibt außen vor – und das ist auch gut so.

Ziele 2019

Wie jedes Jahr, nehme ich mir auch für das kommende Jahr wieder einige Ziele vor. Einige davon möchte ich hiermit öffentlich zugänglich machen, einige werden alleine nur für mich (bzw. für einen nicht-öffentlichen Kontext) existieren.

Softwareentwicklung

Das kommende Jahr wird sich voraussichtlich um die Themen .NET Core, Golang, Container, Serverless und IoT drehen. Es stehen einige große Projekte ins Haus. Hierzu wird viel architekturelle aber auch sicherheitsrelevante Arbeit zu leisten sein. Die Ziele liegen hierbei weniger bei den einzelnen Technologien, sondern vielmehr in der Größenordnung und damit einhergehenden architekturellen und performancetechnischen Herausforderungen.

Bewertbares Ziel: Mehr Fachbeiträge hier im Blog als 2018.

Fotografie

Ich war 2018 sehr viel unterwegs und es sind tolle Fotos entstanden. Allerdings fand ich nicht die Muse, diese auch online zu präsentieren. 2019 möchte ich mehr in meine Portfolios investieren und sie aufmotzen. Auch soll es wieder meine Reiseberichte geben.

Nachdem ich bereits im „Portrait-Modus“ bin, werde ich anschließen und mehr in dieses Thema investieren.

Neben der Fotografie möchte ich mich auch mit dem Thema Video mehr beschäftigen. In diesen Bereich fallen viele andere Themen wie Sound, Bearbeitungssoftware usw. Meinen Weg möchte ich dokumentieren und somit einen Einblick in dieses Thema liefern.

Auch zum Thema Bildbearbeitung wird es einige Tutorials geben. Dabei werde ich mich mit der Software Luminar auseinandersetzen.

Blog

Nachdem voriges Jahr einige Aufgaben liegen geblieben sind, möchte ich diese nun 2019 erledigen. D.h. weniger Fotografie auf meiner Website, sondern wieder mehr Softwareentwicklung, IT und Technik. Die Fotografie wird auf meine Website https://norberteder.photography „verdrängt“. Der Umbau hat bereits begonnen.

Im Rückblick 2018 habe ich das Ende meines Projektes #fotomontag | Norbert Eder">#fotomontag angekündigt – zumindest auf dieser Website. Es geht weiter, etwas verändert, aber doch. Ebenfalls auf https://norberteder.photography.

Lesen

Nachdem ich voriges Jahr relativ schnell meine ursprüngliches Ziel von 15 Büchern auf 50 angehoben habe, möchte ich dieses Jahr mit einem Ziel von 25 Büchern loslegen. Den Fortschritt könnt ihr auch dieses Jahr wieder auf https://goodreads.com verfolgen.

Zum Schluss möchte ich euch ein wunderbares Jahr 2019 wünschen. Viel Gesundheit, Glück, aber auch Erfolg.

Rückblick 2018

Rückblick 2018

Die Jahren fliegen dahin. Schon wieder ist eines rum. Wie jedes Jahr, möchte ich einen Blick zurück werfen und über die vergangenen 365 Tage nachdenken. Dabei möchte natürlich meine Ziele für 2018 nicht außer Acht lassen und in die Bewertung einfließen lassen.

Softwareentwicklung

Wie ich es mir vorgenommen habe, beschäftigte ich mich 2018 sehr viel mit .NET Core, Angular und dem Thema Internet of Things (IoT). Zusätzlich habe ich wieder über den Tellerrand geguckt und bei Golang reingeschnuppert. Gerade Golang entwickelt sich bei mir persönlich zu einer beliebten Programmiersprache.

Sehr viel Energie ging 2018 in das Thema Docker, Microservices und Orchestrierung.

Fotografie

Auch 2018 habe ich es geschafft, jeden Montag ein Foto für mein Projekt #fotomontag zu veröffentlichen. Nach 209 veröffentlichten Fotos in 4 Jahren, geht diese Ära allerdings zu Ende.

Zusätzlich hat sich gerade auf dem Gebiet der Fotografie sehr viel bei mir getan:

  • Zahlreiche wissenswerte Beiträge auf https://norberteder.photography, auch das Portfolio wurde überarbeitet und erweitert
  • Ich habe ja eine Liste meines Foto-Equipments auf meinem Blog. Dieser musste wieder adaptiert werden :)
  • Dieses Jahr habe ich es endlich geschafft und zahlreiche Portrait-/Model-Shootings gemacht. Dabei konnte ich richtig tolle Erfahrungen sammeln und mich weiterentwickeln. Vielen Dank an dieser Stelle an alle, mit denen ich zusammenwirken konnte.
  • Schlussendlich gab es eine Menge Fotoreisen: Piran/Portoroz, Dubrovnik, Kotor, Nürnberg, Ostsee, Dresden, Budapest und Prag.

Wie du siehst, hat sich also wirklich viel getan – mehr als ich mir erhofft bzw. geplant hatte.

Blog

Für das Blog hatte ich mir mehr vorgenommen. Zwar habe ich einige Artikel ausgemistet und aktualisiert, doch wollte ich wieder viel mehr über Softwareentwicklung bloggen. Durch die Arbeit einerseits und das doch aufwändige Hobby der Fotografie andererseits, blieb einfach zu wenig Zeit, die ich dann doch anderweitig nutzte.

Seit diesem Jahr steht die Kommentarfunktion nicht mehr zur Verfügung. Das ist nicht der DSGVO geschuldet, sondern vielmehr der Qualität. Feedback erhalte ich nun über andere Kanäle (E-Mail hauptsächlich) und das qualitativ hochwertiger, da der Aufwand für das Feedback einfach höher ist.

Ein herzliches Dankeschön an meine treuen Leser, die mir die Stange halten und auch immer wieder Feedback geben.

Bücher

Seit diesem Jahr verwalte ich meine Bücher über goodreads. Meinen Account hatte ich zwar schon lange, aber das Potential blieb mir lange Zeit verborgen. Nun, seit heuer nutze ich diese Plattform.

Für 2018 hatte ich mir vorgenommen, 15 Bücher zu lesen. Tatsächlich wurden es 50 (nicht ausschließlich Fach- bzw. Sachbücher).

Top 5 Beiträge

Fazit

Insgesamt hielt das Jahr 2018 zahlreiche Herausforderungen bereit. Das war nicht immer leicht, allerdings gab es wieder viel zu lernen – und das ist wichtig und gut.

Visual Studio 2017: Service Fabric Templates werden nicht angezeigt

Du hast das Azure Service Fabric SDK installiert, allerdings findest du im Visual Studio 2017 das Projekt-Template nicht und kannst somit kein neues Projekt anlegen? In diesem Fall sind eventuell die Service Fabric Tools des Azure Entwicklungsmoduls nicht installiert:

Service Fabric Tools für Visual Studio 2017 installieren
Service Fabric Tools für Visual Studio 2017 installieren

Es ist im Visual Studio Installer die Azure Entwicklung zu aktivieren, ebenso die Service Fabric-Tools.

Nach der Installation und des erneuten Startes von Visual Studio 2017 sind die Templates vorhanden.

Service Fabric Application Template | Visual Studio 2017
Service Fabric Application Template | Visual Studio 2017

Viel Spaß bei der Entwicklung.

Cookie-Einstellungen
Auf dieser Website werden Cookie verwendet. Diese werden für den Betrieb der Website benötigt oder helfen uns dabei, die Website zu verbessern.
Alle Cookies zulassen
Auswahl speichern
Individuelle Einstellungen
Individuelle Einstellungen
Dies ist eine Übersicht aller Cookies, die auf der Website verwendet werden. Sie haben die Möglichkeit, individuelle Cookie-Einstellungen vorzunehmen. Geben Sie einzelnen Cookies oder ganzen Gruppen Ihre Einwilligung. Essentielle Cookies lassen sich nicht deaktivieren.
Speichern
Abbrechen
Essenziell (1)
Essenzielle Cookies werden für die grundlegende Funktionalität der Website benötigt.
Cookies anzeigen