ADM3a was a terminal, not a computer. I used to use these two in around 1976 or so. And the hjkl pattern has nothing to do with this or any other terminal. The ASCII control codes for Ctrl-H, Ctrl-J, Ctrl-K and Ctrl-L were used to make the Teletype's printing carriage move left, down, up or right. Bill Joy's innovation was "modes" so that Ctrl-H did not delete the character when it moved left, etc...
HN user
wavetossed
Lots of people just like to build things and it is often easier to build a tool than it is to find a pre-existing tool that you can get, you can learn and you can use to solve your problem in less time than building something. All too often when you choose the reuse path, you end up going around in circles with stuff that may be good, but it doesn't fit your problem very well.
Also, humans are builders. It's what we do.
If you look at this problem closely, like I have over the past 15 years or so, you can already see evolution and natural selection happening. So I don't really see diversity as a big problem, and I do expect that in a generation or two, there will be a lot more consensus around which tools to use. However, even then, I do expect to see a fair amount of diversity.
Even today, where Google dominates search, they are dwarfed by Baidu in China. And in Russia, many people prefer Rambler. Orkut is a big social network in Brasil, Vkontakte in Russia, etc. Programming tools and libraries are the same, i.e. a lot of the choices are made for cultural reasons and that will never go away so some diversity will always be here.
Hopefully more people can gain the perspective that many years of experience bring, and can contribute to the process of natural selection (which implies improvement too) in order to get more people choosing and using better tools.
They ARE scaling horizontally. Remember where they mentioned that they are putting StackOverflow, one of several sites that they run, on its own box? That is horizontal scaling. They now have two shards, one with SO and one with all the other sites.
NoSQL is also pretty serious business because what you are doing is deconstructing the relational database and assembling the bits that do the job that you need. A lot of NoSQL tools are marketed as doing far more than they really are capable of and you need real skills and knowledge of database internals to be able to navigate this treacherous area.
That's why you see so many blogs about companies changing core NoSQL technologies.
If you don't get enough interviews in a week of sending out resumes and cover letters, rewrite the resume. Week after week. During interviews you will learn what you forgot to mention, and you should get a sense of what is best left out. Resumes need to be short. They need to sell you as a solution to a company's problems. They need to leave out a lot of details which can be filled in during an interview.
Hone that resume. Try several different versions targeted to different types of jobs. Carefully write your cover letters based on the job ad, and with the intention of getting an interview.
A resume is not an employment history so don't include any more of that than is necessary to be conventional. Leave out the summer jobs in highschool if you are older than 25. Focus on achievements, projects completed. Tell them how you helped your employers over and over again.
And weave lots of technical terms into the text so that it shows up on a keyword search. But do leave out useless keywords like COBOL and VMS.
Don't say your age, and be careful not to inadvertently disclose your age by saying that you worked X years with Y technology which we all know was obsolete in 1995.
That's old fuddy duddy thinking. I'm 56 and I see plenty of people my age that thought like this and they have little to do now other than play golf an wait for dementia to kick in.
I did things differently, started an ISP business in 1994, worked in a Silicon Valley startup for a year, did some consulting in Australia and went to live in Europe. My life was much more interesting than those people who stuck to the daily grind, I reinvented myself (i.e. kept on learning new things every year) a few times, and according to the latest research, I don't need to worry about dementia for a long time. I might not have a nest egg but I have skills in sofware development, systems admin and dba areas that my few of my peers have, and no younger person has. I intend to keep on working and creating new technology until the end of my days, which if my grandparent's lives are an indication, will be well into my 90's.
That is because the distribution channel is skimming all the profits. If YC'ers made a new distribution system for content creators it would start with young people fresh from film school doing all the work. But after that takes off you will see the Coppola's of the world doing the math, and shifting their allegiances away from the studios and towards the new world.
Here is a free idea that I tried to get implemented in another country while working for a telecom company that was branching into TV services over their DSL connections.
Simply build a site like YouTube with lots of content to view. But unlike YouTube, this site would be pay per view and 100% of the content would be provided by teams of content creators. No backroom licencing deals.
The end user pays a fixed monthly fee for what they watch. After you watch a show, you must rate it before you get to watch another. That means 100% of viewings are rated. At the end of the month all the shows are ranked according to the ratings, and the portion of the monthly fee that goes to content creators, would be divided according to the rankings.
OK, maybe this is more like Netflix than YouTube. The UI is not as important as the system of acquiring and paying for content which is directly tied to viewer rankings. You would need to have a multiple factor ranking system so that cat videos with shot with a shaky video camera can rank high in entertainment value but low in quality and thus earn less. Also a longer show should earn a bigger share than a 2-minute short.
There are other types of things that would also work for this YC request, but I hope to see this as one of the ones that YC funds.
Yes!!! The development cycle of software like MongoDB, RabbitMQ and so on, is much faster than that of Debian or any other Linux distro. The Debian package is fine for dabbling or low volume use, but for any serious app, you MUST go direct to the developers and use their latest stable release. That is what they support best on their mailing lists, and that is where most bugs are already fixed.
A lot of software development teams are releasing their own RPM and .DEB Linux binary packages for just that reason, to encourage people to use up to date packages instead of the stale OS distro packages.
In a way, it's rather like security updates. Who would refuse to install security updates because it's not part of the Ubuntu 10.4 LTS release? Almost nobody even thinks of doing that. So why would you use old obsolete releases of mission critical software?
For an interesting use of RPATH headers to make portable Linux binaries (and shared libraries) have a look at this script that I used to build Python 2.7.2 and a whole pile of 3rd party libraries https://github.com/wavetossed/pybuild
I think that things like RPATH and LD_PRELOAD are exactly what shared libraries should be doing. The reason for shared libraries in the modern age, is increased flexibility.
The very fact that both forks are available on github means that you can check out both forks, then merge changes locally. After that, you can use the merged code to create a new github project that is not a github fork of the original ones.
If you really have a tangled web of failed forks, this is the way to fix it by starting afresh with a merger of the best forks.
Your first sentence is way off the mark. Obviously an interviewer needs to have intimate familiarity with the problem that they give to potential employees, and have hands on experience implementing it in many variations. But that does not mean that it is unfair to ask this question because you do not know the answer.
This is a lot like fizzbuzz because the instructions for writing the code are simple, straightforward, and should be understandable by any programmer. This is not a question with an answer. This is a SPECIFICATION for a program. If you know how to code, it should be easy to write some code that meets this simple specification.
P.S. most interviewers will give you bonus points for explaining your work as you do it, particularly why you chose to use a certain approach, and what you assumed even though it was not explicitly specified. This is true even if you botch the end result and provide code with severe errors.
After all, that's what good coders do most of the time, write incorrect code with severe errors. The rest of the time they fix their mistakes.
YES YES YES to number 3.
My theory is adults learn languages so slowly because they actually never try to learn. Two reasons for this. a) Adults typically do not know how to learn period. b) Adults have been conditioned to do the wrong things in attempting to learn and all books and courses are built around these wrong ideas.
Most important way to evaluate your learning is to ask yourself "Do I feel like a stupid idiot as I do this?" If the answer is YES, then you are learning. Keep it up and get to love your stupid idiot self. In time the clouds will clear and you will not be stupid anymore. Lots of people have warped adult egos which simply cannot accept these feelings of stupidity. Some people actually kill themselves because of this, others drop the studying entirely, and others soldier through and learn nothing because they have not accepted the feelings of stupidity and moved forward in spite of it.
Be careful with online translators. They often warp the meanings of things. I find them most useful using this process.
First read the text (a few sentences) in the foreign language. Then run it through the translator, because you can only understand half of it and there are some key words that have you lost. Read the English translation keeping in mind that it is WRONG. However it will have clues about the structure of sentences, the meaning of unfamiliar words, etc. In this step you are not learning the foreign language, you are learning some POSSIBLE solutions to the problem of understanding the text.
Now go back and read the foreign language text from the top. You will find that miraculously your brain can now read and understand it almost 100%. Occasionally you will be forced to check the dictionary for a word that suffers from the problem discovered in 1966 when researchers ran "The spirit is willing but the flesh is weak" through and English-Russian translator and then back again through a Russian English translator. They got back "The vodka is good but the meat is rotten".
I also used this back and forth translation to check my Russian letters before I sent them. I wrote in Russian without a dictionary, then translated it back into English with an online translator. I often found words where I had chosen the wrong one of several possibilities.
Nowadays when people ask me "What is the X language word for Y?" I say, it cannot be translated. In general it is not possible to translate an English word into another language or vice versa. That is why I recommend keeping phrase lists rather than word lists because you get a bit of context which is what determines meanings.
When you use a dictionary and there are 10 possible translations for "find", look up each of the possibilities in the foreign language section and you will not only find the best word to express what you mean, you will also learn how fuzzy a lot of our English words are, and don't ask me about "get" and "put".
Native language is English, French and Spanish in high school. German and Russian in university. I can read books written at an adult level in French, high school level in Spanish. I've used French in sales meetings with customers in Paris, and once I even presented a solution in French on my own. Learned German to an advanced level through company lessons (in London) and podcasts from Deutsche Welle. I am almost fluent in Russian, have traveled independently in Russia and Ukraine, romanced a girl on the phone in Russian, then visited her and ultimately married her. I say almost fluent because although I can watch Russian films and TV, I stumble with business/work scenarios. 10 years ago I was at the "almost fluent" level with Spanish after living in the Bay Area, CA, listening to hispanic radio on my commutes, reading the free Spanish language newspapers, and chatting (or ordering) in Spanish in every shop or restaurant that I visited. I am also competent enough in Italian to have traveled independently in Italy twice, once without even reserving a hotel in advance. I also spent two weeks in Bulgaria and was able to find a bus and wander around the town of Varna, shopping and visiting museums, all on the strenght of the Bulgarian I learned in the month before travel and by reading books (and listening to people) during the two weeks.
Why the long song and dance? Because I did it and I know how to do it. It is actually quite simple and is obvious if you think it over a bit. You have to work at it EVERY day, 365 days a year. Spend an hour or more a day. Find ways to extend that time whenever you can, for instance turn on the Spanish audio on a DVD and English subtitles instead of watching TV in English.
Second thing to do is to exercise all of the language senses EVERY DAY! If you sit down with a language book and spend all day Saturday on a couple of lessons learning them by heart then you are doing it wrong, wasting your time and will soon drop the studying entirely.
Every day you must read some of the language. Every day you must write, preferably full sentences or phrases, not just vocabulary words. For instance if you learn that sombrero means hat, then write "El muchacho no sabe donde esta su sombrero" or at least "un sombrero blanco" at the very minimum.
Every day you must listen to the language. In some countries there is easy access to TV or radio signals, but everyone who can read this can download podcasts. Listening to the CD that came with a course does not count. Sure, do listen to the CD, but don't check off listening until you listen to some language in the wild, so to speak.
Every day you must speak the language. In the beginning you can get away with reading a page out loud even if you don't understand the words. But preferably you should be speaking with native speakers. I get a free newspaper handed out every morning outside the transit station by a Chinese guy so I always say "Xie xie) which means thank you. When I took my daughter to a birthday party and entered a room of Chinese girls I said "Ni men hao" which means hello everyone. Yep, I am working on yet another language since I live in China now (the North American part commonly called Vancouver BC).
And you must also spend a reasonable chunk of time everyday talking to imaginary friends entirely in the new language. Don't speak out loud, but hold the conversation in your head as you walk to the subway, or take a lunchtime jog. Often you will not be able to fully express your thoughts because you lack the vocabulary so practice describing what you want to say. For instance, if you don't know the word tree but want to say "See the bird up in that tree" then try saying "See the bird up in that big plant, the really high one beside the park bench. What is that called?" When you get advanced enough, that kind of mental maneuvering will actually help you recall words that you had once learned but half forgotten.
Don't fuss over courses. Go to a good bookstore with a wide selection and browse through the books. Buy one or two whose writer seems to write in a way that you can understand and will not get bored with. When you are more advanced look for specific types of books. A comprehensive dictionary. A grammar book. A vocabulary builder book.
Buy some books written for 8 year olds in the foreign language. Stick to books written by a native speaker of the language where the action of the story is set in a country where this language is spoken. Especially avoid books originally written in English that were translated. When you can get through one of these, buy some books for 10 year olds, then 12, then 14 year olds. After that go to adult books. The age thing is important because young people do not have large vocabularies. Therefore childrens' book editors spend a lot of time editing books so the child will learn the meaning of new words from the context. You will learn them too and save much time that would have been spent with the dictionary.
Is there something wrong with type 4 GUIDs?
That sucks. I was looking at implementing Graylog but Elastic Search, or any other cloud datastore, is out of the question. We need to keep the logs in the same data centre as the servers for reasons of confidentiality, and for performance reasons as well. Most of the logs will never be used for anything. We log lots of stuff just in case, and after a few weeks there is no real use for them. If we wanted stats we would calculate them and then delete the logs. We certainly don't want to consume huge amounts of bandwidth shipping logs across the Internet.
At this point I'll probably just use an older version so that we have local storage and local search.
If node.js could make things work on Windows using IOCP then redis could do the same. For starters, they could study the node.js code to compare the epoll version with the IOCP version in order to understand how to use IOCP,
But reading is good for reminders. Go ahead, read a couple of books on a topic and then try to "do". You will soon be knee deep in alligators and unable to remember everything that you absorbed in those two "great books". The solution is to read everyday and let it remind you, directly or indirectly, of the great stuff that you studied but have nearly forgotten because you haven't put it into practice.
Waterbear is something that is headed in that direction. http://waterbearlang.com/
What I tell people is that Python (as installed by apt-get, yum) is not on your system for you to develop with. It is there because some of the system tools are written in Python, including at least part of the apt packaging system. It's also there for System admins to use for writing Python scripts instead of bash scripts.
But for app development, get your own Python, manage it yourself and install 'distribute' so that you have both easy_install and pip to work with. I've taken that to extreme by making a portable Python distro that comes in a tarball and runs on any Linux distro, but even if you only untar the source and run ./configure --prefix=/home/python;make
That will build a default Python with support for any shared libraries for which you have a development version installed ( -dev version on debian/ubuntu, -devel version on redhat/suse)
sudo make install will install it, assuming that you have write permissions on the target prefix that you specified. You can even hide it in your home directory with --prefix=~/tools/python272
I still thing that Python 2.7.2 is the only way to go for development unless you already know Python and its ecosystem well enough to know that 3.x will work for you.
That said, I try to use any backported 3.0 features such as .format for string formatting. And for beginners, I heartily recommend using the 'six' module. That way when you need to move to 3.0, porting your code or your skills, will be easy-peasy.
You really shouldn't tell people to go ask how to install Python on stackoverflow.com. Instead give them a few URLs to stackoverflow questions with the answer such as this one http://stackoverflow.com/questions/7538834/how-to-create-a-p...
Or even better, give them a stackoverflow search like this one http://stackoverflow.com/search?q=%5Bpython%5D+%22install+py...
P.S. I think that your wiki page is a great idea and I'm going to write a custom one for our developer wiki.