]> Matthias Wimmer (溫雅石)

Recent Content

Handling time zones in Elm

posted on

When programming a single page application, especially if it is designed to run within different time zones, you often use UTC on the REST interfaces to the backend and let the single page application handle the time zone calculation.

When I first tried to implement this in Elm, I first tried to do this using the tools at hand when using the standard package for time handling: elm/time:

On the start-up of my SPA I send a Cmd to the Elm runtime, requesting that it generated a SetTimezone event with the local time zone of the user (here).

getTimezone : Cmd Msg
getTimezone =
    Task.perform SetTimezone Time.here

When we give the Elm architecture this command, we get back this message:

type Msg
    = SetTimezone Time.Zone

Then I stored the provided Zone in my model and used it within a helper function to format timestamps:

formatTime : Zone -> Posix -> String
formatTime zone timestamp =
    let
        hour =
            toHour zone timestamp

        minute =
            toMinute zone timestamp
    in
    (padLeft 2 '0' <| fromInt hour) ++ ":" ++ (padLeft 2 '0' <| fromInt minute)

formatTimeOfIsoTimestamp : Zone -> String -> String
formatTimeOfIsoTimestamp zone isoTimestamp =
    toTime isoTimestamp |> Result.map (formatTime zone) |> Result.withDefault isoTimestamp

The problem with this approach is, that actually here does not tell the user's actual time zone, that would take into account the shifts between standard time and daylight saving time, but just something generic for the current offset to UTC. So the time zone we get will never be Europe/Berlin but Etc/GMT+1 or Etc/GMT+2 depending on whether we currently have standard time or daylight saving time.

The problem with that is, that you can display “current” timestamps with that zone, but it fails for example as soon as you try to show timestamps within the winter while it is still summer.

The solution to this is to use the functionality of justinmimbs/timezone-data. Instead of using the here Task as in the code above, this Elm package provides a different task, to get the time zone of the web browser the application is running in: getZone

The function, that generates the Cmd to request the time zone gets this:

getTimezone : Cmd Msg
getTimezone =
    Task.attempt SetTimezone TimeZone.getZone

With this change, also the definition of the SetTimezone message changes a bit as the retrieval of the time zone may fail:

type Msg
    = SetTimezone (Result TimeZone.Error ( String, Time.Zone ))

When we handle the SetTimezone message we can unwrap this result and use a default zone, if the correct zone couldn't be determined:

update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
    case ( msg, model ) of
        ( SetTimezone result ) ->
            let
                zone = case result of
                     Ok ( _, timezone ) ->
                         timezone
                     _ ->
                         TimeZone.europe__berlin()
            in
                -- store the retrieved zone in the model

Meine Fortschritte in Chinesisch

posted on

Vor eineinhalb Jahren schrieb ich, als ich gerade mein HSK2-Zertifikat beim Konfuzius Institut in München abgeholt hatte. Heute nun habe ich wieder ein Prüfungsergebnis bekommen: die HSK4-Prüfung vor zwei Wochen habe ich bestanden. Das ist nun zwei Stufen höher und man merkt, dass die Stufen zwischen den Prüfungen immer größer werden: von HSK2 zu HSK3 brauchte ich 9 Monate, von HSK3 zu HSK4 war es schon ein Jahr. Die Menge der notwendigen Vokabeln verdoppelt sich auch jedes Mal, von der Gramatik ganz abgesehen. (Wikipedia: Hanyu Shuiping Kaoshi)

Die Prüfungen haben sich für mich als gute Methode herausgestellt mein Lernen voran zu treiben. Es ist Ziel, Motivation und ein Paket an Anforderungen, die ich mir vornehme.

Nächstes Ziel nun also: HSK5 ... irgendwann im nächsten Jahr. Aber die Vorbereitung beginnt jetzt und das ist ab sofort meine Motivation.

Meine Zertifikate: 汉语水平考试(HSK)一级和二级

posted on

Inzwischen steht mein Kopf eher schon beim nächsten Test. Trotzdem wollte ich noch von meinen Prüfungen im September abschließend berichten:

