<– Part 26 – January 24, 1915  | Part 27 – January 31, 1915 |  Part 28 – February 7, 1915 –>

The Allies on the Western Front received early notice of a German attack on Cuinchy from a German deserter January 25. With this notice, several German attacks were repulsed, including one ruse in which German troops claimed (in English) to be engineers. Surprising, such a thing is a legitimate tactic, as defenders are expected to challenge anyone coming from the front, and are only to allow one man to advance.

The fighting in Champagne seems to be winding down, with lands taken from the French Third Army remaining in German hands despite French counter-attacks, including 6 waves that collectively lost 2,400 men. To date, 94,000 French and 46,000 German soldiers are casualties of war.

The three advances from Palestine to the Suez Canal

The Chilembwe Uprising was crushed January 26 after a brief skirmish, and the rebels are fleeing towards the nearby Portuguese colony.

The Ottoman Empire launched an offensive against British defenders of the Suez Canal January 28, with 20,000 attacks advancing in 3 echelons (all advances on the canal). They are opposed by 30,000 defenders, are the attack is imminent.

The German submarine U-20 torpedoed three steamers January 30, without issuing any type of warning. Such an attack has been condemned by many neutral nations.

The German Ninth Army, on the Eastern Front, launched poison gas – xylyl bromide – against the Russian Second Army on January 31, but the wind blew it back on them, and the freezing temperatures rendered it nearly ineffective. The Russians launched a counter-attack but were devastated by artillery fire. 20,000 German and 40,000 Russians fell in one day.

<– Part 25 – January 17, 1915  | Part 26 – January 24, 1915 |  Part 27 – January 31, 1915 –>

German battlecruisers Derfflinger, Moltke, and Seydlitz sailing to Dogger Bank

Opposing forces continue skirmishing at Cuinchy, on the Western front. At Champagne, minor, small German attacks continue, but most focus has shifted to the Eastern front. At Sarikamish, the retreating Turks are confirmed to have suffered 90% casualties, and Enver Pasha has resigned in disgrace.

German armored cruiser Blucher sinking

On January 18, after nearly one month of fighting, Ardahan has fallen to the Russians, as the last Ottoman units are evacuating.

In German East Africa, fighting January 18-19 at Jassin saw the 300 British invaders defending against a German force over five times their size, although British forces swelled with an additional 800 reinforcements. However, after 300 casualties, the British forces surrendered, and their leaders were allowed to return home after promising not to fight anymore. Yet the ammunition and officer losses for the Germans dissuade any further fighting in the field.

Map of the North Sea. Dogger Bank is towards the middle

Later that day, the first zeppelin raid on Great Britain commenced. On the Western front, fighting has erupted at Hartmannswillerkopf, a peak in Alsace. The French Seventh Army faces the German Army Detachment B, both with 15,000 men.

The night of January 23/24 saw 4000 Russian forces attack near Rafajlowa, attempting to cut off a pass through the Eastern Carpathians. The surprise assault took 2 trench lines before the Polish Legions attacked from three directions with bayonets, repulsing the Russians and retaking the trenches.

Last picture of John Chilembwe (left), taken in 1914

In the North Sea, at Dogger Bank, the British Grand Fleet was able to decode German naval transmissions and intercept the German High Seas Fleet on January 24. After a day of fighting, the Germans suffered on Armored Cruiser sunk, one battlecruiser damaged, while the British only suffered serious damage to one battlecruiser. Additionally, the British suffered only 45 casualties to the German’s 1,200. The Germans were outgunned, slower, and unable to escape, but managed to due to a lack of British communication, as well as the general appearance of the battle “getting away” from the British commander, stopping the battle from becoming a rout.

Nyasaland, marked in dark red

On January 23, in British Nyasaland (modern Malawi), years of grievances against forced labor, discrimination, and lack of representation & control of ancestral lands erupted in an uprising led by Christian millenialist preacher John Chilembwe, whose name has been lent to the uprising. An attack on the headquarters of a large business landowner killed 3 colonists, while an attempt to take weapons from a large cache failed during the night. This morning the militia has been raised and assembled, and the uprising seems doomed.

I had originally intended to spend this post discussing Ceedling, and Unity testing, but now I won’t. Why? Over the weekend, I was reading the API guide for Arduino libraries, and realized they’re heavily focused on object-oriented programming. Synthduino was written in a functional style (it’s C) – while I’d used a basic struct to hold together a note’s frequency and duration, all the calls where global functions that accepted either a note or one of its members as a parameter. This was contrary to the API.

 

