Thursday, January 31, 2013

Wednesday, January 30, 2013

Fight Club Rules

Things I need to remind myself:

Teamwork is important... There is a quote I like "A real friend is someone who help you when it's inconvenient" The same thing for teamwork. It's easy to be on a team when everything goes your way. It's not a real team until the conflict arises and decisions are made against your best judgement.

We all serve at the will of the master. Like it or not we all have to do what we are told. Again it's nice when everyone is in lockstep but that's not reality. There are the obvious customers like the customer who uses your product... but then internally there are many more less obvious customers. Any one of which can change your situation.

There is never a RIGHT decision or the RIGHT way. Decisions in real life software development are fuzzy in nature. It is a balance between individual skill, vision, experience, and risk; many of which overlap. But there is never a RIGHT decision. What is right today may not be right tomorrow.

Being cyber violated

Sitting here and looking at OpenResty and Nginx I cannot help but think about the latest Java security exploits. There was a time when you could buy a program off the shelf and if it did not live up to expectations or there was a genuine problem with it that you could return it and in some cases there was an expectation that you could litigate for damages (as evidenced by the many variations on the software license agreements). When you pay for software there is a certain expectation as to how it's going to perform. So even if you get past that... what happens when the vendor intentionally or unintentionally delivers software with bugs, backdoors, exploits, data leaks, trojans, phone home?

What will happen to the first company that does this on purpose regardless of the license agreement? Are the licensing fees earmarked to pay for R&D, sales and marketing... or a lawsuit war-chest?

So as I look at Nginx and OpenResty, which have their origins in Russia and China, while these are opensource applications they do not get the level of code/peer review that I would expect for former hostile countries. But then what are the options when the commercial alternatives are so expensive?

If someone is listening... there is a market for a commercial package library. One where the code is reviewed and cleanroom packaged.

Tuesday, January 29, 2013

Silence is a golden apple

Analysts who think they understand apple inc. it's methods, it's motives, it's next move are as stupid as the institutional investors that take their advice.

Apple is profitable. They made money this quarter than last. Simple algebra explains why this year was less profitable than last. And yet they still beat expectations.

Keep in mind these useless talking heads said the same thing about IBM. And look where they are now.

Sunday, January 27, 2013

HP InkJet Printer Cartridges

What a scam! I had '60' installed in my printer. But this afternoon I managed to completely drain my printer cartridges. I went to the local office supply store to get a replacement for the B and COLOR. This time I bought the 60XL.  I assumed that it was going to be a bigger cartridge... the box was bigger. The actual cartridge was the exact same size. I could not tell you if there was an ink volume difference or not. But HP is not playing nice. I feel ripped off.

Saturday, January 26, 2013

The king's wine

Interesting problem but juvenile. Just read programming pearls for good questions. At the end of the interview you did not learn anything about the candidate expect they like puzzles.

Friday, January 25, 2013


When I walk the dog at night she always turns to the left when we get to the driveway. And during the day she turns to the right.

Thursday, January 24, 2013

complaint google voice

I need to be able to delete the contents of my inbox. Not that I'm hiding anything but I have a few hundred entries and I want to delete them all so that it's clean. There is simply no need to have that much junk sitting around. Anyway, while I can delete everything on the current page there are almost 30 pages.

Not good.

First Drop Blooming

Back in the day when I worked on device drivers for barcode scanners most of the heavy lifting was done in the scanner itself. That's where the aperture controlled the amount of reflected media the receiver measured. Depending on how fast the aperture controller system was there was still potential for first bar blooming. This was the timeout applied to the aperture when it was completely closed in response to a very high media value such that the controller assumed that the reader was passing through the margin of the barcode and just about to enter into the actual barcode.

So what happens when the accelerometer in your favorite device detects everything from small fan vibrations to massive earthquakes to super vibrations?


Sure would have been nice if he raced clean.

Tuesday, January 22, 2013

"I'm XLVII and I made a cool app"

How positively ridiculous! What the F*CK does one's age have to do with inspiration and perspiration? NOTHING! If you build something cool there is a good chance we'll see it anyway. But it has to be good. Just don't beg 'cause chances are it's not that good an idea or execution. Lot's of ideas fail and begging is not going to fix that.

Sunday, January 20, 2013

Deleting is fun

Deleting stories that I tagged with Instapaper is just as fulfilling as unfollowing tweeters.

Fedora 18- just don't care

