Showing posts with label code. Show all posts
Showing posts with label code. Show all posts

Sunday, February 03, 2019

I'm tired of typing month/day/year once a month...

Quick code for listing month/day/year in Python.  I believe [0] is the first weekday of the month.  Weird little function/library.  There are a lot of variations to play with: https://docs.python.org/2/library/calendar.html

import datetime, calendar
year = 2019
month = 1
num_days = calendar.monthrange(year, month)[1]
for i in range(1,num_days+1):
    print(str(month) + "/" + str(i) + "/" + str(year) + ": ")

Acceptance criteria failure! My numbers are first to last, I want last to first.  So the range gets modified.

import datetime, calendar
year = 2019
month = 2
num_days = calendar.monthrange(year, month)[1]
for i in range(num_days, 0, -1):
    print(str(month) + "/" + str(i) + "/" + str(year) + ": ")

Thursday, July 13, 2017

Kodu

Teaching Kodu at work last month.  This app would not work on my work machine no matter what I tried.  Eventually had to load it up on the machine at home.  Fun to play with - easy to create and code Minecraft-like environments.  But very twitchy based on the machine after reading some similar online comments.

The kids had fun - we had their machines preloaded.


Tuesday, July 11, 2017

To Read Today

A few things I've read recently...

A Search Engine for Programming Language Syntax Is a Pretty Good Idea

https://motherboard.vice.com/en_us/article/4xam5d/a-search-engine-for-programming-language-syntax-is-a-pretty-good-idea
Not as interesting as I'd hoped.  A comparison of Googling to code versus yet another code-specific search engine (SyntaxDB).  Conclusion: Google works pretty well.


Introduction to Neural Networks

https://medium.com/binary-maths/introduction-to-neural-networks-ead8ec1dc4dd
Neurons, sigmoid functions, and image cleaning.  Not as good as some things I've read and a little heavy on the math if you're not from that side of things.  Real examples, however.  I like the Tensorflow cat and purse example found elsewhere better - you can really see the layering of work in the API.


The Real Threat of Artificial Intelligence

https://www.nytimes.com/2017/06/24/opinion/sunday/artificial-intelligence-economic-inequality.html
Comes to the same conclusions as an earlier article I read.  Jobs that involve servicing each other are going to become highly important as computers eliminate other jobs.  E.g. social welfare jobs.  Touches on minimal income, the have and have-not gap, and other aspects that are common between AI impact writing at the moment.  I was intrigued by the topic of AI-driven colonialism.  That's sort of crazy and almost dystopic in idea; that countries without the income or population to create self-sustaining AI-driven economies might need to sell themselves, almost like a country-sized asset, to patrons like the US or China. You can squint and see the utopic version of that where countries without good assets gain minimal living standards and participate in a global service (each other) economy.  You can not squint and see where it might go down a morlocks slash 1984-population as an asset slash neo-english-virtual-colonialism-two-superpower dystopic path.  Interesting times.


Starting With Blockchain Chaincode Using Golang

https://dzone.com/articles/starting-with-blockchain-chaincode-using-golang
I want to try this one with the examples because it looks pretty straight forward, but I'm going to do the Pluralsight class instead.


The ultimate 3500-word guide in plain English to understand Blockchain

https://www.linkedin.com/pulse/blockchain-absolute-beginners-mohit-mamoria
Absolutely excellent article.  He does a great job of explaining blockchain for n00bs.  I'm going to use this and the Pluralsight class to create a presentation for my team.

Sunday, February 26, 2017

Facebook Data Extension

My browser of preference is Chrome, so this extension caught my eye.  I'm not sure what I could do with the information, but it seems interesting to track it even if they're using alternate algorithms and it's PIT (point in time) of install, not retroactive.  So there's no way to really track what you've already told them.  And there's code!  For some reason the idea that there's something particularly useful that could be done with the fact I can get to the source code is bouncing around in my head.  And let's not say that the useful idea is installing a stealth version on corporate computers to track overall corporate culture tendencies (you can obviously track time on Facebook via the corporate logs).  I can see a good and a bad path having that data - start to push your culture toward a new culture (top down "I want this") or recognize the corporate culture you attract and double down.  Then again - you'd have to have a separate (or modified) add-in to track other social media platforms.

I work with a lot of lawyers and they're big on capturing billable data.  I wonder at what point someone decides "we should capture everything" to examine potential for billable work through other services as well as innate biases in lawfirm partners by examining total web activity.  They often want to capture email and text data (although text data is notoriously insecure), so web activity isn't such a big hop.



Tuesday, January 31, 2017

Data Science Essentials in Python

I was looking for a programming book my daughter and I could work on together, so we're going to tackle the one I got in 2016 that I had to forgo in March when things started to fall apart: Dmitry Zinoviev's Data Science Essentials in Python published by Pragmatic Programmer.  I made it through a few of the use cases and I think it will be a good book for daddy/daughter coding time.  Not to mention I can piggy back off some of it for Python for kids revamping for next summer which I just haven't found time to rewrite although it desperately needs it to make it more hands on, even though the focus is Python + Turtle so there's graphical feedback.

It's strange, but there are no reviews on Amazon.  I made it through the first few chapters Q1 2016 and I remember it being basic, but beyond simple Python, and the examples required quite a bit of thinking and independent research (parsers, etc), making it a great little textbook.  I'm hoping it'll spur some conversation while we code because that's really what most (collaborative) coding is about in my experience.  Yesterday, "What is Data Science."  Today, "Hello ."


