Talking F# in Warsaw

Two weeks ago I had another opportunity to practice my public speaking skills. It took me some time to write this post, because in the meantime I spent few days in Krakow. And Krakow is a different state of mind.

This was another instance of my introductory talk to F#. It went a little better than one on get.net, but still I think there’re things to improve. I got really good feedback from Gutek, who came to see this talk. There were also some other friends from Warsaw – some of them I haven’t seen for years. It was a pleasent surprise.

Warsaw .NET usergroup seems to be similar size to one in Gdansk. There were about 40 people attending. Interesingly, some of them came there for the first time, just because of the topic. Good news that F# is getting some interest in Poland. I got best ever set of question after this session. You could clearly see people are interested and want to know more. Really liked that!

What I didn’t like is that there were no networking activities afterwards. Fortunatelly, there were some friends mentioned before, so we went for some food and drinks. Overally good time, and I’m happy I managed to get there on my way to Kraków.

On the bonus note, I had with me ticket for leetspeak to raffle. Leetspeak is tretton37‘s conference, that we organize every autumn. This year it’s happening on 4th October in Gothenburg. Tickets will be available soon.

WP_20140710_19_41_22_Pro

As usually, slides and demos landed on Github.

There are also good news. I’m doing new F# talk, focused more on cross-platform capabilities. Looks like I will present it on PolyConf and WarmCroc in next few months. I’m excited and terrified at the same time, because they’re gonna be my biggest speaking gigs.

Craft Conference in Budapest

Last week I’ve been to Budapest to attend Craft Conference. This was first edition, but they started big. One workshop day, two day of talks. 3 tracks, around 25 speakers (just look at the lineup – it’s awesome), few hundred attendees. All that in beautiful Budapest. On the paper it all looks great

In reality… well, it was OK but not great. Many tracks were very low quality. Either not very skilled speakers, or speakers I know they could better, but seems like they didn’t care. Slots for talks were pretty short (around 40 minutes), and this could have ruined few talks – especially that speakers learned about it on place. Also organizers didn’t keep the time very rigorously, what caused that breaks between rooms didn’t sync. You often missed beginning of talk in another room, because previous one in the other ran longer. But the worst thing ever was the sponsors pitch for the beginning. Total mood killer.

But this sounds too harsh, because overall I had awesome time. Organizers managed to gather great crowd of attenddees. We also had big contingent from Poland. Some people I knew very well, other just from twitter and met them IRL for ther first time. It was nice just to hangout around venue, which BTW was very cool. Modern construction from steel and glass componed into some older building. Many places to charge your electronics and WiFi that worked for the most time. Really good choice.

As we talked with friends afterwards – we don’t go to conferences for the talks. That’s why we all very much enjoyed Craft Conference. Will definitely try to put it on my calendar next year.

There were few talks I liked, especially : Evan Czaplicki’sGreg Youngs’s, Gojko Adzic’s and Stefan Tilkov’s. I also heard that Dan North’s keynote was great too. Thanks to one of the organizers all of them were streamed lived and most of them are available to watch.

Speaking – “WTF# and why should you care” at get.net conference in Łódź

Nearly two weeks ago I had my first opportunity to speak at a conference. Get.net was organized by Łódź branch of Sii and featured all kinds of talk about .net technologies. Among the speakers you could find many familiar and well known faces from Polish dev scene like Maciej Aniserowicz, Jakub Gutkowski, Basia Fusińska, Michał Śliwoń or Rafał Legiędź. I was humbled and honored to speak in such company.

Speaking at conference isn’t much different than speaking at user group. There were just more people and I had to use microphone. Unfortunately it was the kind of mike you have to hold in your hands and this made live coding quite a challenge. Many other speakers had that issue and I hope organizers will know better next time. Apart from that, conference was quite well organized. Also venue was really nice.

My talk was slightly modified version of one I did for tricity .net group last month. But this didn’t make me feel more confident about it. After all it went quite well and there were even some positive tweets. This is good, right? I hope this sparked some interest for F# in Polish .net community. Overall this was nice experience, and I will actively look for other chances to speak at conferences.

