I wish I didn’t care…

February 3rd, 2015

Path

Today I got another email from my lawyers about more pre-trial motion paperwork for the divorce. I don't know why this is an ongoing issue, but I have a feeling it's because Liza doesn't like the idea of getting less than she thinks she needs - or deserves. But the interesting thing is that it doesn't matter one little bit. Not one.

My wife of (now) 29 years can choose to divorce me without any consideration or cost to her. She can ditch me like a old shoe. I can't say a thing, I can't stop here in the least. And more importantly, she has the law on her side. There is no financial cost to her of this divorce - she gets awarded money not because she deserves it - but because someone decided that there are sufficient numbers of bad husbands out there that a woman should be able to divorce the worthless slug, and then be granted a portion of his money for the rest of time.

So I get these emails about giving them more financial information, and it just breaks my heart. I hate digging this up, and it makes me about as mad as I can be. But in the end - again - it doesn't matter one whit. The legal system in this state is not about justice and fair, it's about empowerment for women, and while at some level I understand that, I don't see that a judge should not look at the circumstances of the divorce, and say "Hey, you just got tired of this person, so you don't get all you want..."

But as I said... none of this matters at all. And it makes me sick. And I wish I didn't care at all. But it still breaks my heart.

Swift Dictionaries are Always Value Types

February 3rd, 2015

Swift

More reading in The Swift Programming Language and I've come to the part about Arrays and Dictionaries. Specifically, a dictionary is treated as a Valu e, and that means that it's copied on every assignment and on all function or method calls. The significance of this, to me, is profound. One of the singularly most useful data structures for a coder is the dictionary (the other is the array), and to find out that passing around a dictionary makes a copy on each method call and on each assignment.

In the CryptoQuip codebase, we create a map of all the known words - where the key is the pattern of the word, and the value is an array of all known words with that pattern. As we run through the list of words (a file), we calculate it's pattern, and then add it to the array in the dictionary for that pattern. In clojure, we really compute all the patterns for the words, and then group them by their patterns.

We then pass this dictionary around to make it simple to find the possible words that a cypher text word could be. If the docs are as they have been written:

Whenever you assign a Dictionary instance to a constant or variable, or pass a Dictionary instance as an argument to a function or method call, the dictionary is copied at the point that the assignment or call takes place.

yet they also try to say this isn't an issue:

The descriptions below refer to the “copying” of arrays, dictionaries, strings, and other values. Where copying is mentioned, the behavior you see in your code will always be as if a copy took place. However, Swift only performs an actual copy behind the scenes when it is absolutely necessary to do so. Swift manages all value copying to ensure optimal performance, and you should not avoid assignment to try to preempt this optimization.

Sadly, StackOverflow isn't a lot of help, and this includes talking to someone in the Swift Language group in Apple. The advice appears to be: Wrap it in a class.

The reason being that all Classes are pass-by-reference as opposed to pass-by-value. While this certainly can solve the problem, it makes something that should be very simple a lot harder. I can see how to do this, and should we move ahead with the CryptoQuip solver in Swift, it can be done, but it seems like a hack.

Kinda seeing some of the cracks in the Swift language... not ideal, but it is what it is.

Swift Structures are Always Pass-by-Value

February 3rd, 2015

Swift

I've been reading The Swift Programming Language this morning just to stay sharp, and because I've read several accounts of where Swift out performs ObjC, and the ruby-like nature of Swift means that it might be a lot faster to code up. So I was reading more...

What I found was pretty surprising about the differences between Structures and Classes - Structures are always copied when they are passed around in the code. This means that there is no way to pass-by-reference a struct to a function or method, and this will certainly modify where they can be used.

As a counter-point, in C++, classes and structs are basically the same thing. There are very minor differences, at best, and yet here in Swift, it's a fundamental difference that they chose to implement, as opposed to had to implement, and that tells me that there's something they see in Structures that they don't see for classes.

Not quite sure what that is, but immutability could certainly be one thing - passing by value allows the value(s) to be modified, but the caller's values are never touched. There might also be something in the NSPoint structures as well - something where they are looking at very simple data elements with no methods on them. Yet this means you can't have a function that modifies a passed-in structure.

Very interesting. Not sure where they are going with this, but it's something to look out for.

Metra Changes – Just Keepin’ it Fresh

February 3rd, 2015

Metra Engine

This month Metra had another rate hike, and it was a pretty good sized one - I've heard that it was more than $15/month for most of the folks I talked to. It was 10.8%, and they didn't have one 'no' vote on the measure. From Naperville, it's now $185.25, and that's getting above my first car payment, but it's still way cheaper than a car, and I can't even imagine driving into the city on a daily basis.