Thursday, May 31, 2012

Secret Santa

I was amused to see a Secret Santa app out on The Code Project: Drawing Names (A Christmas Name Drawing Application by ZachCox).  I too have a Secret Santa program.  But it's in VB.  Not VB.NET.  But actual VB - I wrote it in...checking...November 2000.  I've never brought myself to update it to a new language because it works fine in VB and I never felt like updating the code to handle the new style of dynamically creating controls which worked really well with control arrays in the old VB COM world so you could easily add new rows to the UI.

The programs look suspiciously alike.  Mine worries about who your spouse is as well.  And it worries about who you had last year and avoids duplicating your match up two years in a row.  It also relies on an XML configuration file (savable year to year).  And it mails a notice to every participant (via Outlook, I was lazy).  But it doesn't have nearly as much code as ZachCox's - I think 20% of my code is loading the XML and 20% is testing code, and 30% is the automated VB form code.  The primary code file is all of 19K.  The compiled app is 32K.  The most important bit of code in my opinion is the following...

     Do Until indivSecond <> indivFirst 
          If iTrys > UBound(people2(), 2) + 50 Then . . .

Yep, bit of hardcoding.  Basically, if it gets through the whole list, and is on the last match, and it just can't make it work after 50 tries plus the size of the list, it scraps everything and starts over from scratch.  So it can run for a very long time if it has to start over repeatedly, or you set it up to fail by making someone the spouse of everyone.  But in thirteen years of running it, sometimes repeatedly for testing purposes, it's never taken more than  a few minutes to run my whole family plus any guest family attending Christmas that year.  In this case, brute force of the logic works like a charm.

That said, every year I ponder rewriting it in C# and perhaps making it so people can log in and create lists.  And every year I realize it's the holidays and I'd rather go Christmas shopping, visit Christmas displays, and do anything else.  Just more proof that I'm a very utilitarian coder who uses  code solely to solve his own problems.

Saturday, March 26, 2011

It's been too long...

It's been long enough since I really dug into code - other than the bad-touch Java molestation I engage in to strip out guids and xml from corporate apis - that it's taking me some effort to relearn some of the simple things I used to take for granted when I thought like a programmer all the time.  For example...don't f*** around trying to make sense of the stupid PHP under Joomla MVC file structure when locating the style name in the css or any old php file, and then doing a text search, will work just as well (a Ransack search - Windows 7 searching gives me a headache - what the hell were they thinking that I have to "turn on" full text searching for PHP files - they're text!).  Remember that sometimes it's necessary to reverse and put a ! (not) in front of you assertion, or reverse the logic completely so that instead of putting a style on something, you're taking it away (which might be significantly easier than trying to get the cssText() addition correct).  And sometimes it's best just to walk away and rethink the whole problem until your brain ticks over and says "you have an id on all the other elements when they're active.  the issue is this element doesn't get the id initially due to some oversight in the way the software works.  just grab the stupid first child selector you've been playing with for hours and apply the id directly to it if it's missing."  Duh.  I know if you don't code, that might sound complicated, but it's so simple it screams, "you've been away too long."

I am glad I came home to take care of it rather than sitting at the Black Dog cafe in St. Paul all day.  I bumped into one of our R&D scientists there and he asked what language I was working on  - I'm glad he went off to the farmers' market instead of looking over my shoulder.

And don't get me started on how much simple C# I've forgotten now that I'm giving Eryn a few lessons.  I was embarrassed I was even thinking about doing a pop up instead of routing to the output textbox, and that was much less embarrassing than forgetting how to appropriately use TryParse() to check values before we routed them through our prototype calculator/concatenater.  But Eryn is happy.  She definitely understands how the concatenation of strings is different than the concatenation of ints and why we check first if we want to change the behavior based on the type of data we input. We're going to play around with expanding our calculator next, and then adding some logging to it so we can keep our results (and no, I don't completely remember how to write something to disk via .NET, but I'll find it).

Monday, September 28, 2009

Incorrect Coding!

Cloudy with a Chance of Meatballs lost my sense of belief as soon as they incremented the variable for toast, but placed it behind a // comment, and yet it still rained toast.

Monday, October 13, 2008

Codecamp V

On Saturday, I went to Twin Cities Code Camp V. I know, strictly speaking I'm not a developer anymore, I manage them instead, but it's important to me to keep up on the latest technology, even more so than it was in my last job, and I taught myself a bit of constructive Java programming in that role (I got a thank you for the code I wrote that cut out three hours of resetting training materials each time there was a new training class - that's success as far as I'm concerned).

The first presentation I went to (with Erik and Bhavin, I met up with them there. Erik and I had breakfast at the Original Pancake House first) was "Software Evolution: Inversion and Injection". I came away with the following important bits:
  • Think of a delegate as a single method interface.
  • Injection is the loss of control. Don't get too uptight about loss of control.
  • Injection/Inversion and the Provider Model are not that far apart.
  • There are several good injection/inversion packages, and if you're playing with them in this order, it takes you this long (approximately, depending on your state of mind): Unity (MS) - 3 days, StructureMap - 1 day, Spring.Net - a long morning, Castle Windsor - 2 hours.
  • Faced with an abstract class vs. an interface, abstract classes are sometimes more helpful because those "in the know" can use the implementation you set up (I have experience with this trying to build a provider model with implementation behind bits of it)
  • Filearchy is a funny word
  • Sometimes just squint at your code and try to think, while I'm squinting, what's the minimum I need to know (e.g. my code needs to know)
  • Some objects have a transient lifestyle - this conjures funny images of classes with hobo sticks thrown over their shoulders