Does not work with VMware for published reasons. But that just sucks and speaks volumes about the quality over there.

Convert from twitter to RSS

As I reduce the amount of tweets I receive by deleting the polluters my RSS feed bookmarks are getting heavier. I can't tell yet because I'm not capturing analytics but there may be a shift in the force.

Saturday, January 19, 2013

iCloud Passwords

Apple is oddly protective of iCloud password format and reuse. This password policy is only seen in enterprise system setup.

A great apple day

Today was an all around good day at apple. Now time to reinstall everything.

Mornings are perfect

For cartoons and breakfast.

Friday, January 18, 2013


Remember to identify and remove block padding. While it's too easy to just trim the printable chars that's just wrong. Doing it right means:

  • check the last byte in the block
  • if the value is less than the block size
  • then check that number of bytes in from the end.
  • does not hold when encrypting variable length binary data.

Wednesday, January 16, 2013

Need security standards

Why don't we have one global config file rather than fragments for different vendors and products?

Tuesday, January 15, 2013

Linus and Richard

The more Linus rants the more he starts to sound like Richard.

Patents don't hinder open source development

People do. Social pressure does. Poor education system that does not promote open source. And failure to protect innovation.

There is little or no money in open source. Those in open source that are making big money sell other things like service or support or consulting. But then who has time after that?

Ask yourself what an open source version of Facebook would look like.

GOLANG idiomatic substring

This is a fun way to extract an octet.

This is slightly improved for correctness.

GO Play - external modules

Go's online play tool does not support external libs.  I can understand why but you'd think they'd incorporate the best.


I like using various REPLs for testing or re-acquainting myself with various language properties. GOLANG does not have an official CLI/REPL. However, PLAY is so much better. About the only downside is that google sees all your code... if they are interested. The good news is you could be a catalyst for change if the same errors keep popping up.

Why Blog?

I wonder why people blog... including myself. Unlike professional writers who make their living this way writing is more of a hobby, however, to professional writers blogging is not optional. So I put together a list of reasons for the amateur:

  • Cathartic - when your day job is not fulfilling and the open source avenue is unappealing... Those who cannot code write articles about coding?
  • Narcissistic - (defn) If I had to give an example of a typical narcissist I'd say Richard Stallman but that's just an opinion and not fact.
  • Practice - The English language should just be another language with a much looser syntax. Unfortunately most grammar checkers are not very good. For some writers article construction is intuitive, however, most should plan the structure so that it's readable.
  • Notes - it's just a free place to keep your notes and let google index them for you... for free.

Why do I blog? Maybe a little bit of everything above.

Monday, January 14, 2013

Begging for followers is tired

Not to mention that it demonstrates a complete misunderstanding of how twitter works.

Weather channel needs a clue.

Zero Day Exploit

I'm thinkin' that most people do not understand what "Zero Day Exploit" means. Of course WikiPedia has a good (read general) explanation, however, it is so general that just about all exploits are going to be a zero-day exploit. Frankly the name is meant to be inflammatory and does not really address the topic.
"...developers have had zero days to address and patch the vulnerability"
So basically ALL exploits are zero day.

Just because company "A" releases product "B" and immediately gets a bug report does not mean the bug was found that day. Especially for open source projects.

Some years ago there was a hacking contest. The winner was able to penetrate the target system in a few minutes, however, the system's source code had been available for months in advance of the competition. So what really makes him the winner? I dunno.

So while Java is becoming less and less desirable as a platform... what does it all mean?


Rust is a great name for a language that might just rust on the line. If the Rust producers really want to succeed then they need to start building some infrastructure like a rust version manager and a killer library and librarian too. Relying on the social/open source programmers to do it will be folly.

You big bully

Why is bullying discouraged and punishable in regular society, however, it's considered a tool in law enforcement?

Sunday, January 13, 2013

Apple iPhone 4 bumper

Two recent purchases and neither fit my phone. What a waste of time. Only good thing is the genius I saw on sat promised a refund.

Trying to be funny

And actually being funny... Golden globes self deprecating and continued attempts at humor has gone too far.

Making the switch?

May could be the month I switch from apple to nexus.

2x MacBook Air is a crash fest

Computer has been booted 3 times and crashed twice. I tried to contact apple but my emails were rejected. Steve jobs would take my emails. But not Tim cook.

Saturday, January 12, 2013

Strike two for apple

