4 Tips for Starting a New Dev Job

September 4, 2016

About 2 months ago I started a new job. After almost six years at Ginger, I started a new gig at Forter, and have been having a blast there in the past few weeks. It also got me thinking quite a lot about how to learn stuff. It's been a long time since my mind had been at CONSTANT LEARNING mode. At Forter I have to learn: A new domain I know nothing about. Technologies I know nothing about (including 4 programming languages I only have a passing knowledge in). Huge codebases I know nothing about. People in the...
one comment

Beware of .NET 4.6 Workstation GC

August 8, 2015

TL;DR: Changes in the .NET 4.6 Workstation GC has made it much slower for us. We had to make sure our tests are using the Server GC mode. VS 2015 came out and we happily upgraded. Everything worked great, except for one thing: our integration tests started to run slowly. Like 10 times slower. The thing is, the same code, when not running under the NUnit process, worked just fine. Something was afoot. After much investigation and profiling, we discovered the root cause: GC. Our integration tests run our entire system start-up process, which allocates a few gigs of...
no comments

Beware of the Swift String

April 10, 2015

I have to tell you, for a company that prides itself in delivering polished, high quality products, Apple has really dropped the ball with Swift 1.0. Before the recently released Swift 1.2, it was a nightmare platform to be developing in. My main issues with it were: Compile times are so slow, that every time I compiled I died a small death. Before 1.2 they had no incrmental build, so every file I changed, I had to wait like 5 minutes for the entire project the build. It literally meant that every feature I wanted to develop took...
no comments

Scala Performance Tips on Android

October 7, 2014

Our team has been developing an NLP library, used by Ginger Page, using Scala. Now, mostly, things have been really great. Scala allows us to go very fast, and allows us to develop the app’s NLP needs in a way that Java never could have. But, as all things in life, nothing good ever comes free. We’ve noticed that our app is suffering from many GC interruptions, hurting performance. I went to investigate, and this is my story. Benchmark on a mobile device Well, if you’re like us and developing a Scala library to be used with an existing app, it...
tags: ,
no comments

Meet object-csv, a Strongly Typed CSV Helper for Scala

May 16, 2014

Yeah, I know this is a .NET blog, but recently my team at Ginger Software ventured into some Android coding. Now, we didn’t want to use Java, and preferred something with more functional capabilities. Scala was the natural choice. One thing we use a lot in our C# projects is CSV files. They are much easier to programmatically read/write than Excel files, and our analysts can still work with them as if they were Excel files. Sadly, Scala was missing a library to read/write CSV files to/from objects, which was something we sorely missed. Therefore, I set out to...

The Case of The Async Log4Net Appender

October 16, 2013

It was a bad day. I was coding away happily as we started getting alerts that one of our production farms is down. Our service seemed to be stuck on each one of our servers. Requests are coming in, but no responses appear. Restarting the service helped, only to get stuck again after a while. The logs were unhelpful, and we had to pull out windbg to figure out what was going on. When your day starts with windbg, you know it won’t be a good one. The command ~*e!clrstack (=view stack trace of all managed threads) showed...

Charniak Parser on Windows

March 2, 2013

A while ago we wanted to choose a new natural language parser for our product. One of the strongest candidates in that area is the Charniak-Johnson parser. We ended up not choosing to use this parser for various reasons, but in the process of evaluating it we produced a nice side benefit: we compiled it (well, the Charniak part of it) and ran it natively on Windows. The source code for the converted project can be found on GitHub, and the binaries can be found here. Now, before I tell you a bit about the conversion...
tags: ,

Adapting Lucene scoring for an n-gram index

October 24, 2012

At Ginger we use a large index of n-grams, which is basically a sequence of words and their frequency in our corpus. We wanted to make this index searchable, so naturally, we defaulted to using Lucene, which is the most popular open source IR library. This is how we started adding documents to the index: 1: Document document = new Document(); 2: document.add(new Field("ngram", ngram, Field.Store.YES, Field.Index.ANALYZED)); 3: NumericField frequencyField = new NumericField("frequency", Field.Store.YES, true); ...
no comments

Console.ReadKey .NET 4.5 changes may deadlock your system

September 12, 2012

I’ve hit a weird issue today. We have a service that we run both as Windows service and from console. A specific use case seemed to cause our system to hang, but only when running from console. Also, I was sure this didn’t happen before I upgraded my machine to .NET 4.5. The service initialization code looks something like this: serviceHost.Open();   while (Console.ReadKey().Key != ConsoleKey.Q) { Console.WriteLine("Press Q to exit"); ...