Next I went to "Advanced OO Laws & Principles with .NET" by Clint Edmonson. A high level, although very interesting presentation on what developers keep in their programmatic toolbox.

Tuesday, September 16, 2008

Postpourri - politics, software, etc

Did you know that in the town of V.F.D., "Rule #4,561 clearly states that citizens are not allowed to use their mouths for recreation"? They mean biting!

Politics:

Software and Software Managers:

Other:

Friday, July 11, 2008

IsHit

Yesterday, I came within moments of sending a partner an email explaining that the new property they should request on an existing API was to give each object an .IsHit property. Because .IsHit would tell them whether the object itself had been the result of a search, or the object's children. There could still be a collection associated with the object to show which children were hit, and it could include itself in that list, but even then, an .IsHit property would be convenient. But fortunately, I like to proofread, and quickly changed all of them to .HasData.

Saturday, January 26, 2008

MBA-Lite

I've been working lately on trying to pull together some MBA-like skills. Specifically, I have an urge to be a technical manager, at least somewhere down the line, after I finish up my new position working with the Japanese affiliate (for which I traded the Hong Kong affiliate and Australia/New Zealand affiliates. Don't assume it's a bad trade - Australia/New Zealand is currently a zero hour project, and Hong Kong not much more. Japan is high profile and 30-40% of my work week, and I support around ten-twelve projects, so it's big) and covering for a coworker who's leaving on maternity leave, doing her inhouse (and outhouse) training. Toward that end I've been looking at MBA programs in the Twin Cities. I had already been to the Carlson School of Management orientation, which seemed very reminiscent of my years at the U of MN. Recently, I went to the new MBA program at Hamline orientation. Their program is just getting off the ground and is the baby of a single, motivated man, "Poppa Bob". When Poppa Bob mentioned that his wife works in skin over at the U of MN (complexion skin, not pornography studies), I asked my mother if she knew him. She replied, "Talkative, kind of quirky Ukranian?" Yep. Spot on. But I'm not going to do that program either. Primarily because school just does not appeal to me, even with 80% coverage by my employer. It particularly doesn't appeal to me as a means to promotion.