MacBook Air was returned to me today. Apple said they replaced the mobo, however, the original SSD was in place. And the down button stuck on a web page. And the wifi is performing like crap.

Back to apple.

What do java's problems mean for android?

Can't be a good thing. What can google do or is it already a clean room java? What about the gnu and others? Or is it strictly oracle's version?

Friday, January 11, 2013

Shut the f*ck up

Not everything needs to be shared with everyone. Share everything is disrespectful and lazy!

golang time parsing does not exactly work like the demo

This is my example that works better but it's funny the way a Println formats the string buy default.

seems to produce

2013-01-11 11:45:33.593 -0500 -0500
The duplication of the TZ number seems strange.

Thursday, January 10, 2013

Zero day vulnerability is not

Usually the exploited an alpha or beta release. Shame on legit hackers for not reporting

Golang wishlist

This year I want a pre processor stage for the auto compiler for generated code that does not require crappy make files.

And as a use case I want to convert XSD files to golang interfaces on the fly. Which suggests that the only way to realistically access interface members is through reflection.

Meh. Might not be that great of an idea after all.

Wednesday, January 9, 2013

GOLANG regex search in multiline string

This seems to work well enough. One thing I find strange is that the output from the FindStringSubmatch is odd. I have to go back to my perl docs and see if it's consistent.

Tuesday, January 8, 2013

GOLANG concurrency and strings

The concurrency examples I have been looking at have been passing around ints but I'm interested in different data types. So here is my example. It's a simple hello world with a goroutine.

This second example is slightly different and shows multiple messages... and they're clearly serial.

This last example demonstrates parallel execution with an aggregation of sorts.

Here is the last example where the channel is a map'd item.

And just when I thought I was done I had an idea to return a struct/interface in a channel.

quick marshal golang map data

Here is a golang play for a simple marshaling problem. It's not actually a problem it's just that I was bothered by having to marshal/unmarshal structs or interfaces when I wanted to do the same to a simple map[string]string.

Monday, January 7, 2013

Reddit is NSFW!

There was a time when the posters of reddit would self identify when posts were probably not safe for work or NSFW. Sure many countries, companies and individuals have a different tolerances for this sort of thing but at least there was a starting point.

Well the bar seems to have been lowered. Reddit's homepage is littered with toxic links. Probably better to avoid the whole thing.

Going paperless?

If you receive paper invoices, bills and correspondence and think you're paperless because you scan these papers and then shred or recycle them then you are wrong and do not understand what it means to be paperless.

The ups way

Right hand turns always get me to work faster. Except today.

Sunday, January 6, 2013

Sunday is in follow day

Doing some house cleaning because I stopped reading their tweets.

Sparrow for iPhone

Needs notification. It's better than google's email client except that one thing.

Programming language of all time now and forever

What complete and utter nonsense!

Batch processing is still king

Real time systems have been getting better, however, the ratio of read to write and the complete data set still favor batch processing.

Latex your résumé.

There was a time when building your résumé in latex was fun or even necessary. But isn't any more. There are just so many choices out there. Free or otherwise. Web or desktop. It should not even be a consideration.

Saturday, January 5, 2013

When beginning a new project from the ground up

What are all the things you need? is a great name for a company

Too bad it's a landing zone for a domain squatter.

Is it Tim Cook's fault that good enough is not?

Product quality, services and customer service ate on the decline and the retail market for its stock is volatile. I expected better and hoped for more than that.

'The hive' is not a universal cartoon

As the characters refer to a soccer ball as a foot ball... As would everyone except Americans.

Which begs the question. Why do Americans call football a football. Except for one or two plays everything is done by hand.

Netbook is not dead

It was resurrected to a higher plane as a chromebook.

The worst feeling in the world

Is missing your apple genius appointment.

Rackspace part 2

With all the new cloud development tools services like cloud 9 etc. rackspace will have to deploy additional options that include this sort of tooling. Or possibly github.

Friday, January 4, 2013

New Format for this blog

I caught myself thinking that maybe I should be tweeting instead of blogging. This blog is more like a tweet than it is a blog. Infact when I BLOG I like to use my other domain. But the ideas I post here simply cannot be conveyed in 140 chars. It's not a new idea but it needs a name if it has not already been tagged.

When EmberJS looks like AngularJS

I cannot tell which came first but I find it interesting that The demo code on the EmberJS homepage is very similar to the code demonstrated by AngularJS. Just looking at the sample code they are both interesting.