Slides and code are on my github.

BTW, I’m writing this post during Craft Conference in Budapest. I’ll do some writeup next week.

Speaking – “WTF# and why should you care” at Tricity .NET Group meetup

Last week during local .net group meetup I did my first technical talk ever. Well, I did present some stuff on internal meetings in company before, but never for so many people, whom I don’t know.

I was quite nervous before – for many reasons. First of all, I’m not some F# guru. I don’t feel fully entitled to share knowledge about it. I also don’t feel very confident in public speaking situations. But it all come around nicely. I’m generally satisfied how it went.

I’m presenting it again in one month at get.net conference in Łódź, Poland. Based on this experience, I will change few things in this talk. But in general, this was good training.

If you have doubts “should I present something at usergroup”, JUST GO DO IT. But before read Zach Holman’s hints on speaking.io. I found them very useful.

Slides from this presentation are on my github. Code examples I used, were mostly from tryfsharp.org.

[PL] Trójmiejskie grupy technologiczne

This post is also available in English.

Miałem taki post w głowie od dłuższego czasu, a dodatkowego kopa dał mi wpis Gutka o Warszawskich grupach programistycznych. Problem polega na tym, że nie ma jednego miejsca, gdzie znajdować te grupy. Ich strony są rozrzucone po meetupie, fejsbuku i innych miejscach. To jest prawdopodobnie niekompletna lista grup działających w Trójmieście. Jeżeli kogoś pominąłem, lub informacje są nieaktualne/niekompletne, daj znać – poprawię.

Trójmiejska Zawodowa Grupa .NET www
Tematyka: .NET, ogólnie o programowaniu
Gdzie: Zieleniak, Gdańsk
Kiedy: Każda druga środa miesiąca

Grupa .NET Politechniki Gdańskiej (grupa studencka) www || facebook
Tematyka: .NET, ogólnie o programowaniu, przedsiębiorczość
Gdzie: Politechnika Gdańska
Kiedy: brak stałych terminów, spotkania odbywają się dośc często

Cocoaheads Tricity facebook
Tematyka: iOS, mobile UX
Gdzie: Pomorski Park Naukowo Technologiczny, Gdynia
Kiedy: brak stałych terminów, spotkania mniej więcej co miesiąc

Google Developers Group Tricity www || facebook
Tematyka: Android
Gdzie: Pomorski Park Naukowo Technologiczny, Gdynia
Kiedy: brak stałych terminów, spotkania mniej więcej co miesiąc

Java User Group Trójmiasto www || facebook || twitter
Tematyka: Java, JVM, ogólnie o programowaniu
Gdzie: Gdański Inkubator Przesiębiorczości Starter
Kiedy: brak stałych terminów, spotkania mniej więcej co miesiąc

meet.js Gdańsk www || facebook || twitter
Tematyka: JavaScript, frontend
Gdzie: Gdański Park Naukowo Technologiczny
Kiedy: Brak stałych terminów. Spotkania w Gdańsku odbywają się mniej więcej co dwa miesiące.

Geek Girls Carrots www || facebook
Tematyka: ogólnie technologicznie, ogólnie o programowaniu, women in technology
Gdzie: Gdański Park Naukowo Technologiczny ; Pomorski Park Naukowo Technologiczny Gdynia
Kiedy: Brak stałych terminów, spotkania mniej więcej co miesiąc

TRUG www
Tematyka: Ruby, Rails, web development
Gdzie: Sopot, Aleja Niepodległości 807/5
Kiedy: Trzecie środy miesiąca

PLSSUG Trójmiasto www
Tematyka: SQL Server
Gdzie: Siedziba firmy Hempel, Gdańsk, ul K. Szymanowskiego 2
Kiedy: W czwartki

Agile 3M www || facebook
Tematyka: Zarządzanie projektami, Agile
Gdzie: Klub Atelier, al. Mamuszki 2, Sopot
Kiedy: Brak stałych terminów, spotkania mniej więcej co miesiąc