So it's the cost of living in Naperville and working in Chicago. Maybe someday I'll be able to work at home again, and I'll be able to skip the monthly ticket, but for now, I need to come to Chicago, and I'm used to it.

Someday…

January 30th, 2015

Path

I've been at a new Shop for about three weeks now, and it's got a lot more Drama than I expected. This is not news to my new teammates, but it's news to me, and sadly not something that's so out of the realm of possibility to be considered unusual for the Tech Industry. Rather than go into it, we'll just call it Drama, and leave it at that.

But someday I'm going to work at a place where I can open up this journal again, and not have to worry about anyone feeling threatened, or unhappy, or asking me to shut it down. I think today is not that day, but I'm not sure I really expected it to be. Hoped? Yes. Expected? Nope.

But along those lines, I've decided to spend a little of my free time thinking on new business ideas with some old friends. Specifically, what I could do to get back into business like I want to do, and still pay the bills. I'm not at all sure what that would be, but I'm opening up the entire gamut and willing to think about consulting - like we did with Port-to-Port, and also service and product ideas. Everything is in play.

What I'm really doing is trying to make something happen, as opposed to waiting for something to come my way. I'm not going to stop looking for that magical job to fall into my lap, but I'm willing to take a more active role in creating that job than I was in previous years.

Someday may never come. But I'm going to see if I can't give it a nudge.

Did a Sales Simulation Phase – Reloading in Gorilla REPL

January 5th, 2015

Machine Learning

Today I was talking with Carl, the friend I was doing a little side-project with in Clojure, and it was pretty clear that he didn't understand what the next steps were for the project, and while I tried to explain it to him, he's thinking in terms of cross-sectional probability functions, and I'm thinking this is all a massive Monte Carlo simulation system where the PDFs for the individual events are what you tweak, and then you run the simulation for a year of time, and see what happens. It's very simple, and while it doesn't give you direct control over the things out might want to control, it does give you the ability to see how individual actions - the promotions from one step in the sales pipeline to the next, impacts revenue.

Anyway, so I wanted to make sure that it was all running nicely, and I was using Gorilla REPL for the REPL as it has nice graphing as well as being a generally good REPL, but as I was making changes to the code and refreshing the page, I wasn't seeing what I expected to see.

Then it hit me - Gorilla REPL wasn't reloading the code.

Ouch.

I then switched to using the standard REPL with Leiningen, and everything worked fine - then firing up Gorilla REPL and reloading the page showed that it was now working just fine. Lesson learned - Gorilla doesn't reload the code when you re-execute all the code.

Lie to Me on Netflix is Incredible

January 5th, 2015

TV.jpg

I've been having a little break before starting my new job at a new Shop, and I've had lots of time to catch up on shows on Netflix. One of my all-time favorites is certainly Lie to Me.

The acting, the writing, and the mere premise of the show is absolutely some of the best work I've seen in years. I mean it's on par with the best TV I've ever seen. That it only lasted a few seasons is sad, but predictable.

Great shows that appeal to me often don't last. There's not enough mes in the world to keep them going.

Happy Birthday to Me!

December 31st, 2014

Cake.jpg

Well... it's that time of year again, and I'm going to spend it quietly at home. Tomorrow I'm traveling to Indy to spend some time with my siblings as we're all gathering at my brother's place. It should be a lot of fun - it always is, and the food will be great, and my family makes me feel "normal".

Another year on the horizon, and in many ways, it'll be a lot better than the last, but there's so much pain in the future, I hesitate to think about it. Just take 5 mins at a time, and don't think too far into the future.

Marco Polo on Netflix is Excellent

December 23rd, 2014

TV.jpg

I'm on a little break, and I am watching the Netflix Original Marco Polo, and it's an excellent show. I'm a sucker for historical dramas, as I love to understand why and what were the causes for the turns and decisions in history. The writing is very good, and the acting and sets are just amazing. Well worth watching, if you have the time.

Touched by a Good-Bye

December 19th, 2014

Great News

I would not have thought it, but just now a co-worker came by to say they were going to really miss working with me. She was brought to tears. I was shocked. When I asked why, she said she came to work at Groupon because of our interview, and it really stuck out to her the passion and commitment. She wanted to do that.

I remember that interview, and I wanted that too. She could be really great. But she let management push her around, and that was a mistake. She's young, and there will be more times to work together.

It's surprising to me how we touch each other's lives without knowing it. I thought I was just a pain to the group - at least in a large part, but I wasn't - not to her. And she was touched enough to express it.

I have had a good run here. Learned ruby, clojure, a lot of good things, and I've clearly touched at least two people here. That's a good run. I have nothing to complain about.