I did research, trying to find a good unit testing suite for C++. Turns out I’d somehow missed what should have been a top result: Google Test (aka gTest). I had gotten distracted by the Wikipedia list of suites, and gone through there. If only…
Anyway, I’ve spent the last 2-3 days rewriting Synthduino in C++, with classes, and rewriting the test suites. Fortunately, the logic and test data is the same, so I’ve got that going for me. Once I’ve spent more time with Google Test, I’ll try to do a better comparison between it and Ceedling/Unity.

<– Part 24 – January 10, 1915  | Part 25 – January 17, 1915 |  Part 26 – January 24, 1915 –>

Tabriz was captured January 11 by the “Mosul Group” of the Ottoman army.

Russian soldiers gathering the frozen corpses of Turkish soldiers at Sarikamish

In Europe, fighting at Artois ended January 13, as the French assault was halted due to its lack of success.

Japan issued a series of demands to China January 15, which would grant Japan a much larger control of the Asian mainland. China is not expected to comply.

In the Caucasus, the battle of Sarikamish ended January 17. The Turkish General staff reached Erzurum, with orders to the defeated Third Army to follow later. Transports launched from Constantinople with supplies were sunk by the Russian Black Sea Squadron. The end of the three week battle was a complete defeat for the Ottoman Empire, who was unable to halt the Russian advance, and seems impossible to now, with all reserves in the region depleted. Of the 118,000 Ottoman soldiers who marched three weeks ago, only 42,000 remain

A 13-year-old Armenian boy, who fought for the Ottoman Empire at Sarikamish. Despite the genocide perpetrated against the Armenian population, many of them still fought for the Turks

combat-ready. Of the nearly 80,000 casualties, nearly half were killed, an additional one quarter were killed by sickness, 7,000 are prisoners, and 10,000 wounded. Russia suffered 16,000 killed and 12,000 sick, mostly from frostbite. The Turkish commander, Enver Pasha, has been removed from command.

At Ardahan, reports indicate that the Russians have crushed the Turkish defenders, and a full retreat seems to have begun. In the Champagne region of the Western front, minor German probing attacks have begun. Elsewhere on the front, the village of Cuinchy continues to change hands every few days.

Wherein our hero fights the dragons of cross-platform compatibility, libraries not being updated, inadequate documentation, and the fact that Arduino can’t do unit testing natively.

 

Why?

I’m currently working on the new release of my project Synthduino, and I’ve fallen in love with Unit Testing from various Ruby and Ruby on Rails projects I worked on last year. I decided it would be good to bring unit testing to Synthduino, not only to give me a clearer roadmap of development (unit tests help focus effort), but also make sure my work is good quality (as I do want Synthduino to be used).

What?

I briefly considered writing my own framework, but I’m not really comfortable enough in C/C++ to do it, so I looked into frameworks. Based on what I read, I narrowed it down to two options: CppUnit and Ceedling. From what I gathered, CppUnit was the more established of the two, but Ceedling was built on Ruby to use rake. I decided to try them both out.

Where?

My development platform spans 5 computers and 4 operating systems (Ubuntu, Lubuntu, Linux Mint, and Windows 7), with a git server running here. I needed something that would work moderately well on that.

How?

I started out with CppUnit. The biggest issue I ran into was the complete lack of documentation (seriously – is there any? It’s advertised as a “C++ port of JUnit” – am I supposed to use the JUnit documentation?). I looked around online and found a lot of tutorials that all used completely different ways of doing the same things. On top of that, none of them actually worked on any of my machines – every attempt to do anything, no matter how minor, was a long string of compiler errors or stack overflows.

I looked to Ceedling. Off that bat, I did like it more – it came with example projects, and included documentation (though it was hard to find). I liked the ability to use rake, which I’m familiar with, including the ability to set up stubs for everything with an easy rake command. My biggest complaint would still be that the documentation is a little sparse (and online it’s nonexistent). BUT it’s certainly sufficient, so I can’t complain too much. I’m able to get things done, make my tests pass, and so on.

The only bug I ran into was in functions that used printf – I spend about 4 hours tracing stack calls, overflows, missing symbols, and so on until I tracked it down – an error that had been fixed in Unity in August but not found its way into Ceedling until December (after I had downloaded it). Otherwise it’s been great.

 

Next time I’ll actually look at some of the testing.