Warto jeszcze wspomnieć o dwóch inicjatywach. 3Hack (www || facebook || twitter) stara się zbierać w jednym miejscu informacje o technologicznej i startupowej scenie trójmiasta. It3c także informuje o spotkaniach grup technologicznych i zamieszcza oferty pracy.

Tricity technology usergroups

Ten post dostępny  jest też po Polsku.

Tricity is the area I live in Poland. This post is to summarize technology groups that are actively meeting in the area. Post is inspired by Gutek, who wrote about Warsaw usergroups (Polish). The problem is, that you can’t find this info in one place – groups are scattered all around internet. This list is probably not complete, so if you have some information that could be added here, don’t hesitate to tell me.

Tricity Professional .NET group www
Topics: .NET, general software development
Where: Zieleniak bulding, Gdańsk
When: Every second Wednesday of a month
Language: Polish

Gdańsk University of Technology .NET group (student group) www || facebook
Topics: .NET, general software development, entrepreneurship
Where: Gdańsk University of Technology
When: no regular dates, but meetings happen very often
Language: Polish

Cocoaheads Tricity facebook
Topics: iOS, mobile UX
Where: Pomeranian Science and Technology Park, Gdynia
When: no regular dates, meetings happen around once a month
Language: English

Google Developers Group Tricity www || facebook
Topics: Android
WherePomeranian Science and Technology Park, Gdynia
When: no regular dates, meetings happen around once a month
Language: English

Java User Group Tricity www || facebook || twitter
Topics: Java, JVM, general software development
Where: Gdański Inkubator Przesiębiorczości Starter
Whenno regular dates, meetings happen around once a month
Language: Polish/English

meet.js Gdańsk www || facebook || twitter
Topics: JavaScript, frontend
Where: Gdansk Science and Technology Park
When: no regular dates, meetings happen around once every 2 months
Language: Polish/English

Geek Girls Carrots www || facebook
Topics: general technology, general software development, women in technology
WhereGdansk Science and Technology Park ; Pomeranian Science and Technology Park, Gdynia
Whenno regular dates, meetings happen around once a month
Language: Polish/English

TRUG www
Topics: Ruby, Rails, web development
Where: Sopot, Aleja Niepodległości 807/5
When: Every third Wednesday of a month
Language: Polish

PLSSUG Tricity www
Topics: SQL Server
Where: Hempel company building, Gdańsk, ul K. Szymanowskiego 2
When: Thursdays
Language: Polish

Agile 3M www || facebook
Topics: project management, agile
Where: Atelier Club, al. Mamuszki 2, Sopot
When: no regular dates, meetings happen around once a month
Language: Polish

There are also two initiatives worth mentioning. 3Hack (www || facebook || twitter) is trying to gather all relevant informations about meetings on Tricity technology and startup scene. It3c also gathers news about usergroups and technology job offers in the area (unfortunately only in Polish).

Fixing failing npm packages on Windows (i.e. microtime, forever)

I got into fun side project in node.js, and being Windows kid, I wanted to run it on my Windows dev machine. The thing is, it’s not that easy. Well, you can install node easily, and there is some tooling available too. The biggest PITA is that some packages are hard to build on Windows. And when you go through issues at GitHub, popular response seems to be “I don’t have any Windows box to test it and make it work” ;)

It took me several hours, but I managed to fix all the issues I had yesterday, so here’s my answer to some popular errors:

Error: Can’t find Python executable “python”

Npm (node package manager) uses build system called gyp, that runs some python scripts. It would be hard to find linux machine without python, but Windows folks often don’t have it, because they don’t need it. Me including. So install python first! They say 2.7 is good choice for gyp. And after that, add PYTHON env variable that points to your python catalog. Actually, it should point to your python.exe, because you’ll get another error I don’t remember right now (something about ENOENT).

MSBUILD : error MSB3428: Could not load the Visual C++ component “VCBuild.exe”

From what I read around Internets, this error affects Visual Studio 2013 users. It happens, because when you install node.js it has built-in node-gyp package. When you npm install node-gyp, this built-in instance is not updated, so you don’t have latest version. And sometimes it’s good to get latest version, i.e. to get VS 2013 support. This instruction helped me to update built-in node-gyp.