At a first look it appears that AngularJS might have better format and structure. There is also some key similarity to KnockoutJS which bodes well for AngularJS. I will have to re-watch their screencasts and then try some examples that are more complicated than a simple todo. I think the best example would be a one-page application rather than snippets.

Is null really a billion dollar mistake?

I plan to read the article from the professed inventor or null; for the moment, however, I do not imagine that it's a real mistake.  Back in the day when memory was not protected we would assign 0x00 (zero) to pointers to signify the absence of value or null. With high level and OO languages this concept needed to be more formal. Simply assigning 0x00 to the pointer was not going to be a good thing because that address could actually hold an object instance. There are any number of sentinel values that could be used in it's place but the same thing would happen.  Alternatively, depending on the language creating an anonymous null object instance could accomplish the same thing but then it's a full fledged object instance with plenty of other baggage.

The thing is... if you remove null from your programming style guide you'll simply have to replace it with something else that is less rigorous or "invented here".  And that's just silly because null translates across many languages, platforms and frameworks where your version might not.

But good luck to you. I'm keeping it.

I started to read your post and then decided to watch the video. Sadly I do not think that null is as bad as Hoare thinks. At first it was a tradeoff between checking and not checking. Checking was slow and not checking was fast... but by about minute 25 he finally explains that if you did not invent null that you'd have to do something else that implements null-like behavior. This sounds quirky to me. The null problem can be taken a step further when you apply some lessons from Erlang.  Simply let it fail. Specially if you know the data is supposed to be good.  For example when I get the IP address from a tool like ipconfig or ifconfig I assume (right or wrong, that the IP address is formated properly and valid for this context. So why would I implement a complex regex to validate all the possible IP addresses when a simple one would allow me to pull the IP address from the target document easily enough?  I wouldn't and neither should you.

The other reason why removing null pointer references as in your examples... his argument was for language architects (internals). It was not for userspace applications.

Blogger for iPhone bug 'add comment'

... Is not working. Looks like google wants to redirect in order to do a login but blogger is not permitting it.

Parking your car trunk in first?

Why do people park their cars trunk in? I do not imagine that most people are cops or that they need a fast getaway. To some extent you make it more difficult for law enforcement to get your tag numbers because they'd actually have to get out of their car... but you've also made it easier for a bad guy to steal your plates. And when you park in the garage you are more likely to inject exhaust fumes into the house. At least when the car was front in first the exhaust pipes pointed to the street.

The only reason I can come up with is when the home is on a busy street and it's easier to get into traffic going forward than trying to find a break in traffic going backward.

But more than that... why?

"Good-Enough" is not a dirty word

"Good-Enough" has a number of acronyms ranging from geek to urban, however, the misconception is that GE is not really GE; that GE is somewhat short of the mark.

The truth of the matter is that g-nuff is subjective and so is the mark that one hopes to achieve. For example GE for Steve Jobs is much higher than Bill Gates. This does not make BG bad or evil. He just has a different setting for GE.

So when you're working on your next project, whether it's painting your house, changing a light bulb with a different wattage, or writing that next killer webapp. Set realistic marks and good 'nuff will feel good. (keep in mind the law of diminishing returns as you get closer to the mark.

too much parameterization?

Is there such a thing as too much parameterization? When the number of parameters exceeds the amount of code saved by repeating the actual task... Feels like a pivot to me and a perfect place for meta programming.

Crafty.JS makes an game platform

I'm not interested in games but there might be something to be said for building business apps that consider game design to make them compelling to use and linger.

JavaScript Cryo is in a Python Pickle

Cryo seems interesting and it appears to be simple enough to use. I really like that they use the parse() and stringify() methods. It makes perfect sense. What seems wonky is that msgpack does the very same thing but with different names.

var myByteArray = msgpack.pack(myObject);
= msgpack.unpack(myByteArray);

"are you sure?"

When cleaning out your computer's trash can or recycle bin why do they insist on asking "are you sure?" That last step is redundant because (a) you were probably asked that same question when you moved the file to the trash, and (b) the trash can is the place where you are expected to undo things that you might have deleted accidentally.

So why do you keep asking me "are you sure?"?

VMware Fusion 5 PRO

The upgrade price for VMware Fusion 5 PRO is 50 bucks. Looking at their compare versions page I see that they included a bunch of stuff like VMware Player which you can download for free anyway. They are clearly stretching to earn that upgrade fee. When you think about it...

