So I had this thought and I wrote it up to send to someone so I thoughts I would post it here too.
If you want to become a better programmer learn lots of languages of different kinds. I think all programmers should learn at least one language from each of these groups (or a language of the same kind, these are just ones that came to mind) and really learn how to think in it and write idiomatic code in it:
- Haskell, OCaml, SML (Functional languages)
- Prolog, Mercury (Logic languages)
- Python, Ruby, JavaScript (Dynamic languages)
- Java, C#, Scala (Modern O-O languages)
As you learn how to think in all these languages you learn new ways to approach problems. Also learning each type system will help you understand what types are for and why you should care.
- Functional languages show you how to think about computation as transformations on data and about side effect freedom.
- Logic languages teach you how to express problems and solutions without needing to specify the algorithm used to find the solution.
- Dynamic languages teach you how to make use of an mutable runtime environment (by doing things like changing class definitions at runtime) and how important types really are.
- And finally modern OO languages teach you how to structure data in a way that captures the fundamentals of what the data is. Especially if you use generics and variances.
Posted in
Computers,
Programming
1. A computer
Yes that’s 64 cores. It would cost around $5000. Honestly not that bad for more than 50 cores.
Uses: Research into multicore and parallel programming and compilation techniques.
2. A sound system
A pair (or maybe 8 for ambisonics!) of Meyer UPM-1Ps. They are beautiful and durable and loud as heck. So really studio monitors are probably more realistic. But I have a soft spot for UPM-1Ps because I had a pair in my office for years.
They are around $1800 per speaker. So a pair is $3600 and a cube worth is $14,400.
Uses: Awesome playback of paraphonic audio. Out doing my neighbors sound system by several orders of maganitude. For instance I might be able to do justice to the cannons of the 1812 Overture if I didn’t like my windows too much. I think that would out do the hip hop my neighbors play.
3. A Camera with wide angle lenses
Probably a Nikon DSLR of some kind or maybe if I’m particularly insane a large format Red camera. Then a fish eye lens and a hemispheric lens.
Uses:Â Panographic photography.
4. A paraphonic microphone array and a multi channel portable recorder
This is the equivalent of a panoramic camera setup except for sound. There are 2 approaches: a ambisonic microphone (4 or 9 channels, first and second order respectively), or a 2d (or 3d) microphone array and some pretty advanced software (this works by measuring the phase differences between the mics and building a model of the sound field). The second case it more accurate than ambisonic because ambisonic encode only the pressure vector at a single point where as the array actually gets you some information about the wave fronts. So a mic array will in theory have be able to give you information about the sound over some small area instead of at a point. This could result in better playback over an area; ambisonic tends to have a sweat spot outside of which the localization degrades quickly.
So whenever I think about audio and image capture gear I always find my self wanting to capture the essence of a place more than any specific image or sound. I want to take a panorama and 20 minutes of audio and then show it to people. Because in some small way it would allow them to be there. Far more than a single picture or just a few minutes of mono audio. They would hear the cars drive by and see the whole sky and hear the bees that investigate the microphone. I really want to try to do that at some point.
As a side note. I actually do think it’s time for me to own a digital camera. Probably a Nikon COOLPIX P7100 or P7000 or something similar. I like having a view finder and I want a full manual mode. Though I might give up on the viewfinder. All the cameras from listed here look good: http://www.dpreview.com/reviews/q42010highendcompactgroup. The Panasonic looks pretty good too and you can get an external viewfinder for it (attaches to the shoe). I’m not sure when I will do it but I think I’d like to have a better camera than my phone.
Posted in
Computers,
Hardware,
Life (other than code)
Pasted directly from my chat log with a friend, but I typed the whole thing
Let me tell you a little story about a robot. Someone was training a robot to dual other robots. They would reward the robot for doing better each day. The robot learned that if it got shot it was bad. So it would run away. And it would be rewarded. But after a while it couldn’t do any better. The robot was very good at running away but it never did anything else. So it couldn’t improve.
It was trapped in what is called (mathimatically) a local maxima. It would have to do something that would make things worse to learn how to make them better. My point is it’s really easy to get stuck in one place and not be willing to take the risk to get out of the place you are stuck and find a better place.
(This is a true story about someone trying to build an battle bot AI of sorts, it would run away but never shoot.)
Posted in
Computers,
Life (other than code)
There has been a lot of talk about how URL minimizers (tinyurl, bitly, and friends) are ruining the web for various reasons. Most notable among them that the minimized URLs make links rely on a server that may cease to exist before the page with the link. This results in one business going under causing entire chunks of the web to go dead (because there links nolonger work).
This is all true but that’s not really what angers me about URL minimizers on a day to day basis.
-
First and foremost, URLs contain real information about the site they refer to. I will often choose whether or not to follow a link based on its URL. This may be unfair of me in some cases (judging a book by its cover), but its my right. I want to see where I am going.
-
Also minimized URLs are slower to load than direct links. This is simply because there is an extra redirect on the way to loading the page. This is a big issue when you are on a network that is very slow to connect to a server but fast do transfer data once connected. My network at work really sucks and it take a couple of seconds to connect to a server but once connected I can get a full megabyte per second. So the bitly.com or tinyurl.com request takes a noticable amount of time compared to the over all page load.
-
Finally, why don’t people use a damn <a> tag!!! There purpose is to give a nice piece of text to link on. Anyone who is interested in following the link will be using a device that can render HTML (otherwise the link target would be of no use). I know, I know, 140 limit. Why don’t they change that to only could rendered characters and support simple HTML. That way people can use real link and therefor real URLs.
Posted in
Computers