I'll clarify that last point and do a bit of self-promotion by stating my belief that I'm already promotion worthy. I have good tech skills, an understanding of my field (tech, otherwise), an ongoing interest in my field, and what seem to be solid interpersonal habits (despite being a bit forward/confrontational at times - but that's a skill). I've had direct reports - seven at one time - done raises, done reviews, complained about the review skills of others, and run a project as both tech lead and team lead, on more than one occassion. My new position has been important to me as I picked it precisely because it would put me in front of aspects/groups in the company I did not previously interact with (the main product line, international groups, enterprise layers) and in front of job types I didn't previously interact extensively with: managers, directors, architects, project managers, business analysts, content experts. Given that I've spent an inordinate amount of time making sure I have experience (if not an understanding of) with all aspects of the company, if I don't feel like going back to school is the right decision, at least on a viceral level, why do it?

Ming said that you do it to meet people, particularly other MBAs - the people you forge connections with so that you can garner best practices (he didn't phrase it exactly that way - but he meant it). I asked him if he felt the other people in the room with us at Hamline were the sort of MBAs he wanted to meet and with whom he wanted to form lifelong professional friendships. He sheepishly admitted they were not.

So, in the interest of being able to talk and think like management, and in the interest of acquiring all the skills of a manager, even if I know that not all of them in my company have been through professional training (like an MBA/etc), I've decided to embark upon a self-directed study course, courtesy of The Personal MBA and a few add ons I feel are important, like a firm grounding in Agile and alternatives (yes...alternatives), tech, offshoring, ITIL, and whatever I find on the shelves of Directors and VPs. In order for me to retain something of what I learn out that huge mass of books (must read accounting, must read accounting), I'm going to be posting a few reviews now and then to help me clarify what I've been reading, relate it back to the other books I've read, and provide my insights for one or two others at my company who are pondering a similar course. Mac, already MBA-ed, and apparently in agreement about my decision not to use an MBA as a way to a promotion, can also chime in and correct my erroneous assumptions.

By the way, Mac. I am incredibly jealous that you're even hinting at getting published. I have a great big notebook full of about 50 short stories and 6 book ideas from the past year. You have inspired me to do something about those ideas other than leave them stubbed out for posterity.

Onward...the plan. I'll review a few of the books, generally in twos and threes so I can draw parallels. But I'm going to add the odd quote broken out here and there, not to draw attention to a particularly pithy observation, but to point out something I think is stupid or humorous. If you feel you're an expert on something business related, then at some point during your observations, you're going to say something horrible. It's just a given. I feel that you can't self-educate without maintaining your sense of humor - you've got to be watching for the surreal so that you're not taking everything you read too seriously.




"If I had learned what your book taught me sooner, I wouldn't be stuck inside
these walls today." - from an women's correctional facility inmate.

The first two books I read were self-discovery books, courtesy of the inter-library loan program. That means, I couldn't take the tests, because the goal is to make everyone buy a book and take the test. But I found that to be helpful. I really had to focus on how I felt about dropping myself into various personality buckets. The Personality Code focused on DISC, a yes/no examination of whether you were Dominant or Steady, and Interpersonal or Conscientious. The goal is to determine if your focus is on people or tasks, and active or reactive. Your preferences drop you into one of fourteen categories which are then expounded upon, for their own merits, as well as for how they interact with their anti-type. I have issues with a book that posits there are four dimensions to personality in the beginning, and then self-references within the rest of the book as though the original hypothesis is fact. Particularly given that Bradberry admits there are 123,000 possible configurations (p. 151) and he narrows it down to fourteen broad types. It doesn't seem like the issue is pinpointing your personality, but putting yourself in a generalized bucket so that you know how to react consistently in a situation, and given a particular type of foil. There's this unwritten (in the book) idea that leadership isn't bucketing yourself or others, but brushing yourself with broad strokes so that your reactions can be interpreted correctly and consistently, by you and by others. I find some value in that idea. If your motives and actions aren't transparent to subordinates and management, no matter how valid or altruistic, that can be an issue.



"Never threaten this person unless you are 100% ready to follow through." -
Strengthsfinder 2.0, p. 64

I found the appendix to The Personality Code to be much more interesting. It spelled out 26 emotional quotient (EQ) values and provided some research and ranking behind them. These are the things that, unlike basic personality traits, you can learn, change, and improve. Self-awareness, self-managment, social awareness, relationship management, credibility, courage, et al. Strengthsfinder 2.0 tackled these same EQ values, but with different names. I found less value in trying to peg myself to any one, or more, bucket (I believe I'm ideation, input or intellection, and responsbility, coupled with opportunist/expert) than in considering the themes and the value in recognizing all the EQ themes are abilities you should be able to access in an appropriate context. Which means, in the end, I walk away with, in addition to an annoyance about the focus on Rudy in Strengthsfinder 2.0, a very limited list of items that I feel were essential and common to both books:

1.) Know yourself. Know yourself well enough to act consistently and transparently.
2.) Know the personal and emotional tools at your disposal well enough to apply them situationally.

That last one. I think it almost spelled the end of a manager I know. That manager focused on the hard manager skills (tech, etc) to the exclusion of the people who were implementing the project. The rats-abandoning-the-ship that followed (not an accurate metaphor - perhaps, rats discovering nearby cheese with fewer traps is more accurate?) nearly shut that manager down.
"...cradle to cubicle..." - Strengthsfinder 2.0 (seriously, is there a more
horrifying phrase?)

Whoof. Were you expecting that much typing? I'm going to go one step further. Between these two books, my recent MBTI course, and a pile of developer/agile reading lately, I've been pondering a particular correspondence. Given Clay Shirkey's discussion about developers, software, and Bion, I wouldn't be the first to draw connections between psychology and software. What I've been pondering is whether what's considered great about agile development might not just be personality in the macro. What? I'll step back. I don't consider anything I've read about personality, or any class I've taken, to be useful in picking a team. You pick a team by interviewing and hiring good programmers and getting to know the people you hired and how to smooth out the bumps in making them work well together. Sounds like personality, but it's not an issue of looking at fourteen types and three dozen EQ themes. It's an issue of looking at all 123,000 possible permutations. Microanalyzing is no good. You have to look at MBTI in the large, situational leadership, and within your own judgement to create a matrix...a matrix that's no good unless you talk to your team and understand each of them as individual people (or hiring someone who's capable of fulfilling that role for you).

But in the macro, in a Hari Seldon fashion, I think there's something to be gained. Posit your business unit as a person. Posit your development group, as a whole, as a person. Developers seem to be intuitive rather than sensing. While it might seem like they should be sense-centric, all the facts ma'am, tell me all the discrete steps, I find that better developers, exactly the kind agile says are necessary for their process, are more intuition. They're focused on patterns, the future, and a big picture. They read books about patterns and objects and consider grandiose new ways to work with, and present data. A business unit, on the other hand, while professing to be about the big picture, is very sense-focused when scoped at a project level. Developer assurances about a new technology: css, themes, AJAX, agile itself, silverlight/flex - those don't mean much. It's too much. But a concrete, touchable, clickable prototype. That's gold. Those are the trees in the forest. And if you look at the groups that way, agile seems to be solidly entrenched in MBTI and information processing. We (and here I set myself as a developer, although the start of this post noted I want to be the business unit/management) get to tell stories. We pander to what could be and revel in inspiration. Inspiration. No one tells an agile story with an unhappy ending. That's fucked. It's not done. If you can't see the utopia at the end of your code: the Shangri-la or Keanu-resolved matrix - if you can't revel in the inspiration you feel your sprints and spikes will force upon people who don't even understand the underlying code - if you can't throw away that nasty technical documentation becuase it only fits one personality type, not the other thirteen, and certainly not your business unit - if you can't give your business unit the sensual information that best first their perceptual preference - than what the hell are you coding for. They're not the storytellers. You are. They're the readers. Real developers, agile developers, focus on what could be, and their business unit focuses on the touch and the taste. If they can touch it, sense it, feel it, then they can have a reaction to it and explain that reaction to the developers. A mutual need is fulfilled. And that's the focus of almost every personality exploration out there. At some point you and your foil have to meet on common ground. In the micro, that's a matter of two people talking it out, because there are so many personality points to consider. In the macro...in the macro maybe you can make some assumptions.

Tuesday, January 22, 2008

Code Freeze '08

Last Thursday I went to Code Freeze '08, put on by the University of Minnesota Software Engineering Center. I bumped into Luke Francl. It was good to put a handshake and face to someone I've chatted with on blog and in email now and then.