Fifty bucks for the base fusion gives you an amazing feature set. Your second fifty bucks gives you the smallest fraction of new features that you already get for free. Someone in marketing was clearly looking to fill in check boxes.

The two biggest features (not worthy of the upgrade) are Restricted VMs and Network Editor. Yet there are no explanations as to what these features offer. At least the descriptions I found provided no actual details; just one meaningless screenshot.

Over the years I have been wanting static IPs, however, unless you're going to edit the DHCP files on the host OS you're not going to get that. Which makes server development difficult. It seems that while the main selling point for VMware is user migration; the developer market is completely under represented.

Successful Languages have comprehensive libraries

I just felt like repeating myself because I watched an InfoQ interview with Damion Conway where he talks about Perl, Perl 6 and the CPAN.

the decline of reddit

WTF seems that everyone who posts on reddit's home page is trying to be a comedian. Long live sub-reddit.

I want my tech grand unification now!

I want my phone to work seamlessly with all of my computers at home and work; and with all of my TVs at home too... and I still want the dynamic experience I get by having one of everything from different vendors.

Thursday, January 3, 2013

Go Lang and regex

If you have more than one physical or virtual ethernet port or WiFi or a combination then you may also have more than one IP address assigned to your system. Of course it's also possible when you use CARP or other high availability strategy or even network tunnel. And this is not limited to Linux but also Windows machines.

Without actually deciding which IP address is the correct IP address let's use Go and it's exec and regexp libraries to get that information in the most Unix way.

The following command, when completed without an err,  will return the output of the Windows command "ipconfig /all". Therefore the variable out will have a multiline string or a string which contains newline chars.
out, err := exec.Command("ipconfig", "/all").Output()
Now that we have some output, in the form of a string, we should look at the output. Well, I'm not going to copy/paste 100 lines of output here.  Suffice to say that the lines that we are looking for look like this:
IPv4 Address . . . . . . . :
There's nothing fancy about this sort of regex but what we are looking for are lines with this format. As a side note I believe that the (Preferred) is optional on the output of the command. The following command compiles the regular expression for use by subsequent Find() functions. Also as time progressed the regex improved.
re, err := regexp.Compile(`(?m)^\s*IPv4 Address(.*)$`)
The regex above is pretty simple. Since Go uses re2 there is a flag (?m) that tells the compiler that the input string contains multiple lines. If I did not add this flag then I would have to split() the string and then run the re on each line separately.

The following function will convert my output data from a []byte to a string and then run the regular expression previously compiled against that string. (The -1 is not completely documented but a -1 seems to be the best value and indicates the number of bytes in the target search string). This function returns a list of all of the matches.
ips := re.FindAllString(string(out),-1)
Alternatively, the following will extract an exact list of IP address.
re, err := regexp.Compile(`(?m)^\s*IPv4 Address\s*:\s(([0-9]\.){3}([0-9]))\s*$`)
 When used with this function.
ips := re.FindAllStringSubmatch(string(out),-1)
 Go's regexp is pretty powerful and the key to the success of this project.

How Can I Explain To a Coworker That He Writes Bad Code? - Slashdot

You don't. It's up to your manager or peer review to discover. If you standup you'll likely experience some unexpected consequences.

regex for IP address matching

If you're looking to splice an IP address from a document and there is a 100% chance that the IP address is properly formatted then why the F**k would you want a regex like this:

In the worst case the regex might look like:

But even this is abusive.

Chrome Packaged Apps A platform unto itself

Building Chrome Packaged Apps seems to be an interesting way to deliver apps. The line between an all-in-one web page and a packaged app are very close. The benefit of the packaged app is that most of the work of serving the page is on the client instead of the server. (rendering)

The casual use does not really need a local install but a power user just wants the data. It simply opens the possibilities especially for power users ... and the additional functionality(APIs) that packaged apps receive.

Perl 6 is not really Perl

I'm glad that's clear. Sure there was a time when Perl 6 was supposed to be it's successor but according to those in the know... it ain't Perl. Programmers are not very good marketers.

All for one - DVCS

I use both BitBucket and GitHub. The major differences are that BitBucket uses mercurial and GitHub uses git although BitBucket also supports git. Where they really differ is in their pricing model. BitBucket charges per user and GitHub charges per project(relatively speaking).