Mein Gefühl hat sich bestätigt, ich habe beide Prüfungen bestanden. HSK1 sogar ohne Fehler. Die Ergebnisse waren ab dem 16. Oktober online einsehbar. Hierzu kann man sich einfach mit den persönlichen Zugangsdaten auf der Seite anmelden über die der Test auch gebucht wurde und sieht dann die Ergebnisse oder man kann auch ohne Login dort die Ergebnisse abfragen, wenn man seinen Namen und die Admission-Ticket-Nummer eingibt. Am 9. November war es dann soweit und ich konnte auch meine Zertifikate im Konfuzius Institut München abholen.

汉语水平考试(HSK)一级和二级

posted on

Letzten Sonntag habe ich mein Chinesisch testen lassen. Ich hatte mich zu den Prüfungen HSK 1 und HSK 2 angemeldet. Ursprünglich wollte ich nur die niedrigste Stufe HSK 1 schreiben und meldete mich entsprechend an. In der Vorbereitung merkte ich jedoch schnell, dass die Anforderungen hierfür nicht so hoch waren wie ich dachte. Zwar gab es noch ein paar Vokabeln, die ich nicht kannte, aber im Großen und Ganzen hatten wir den Stoff längst im Unterricht behandelt.

Dann laß ich beim Konfuzius Institus München, dass es auch möglich ist sich für zwei benachbarte Prüfungslevel gleichzeitig anzumelden. Die Prüfungszeiten sind so geplant, dass dies geht. Das klang gut: für HSK 1 konnte ich mich eh nicht mehr abmelden und ich könnte parallel versuchen, ob ich nicht schon die nächste Stufe schaffe. Gedacht getan, ich meldete mich auch hierfür an.

weiterlesen | read more | lee mas | lê mais | 閱讀更多 »

La razón porque yo aprendo el chino

posted on

Cuando hablo con otros estudiantes de idiomas, es una pregunta muy común. También en los libros de aprender otra lengua siempre hay un capítulo en el que se habla de las lenguas que se habla y porque se las aprende.

Yo siempre nota que la lengua que tiene más impresión a la persona de enfrente es el chino. Para la mayoría de personas aquí en Europa todavía parece algo imposible para aprender. Piensen que se tiene que ser un genio ya si se lo intenta. La verdad es diferente, no es tan complicado. Pero es otro tema, quizás escriba de eso en otro momento.

Lo más especial normalmente es la razón de aprender el chino. En general es nota en las clases que cada lengua tiene un público diferente. Por ejemplo mis compañeros en las clases de neerlandés lo aprendieron porque son artistas y quisieron trabajar en Ámsterdam o porque tuvieron novio neerlandés. Al contrario en las clases de español una razón muy común es el turismo. España es un destino de vacaciones muy popular.

weiterlesen | read more | lee mas | lê mais | 閱讀更多 »

Planeando el semestre que viene

posted on

Solo hay unas pocas clases más antes del fin del semestre en mi escuela de la noche. Por eso pienso mucho como continuaré el semestre que viene. En general últimamente he notado cada vez más que quiero aprender con más velocidad.

Esto noto especialmente en portugués y chino. Actualmente puedo seguir en las clases sin practicar en casa. No me parece bien. A mí me parece importante conseguir un nivel comunicativo lo más rápido que posible. Si se tiene ese nivel se aprende una lengua casi sin hacer nada, solo se tiene que hablar con amigos y personas interesantes.

En portugués una solución se ha resultado automáticamente. La escuela Volkshochschule no ofrece un curso a continuación del actual. Ya en este curso solo somos el mínimo de estudiantes. Por eso hace unas semanas hablamos en la clase como podíamos continuar. Buscamos curso adecuado para cada estudiante. Para mí significa que voy a omitir las clases del último quinto del libro actual y ya voy a empezar las clases de B1. Espero que sea nueva motivación para mí. No creo que tenga problemas porque ya aprendí todas las palabras del libro en el invierno y no es mucho gramática que aún no sé. Voy a repasarla antes del semestre nuevo en octubre.

weiterlesen | read more | lee mas | lê mais | 閱讀更多 »