The conference was very good, focusing on innovation and software development. A much stronger offering than the presentations on off shoring last year. Does anyone really like to talk about off shoring who isn't making their living managing some part of it, or making a living talking about off shoring? The question I put forward to the panel this year addressed both conferences. I was interested in how this panel of experts perceived the intersection of innovation and off shoring, about which Joel Spolsky has offered a word or two. If I could have clarified, I would have explained that I was primarily interested in the separation of innovation from development - whether there are consequences to off shoring that might include accidentally off shoring your innovation.

As an example - there is a group at work that has a project that isn't a revenue generator. So all coding for that project was off shored, leaving just a PM-style individual onshore to oversee details and, presumably, innovation. In the past, the project self-innovated. New ideas came from both customers and from developers, and met in the middle, finding creative technological solutions for customer needs. The requests for innovation since off shoring have moved outward on the onshore side, diffusing onto the customers and several internal groups, and away from the application. The application seems to be suffering an innovation drought as a result.

So, obviously I have my own opinion, and I was interested in this aspect of innovation, not information about co-location of company employees as an innovation hurdle. Thinglestad (I think it was him) might have almost answered what I was after, he was on the edge as he began to address offshore firms that are involved in agile, end-to-end, solutions and how these firms are arising where before there were only code shops to service big companies, but I don't think he went far enough. Offshore for maintenance is dangerous only insofar as a big company employs fewer innovators. Off shoring of the latter sort (to agile teams) means your company is paying others to innovate for you, and they may decide to keep the more nebulous and ethereal innovations and practices they create to themselves. I was hoping someone could speak to the reality of that concern.

Some other ideas I think were interesting I gleaned from the conference:

Where is my company's version of the Fellow? The researcher who goes around to conferences speaking, evangelizing, and disseminating best practices so they can be improved upon and come back in new patterns from local developers. Where are the lifelong learners who move from group to group, generate relationships with other corporations, and generate buzz in the community that makes developers want to work on our teams? It's not the architects in my company. They're primarily focused on individual projects, although they often bring new technologies to the table, and those projects can be targeted at general infrastructure. But our architects don't turn around and evangelize our use of products and practices to the world. At least not in any venue to which I've been witness. I've only heard of two people from our company speaking at local technical conferences and, in one case, the individual had some serious restrictions placed on their ability to show off practice and code. In the other case, I knew about it because the SAS presentation happened to be in front of my brother. Our combination of (Chief/Principal) Architect/VP might come closest to a Fellow, but even in that case, I've never seen one speak at a local conference, or seen one quoted in the news, about ways our company is innovating.

I think Thinglestad's statement that process is an innovation killer and, as a result, you should audit yourself (as a project and company) was accurate and concise. In my company there are areas where you can see the scale of process and innovation tipping this way or that as they're separated from each other, process being driven as something in and of itself, without relation to real practices.

The Google policy of giving developers 20% of their time for innovation came up many times, and there were numerous comments about how nice that must be. I've always thought we had some of that where I work - it's just not acknowledged. You have to claim it. I'd say "hide it", but that's not exactly true. If you come right out and tell our company, "I need a certain amount of time to innovate. Call it administrative time, call it overhead, call it whatever," you'll probably get it. It's easier not to mention you're doing it and bury the time, but if you're a Boy Scout, I think they'd oblige. Maybe I'm wearing rose-tinted glasses. Maybe it only seems that way if you're a Lead Software Developer. Maybe it's only not-scary if you're comfortable that what you develop, and your use of live/production resources, is not accusation and risk free (like it is at Google). But if you can wrap yourself around those risks, you can find the time to create.

One of the attendees at the conference from my company noted over lunch that they really wanted to work on "something more interesting." This was a bright, working-on-a-Master's-in-Comp-Sci at the University of Minnesota, programmer. I've heard that before at our company, and it always surprises me. Erik and I were talking about it and I said that when I was a lead, I always had a list, and I'd just say, "Here, pick something. Anything. Work it into a new feature. Work it into an old feature. Work on a reporting system and put it in there. I'll find you a few hours a week to do it. Keep busy, keep engaged, keep happy. When you have something, we're going to look at how we can weave it into the whole system and give it to other interested groups." I think what this programmer at lunch was saying is really that she wants to work on something interesting that matters to the company. It all matters. But it doesn't all matter equally, otherwise there wouldn't be all that talk about line of sight. You get line of sight tossed at you enough times, and you know someone's drawing a line between what matters (at least this year) and what doesn't. And it's natural that now and then people want a nudge in a direction that gives them the confidence to know that what they're doing, even if it's incredibly exciting, is also useful in a way that will be appreciated for something other than mere aesthetics.

I think that's one of the reasons Google's 20% really matters. Innovation as a pure value matters at Google. Innovation is intrinsic. You don't have to work at imbuing it with an extra layer of meaning, and then work at verifying and validating that meaning with the corporate hierarchy to get personal value of your work. I'm jealous of that part of their culture. I really think everyone needs a few hours a week to innovate if they want them. 10-20% across the board - developers, architects, content, help desk. Real time to generate new ideas and do initial work on them rather than hoping that employees will come up with an epiphany on the job and dump it in some ideation system that draws a line between the initiator and the product. Static ideation systems are good for capturing the odd snippet. So are Notepad and Outlook. But they're for shit when you want to create a living, breathing, recursive innovation system. That system has to extend beyond the software.

Thursday, December 20, 2007

One Year Sans Development