A little bit about tooling

I’m new to node.js and currently cannot decide what’s my favourite tooling. I’m switching between IntelliJ IDEA plugin, Node Tools for Visual Studio or running it manually from Powershell. All of them have their ups and downs. I like IntelliJ plugin, because it is stable and plays nicely. Node Tools for VS seems to have much potential, and integrate neatly with VS look and feel, but are *very* unstable (they’re still in alpha). One example – running project, where you lack some of the dependencies cause whole VS to crash. If you want to try them anyway, Scott Hanselman wrote nice introduction post.

Anyway, after fixing those build errors, node.js seems like something fun to learn. I may be covering this topic more in the future.

Using redis with F# on Windows

In one of my next projects I’ll probably use F# + redis mix. I wanted to try it out, to get some general idea how it will work. I had no previous experience with redis, and I’m still beginner in F#. I wanted to do some end-to-end example for saving and reading data. My idea was to get some Bitcoin price from external service, save it to local redis instance, read it back and chart.

In this blog post, I’ll show how I got there, and what I learned in the process.

Installing redis on Windows

Redis is in-memory key value store. It’s very fast and can store data in few data structures – strings, hashes, lists, sets and sorted sets. Official releases run on linux, but Microsoft Open Tech group developed and maintains experimental port to Windows. And this version I used for my tests.

I simply downloaded code from github, build solution in Visual Studio, and run redis-server.exe from project folder. If you want to test some commands with client, run redis-cli.exe. And if you have no idea, what are the commands try.redis.io has pretty cool interactive tutorial, that cover some basics. Running redis from code build on your dev machine probably is not the best idea for production – I would instead choose to deploy it on some linux server. But for testing purposes it’s perfect.

Getting data from external service

That part was pretty straightforward. I decided to get data from bitstamp.net, because they API for Bitcoin ticker is super easy to use. It has some limitations, but I’ll get to this later. So I made request to https://www.bitstamp.net/api/ticker/ and parsed it using Json type provider from FSharp.Data package (you can install it with Nuget). Json type provider is awesome. After you feed it with some sample data, you have all your fields just “dot” away.

https://gist.github.com/mlusiak/7901990

One thing I learned hard way in this part of code, is that in currentPrice you need those parentheses. Without them, F# will treat the whole block (lines 13 – 15) as calculating value and binding it to currentPrice – not as a function. And because values are immutable by default, it will always “return” the same price.

Saving results to redis

To access redis, I used ServiceStack’s redis client. ServiceStack is great framework to access all kinds of webservices. You can install ServiceStack.redis package using Nuget. It’s free to use up to 20 types.

https://gist.github.com/mlusiak/7902309

You can see three approaches I took (the only difference are first two lines). First one didn’t work – it saved “empty” data (empty strings, integers equal 0, etc.). As Demis Bellot explained to me on StackOverflow, StackService rely on writable properties, which immutable records in F# don’t have. He suggested to use [<CLIMutable>] attribute (which I did in third approach). In between I found this blog post, that used mutable keyword on type fields. This also works, but is not as elegant as the attribute, because it exposes those mutable fields also within your F# code.

Getting data from redis

This was very straightforward. No issues here. It just worked.

https://gist.github.com/mlusiak/7903099

Charting the data

To visualize this data, I used FSharp.Charting library. To make it work, you have to install it with Nuget and reference some libraries like System.Drawing and System.Windows.Forms. I also had to load FSharpCharting.fsx file.

https://gist.github.com/mlusiak/7903123

And it works!

Bitcoin price 11th Dec 2013 around 2am CET
Bitcoin price 11th Dec 2013 around 2am CET

Putting it all together

To summarize – getting data, saving to redis, reading back and charting – all in around 30 lines (excluding referencing libraries) of F#.

https://gist.github.com/mlusiak/7903762

