When I was a student at the University of Calgary, I earned money over summers doing IT work at a well-known facility management company. They loved safety so I built a safety data tracking application. For their travelers, I built a travel expense tracking application. When they got the maintenance contracts for a pair of hospitals, I wrote the work tracker that kept their on-site workers up-to-speed and so on. I worked over three summers and was payed $30 an hour, which was good value for them and me.When I finished university I decided to do a startup and took my dad’s advice to commercialize some of my old work. But, I realized that data trackers to offices are like artwork to homes — everyone needs a little to tie things together. So I stopped drawing and built a camera. The result (FormLis) makes it easy to do the sort of things I did — for example, I rebuilt all three summers of work in about an hour. Before, companies hired ‘painters’ (consultants) and payed tens of thousands for just the right portrait. Or they could try to find a ‘print’ (pre-built database application) that was close enough. Now they have a third option in FormLis; it’s like the point and shoot digital camera of database applications. Just like the digital camera stole the best gigs (e.g. portraiture) from artists, so too will FormLis steal the work of young programmers. I am literally throwing students out of work. I just hope, as a society, we can keep them off the streets. Nobody likes drunk unshaven nerds.
Walkerby. by Flickr User bugBBQ
I’m a libertarian, sometimes I google the word. A lot of outsiders have us confused with somebody else (we aren’t fascists), but many iof us use the wrong vocabulary.
How many times have you seen libertarians talk like this:
Governments the world over are becoming more and more statist and are trampling all over individual rights. Libertarians oppose the government’s belief that is has the right to tax populations, wage wars implement social programs …
Ironically, when we talk like this we remind people of Nazis. I guess they see ‘capitalism’ with that warlike language and think “extreme right”. It’s doubly ironic in that people think Nazi’s were right wing, even though they did all the classic left-wing stuff like a centrally planned monetary policy, banking, imports and exports, price and wage controls, restricted dividends, organized factories and mobilized for war.
I was filling out Y-Combinator application and it asked about an interesting thing I’ve done. Here it is, Bungee jumping in Switzerland.
This is me doing the jump James Bond did in Goldeneye. Its called Contra Damn (or Verzasca Dam, or Locarno Dam). You can do it yourself — it’s around 200 euro (less if you go with a group)
My fear of heights is worse now.
You can’t hear it in this video, but I screamed all the way down…
Some parents want to teach their kids programming. Good on them, I say. I started programming with qbasic (which may still be on Windows machines), I started in grade 5 (age 10), I know I was using C to make RPG’s by grade 8 (age 13).
This article (List of educational programming languages — wikipedia) shows many bad ways to learn. Ways that are held in high regard by many programmers who themselves didn’t learn that way.
The latest Calgary Democamp (Wed Jan 12th) was a great time. Lots of people & super busy. I’d finish one demo just in time to demo to another group. I did find time to converse and get some business cards, so I thought I might give a shout-out.
It was at the Melrose, I arrived early (with family) and grabbed a booth, shortly afterwards Zeeko1 came over and we talked as I fixed some last minute laptop problems. Zeeko was an engineer taking a business & entrepreneurship program at the U of C. I didn’t know U of C offered that.
After a quick demo, I ventured out to meet people. Nearby was Mark Hazlett who has founded iCOG Studios, to develop iPhone games. They are hard at work on their first game, so check it out. I actually don’t own an iPhone, I am ‘teh suck’.
At the next table was Jose Guterman of TeyTech inc, software consultants who specialize in wireless networking. Calgary seems to have a strong focus on wireless — I think the U of C had courses dedicated to it.
Some guys from iStockPhoto, which is a photo sharing/sales platform were in attendance. They sell your photos on their website, and were seeking talented PHP programmers.
After these visits, I went back to my table and began demoing and demoing and demoing…
I met Mikeal Abramoff, a nice guy who also gave out chicken wings. He & Mackenzie Brown have a startup CADCrowd, they are a go-between to match CAD related tasks with qualified people abroad. Sort of a labour market/subcontracting/management service to those who need CAD work done.
Somebody mentioned Calgary Technologies Inc. Looking at their website, they offer services (mentoring?, networking?) to startups. I’ll take a look when I have some time.
Poynt, a local search app for the iphone, was there. I recognized them from last democamp.
I talked with Patrick Lor, President of Fotolia North America. Fotolia is an online seller of stock photography. His business card actually has a coupon on the back for 5 free credits… I wonder how many credits are needed to buy a photo? I’ll look into it later.
I also met Joanne Xu of Rex-Force international. They’re an International Trade and Development industry (an well-established company I think). I actually couldn’t find a website for Rex-Force, so if you know one, please advise. I’m at email@example.com.
I met many others, but it’s kind of a blur. I mentioned names and websites of people who brought business cards, providing yet one more reason to bring business cards.
1. I think his name was Zeeko, he didn’t leave a business card. Apologies to Zeeko if I’ve got it wrong.
WordPress generated a nice email summary of my blog health to me. It even had a ‘publish this to your blog’ link, which I dutifully clicked.
The stats helper monkeys at WordPress.com mulled over how this blog did in 2010, and here’s a high level summary of its overall blog health:
The Blog-Health-o-Meter™ reads Wow.
A Boeing 747-400 passenger jet can hold 416 passengers. This blog was viewed about 7,900 times in 2010. That’s about 19 full 747s.
In 2010, there were 18 new posts, not bad for the first year! There were 13 pictures uploaded, taking up a total of 195kb. That’s about a picture per month.
The busiest day of the year was July 1st with 2,805 views. The most popular post that day was Forth in Lisp.
Where did they come from?
The top referring sites in 2010 were reddit.com, lambda-the-ultimate.org, news.ycombinator.com, Google Reader, and mail.live.com.
Some visitors came searching, mostly for formlis, lisp forth, forth in lisp, forth lisp, and implementing forth.
Attractions in 2010
These are the posts and pages that got the most views in 2010.
Forth in Lisp June 2010
Flexible Parsing without Regexps July 2010
HACK: Co-routines in SBCL Lisp August 2010
A Handful Of Useful Lisp Programming Tricks August 2010
Programming Language Syntax July 2010
When I started, I couldn’t body weight squat because poor technique led to (minor) injuries. 5×5 taught me to squat all the way, and to never squat just till thighs parallel with floor. I’ve progressed to around 130lb squats; I use dumbbells & would need a bar bell to go heavier.
A routine should take a little over half an hour. But I found as the weights got heavier, I got lazy, and my routines took nearly an hour and a half. So I wrote a bash script to time my routine and keep me honest.
Recently a friend of mine started smartcloud.ca. A Toronto based startup that resells cloud services as a package deal with support. At first I thought sounded like consulting, they would listen to the companies needs, and help them select among the cloud service offerings, and then handle registration and migration, support, & training. After migration his business would be the primary support and training providers, while also being a liaison between the customers and the cloud services.
But consultants sell expertise for a single project, while this company is selling cloud service management and training in a pay as you go model. Like how commercial Linux has operated for years; navigate the maze of software, and package best of breed solutions with support, marketing and in-house technology to present a package that is all-inclusive, practical and easy to understand. But will it work?
It sounds to me like a good partnership for cloud services. This company provides marketing, training, sales and branding to get cloud services into companies where web-based advertising (blogs, twitter, Facebook) don’t have a lot of pull. To the cloud services they offer revenue and feedback. The aggregate has an incentive to compose feature requests, and even pay for them via bounty systems. They might also provide insight into how cloud services should work together.
And just like how RedHat provides a package manager and support tools, a cloud aggregate probably would use technology to manage its myriad offering. For example, locking down a dozen cloud apps consistently (as employees come and go) is a difficult problem. Standardized API’s and could make this a lot easier, and an aggregate cloud company would be the ones to push for this sort of thing.
Companies usually consider outsourcing when looking for solutions. I’d bet more than a few would consider such a model; it might be a very powerful solution in the next few years.
This is all speculation at this point, but I’d like to hear your thoughts on it. Yeah/nay? Know anyone else in this market? Give me a heads up.
I thought I’d plug Lisp Forum, a forum I frequent that answers Lisp related questions; I go by the name “Warren Wilkinson”.
I go when I’m taking a break from my code. The problems posted by new lispers are often short and stand-alone, like a good puzzle. And you learn a lot too; In this post new user aaron4osu created a cypher to permutate the words in a file. His version of randomize-list was very clever.
(defun randomize-list (list) (mapcar #'car (sort (mapcar (lambda (c) (cons c (random 1.0))) list) #'> :key #'cdr)))
I’ve written randomize-list before, but mine worked by taking items from the list in random order to build up a new list:
(defun randomize-list (a) (let ((a (copy-list a)) (b nil) (n (length a))) (loop repeat n for place = (random (length a)) for item = (elt a place) do (push item b) do (setf a (delete item a :start place :count 1))) b))
Doing it aaron4osu’s way is about 3 times faster, and you can make it slightly faster by consing random fixnums and using a fixnum-only <.
(defun fixnum< (a b) (> (the fixnum a) (the fixnum b))) (defun randomize-list (list) (mapcar #'cdr (sort (mapcar (lambda (c) (cons (random #xFFFFFF) c)) list) #'fixnum< :key #'car)))
Surprisingly, it’s faster to remove duplicates after than to filter them before. Using remove-duplicates is about 20 times faster than checking them before hand (but using a hash table to test inclusion is much quicker, but still twice as slow as remove-duplicates). In SBCL, using delete-duplicates was really slow.
Replacing non-destructive routines with destructive ones (e.g. map vs map-into, remove-duplicates vs delete-duplicates, a new string vs replace) makes things slower.
In this post, I probably scared newbie indianerrostock away, when he asked for improvements to his templating program.
Given a text file that contained #SPORTNAME# in multiple places, his program replaced that with the name of a sport. The kicker was it did it several times in batch for many sport names.
His method was the obvious one: Loop through the string searching for #SPORTNAME# while making a copy of the string with #SPORTNAME# replaced.
My solution was to sort the sport names biggest to smallest and precompute where all the #SPORTNAMES# where, and then replace them in the source string (i.e. no duplicate string, no memory allocation, etc) with a sport name. Then I would repeat this replacing the previous sport name with the next one.
My super optimized no-allocation and no-searching method was 2.5 times slower. It boggles the mind.
How Fast is Sorting?
This post starts out about CLOS and ends with a discussion of sorting. SBCL sorts lists using merge sort, but vectors with heap-sort. stable-sort for both vectors and lists uses merge-sort.
Its faster to use STABLE-SORT for vectors.
Also, merge-sort works well without random access, so sorting singly linked lists is fast. There is no need to convert the list into a vector before sorting.
Why So Counter-intuitive?
Well, I think a lot of this has to do with memory allocation in Lisp. Lisp is garbage collected, most Lisps use a stop-and-copy garbage collector. This is like a constant defrag on your memory. One benefit of which is that allocation is VERY FAST — far faster than C’s malloc. In C you’d have to search a binary tree for available space , but in lisp, you just increment the memory-end pointer.
If you made a linked list a node at a time C would have you search a hundred times, while Lisp would increment a pointer 100 times. C’s linked list would be scattered in memory, while Lisp’s would be continuous.
This is why Lisp is so fast at functional programming. You create a lot of garbage, but you create it fast, and it goes away fast.
“Today the main applications are all database applications; the real-time applications having been replaced by turnkey systems that connect serially. The main applications are RT order entry, billing, PFT/Exercise data and ABG lab data. There are over 5,000 blocks of active Forth source code – perhaps”
Most languages have some libraries to connect to databases; modern languages often include one in the standard distribution. Forth is an exception. There don’t seem to be libraries to connect to standard SQL databases, and forth programmers don’t care. When forth programs need a database, they don’t use familiar ones. Read the rest of this entry »