It's been one year since I quit being a developer to become something that more closely resembles a cross between help desk for content folk and project managers and a product trainer. I think my job now comes closest to looking like the guy the sales person hauls along to do all the technical presentation bits and question answering, but without the sales person, as I'm catering to internal products. It's a lot more interesting and difficult than it sounds, and it took about a year to really ramp up and be able to streamline work for the products I work with so that there are few hitches when they're trying to get a product to market.

I was thinking about my career history from the last year today, because today I had a course in HR for Management which was a hold over from my time as a SOX-compliant-with-direct-reports lead, and because today I wrote (and delivered) an email to several of my superiors explaining why I didn't want a position that was available for which I am a perfect fit (and they know I'm a perfect fit). That email was the direct result of my job quest a year before when I was told by a superior (a much higher superior) that I wasn't considered good promotion material because I hadn't applied for a particular job that would have been a promotion and for which I was well-suited. I pointed out that I knew that job had already been tagged as one that absolutely would not be given to someone within the department, and that I'd applied for, and made it into interviews (of which only two were given and I made a good impression), for a similar position in another department. The response was that I should have applied anyway so that my desire for advancement and enthusiasm for my work were evident and that they didn't know about the other application. Which was an eye-opener. I assumed my drive and ambitions were obvious, given the 60 and 80 hour weeks I had invested in my previous project as a tech and team lead and my roles on my current project filling both tech and team lead with seven direct reports, until a new tech lead could be groomed. And thus, my first deep dive into company politics was incredibly painful. Extremely painful given that another position I was excited about turned out to be working with my current group. I literally left the office of the person I talked to [you might know who you are - you and I have talked since then, and you might remember how you pseudo-interviewed me, and then I just never came back], walked downstairs to get code samples because I was excited about what was going to be developed, only to be intercepted by my manager, who was also excited - about the new project we'd be working with - that project. Within a week, I was running reports against our systems to determine integration points between the systems and product viability. F00k! (I'm going to claim that's the opposite of W00t!). That left two other options, and one of those took me through four interviews for a team lead until they rehired the person who had left and whose job I was after. The person who had left just wanted a telecommuting clause. You can't compete with that. They obviously know the job better than you do.

That's not to say I settled on my current job. I picked it out of many that were available. It's just that those other jobs I didn't apply for weren't options at all as far as I was concerned for various reasons. Although since then, I've met some of the people I was avoiding because of whom they associated with, and we've become friends and productive coworkers. That's good - it makes me feel better about why I left my old position.