Two more remarks about this code. I call Bitstamp API every 31 seconds, because it gives new data every 30 seconds anyway. If you call it earlier, you’ll get the same data as last time. Second thing is this whole #if INTERACTIVE block. I don’t know why, but when I run code in F# interactive without it, it screamed about no references to libraries. I thought referencing them in project would be enough, but no. And if I wanted to compile and run .fs file, than it failed to compile with #r clauses in it (because .fs file don’t support them, they work only in .fsx files). #if INTERACTIVE allowed me to test code in F# interactive mode, but still compile and run this code as program.

Any comments about code, and way I did things will be appreciated. I’m new to F# world, and I am happy to learn what I could do better.

Some useful references

http://try.redis.io/
http://fsharp.github.io/FSharp.Data/
http://fsharp.github.io/FSharp.Charting/
http://blogs.msdn.com/b/fsharpteam/archive/2012/07/19/more-about-fsharp-3.0-language-features.aspx
http://caxelrud.blogspot.com/2012/11/using-nosqlredis-in-windows-with-f.html

Øredev and NDC

Three weeks ago I was at Øredev conference in Sweden and had a great time there. I just wanted to share few thoughts about it. I won’t dive into specific talks, as there were simply too many. Just my general impression – what I liked, and what in my opinion didn’t work.

Øredev is well established, big, Scandinavian software conference. It’s held in Malmö, Sweden and this year the venue was Slagthuset – old butcher house. Really liked that place. Nice looking, spacy, wheelchair friendly.

Speaker list was long, but it kinda lacked big names. There were some rock stars, but not as many, as compared to similar in size NDC. Also level of
talks varied – some of them were awesome, but also there were some that just sucked. I liked (and wrote about already) that my new toy – F# (and
functional programming in general) were so well represented.

Usually during conferences you meet lot of great people, and Øredev was no different. I was told by people, who attended previous edition, that creating great environment for sharing knowledge has always been very important for organizers. And also – we had quite large Polish Crew, which made whole event even funnier.

Øredev usually has some theme, and this year this was “arts”. It had potential, but I think it was pulled too far. Some talks felt forcefully “artified” to match it. Also keynotes were more focused on arts, than software, which made them also “weird” and in my opinion mostly unsuccessful. I don’t think software conference realy need theme, especially if it come out so unnaturally.

I also had a chance to attend NDC earlier this year, and it’s hard not to compare those conferences. They’are similar in size, both held in Scandinavian cities with big software communities. Speaker list looked more impressive and talks were on higher level in general. NDC also had area, where you could watch talks when you were undecided. 8 screens (one for each track), you just grabbed headset, and you could switch between sessions. Now, this is slightly controversial – because you don’t get direct contact with speakers. But when you were tired and really undecided, this was good place to just take nap or switch between session to pick one. What I also liked about NDC is that there where no designated lunch times. Food was there all the time – continous delivery ;).

NDC forked this year, and there will be another instance in London. I won’t be there, but maybe you should try?

On the final note, I have subjective feeling, that I had much more fun during Oredev. In this place, I would really like to thank Emily Holweck, who made this trip possible. She convinced me to come, and helped me overcome all medical obstacles I had. She’s very committed to making Øredev great, and I believe this also impacted why I had so much fun there. Because at the end of the day it’s all about people.

Lots of love for F# during Øredev

Last week I had tons of fun (and learning!) at Øredev conference in Malmö, Sweden. My full writeup is still yet to come, but as videos are popping up, I’d like to show you how well F# and functional programming in general were represented during conference. On second day, you could do a streak of 3 F# talks one after another!

This are links to talk pages, where you can find video (or in some cases not – hope it will pop up soon), grouped by presenters, sorted randomly. Let’s start with F# focused links:

And off to less F#, but still interesting functional talks:

Bodil also gave talk on implementing your own lisp (in Clojure, of course) at nearby Foo Cafe. This was pretty hardcore, and I didn’t get much from it. But it was recorded, so smarter people will probably make use of that.

As you can see, lots of functional love. As always you could always hang out with speakers between/after sessions and ask them (in my case) some lame questions or see them hacking around. Great fun, and good opportunity to learn new stuff.