Learn You a Haskell for Great Good

posted on

This is the first book on Haskell, that really made me want to read it. I had it with me as an e-book on my vacations. I couldn't stop reading it before I finished. It is a very good introduction to the basics of the Haskell programming language. It even contains an understandable explanation of the infamous monads. (Side note: they are a very simple concept, and you shouldn't fear them.)

For me this book was the right amount of introduction to get me started. Everything else I think I will be able to learn while using the language.

The book is available in print at your preferred book shop, or can be read online and free of charge.

Links to resources

Benutzt du Clojure in der Arbeit?

posted on

Wenn ich auf ein Meetup gehe, lautet die erste Frage immer „was machst du so?“. Beginnt das typische Gespräch hingegen mit „benutzt du Clojure in der Arbeit?”, bin ich auf der :clojureD in Berlin gelandet.

Am 24. Februar war ich auf meiner ersten Clojure-Konferenz. Nach einem Treffen der Munich Clojurians war das erst mein zweites Zusammentreffen mit anderen, die der Begeisterung dieser Programmiersprache erlegen sind.

Es war ein tolles Erlebnis. Auf keiner Konferenz bisher hatte ich so den Eindruck, dass alle einfach ein rießen Interesse an Softwareentwicklung haben und alle dafür brennen neue Gedankenanstöße aufzunehmen. Keiner der einfach nur seine Arbeit erledigt bekommen will. Ich hatte das Gefühl wirklich unter den Besten zu sein, die es in meinem Beruf gibt.

Wie schade, dass anscheinend trotzdem das Potential der Sprache so oft noch nicht genutzt wird. Obwohl ich im Cognicast oft genug auch schon die andere Seite gehört habe: Firmen, die darüber klagen zu wenige Clojure-Entwickler zu finden. Die Antwort auf der :clojureD war leider öfters: „nein, in der Arbeit nutze ich kein Clojure“.

Progresso nas minhas línguas

posted on

Uma vez por ano reviso que aprendi nas minhas aulas de línguas. O mais notável este ano é que comecei a aprender Português em Agosto. Durante quatro semanas, eu tinha 36 horas de aulas intensivas. Gostei muito de aprender uma língua nova. É bem aprender algo mais fácil que o chinês. Lamentavelmente não posso continuar assim. Por um lado porque não há ensino intensivo depois de os capítulos de verão. Por outro lado também tenho aulas no chinês e espanhol durante o semestre.

No espanhol fiz o exame DELE B2. Suponho passei todas as partes mas até agora não tenho nenhum resultado. Espero que me comuniquem-o no Janeiro. Segundo o meu sentimento tive menos problemas que no nível B1 um ano e meio atrás. Especialmente foi mais fácil entender todos os textos na parte compreensão oral.

Também continuei as minhas aulas de chinês. Todo é um pouco mias lento. O idioma não é semelhante com os idiomas europeus e se tem de aprender as letras também. Apesar disso gosto de aprender esta língua cada vez mais. Começo a reconhecer letras e palavras no meu quotidiano.

Provavelmente este texto contem muitos erros. É a minha primeira vez que escreve um artículo português para a internet. Mas o mais importante para mim é provar expressar algumas coisas básicas na minha língua nova.

Feliz ano novo!

Getting Safari Books Online

posted on

I like the books from O'Reilly. For many years I've seen the ad on the backside advertising Safari. Sure, I checked out what this is, but I wasn't really interested to have a digital copy for a limited amount of time. I already had the print version.

I love to read real books made of paper. I use highlighters and add notes, while reading. I make the book mine. And after finishing the book, I can place it on my bookshelf, to show the books I like to others. This doesn't work with my Tolino e-book reader. While I have this device, I still buy most books as a paper copy.

Some days ago, I heard of Safari again on a podcast. I thought, that at least I should check it out. It's not only O'Reilly books anymore and it includes videos and other podcasts as well. There is a free 10 days trial, so I did not have to invest more than some of my time.

weiterlesen | read more | lee mas | lê mais | 閱讀更多 »


Unless otherwise credited all material Creative Commons License by Matthias Wimmer