| Vertical . . |
[20 Nov 2009|01:45pm] |
| [ |
mood |
| |
happy |
] |
Had a personal training session this week where my trainer had me jump over a high rope. Turns out that I can still clear 40" pretty much straight up and down. It was a welcome discovery 'cause the last time I tried anything like that was a decade ago! Turns out that I still got some ups. :)
|
|
| Evaluation of Python . . |
[09 Nov 2009|03:24pm] |
Going through the Python tutorial and noting likes/dislikes/reminders . .
* White-space dependent syntax still sucks. * Only supports the "foreach" interpretation of for-loops. * Have to use the "range()" function in order to do counted loops. * Does natively support slices of arrays/lists which is handy. * Has a statement, "pass", which serves as a space-filler. * Setting a default value for arguments that are objects can produce side effects. Due to static (?) binding, the object is evaluated only once and becomes the argument for every invocation of the function. For example, in this definition "def f(a, L=[])" and then used like so "f(1) . . f(2) . . ", L is only assigned as an empty list during the first call. All later calls share the same L object. This is bound to cause me some trouble in the future . . * Two nice things: - Support for lambda; Dunno' why I like functional programming but I do . . - Seems to JSON notation for list/hash creation * list.count() != len(list) * Queues are implemented differently so must use the queue provided in a library: collections.deque * Yay, more functional support: filter(), map(), & reduce() are all in there. * Have this funky syntax for constructing lists called "list comprehension". Too much to describe here so go here instead. * tuples != lists * Class definition are very similar to JavaScript in that they must be executed in order to have effect and are simply processed linearly. (The constructor/initializer is labeled "__init__".) All method calls act like the apply/call methods where the first parameter, often automatically and implicitly passed, is the instance of the class. * Functions appear to be nearly first-class objects.
|
|
| gzip vs zip |
[27 Oct 2009|03:33pm] |
Despite the fact that I've been doing this tech thing for over seven years, I'm still such a newbie . . Learned that the two are not just two different implementations of the same compression-packing/decompression-unpacking algorithms today . .
gzip is normally used to compress just single files. Compressed archives are typically created by assembling collections of files into a single tar archive, and then compressing that archive with gzip. The final .tar.gz or .tgz file is usually called a tarball.
gzip is not to be confused with the ZIP archive format, which also uses DEFLATE. The ZIP format can hold collections of files without an external archiver, but is less compact than compressed tarballs holding the same data, because it compresses files individually and cannot take advantage of redundancy between files
|
|
| Survey about start-ups from Paul Graham . . |
[27 Oct 2009|12:16am] |
Another good read on Paul Graham's blog about the results from a survey about surprises at a start-up . . "What Start-ups are really like"
Embedding this one here because while I'm already aware of most of these thoughts from my time at the 'Egg and conversing with founders and VCs, I'd like to see whether I'm still surprised by any of these in two or three years time when my start-up is on the road to success (hopefully!) . .
1. Be Careful with Cofounders
This was the surprise mentioned by the most founders. There were two types of responses: that you have to be careful who you pick as a cofounder, and that you have to work hard to maintain your relationship.
What people wished they'd paid more attention to when choosing cofounders was character and commitment, not ability. This was particularly true with startups that failed. The lesson: don't pick cofounders who will flake.
Here's a typical reponse:
You haven't seen someone's true colors unless you've worked with them on a startup.
The reason character is so important is that it's tested more severely than in most other situations. One founder said explicitly that the relationship between founders was more important than ability:
I would rather cofound a startup with a friend than a stranger with higher output. Startups are so hard and emotional that the bonds and emotional and social support that come with friendship outweigh the extra output lost.
We learned this lesson a long time ago. If you look at the YC application, there are more questions about the commitment and relationship of the founders than their ability.
Founders of successful startups talked less about choosing cofounders and more about how hard they worked to maintain their relationship.
One thing that surprised me is how the relationship of startup founders goes from a friendship to a marriage. My relationship with my cofounder went from just being friends to seeing each other all the time, fretting over the finances and cleaning up shit. And the startup was our baby. I summed it up once like this: "It's like we're married, but we're not fucking."
Several people used that word "married." It's a far more intense relationship than you usually see between coworkers—partly because the stresses are so much greater, and partly because at first the founders are the whole company. So this relationship has to be built of top quality materials and carefully maintained. It's the basis of everything.
2. Startups Take Over Your Life
Just as the relationship between cofounders is more intense than it usually is between coworkers, so is the relationship between the founders and the company. Running a startup is not like having a job or being a student, because it never stops. This is so foreign to most people's experience that they don't get it till it happens.
I didn't realize I would spend almost every waking moment either working or thinking about our startup. You enter a whole different way of life when it's your company vs. working for someone else's company.
It's exacerbated by the fast pace of startups, which makes it seem like time slows down:
I think the thing that's been most surprising to me is how one's perspective on time shifts. Working on our startup, I remember time seeming to stretch out, so that a month was a huge interval.
In the best case, total immersion can be exciting:
It's surprising how much you become consumed by your startup, in that you think about it day and night, but never once does it feel like "work."
Though I have to say, that quote is from someone we funded this summer. In a couple years he may not sound so chipper.
3. It's an Emotional Roller-coaster
This was another one lots of people were surprised about. The ups and downs were more extreme than they were prepared for.
In a startup, things seem great one moment and hopeless the next. And by next, I mean a couple hours later.
The emotional ups and downs were the biggest surprise for me. One day, we'd think of ourselves as the next Google and dream of buying islands; the next, we'd be pondering how to let our loved ones know of our utter failure; and on and on.
The hard part, obviously, is the lows. For a lot of founders that was the big surprise:
How hard it is to keep everyone motivated during rough days or weeks, i.e. how low the lows can be.
After a while, if you don't have significant success to cheer you up, it wears you out:
Your most basic advice to founders is "just don't die," but the energy to keep a company going in lieu of unburdening success isn't free; it is siphoned from the founders themselves.
There's a limit to how much you can take. If you get to the point where you can't keep working anymore, it's not the end of the world. Plenty of famous founders have had some failures along the way.
4. It Can Be Fun
The good news is, the highs are also very high. Several founders said what surprised them most about doing a startup was how fun it was:
I think you've left out just how fun it is to do a startup. I am more fulfilled in my work than pretty much any of my friends who did not start companies.
What they like most is the freedom:
I'm surprised by how much better it feels to be working on something that is challenging and creative, something I believe in, as opposed to the hired-gun stuff I was doing before. I knew it would feel better; what's surprising is how much better.
Frankly, though, if I've misled people here, I'm not eager to fix that. I'd rather have everyone think starting a startup is grim and hard than have founders go into it expecting it to be fun, and a few months later saying "This is supposed to be fun? Are you kidding?"
The truth is, it wouldn't be fun for most people. A lot of what we try to do in the application process is to weed out the people who wouldn't like it, both for our sake and theirs.
The best way to put it might be that starting a startup is fun the way a survivalist training course would be fun, if you're into that sort of thing. Which is to say, not at all, if you're not.
5. Persistence Is the Key
A lot of founders were surprised how important persistence was in startups. It was both a negative and a positive surprise: they were surprised both by the degree of persistence required
Everyone said how determined and resilient you must be, but going through it made me realize that the determination required was still understated.
and also by the degree to which persistence alone was able to dissolve obstacles:
If you are persistent, even problems that seem out of your control (i.e. immigration) seem to work themselves out.
Several founders mentioned specifically how much more important persistence was than intelligence.
I've been surprised again and again by just how much more important persistence is than raw intelligence.
This applies not just to intelligence but to ability in general, and that's why so many people said character was more important in choosing cofounders.
6. Think Long-Term
You need persistence because everything takes longer than you expect. A lot of people were surprised by that.
I'm continually surprised by how long everything can take. Assuming your product doesn't experience the explosive growth that very few products do, everything from development to dealmaking (especially dealmaking) seems to take 2-3x longer than I always imagine.
One reason founders are surprised is that because they work fast, they expect everyone else to. There's a shocking amount of shear stress at every point where a startup touches a more bureaucratic organization, like a big company or a VC fund. That's why fundraising and the enterprise market kill and maim so many startups.
But I think the reason most founders are surprised by how long it takes is that they're overconfident. They think they're going to be an instant success, like YouTube or Facebook. You tell them only 1 out of 100 successful startups has a trajectory like that, and they all think "we're going to be that 1."
Maybe they'll listen to one of the more successful founders:
The top thing I didn't understand before going into it is that persistence is the name of the game. For the vast majority of startups that become successful, it's going to be a really long journey, at least 3 years and probably 5+.
There is a positive side to thinking longer-term. It's not just that you have to resign yourself to everything taking longer than it should. If you work patiently it's less stressful, and you can do better work:
Because we're relaxed, it's so much easier to have fun doing what we do. Gone is the awkward nervous energy fueled by the desperate need to not fail guiding our actions. We can concentrate on doing what's best for our company, product, employees and customers.
That's why things get so much better when you hit ramen profitability. You can shift into a different mode of working.
7. Lots of Little Things
We often emphasize how rarely startups win simply because they hit on some magic idea. I think founders have now gotten that into their heads. But a lot were surprised to find this also applies within startups. You have to do lots of different things:
It's much more of a grind than glamorous. A timeslice selected at random would more likely find me tracking down a weird DLL loading bug on Swedish Windows, or tracking down a bug in the financial model Excel spreadsheet the night before a board meeting, rather than having brilliant flashes of strategic insight.
Most hacker-founders would like to spend all their time programming. You won't get to, unless you fail. Which can be transformed into: If you spend all your time programming, you will fail.
The principle extends even into programming. There is rarely a single brilliant hack that ensures success:
I learnt never to bet on any one feature or deal or anything to bring you success. It is never a single thing. Everything is just incremental and you just have to keep doing lots of those things until you strike something.
Even in the rare cases where a clever hack makes your fortune, you probably won't know till later:
There is no such thing as a killer feature. Or at least you won't know what it is.
So the best strategy is to try lots of different things. The reason not to put all your eggs in one basket is not the usual one, which applies even when you know which basket is best. In a startup you don't even know that.
8. Start with Something Minimal
Lots of founders mentioned how important it was to launch with the simplest possible thing. By this point everyone knows you should release fast and iterate. It's practically a mantra at YC. But even so a lot of people seem to have been burned by not doing it:
Build the absolute smallest thing that can be considered a complete application and ship it.
Why do people take too long on the first version? Pride, mostly. They hate to release something that could be better. They worry what people will say about them. But you have to overcome this:
Doing something "simple" at first glance does not mean you aren't doing something meaningful, defensible, or valuable.
Don't worry what people will say. If your first version is so impressive that trolls don't make fun of it, you waited too long to launch.
One founder said this should be your approach to all programming, not just startups, and I tend to agree.
Now, when coding, I try to think "How can I write this such that if people saw my code, they'd be amazed at how little there is and how little it does?"
Over-engineering is poison. It's not like doing extra work for extra credit. It's more like telling a lie that you then have to remember so you don't contradict it.
9. Engage Users
Product development is a conversation with the user that doesn't really start till you launch. Before you launch, you're like a police artist before he's shown the first version of his sketch to the witness.
It's so important to launch fast that it may be better to think of your initial version not as a product, but as a trick for getting users to start talking to you.
I learned to think about the initial stages of a startup as a giant experiment. All products should be considered experiments, and those that have a market show promising results extremely quickly.
Once you start talking to users, I guarantee you'll be surprised by what they tell you.
When you let customers tell you what they're after, they will often reveal amazing details about what they find valuable as well what they're willing to pay for.
The surprise is generally positive as well as negative. They won't like what you've built, but there will be other things they would like that would be trivially easy to implement. It's not till you start the conversation by launching the wrong thing that they can express (or perhaps even realize) what they're looking for.
10. Change Your Idea
To benefit from engaging with users you have to be willing to change your idea. We've always encouraged founders to see a startup idea as a hypothesis rather than a blueprint. And yet they're still surprised how well it works to change the idea.
Normally if you complain about something being hard, the general advice is to work harder. With a startup, I think you should find a problem that's easy for you to solve. Optimizing in solution-space is familiar and straightforward, but you can make enormous gains playing around in problem-space.
Whereas mere determination, without flexibility, is a greedy algorithm that may get you nothing more than a mediocre local maximum:
When someone is determined, there's still a danger that they'll follow a long, hard path that ultimately leads nowhere.
You want to push forward, but at the same time twist and turn to find the most promising path. One founder put it very succinctly:
Fast iteration is the key to success.
One reason this advice is so hard to follow is that people don't realize how hard it is to judge startup ideas, particularly their own. Experienced founders learn to keep an open mind:
Now I don't laugh at ideas anymore, because I realized how terrible I was at knowing if they were good or not.
You can never tell what will work. You just have to do whatever seems best at each point. We do this with YC itself. We still don't know if it will work, but it seems like a decent hypothesis.
11. Don't Worry about Competitors
When you think you've got a great idea, it's sort of like having a guilty conscience about something. All someone has to do is look at you funny, and you think "Oh my God, they know."
These alarms are almost always false:
Companies that seemed like competitors and threats at first glance usually never were when you really looked at it. Even if they were operating in the same area, they had a different goal.
One reason people overreact to competitors is that they overvalue ideas. If ideas really were the key, a competitor with the same idea would be a real threat. But it's usually execution that matters:
All the scares induced by seeing a new competitor pop up are forgotten weeks later. It always comes down to your own product and approach to the market.
This is generally true even if competitors get lots of attention.
Competitors riding on lots of good blogger perception aren't really the winners and can disappear from the map quickly. You need consumers after all.
Hype doesn't make satisfied users, at least not for something as complicated as technology.
12. It's Hard to Get Users
A lot of founders complained about how hard it was to get users, though.
I had no idea how much time and effort needed to go into attaining users.
This is a complicated topic. When you can't get users, it's hard to say whether the problem is lack of exposure, or whether the product's simply bad. Even good products can be blocked by switching or integration costs:
Getting people to use a new service is incredibly difficult. This is especially true for a service that other companies can use, because it requires their developers to do work. If you're small, they don't think it is urgent.
The sharpest criticism of YC came from a founder who said we didn't focus enough on customer acquisition:
YC preaches "make something people want" as an engineering task, a never ending stream of feature after feature until enough people are happy and the application takes off. There's very little focus on the cost of customer acquisition.
This may be true; this may be something we need to fix, especially for applications like games. If you make something where the challenges are mostly technical, you can rely on word of mouth, like Google did. One founder was surprised by how well that worked for him:
There is an irrational fear that no one will buy your product. But if you work hard and incrementally make it better, there is no need to worry.
But with other types of startups you may win less by features and more by deals and marketing.
13. Expect the Worst with Deals
Deals fall through. That's a constant of the startup world. Startups are powerless, and good startup ideas generally seem wrong. So everyone is nervous about closing deals with you, and you have no way to make them.
This is particularly true with investors:
In retrospect, it would have been much better if we had operated under the assumption that we would never get any additional outside investment. That would have focused us on finding revenue streams early.
My advice is generally pessimistic. Assume you won't get money, and if someone does offer you any, assume you'll never get any more.
If someone offers you money, take it. You say it a lot, but I think it needs even more emphasizing. We had the opportunity to raise a lot more money than we did last year and I wish we had.
Why do founders ignore me? Mostly because they're optimistic by nature. The mistake is to be optimistic about things you can't control. By all means be optimistic about your ability to make something great. But you're asking for trouble if you're optimistic about big companies or investors.
14. Investors Are Clueless
A lot of founders mentioned how surprised they were by the cluelessness of investors:
They don't even know about the stuff they've invested in. I met some investors that had invested in a hardware device and when I asked them to demo the device they had difficulty switching it on.
Angels are a bit better than VCs, because they usually have startup experience themselves:
VC investors don't know half the time what they are talking about and are years behind in their thinking. A few were great, but 95% of the investors we dealt with were unprofessional, didn't seem to be very good at business or have any kind of creative vision. Angels were generally much better to talk to.
Why are founders surprised that VCs are clueless? I think it's because they seem so formidable.
The reason VCs seem formidable is that it's their profession to. You get to be a VC by convincing asset managers to trust you with hundreds of millions of dollars. How do you do that? You have to seem confident, and you have to seem like you understand technology.
15. You May Have to Play Games
Because investors are so bad at judging you, you have to work harder than you should at selling yourself. One founder said the thing that surprised him most was
The degree to which feigning certitude impressed investors.
This is the thing that has surprised me most about YC founders' experiences. This summer we invited some of the alumni to talk to the new startups about fundraising, and pretty much 100% of their advice was about investor psychology. I thought I was cynical about VCs, but the founders were much more cynical.
A lot of what startup founders do is just posturing. It works.
VCs themselves have no idea of the extent to which the startups they like are the ones that are best at selling themselves to VCs. It's exactly the same phenomenon we saw a step earlier. VCs get money by seeming confident to LPs, and founders get money by seeming confident to VCs.
16. Luck Is a Big Factor
With two such random linkages in the path between startups and money, it shouldn't be surprising that luck is a big factor in deals. And yet a lot of founders are surprised by it.
I didn't realize how much of a role luck plays and how much is outside of our control.
If you think about famous startups, it's pretty clear how big a role luck plays. Where would Microsoft be if IBM insisted on an exclusive license for DOS?
Why are founders fooled by this? Business guys probably aren't, but hackers are used to a world where skill is paramount, and you get what you deserve.
When we started our startup, I had bought the hype of the startup founder dream: that this is a game of skill. It is, in some ways. Having skill is valuable. So is being determined as all hell. But being lucky is the critical ingredient.
Actually the best model would be to say that the outcome is the product of skill, determination, and luck. No matter how much skill and determination you have, if you roll a zero for luck, the outcome is zero.
These quotes about luck are not from founders whose startups failed. Founders who fail quickly tend to blame themselves. Founders who succeed quickly don't usually realize how lucky they were. It's the ones in the middle who see how important luck is.
17. The Value of Community
A surprising number of founders said what surprised them most about starting a startup was the value of community. Some meant the micro-community of YC founders:
The immense value of the peer group of YC companies, and facing similar obstacles at similar times.
which shouldn't be that surprising, because that's why it's structured that way. Others were surprised at the value of the startup community in the larger sense:
How advantageous it is to live in Silicon Valley, where you can't help but hear all the cutting-edge tech and startup news, and run into useful people constantly.
The specific thing that surprised them most was the general spirit of benevolence:
One of the most surprising things I saw was the willingness of people to help us. Even people who had nothing to gain went out of their way to help our startup succeed.
and particularly how it extended all the way to the top:
The surprise for me was how accessible important and interesting people are. It's amazing how easily you can reach out to people and get immediate feedback.
This is one of the reasons I like being part of this world. Creating wealth is not a zero-sum game, so you don't have to stab people in the back to win.
18. You Get No Respect
There was one surprise founders mentioned that I'd forgotten about: that outside the startup world, startup founders get no respect.
In social settings, I found that I got a lot more respect when I said, "I worked on Microsoft Office" instead of "I work at a small startup you've never heard of called x."
Partly this is because the rest of the world just doesn't get startups, and partly it's yet another consequence of the fact that most good startup ideas seem bad:
If you pitch your idea to a random person, 95% of the time you'll find the person instinctively thinks the idea will be a flop and you're wasting your time (although they probably won't say this directly).
Unfortunately this extends even to dating:
It surprised me that being a startup founder does not get you more admiration from women.
I did know about that, but I'd forgotten.
19. Things Change as You Grow
The last big surprise founders mentioned is how much things changed as they grew. The biggest change was that you got to program even less:
Your job description as technical founder/CEO is completely rewritten every 6-12 months. Less coding, more managing/planning/company building, hiring, cleaning up messes, and generally getting things in place for what needs to happen a few months from now.
In particular, you now have to deal with employees, who often have different motivations:
I knew the founder equation and had been focused on it since I knew I wanted to start a startup as a 19 year old. The employee equation is quite different so it took me a while to get it down.
Fortunately, it can become a lot less stressful once you reach cruising altitude:
I'd say 75% of the stress is gone now from when we first started. Running a business is so much more enjoyable now. We're more confident. We're more patient. We fight less. We sleep more.
I wish I could say it was this way for every startup that succeeded, but 75% is probably on the high side.
|
|
| Apache Virtual Hosting Basics . . |
[24 Oct 2009|01:29am] |
Using "Name-based Virtual Hosts" will typically suffice for most needs . . (Paraphrased from the Apache Documentation)
To use name-based virtual hosting, one must designate the IP address[es] (and optionally port[s]) on the server using the NameVirtualHost directive. Typically, any and all IP addresses on the server will be used which can be specified using the * wildcard as the argument to NameVirtualHost.
Next, one must create a <VirtualHost> block for each different host that is served. The argument to each <VirtualHost> directive should match an argument to one of the NameVirtualHost directives (ie, an IP address, or * for all addresses). Inside each <VirtualHost> block, there must be at least one ServerName directive to designate which host is being served and a DocumentRoot directive to point to that host's content.
Remember to create a <VirtualHost> block for an existing host when adding virtual hosts to an existing web server. The ServerName and DocumentRoot included in this virtual host should be the same as the global ServerName and DocumentRoot. Listing this virtual host first in the configuration file will make it the default host.
Example for "www.domain.tld" & "www.otherdomain.tld" both hosted at the same IP address:
NameVirtualHost *
<VirtualHost *> ServerName www.domain.tld DocumentRoot /www/domain </VirtualHost>
<VirtualHost *> ServerName www.otherdomain.tld DocumentRoot /www/otherdomain </VirtualHost>
More than one domain can be served by a virtual host by using the ServerAlias directive, placed inside the <VirtualHost> section. For example, if added to the <VirtualHost> block above:
ServerAlias domain.tld *.domain.tld
then requests for all hosts in the domain.tld domain will be served by the www.domain.tld virtual host. The wildcard characters * and ? can be used to match names.
One note about directives . . Configuration directives set in the main server context (outside any <VirtualHost> container) will be used only if they are not overriden by the virtual host settings.
Now when a request arrives, the server will first check if it is using an IP address that matches the NameVirtualHost. If it is, then it will look at each <VirtualHost> section with a matching IP address and try to find one where the ServerName or ServerAlias matches the requested hostname. If it finds one, then it uses the configuration for that server. If no matching virtual host is found, then the first listed virtual host that matches the IP address will be used.
As a consequence, the first listed virtual host is the default virtual host. The DocumentRoot from the main server will never be used when an IP address matches the NameVirtualHost directive. If you would like to have a special configuration for requests that do not match any particular virtual host, simply put that configuration in a <VirtualHost> container and list it first in the configuration file.
|
|
| Apache's mod_access reminder . . |
[23 Oct 2009|06:38pm] |
Ordering is one of:
Allow,Deny First, all Allow directives are evaluated; at least one must match, or the request is rejected. Next, all Deny directives are evaluated. If any matches, the request is rejected. Last, any requests which do not match an Allow or a Deny directive are denied by default. Deny,Allow First, all Deny directives are evaluated; if any match, the request is denied unless it also matches an Allow directive. Any requests which do not match any Allow or Deny directives are permitted.
Keywords may only be separated by a comma; no whitespace is allowed between them.
| Possible Results: | Result of Allow,Deny | Result of Deny,Allow |
| Matched Allow only | Request allowed | Request allowed |
| Matched Deny only | Request denied | Request denied |
| No match | Default to second directive: Denied | Default to second directive: Allowed |
| Matched both Allow & Deny | Final match controls: Denied | Final match controls: Allowed |
|
|
| "The Root to the Branch" by Lee Hyun-soo |
[20 Oct 2009|12:58pm] |
| [ |
mood |
| |
thankful |
] |
This is a rather touching poem my aunt had sent me a while back which got buried in my stuff. Didn't find it until I moved to LA . . It's been translated from Korean.
When you were a young sprout, you emerged from the ground, Out from the darkness, Eventually rising up towards the sun, I only went deeper and deeper into the ground, My blind hands making its way into the darkness. When your trunk continued to grow and your spring green leaves started to appear, As usual, I moved more and more underground in the closed darkness. When your flowers finally bloomed and you played with the dancing bees and butterflies, I endured hardship from the huge rocks underneath. With no eyes to see I had to find an opening as tiny as the end of a needle. One day you were lashed by a fierce rainstorm, When you groaned from your torn and twisted branches, I only felt frustration for you. I believed. I embraced this darkness with my whole body, So that you would not fall. And when all the tests disappeared and autumn arrived, You grew beautiful fruits. In order for me to gather as much water as I could, I again moved deeper into the ground. Even when your leaves and fruits fell to the ground and you took your winter rest, I gasped for breath in the soil. When spring returns you will live gloriously once again. Even if you forget me, I will not mind. Even if you forget me like the black darkness, I will not mind.
|
|
| Lessons on LA geography . . |
[16 Oct 2009|03:04pm] |
|
The area loosely bounded by the I-405 on the west, I-10 & I-5 on the north, I-605 on the east and I-405 on the south is what's referred to as "South Central". This is approximately a 15mi. x 15mi. area . . it's a fairly significant portion of the city and county.
|
|
| Apache 2.2 & PHP 5.2.11 Deployment on Windows |
[15 Oct 2009|02:04pm] |
Apache: * Change DocumentRoot * Check security directives
PHP: * Set up PHPRC environmental variable * Comment out non-essential extensions * Alter doc_root & include_path * Verify extension_dir * Verify LoadModule directive for PHP in httpd.conf * Comment out PHPIniDir directive for PHP in httpd.conf
|
|
| My life in dimensions . . |
[12 Oct 2009|05:19pm] |
|
It's kinda' neat. I've just moved pretty much all my belongings into my new apartment and can fit it all in my room. I think it might be the biggest room I've ever lived in at 12'7" x 10'4" with a 2'3" x 10' closet. Actually, I think my room in NY was bigger but I didn't have such a spacious closet before . . nor did I have such a high ceiling. I'm digging this super-high, sloped ceiling with a random window. It's totally useless but makes it feel quite roomy . .
|
|
| Undergrad Rankings 2009 |
[12 Oct 2009|05:17pm] |
Rank 1 Harvard University Cambridge, MA 100 Tuition and Fees: $37,012 19,230 7.9% Rank 1 Princeton University Princeton, NJ 100 Tuition and Fees: $35,340 7,497 9.9% Rank 3 Yale University New Haven, CT 98 Tuition and Fees: $36,500 11,446 8.6% Rank 4 California Institute of Technology Pasadena, CA 93 Tuition and Fees: $34,584 2,126 17.4% Rank 4 Massachusetts Institute of Technology Cambridge, MA 93 Tuition and Fees: $37,782 10,299 11.9% Rank 4 Stanford University Stanford, CA 93 Tuition and Fees: $37,881 17,833 9.5% Rank 4 University of Pennsylvania Philadelphia, PA 93 Tuition and Fees: $38,970 19,018 16.9% Rank 8 Columbia University New York, NY 91 Tuition and Fees: $41,316 23,196 10.0% Rank 8 University of Chicago Chicago, IL 91 Tuition and Fees: $39,381 12,386 27.9% Rank 10 Duke University Durham, NC 90 Tuition and Fees: $38,975 14,060 22.4% Rank 11 Dartmouth College Hanover, NH 89 Tuition and Fees: $38,679 5,848 13.5% Rank 12 Northwestern University Evanston, IL 87 Tuition and Fees: $38,461 18,431 26.2% Rank 12 Washington University in St. Louis St. Louis, MO 87 Tuition and Fees: $38,864 13,338 21.7% Rank 14 Johns Hopkins University Baltimore, MD 86 Tuition and Fees: $39,150 19,858 25.4% Rank 15 Cornell University Ithaca, NY 85 Tuition and Fees: $37,954 20,273 20.7% Rank 16 Brown University Providence, RI 84 Tuition and Fees: $38,848 8,318 13.7% Rank 17 Emory University Atlanta, GA 80 Tuition and Fees: $38,036 12,755 26.6% Rank 17 Rice University Houston, TX 80 Tuition and Fees: $31,248 5,456 23.0% Rank 17 Vanderbilt University Nashville, TN 80 Tuition and Fees: $38,579 12,093 25.3% Rank 20 University of Notre Dame Notre Dame, IN 78 Tuition and Fees: $38,477 11,731 26.7% Rank 21 University of California--Berkeley Berkeley, CA 76 In-state: $8,352; Out-of-state: $30,022 35,409 21.6% Rank 22 Carnegie Mellon University Pittsburgh, PA 75 Tuition and Fees: $39,833 11,064 37.9% Rank 23 Georgetown University Washington, DC 74 Tuition and Fees: $39,212 15,318 18.8% Rank 24 University of California--Los Angeles Los Angeles, CA 73 In-state: $8,228; Out-of-state: $29,897 39,650 22.8% Rank 24 University of Virginia Charlottesville, VA 73 In-state: $9,870; Out-of-state: $31,870 24,541 36.7% Rank 26 University of Southern California Los Angeles, CA 72 Tuition and Fees: $39,124 33,747 21.9% Rank 27 University of Michigan--Ann Arbor Ann Arbor, MI 71 In-state: $11,738; Out-of-state: $34,230 41,028 42.1% Rank 28 Tufts University Medford, MA 70 Tuition and Fees: $40,342 10,030 25.5% Rank 28 University of North Carolina--Chapel Hill Chapel Hill, NC 70 2008-2009 In-state: $5,396; Out-of-state: $22,294 28,567 34.0% Rank 28 Wake Forest University Winston-Salem, NC 70 Tuition and Fees: $38,622 6,862 38.4% Rank 31 Brandeis University Waltham, MA 67 Tuition and Fees: $38,762 5,327 32.4% Rank 32 New York University New York, NY 66 Tuition and Fees: $38,765 42,189 32.1% Rank 33 College of William and Mary Williamsburg, VA 64 In-state: $10,800; Out-of-state: $30,592 7,892 34.1% Rank 34 Boston College Chestnut Hill, MA 63 Tuition and Fees: $39,130 13,903 26.2% Rank 35 Georgia Institute of Technology Atlanta, GA 62 In-state: $7,506; Out-of-state: $25,716 19,413 60.9% Rank 35 Lehigh University Bethlehem, PA 62 Tuition and Fees: $38,630 6,994 27.9% Rank 35 University of California--San Diego La Jolla, CA 62 In-state: $8,798; Out-of-state: $30,819 27,520 41.6% Rank 35 University of Rochester Rochester, NY 62 Tuition and Fees: $38,690 9,712 42.7% Rank 39 University of Illinois--Urbana-Champaign Champaign, IL 61 In-state: $13,060; Out-of-state: $26,714 43,246 69.1% Rank 39 University of Wisconsin--Madison Madison, WI 61 In-state: $8,020; Out-of-state: $22,270 42,030 52.7% Rank 41 Case Western Reserve University Cleveland, OH 60 Tuition and Fees: $36,238 9,814 73.3% Rank 42 Rensselaer Polytechnic Institute Troy, NY 59 Tuition and Fees: $39,165 7,521 44.1% Rank 42 University of California--Davis Davis, CA 59 In-state: $9,364; Out-of-state: $31,385 30,568 52.6% Rank 42 University of California--Santa Barbara Santa Barbara, CA 59 In-state: $9,055; Out-of-state: $30,724 21,868 49.2% Rank 42 University of Washington Seattle, WA 59 In-state: $7,692; Out-of-state: $24,367 41,517 61.0% Rank 46 University of California--Irvine Irvine, CA 58 In-state: $8,775; Out-of-state: $28,796 26,984 48.7% Rank 47 Pennsylvania State University--University Park University Park, PA 57 In-state: $14,416; Out-of-state: $25,946 44,406 51.2% Rank 47 University of Florida Gainesville, FL 57 In-state: $4,373; Out-of-state: $23,744 51,474 39.5% Rank 47 University of Texas--Austin Austin, TX 57 In-state: $8,930; Out-of-state: $30,600 49,984 43.5% Rank 50 Tulane University New Orleans, LA 55 Tuition and Fees: $40,564 11,157 27.0%
|
|
| A Pet PSA |
[04 Sep 2009|02:39am] |
| [ |
mood |
| |
sad |
] |
Howdy fellow animal lovers!
So I've mentioned this to some folks since . . well, we work together and see each other every day and I've been uber distracted recently. But my super awesome feline buddy, Mushroom, has renal lymphoma and is gradually slipping away. It sucks and makes me sad ( = angry in bong speak) but that's not the point.
What I'm writing about is some things I've learned over the past year after watching my childhood dog die of colon cancer and now with Mushy (I could just be a terrible person for not knowing these things in advance but no one really mentions these things in the first time pet owner manual.):
1. Annual dental cleanings are important once they're a few years old. Vets may not even recommend or notice the furry one's teeth but it's important to do anyway, at least every other year. Be forewarned though that it's pricey, starting at $350 for kitties and more for dogs. (Mushy lost most of his teeth a few months ago and it's a really sad sight. Stupid vet a year ago mentioned nothing. Makes me want to trade in pacifist happy dancing bong for punchy kicky angry bong.)
2. Pet insurance actually might not be a scam. Mushy was in the hospital for just three days but racked up about $4000 in charges. About $1000 covered special procedures like two ultrasounds, but pretty typical treatment and hospitalization for an ailing furball can easily cost $1000 a day. When I think about the $30/mth for pet insurance and how it pays off 50% of costs, I'm now thinking it probably makes sense to pick up some coverage once my next furry ones become middle aged. A lot of cats and dogs seem to develop some form of cancer after they're over the hill and shelling out absurd amounts of money once this sort of thing suddenly smacks you in the face just kind of adds insult to injury. (Oh yah, Mushy's recurring chemo is running $300/mth but could've been $800/wk for treatments that address a different form of cancer.)
3. Even a couple of days of reduced appetite and increased thirst is indicative of something kind of whack going on in the little one. (I really kick myself for this one.) Should've realized that the higher metabolism translates to faster trouble. But Mushy was almost a full pound too light due to dehydration and lack of food after behaving abnormally for the week I was on vacation. It's probably a good idea to get a sense of exactly how much food and water one leaves out and how much gets consumed in a day just to set a baseline. And then, probably should mention what's abnormal to pet-sitters.
Ok, I'm done with my feel good PSA. Hope this is useful for you and your current and future furry ones. Thanks for humoring me too.
Peace, Bong & Mushy
|
|
| PHP MySQLi tips when using SPs |
[13 Aug 2009|12:55am] |
|
Depending on the state of the MySQLi object, it could throw "commands out of sync" errors or just very quietly refuse to return results. To help debug the process, it's useful to grab the MySQLi->info, MySQLi->affected_rows, and/or MySQLi->fields properties prior to any future queries just to find out what the current state of the connection object is.
|
|
| Basic tagging protocol . . |
[11 Aug 2009|06:17pm] |
1. svn update
2. svn info
3. svn ls <BASE_SVN_URL>/tags <- Get list of tags to verify the next version
4. svn log --stop-on-copy <BASE_SVN_URL>/tags/<LATEST_TAG> <- Get the last revision before this current version
5. svn log -r <LAST_CHANGED_REVISION>:HEAD <- Verify the work within this current version
6. svn cp -r <LAST_CHANGED_REVISION> <BASE_SVN_URL>/trunk <BASE_SVN_URL>/tags/<NEW_TAG> <- Tag
7. Increment version
|
|
| PHP variable assignment . . |
[03 Aug 2009|09:51pm] |
Some things to remember . .
Assignments to an object automatically are by reference. Assignments to arrays or locations in arrays are by value. Even creating an array or a multi-dimensional array will copy all involved arrays by value unless specifically dereferenced!
|
|
| PHP's hash performance . . |
[03 Aug 2009|09:45pm] |
This basic profiling code . .
$starttime = microtime(true);
$sitedate = array();
for ($i = 0; $i < 3000; $i++) {
for ($j = 0; $j < 365; $j++) {
$sitedate["site$i"]["date$j"] = "value-$i-$j";
}
}
$endtime = microtime(true);
echo "Build Time = " . ($endtime - $starttime) . "\n";
$starttime = microtime(true);
for ($i = 0; $i < 3000; $i++) {
for ($j = 0; $j < 365; $j++) {
$junk = $sitedate["site$i"]["date$j"];
}
}
$endtime = microtime(true);
echo "Look-up Time = " . ($endtime - $starttime) . "\n";
. . yields some interesting results . .
Build Time = 2.6185610294342
Look-up Time = 1.4036040306091
Build Time = 2.5939750671387
Look-up Time = 1.4107542037964
Build Time = 2.6068668365479
Look-up Time = 1.407210111618
|
|
| JS Execution context notes . . |
[31 Jul 2009|01:23pm] |
Execution Context
- scope[] <- Activation+Variable => [ .arguments, .<local>[.vars, .funcs], .this ]
|
\- Enveloping execution context's scope[]
|
|
| navigation |
| [ |
viewing |
| |
most recent entries |
] |
| [ |
go |
| |
earlier |
] |
|
|
|
|