Now that I’m starting the New Year, I’ve settled into an organization system that works pretty well for me. I thought I’d at least record it here if anyone’s interested, including my future self who may look back on this system as an unmitigated disaster and wonder what I was thinking.

WEEKLY PLANNER

The first part is a weekly planner I carry around – yes, a hard-copy. It’s a little booklet folded down to 3.5 x 6, which I’ve found is a good size to fit in my pockets. It has 2 pages for notes, then a list of long-term goals I have (with weekly milestones), and upcoming events. The main point is a daily planner section in the middle (I make a new one each week). On the left page is all of my daily tasks, and the right side is a daily schedule. I update it diligently, and record my hourly usage (if i have time, I’ll upload a sample page).

The last page is a review section, where I total up how many hours I spent each day on tasks, and then write a review of the week, noting room for improvement, and so on. It also faces my 6 month goals, “this month” goals, and weekly goals (which also appear at the top of each daily task list, so I make sure my daily tasks align).

KANBANFLOW

I use the Pomodoro technique to stay productive. Last year, I was only using my planner, but was not NEARLY as productive as I would have liked. The pomodoro technique keeps me accountable, and assuages my guilt over doing things for fun (I’m a little obsessive about productivity). I work for 25 minutes, then take a 5 minute break. Every fourth break is 15 minutes.
I also use the kanban system, with each column being a day of the week (though the first is “today”, followed by “done”, and the last 2 columns are “next week” and “later”). I sort the cards by the order I need to do them and get started. The cards match tasks on the daily agenda in my weekly planner.
Kanban flow combines a pomodoro timer with a Kanban board, so it’s great. I’m still working on totaling numbers, but my average productivity has probably increased 8-10x so far this year!

OpenProject

Finally, to track work for software projects, I use OpenProject. It’s open source,  enjoy it, have contributed to it (okay, I fixed a grammar mistake…), and it’s been very useful. I put a lot of detail in the user stories and tasks, and then reference the work package # in my planner and Kanban board.

That’s my org technique. Time will tell (or has already told, future self) how it works. I imagine I’ll continue refining it, though – every week so far since mid-May 2014 I’ve made some minor tweak or another.

<– Part 23 – January 3, 1915  | Part 24 – January 10, 1915 |  Part 25 – January 17, 1915 –>

Soissons, on the Western front, site of fighting in the Champagne area.

The fighting on the Western front continues at Artois and Champagne, but it is merely a flurry of attacks, counter-attacks, captures and recaptures, as thousands of men die in the same place day after day.

In the Caucasus, the Russian Caucasus Army has scored a victory at Sarikamish, with large numbers of Turkish soldiers captured and many lost in the mountains. Hafiz Hakki Pasha, the Turkish second-in-command, toured the front lines, realized the situation, and a retreat has been ordered towards Erzurum. In Persia, the skirmishing at Ardahan continues, with the Russians repulsing charge after charge.

On January 4, the Turkish “Mosul Group” marched to and captured Urmia in Persia.

January 5 saw a German attempt to recapture Edea, in the German Kamerun colony, held by the Allies. Of the 1,000 German attackers, over 100 were killed and another 100 wounded. French losses were 4 dead, 11 wounded.

 

<– Part 22 – December 27, 1914  | Part 23 – January 3, 1915 |  Part 24 – January 10, 1915 –>

HMS Formidable in 1898

The last day of the year saw the HMS Formidable, lead ship of her pre-dreadnought class, was sunk by U-24 in the English channel, with a loss of 547 British sailors.

New Year’s Day, 1915, saw the Allies launch an offensive in Artois and Champagne. Fighting has been back and forth, which each side capturing, then recapturing, the trenches. Elsewhere on the Western Front, the clay soil has left the trenches knee-deep in water, causing severe illness and other medical complications.

The next day saw a renewed Russian offensive in the Carpathians launched.

Russian infantry in the forests around Sarikamish

On the Caucasus front, at Sarikamish, two Ottoman infantry corps have attacked the Russian defenses, losing half of their 12,000 strength. The Russian movements, perceived by the Turks to be a retreat, were in fact an encirclement, so the Ottoman defense has begun. To make it worse for the Turks, one corps has lost 90% of the force in the mountain, both to weather and to repeated frontal assaults against the Russian force. The corps commanders have reported to the Ottoman general Enver Pasha that their corps are too weak to attack; he has ordered assaults to continue anyway.

To east, on the Persian front, Ardahan has come under assault by an Ottoman force, threatening supply (and potential retreat) lines to Sarikamish for the Russians.