So, I popped back in my notes to see what it was I was concerned about and working on a year ago when I left my old job and was immersed with being a developer. Specifically, a .NET developer on an e-learning platform. I'm fascinated with what mattered to me a year ago that currently plays no part at all in my day-to-day job. I'm not sure what I'd be dealing with now if I was still there, but I don't think it would be significantly different, except for playing around with Silverlight, Ruby and Python, which I do now for fun instead of for profit. So here you go - the 70% to-do list of an ex-.NET developer (I had a lot of other things not on this list that related to being a team lead and to day-to-day coding/storyboard considerations):
  • LINQ - any use to us?
  • BOINC/Peer2Peer - BOINC examined for some reporting tools. P2P prototype designed for the web farm to make file delivery more efficient as files are replicated across many servers rather than a single file server or NAS [1 year later note: just joked to Mean Mr. Mustard about BOINC today - played around with Silverlight and Visual Studio 2008 and a Ruby tutorial that all make P2P much easier].
  • Large XML document rendering and disposal. Look at document-to-XML translation and rendering issues (talked to parent corporation - they have an expert [eventually missed his Twin Cities presentation while tooling up for new position]).
  • Custom search engine owned by another internal group - integration with our product. Watching for integration possibilities [they eventually contacted us rather than us contacting them - see previous note tagged with F00k!].
  • Provider model for all base level objects to disconnect from proprietary database coupling in anticipation of new database or coding language if necessary - prototypes complete with unit tests and NANT builds. Prototype eliminated several levels of C and VB code and was a magnitude faster in unit tests.
  • .NET 3.0 - looking at XAML and Workflow (declarative languages) vs. current code-behind model and how to integrate new technologies into a problematic registration system that could be simplified with a rules engine.
  • Rules engine - rolling our own - some prototyping done based on books, Biztalk, existing rules engines research with other business units/subsidiaries.
  • A workflow for registration (transactional + compensations) - some prototyping done using Biztalk 2004. Seriously complicated - links to numerous external systems and undo (compensation) logic for those systems.
  • Redesign of the permission system for a finer granularity and inclusion/exclusion modeling - viable model created [postscript - which ended up looking almost exactly like a middle tier model we use in my new area that's shared internationally as a middleware API].
  • AJAX.NET - prototyping done to test several UI features.
  • Positional/XHTML rewrite of some content to follow standards, eliminate tabling HTML, and optimize for CSS and templating - prototyped and integrated into a beta feature released to production and end users.
  • XML/XSL rewrite of some content - prototyped and integrated into a beta feature released to production and end users. Prototype designed to validate usability of an AJAX-capable menu using web-serviced menu structures that could integrate third-party providers.
  • Templating prototype for Blogger/portal-style user-controlled templating of personal web areas prevalent in application.
  • Social networking + e-learning specification begun to bring together disparate parts of the site that might benefit from having a coordinated theory to bring users together, provide personalization, and provide socialization based on results of FECS studies.
  • Big list of possible features to distinguish discussion board from similar products. Prototype of new code designed but never demo-ed.
  • So you want to be a...level above your current level workbook for various development positions within my department. Step-by-step guide to moving up as far as team/tech lead, even if at the expense of others in the department. Completely outlined.
  • Several certification options examined. Discussed with parent company who used some of the ideas.
  • Open Source examination to look at Cruise Control.NET for integrated builds and various products for persistence frameworking - virtual machines created to host various integrated build tools for evaluation, as well as one for Spring.NET and numerous persistence framework tools. Project code ported to persistence framework tools in half a dozen cases to validate application to site and best fit analysis.
  • SQL 2005 queueing/service broker (SQL callback) - development of usable prototype requested (and completed) by outgoing developer. Several new SQL 2005 features prototyped to optimized queries.
  • RSS feed engine - requested (and completed) by outgoing developer.
  • Reporting Services - expansion of reports. Spec for a dozen more reports to mimic a heartbeat application to monitor intrusion/injection detection, file loading, and numerous web aspects - reports written and tested in beta. Additional reports generated to provide business unit-specific projections.
  • Chat tools analyzed to determine max throughput, initial development mis-steps, proposed changes to handle increased load. Analysis completed and resolution of several persistent issues and optimizations documented.
  • Further research on podcasting [prototype and developer spec fairly old at that point - originally discussed over happy hour beer immediately after Wired March 2005 article - working prototype and aspect-oriented tagging theory completed within two months] and expanded syndication methods (Atom, et al) - several beta-ed and available for release.
  • Examination of REST to create web methods usable by several hundred semi-corporate customers - prototypes completed [cut back to individual who I didn't work for because you were going to be handholding with my old group - this is when you first met me, in line, at Caribou, talking to my sharpest developer about REST-related coding and microformats].
  • Use of Log Parser to cut log reporting latency for users and business reporting from 24 hours to the sub-five minute mark and to cut out extraneous processing of logs for corporate purposes - prototype completed and optimized for sub-minute execution. Parameterized to generate numerous rollups. Extended to handle numerous other logs in the system, including XML files generated by logging tools, logs generated by other corporate systems, and web path data for individual signons [I just recommended Log Parser 2.2 to a group about a month ago to resolve some issues they couldn't solve with an internal DBA group. It took their developer less than an hour to implement a solution that had already taken several hours of email discussions for a report that was considered unreproducible by DBA].
  • Wiki-on-the-site spec and proposal - initial wiki code with custom features for our product modeled in various implementations and various stages of completion.
  • Research into using several new corporate systems as short cuts for development and extensions of existing functionality - several being watched and a spec for the integration of one started [it's being looked at this year - I know because I work with it].
  • Spec to create a corporate presence with guests and experts on the site - idea forwarded, code base part of wiki/syndication initiatives.
Wow. Those were just items from a list in my notebook - not the nuts and bolts issues that were in my Important workbook and Semi-Important workbook with individual sheets for each developer, a sheet for non-specific-developer initiatives/work, a sheet for yearly cyclic work [which I was keeping to decrease cyclic work - and which was achieving that result], a sheet for developer-targeted features and optimizations, or the team-lead work on SOX, compensation, and hiring to replace two outgoing developers (including the one I thought would take over as tech lead), an outgoing team lead, and eventually myself as tech lead.

On a positive note, I find myself much more relaxed. I code for fun, although not generally admitting it for fear that Mean Mr. Mustard might want me to help with his CDFFL project, spending any overage hours helping internal groups I've worked with in the past turn my old projects into enterprise-wide applications that no longer need my expertise, or templating those old projects for use by new groups that need similar functionality, or else reading books on programming that in the past I would have read on family time. Hands on is always the best way to learn, and I see the small slips when I talk to my developer friends sometimes - but looking back, it was the right choice, despite a small decrease in career velocity.

Tuesday, September 11, 2007

Working Hard

Yesterday, in my new cube without the pole, I found myself staring at the clouds, lost in contemplation of one that looked like a scotty dog, and another that looked like the world's largest crayfish.

On a more productive note, Scott Hanselman has blogged his 2007 list of developer tools and power tools. I've used quite a few of them - but there's always something new and unexpected.

I can't go because I'll be driving my grandmother to Tucson, but Minnedemo 3 is October 11 at O'Gara's (via Luke Francl). Two free beers for the first 200 attendees. So far they're up to about 75.

Grady Booch is talking about "The Promise, The Limits, and the Beauty of Software" on September 26th, 12:45-2:30, at the U of MN. If you're at that one - say "howdy". A big thanks to Ming for telling me about Grady's talk. Grady blogs here, and at Booch.com (the blog is mirrored).

Tuesday, May 15, 2007

Postpourri

I've been sitting on a few links and bits I've enjoyed lately:

Almost a month old, but MNSpeak asked readers about where they like to shop for bikes. The comments have their responses. Freewheel is on there a few times. My service there has been excellent.

I was talking to coworkers about the conference bike just a few days ago because there was a discussion about whether my group should go on a local Segway ride (Velocipete). I was also talking about the space elevator ad I saw where they say the trip takes three months, so it's the elevator music that kills you (not the meteors). That came up because were getting elevator music over our conference/polycom phone. There were two architects debating how a space elevator works and how much energy is required, and what you need to keep the other end up. A much more fruitful discussion than the non-PC debate about what kind of icons to put next to country-specific rating systems.

Luke Francl has a link to a great visual description of how to understand joins. It's not great because it's completely correct for all versions of SQL, it's great because the author tried to explain it in an easy to digest way and the resulting commentary is all over the place. Which explains why you can work with databases forever and still be lost. Good SQL writing skills are extremely difficult to find.

Surly Brewing and Pumphouse Creamery are pimping Surly ice cream. I may have to make a special trip. "Just in time for the hot weather, Surly beer now available in ice cream form. Pumphouse Creamery, located at 4754 Chicago Ave S, is making ice cream with Furious beer. Barb, owner of Pumphouse, says she made ice cream with both bender and furious and customers really loved the furious ice cream. She says that the hops really come out in the ice cream. Yum!"

And finally, Dunn Brothers sent me a kebab recipe using their Costa Rica coffee. I'm going to guess they have no problem with me spreading the recipe, as it encourages everyone to buy lots of their coffee. These sound way better than the Heath Bar Cooler I had from Caribou today which almost made me ill. That's just too much damn sugar.

Marinade:
2 cups brewed Full City Roast Costa Rica
Tres Rios "La Dama" Dunn Bros Coffee
1 cup brown sugar
2 tablespoons honey mustard
2 tablespoons mustard
1 tablespoon Worcestershire sauce
1/2 cup lemon juice
1/4 teaspoon hot pepper sauce
2 teaspoons minced garlic
1 teaspoon cornstarch
1/4 cup water

Kebabs:
2 pounds beef loin strips, cut in 1-inch cubes
2 red bell peppers, cut into 1-inch squares
1 red onion, cut into 1-inch squares
20 cherry tomatoes

For the Marinade:
Combine all of the ingredients, except cornstarch and water, in a saucepan and bring to a boil. Whisk together cornstarch and water in a small bowl to make a slurry. Add the slurry to the mixture and stir well. Bring back to boil and cook for 5 minutes. Let cool. Combine the beef and the marinade and refrigerate for 24 hours.

Preheat a grill.

Skewer beef cubes, red bell peppers, red onion and cherry tomatoes. Skewer each item separately as cooking times vary. Barbecue over low heat, turning and basting with marinade for 20 to 30 minutes or until done.

Tuesday, May 08, 2007

Silverlight (II)

Despite Mean Mr. Mustard's concerns about his Bambi install, Java seems to think there's something to Silverlight. I disagree that JavaFX is any sort of a response to Silverlight, but they're spinning it that way. So it looks as though Sun is taking a page from the MS handbook and throwing something that's similar that's almost ready out there just to say "we have that too and we've always been intending to release it" (followed by the hurry to make the spin reality). It's a pretty common strategy, my company's competitor does it all the time (that's supposed to be funny).

If you're a developer who's interested in more than a cursory explanation, Scott Guthrie's post from yesterday has a lot of detail, including a presentation about using Ruby with the dynamic language runtime.

Saturday, May 05, 2007

Silverlight and Katamari

Katamari Damacy makes my thumbs hurt. And my brain hurt. And my stomach uneasy. I don't know how I'm going to handle riding rides at Valleyfair with Eryn when pushing a digital ball around on a screen and rolling people up makes my stomach churn. Kyle bought Eryn the game for her birthday, and she loves it. She particularly likes to play head to head and gets excited when someone rolls over her katamari and forces her to try to wiggle loose. Usually, right after that, she demands that the controllers exchange hands so that she's in the lead. I don't know where all that competitiveness comes from...not me.

Christopher Crowhurst has a post up about Silverlight. I was trying to explain this to a developer yesterday. Apparently Microsoft has delivered, and if you're a developer, you should be looking at Silverlight (WPF) as it's the way of the web. Drop your javascript inside the Silverlight "applet"...a magnitude faster. Use AJAX with your javascript...ditto. Like Ruby or another language better? Works with Silverlight. Code away in whatever language you please. Pissed that it's Microsoft, so it's not Mac compatible? Wrong. So what...downloading some MS "applet" through your browser will take forever? Nope - footprint is about 4 megs. Chump change in the high bandwidth world. Sandboxing will make any "applet" of limited use? It reaches outside the applet to use the browser DOM. Microsoft said they were going to focus on performance with WPF, and they did.

Wednesday, May 02, 2007

Sweet...Google Mapalicious

I made the recommendation today that my bike group add a Google map to their site so that I can see where rides start and, based on the color, what the ride level is, for the next month. They, being wise beyond their miles, replied (I paraphrase), "When will you have it done?"

To which I can now reply...soon. This one doesn't use an xml file of ride dates, addresses, and levels, but that's just a matter of throwing together an appropriate parser, and tricking ride submitters into making sure they include that information in their listing. After that, I should have a web page that works. I'm looking forward to not having to scan a few hundred rides for those that start in the south and aren't A/B level.

Scooter's First Google Map

Wednesday, March 21, 2007

You Suck

Pooteewheet sent me an email yesterday that said, "You Suck is here." I pondered it, wondering if she was talking about a relative, a renter or a neighbor. So I called her and asked, "Who is You Suck?" She called me something just short of an idiot and reminded me that I had ordered a book from Amazon: Christopher Moore's You Suck.

In my defense, I know at least one developer whose name sounds a little like You Suck.

Speaking of coworkers, one of them sent an email to a chain I was on today that said, "I resent them including the corrected copyright element." I was confused until I read it again. I guess that's why there are effective emailing classes.

And a manager sent me this link from one of her developers: Is Your App an Ass-Kisser? Not the funniest bit of code humor I've ever read, but an amusing idea, comparing code to stereotypical employee types. But where are the women? Not all code is male!