So you have to watch the tipping point as your projects cross the boundary. Or you have to open source your projects. Or you have to spend some money. Or you have to run multiple DVCS configs.

Personally I'm moving everything to GitHub. The tipping point for me is the desktop GUI and the online code editing. I have an idea about an application harness that would make online development plausible(for another day).

Awesome is a cool window manager but not for everyone

Just think about the notepad vs emacs argument and you'll know where I'm coming from.

"The secrets of Node's success"

"Node is something new, and that’s why programmers are interested in it." -- Troy Topnik

Looking for Avery Labels on Google Docs/templates

Some unsolicited advice for Google. (a) Clean up the public templates. (b) add semi/commercial templates or something like the chrome app store.

Strange things afoot in the blogosphere

Very strange blog article titles...

X. C# is the best language for mobile computing,

X. Behind enemy lines iOS at apple

X. Linux is garbage.

Wednesday, January 2, 2013

WordPress killer feature

One feature I hope I'm not going to miss now that I'm hosted on Blogger instead of WordPress is spam checking. As it is Google Voice does a terrible job detecting SMS-spam so I'm not too hopeful for Blogger. But let's see anyway.

C# for mobile development

Choosing a language for mobile development is not as simple as picking the newest and shiniest language or tool on the block. Frankly it's more about the libraries, the GUI and IDE/tools.

One particular point made for C# is that it's - 'cutting edge'.

Anyone who studies programming languages knows there is no truth in that statement.

C# might actually be a good language for mobile but the article is wrong on all 8 counts and is not worthy of linking or directly referencing.

Find your own criteria and go with that. But make sure it's founded in fact and not opinion.

What motivates me at work or so they say

"Career analyst Daniel Pink has identified as the three primary motivators of behavior: autonomy, mastery and purpose."
Sounds good to me.

What is a good Blog headline?

Should a blogger write inflammatory headlines to get people to read or enough detail to ignore? The purpose of the dramatic headline in newspapers is to get the reader to read the article and linger on the page and stumble into the advertising. But with RSS feeds and viewers like ... the readership mission is different.

I put all of my sources in Google's reader, then I skim the titles. If the title seems on track then I might skim the first paragraph or save it to instapaper immediately. And every couple of days I empty my instapaper list unless there is something hot.

PS: For 2013 I'm going to err on the side quality headlines.

PS: I hate it when bloggers or "linkers" repackage stories with new headlines or syndicate with or without permission just so that the article lands on my RSS feed five or six times.

Tuesday, January 1, 2013

Daily subcutaneous fluids

She has had a long life but its getting to that time.

Why I'm a programmer

Recently this topic has been making the rounds on the Internet. Not many give real answers. Some did it for money, fame, women. At least post dot com.

I did it by default. My dad was a programmer and independent consultant. It was a hobby for a while then a job.

FCC regulates tv commercial volume

UPS found a way around it by increasing the 3rd dimension and boosting the bottom end with drums that are not germane to the advert.

Shame on UPS. Step up FCC.

Ubuntu keeping Apple level secrets?

Very interesting notion.

UPDATE: ubuntu's site had a countdown timer. When it reached ZERO I received a white screen of death. I hope the announcement has a better life expectancy than that.

Dear House of Representatives

While you slept or partied last night the rest of the government worked their asses off to make a deal. You sadden me greatly. I hope you lose your jobs!!!

Go Noles

Candle direction

There are or were some historical disagreements between the different Jewish religious orders as to which direction to light the candles. But the order of placement (right to left) is universally agreed. A simple Wikipedia search or a call to a local synagogue or perhaps there might be a Jewish person on staff. But this just wrong Disney!

Recursive short links

Have you ever been on a website with lots of short urls that link back to the same page? What action would you want your browser or the URL service to take? So many to choose from.

Transparent bug/feature tracking

Does transparency help or hinder product adoption rates?

Lua and Dart

Lua 5.2 has been out a while but the PIL (book) has just arrived in print. Almost a year later. Not very CI/CD but ... They have not released the PDF version.

Which gets me to thinking about Dart. Considering that Dart easily converts to JavaScript and its own dartvm it seems to be poised to do much more.

2013. Excellent!

Fireworks at 2am next door with two toddlers sleeping in the next room. Not so excellent.

another bad day for open source

One of the hallmarks of a good open source project is just how complicated it is to install, configure and maintain. Happily gitlab and the ...