cb's rants
The older rants are semi-regularly moved off this page. You can always read the old
rants :
11/2007 to 03/2008
07/2006 to 11/2007
12/2005 to 07/2006
06/2005 to 12/2005
01/1999 to 06/2005
You can see some of my photos at Flickr .
Of course that's going down the tubes just as fast as developers can put up condos.
Often when writing posts like this, I don't realy know WTF I'm talking about, but it's way more interesting if I just fill in all the details with what I think is probably true. My guesses are right like 90% of the time anyway, so whatever.
Tip from Annoyances on how to turn off the system Beep using the hidden devices list in Device Manager. My laptop does this when I plug the power cord in, it's very annoying. better version of the instructions
The thing that makes it amazing is nobody is violating the spirit of the free exchange. If people put out loads of junk it would break down. I mean in most cities if you just set up an area where people could leave things to give away, the fucking redneck scum would show up with pickup trucks and dump their broken washing machine. It would instantly be overwhelmed with garbage and nobody would ever go to take things away, just to dump trash. In SF people don't put out much junk for the most part.
The underclass of "scourers" also helps. The scourers swarm onto the streets when the gentry retreat into their mansions; they collect all the recycling, and they take any left over free items on the curbs and gather them to sell and make some money. The scourers are like a benevolent parasite, like cockroaches that scurry out to pick up the crumbs dropped from the cows fat on the riches of society.
Biking in SF I learned the trick of watching the people inside the cars. I've long known the trick of watching the car's posture - you can see them accelerate, deccelerate, people edge to one side or the other before turning, you can see which way the wheels are pointing, etc. - but in SF for the first time I really started looking through car windows to see the people inside. You don't trust anything, you don't rely on the lights or your own obeying the law to keep you safe. This often leads you to break the law, because your obeying the law has little to do with your safety.
And the moving truck broke down, and the apartment here was locked when it was supposed to be open, and my landlord is on vacation and it's hard to get a hold of him, blah blah yadda yadda.
Anyway, I'm fucking pissed and depressed. Our apartment here is absolutely filthy. The previous tenants just bailed out and left a ton of their crud behind and didn't clean it at all. It especially pisses me off because Alissa and I did such a damn good job of cleaning the place I just left. It's way cleaner than when I moved in, hell it might be the cleanest apartment I've ever seen; we scrubbed everything, from roof to floor, I rented a steam cleaner and did the carpets, it's immaculate; you could lick any surface in the apartment and be happy about it. And I get here to this filth. The landlord promises to get it cleaned, but it's too fucking late, I'm already here, and the movers come tomorrow, the great chance to really clean it when it's empty has passed. And I've been paying rent since Aug 1 so he had plenty of extra time to take care of it and didn't.
Everyone fucking sucks. If you want anything done you have to do it yourself. Fuck.
If you can't take car of your shit, okay, that's fine, you know I kind of expect you to fuck up and not take care of your shit. But please tell me about it soon enough for me to do it myself. Don't just wait until it's too late and let me discover that you couldn't handle your shit.
It occurs to me that this is a lot like the way evolution works on a diverse population. Let's say each little town's cheese-making technique is one genotype. Over time, the cheese makers in that town try things slightly differently - this is the random variation of genome reproduction. Those variations are selected for by the townspeople, the fitter ones succeed and the cheesemakers adopt them and make more of them. Occasionally trade brings two genotypes together and they exchange ideas - this is the "crossing over" and allows for big changes and lucky random variations to get out into the rest of the population.
Contrast to how things work now; we have the huge advantage of rapid communication and recorded knowledge, which means that there's far less variation. You no longer have pockets where people don't have access to the "world's best cheese recipe". If some certain technique is selling the best in towns, everybody adopts that. If you look at American food production, it developed in the age of technology, and you can see the destructive effect of all the producers chasing the most popular product.
Now with the craft movement we have some improvement, but it's still not really a healthy evolution-like system. Crafters tend to be amateurs with money who get into the field; they start by learning from some resource, and then if there is some big improvement in technique, it gets out on the internet and everyone copies it. It's this instant spread of changes which is actually not good for evolutionary development. All the craft agents are not really working independently making their own variations and developing their own favorite method over time.
I'm particularly scared because I imagine they'll take 500 years to finish the damn thing. Also, after they tear down the street-level buildings and put in the underground terminal the plan is to put in some 5+1 mixed development buildings above it, which I'm sure will house horrible people and horrible shops.
All of these can be measured by your "Game". I define Game as your acheived level of success in a given field, divided by the level that you should achieve naturally with your inherent qualities. The total level of success in a given field is zero-sum over the population and each person has a certain natural level they should be operating at. If one person with good game does better, it means others do worse.
For example, your Salary Pulling Game is just your salary divided by what you really should be making for your talent level; good hustlers might have a game factor as high as 2.0 ; people with no game who just rely on their natural abilities and hope they get paid fairly might be running as low as 0.5
Just because you have some success at something doesn't mean you are doing well; the right way to measure success is your game factor, whether or not you are beating expectations.
This is obvious of course, but make it a philosophy. Apply it to everything. Don't just read something that amusing you, read something that educates you, or pushes your taste limits. Don't go to the same restaurant again - go somewhere new and add to your knowledge and experience. Want to lose weight? don't just diet, add muscle.
BTW I agree if you retardedly put on way too much lighter fluid, or if you put it on after the initial lighting, you will in fact taste it. Also if you put the meat on the fire too soon before the coals have grayed and the fluid has burned off, then you might also taste it. But if you actually use it right, then you will not taste it. Especially not on a steak or something, you might taste it on something super bland and absorptive like unflavored barbecued tofu. Anyway, lighter fluid was just intended as an example of how to make odds for casual prop bets like this. Many people naively just make a 1:1 bet which is retarded free money for the guy claiming to tell the difference.
As a process experiment I consider this a disaster. The code is now in a form that is impossible for me to update. If I make fixes to my libraries they won't get into this code. It contains crippled versions of my library functions which I don't have confidence in because they aren't as heavily tested as the library functions I use all the time. It's a lot harder to read IMO sticking everything in a header and it's not as clear what are little generic helpers vs. what is the actual driver code.
I did some really ridiculous stuff to myself back then. When I went to Europe for a few months after college, I took Weinberg's Quantum Theory of Fields. As I rode the rails I would work through it. When I "worked through" text books to teach myself stuff, I would make myself do most of the homework problems to make sure I was really learning it. I would also keep parallel notebooks and write down all my thoughts, basically writing like lecture notes as if I was going to teach the subject. Any time I thought there was a gap in the textbook, I would work it out. Like when he would say "from equation 12.4 we can derive ..." and I would think "WTF how does that follow?" I would force myself to work it out, so I have pages and pages of just doing work to prove things he states in the books. Of course now I wish I was just drinking and chasing girls then.
I was unbelievably pompous. I guess I still am (see, for example, "how to cut a bell pepper"), but at least now I'm aware of it, and it's sort of tongue-in-cheek now. Hell, the paper I wrote on PPM is called "Solving the Problems of Context Modeling", I'm sure the reviewers who read it did some serious eye-rolling. The funniest thing is just the way I would title things. I would write little notes to myself on thoughts, stuff like "Finding Fermi Statistics in Lorentz Group 360 Degree Rotations" , in big letters like that at the top of the page, and then I would always include "by Charles Bloom". As if some day it would be in some library archives somewhere for future students to admire.
For example, one solution would be to let you change your account numbers whenever you want. This is just a number in a computer database, it's not like it costs them anything to let you have a new number. The old number would still be in your credit report, so it's not like you could hide your financial sins. So like the old numbers stick around but become read-only keys, and only the new number has write access to your finances (eg. getting new credit cards, taking out loans etc. requires the new number). This should really apply to your social security number too.
That reminds me, you should be able to make all your information require approval. For example, credit queries should require your approval. You should get a notice saying so and so wants to see your credit report, do you approve? Y/N. You should be able to do the same for ACH electronic bank transfers, etc.
The other obvious thing you could do is temp proxy numbers. Instead of putting in your real credit card number to buy something on a web site, you generate a temp Id Number from your credit card company which is only authorized for that one transaction. Again this would be super easy and make you super secure.
I'm not even considering methods that require a central safe clearing house for identity verification. If the government actually got involved they could make a safe id number trivially using something like a public/private key system where you only ever give out your public key to others, but I presume that won't happen, so I'm just mentioning things that the private sector (banks, credit card companies, etc.) can do within the current system.
ACH bank transfers are ridiculously insecure at the moment. Basically anybody who's seen one of your checks can instantly pull any amount of money directly out of your bank account, because they've got your account number and bank routing number. The best way to protect yourself at the moment is to have a "private account" and a "sandbox account". You keep most of your money in your private account and you never give out the number from that account to anyone - which means you do not even write checks from it. You keep a little bit of money in your sandbox, that's the account you hook up to ACH's and write checks from. Every so often you transfer from your private to your sandbox as necessary. If you get a leak, worst case you lose what's in the sandbox. You can also be more secure by closing the sandbox periodically and making a new one.
The book "Once in Europa" was beautiful. It's definitely better than "Pig Earth". The poetry is awful, just skip it, and it sort of loses steam near the end of the main story, but somewhere in the middle the prose takes flight and carries you away.
Most peer groups of hyper-intelligent guys teach each other this way. 2+2 is very heavy on the mockery, which is very useful on a public web forum because it makes the dumb people shut up so the posts tend to be high quality. Like if you just tell people "please read the FAQ" they don't do it, but if all the smart guys you admire go "wtf are you retarded? that's so basic it's in the fucking faq" then you shape up. Caltech was similar; not that you would be openly mocked, but you just had the feeling everyone was judging you and laughing inside if you asked a stupid question, so you tried to be very careful.
Of course the bigger issue for me is probably not *how* I try to change people but rather simply the fact that I do try to change people.
I really like a lot of the stuff I did in there. Some is very generic programming stuff :
One trivial thing worked really well - I generated reports in HTML. On each poker spy window you can click a button to see the recent hand history. I write an html file then just pop a browser pointed at it. This is so much nicer than all the custom GUIs people do because a browser actually has nice layout and fonts and all that. Plus, it means the user can just copy-paste out HTML of hands to share with friends or whatever. It's also smart about what it shows. It doesn't dump every single hand, it just dumps the last few hands, and then also the very significant hands in the past. This makes it much easier to scan and find the information you really want.
Another that worked nicely was the way I did my database. The hand history database is kept in two files - one a raw journal of every hand seen in a very complete flexible format; this never goes out of date. The other file is a flat baked memory dump of the cached player stat structures, so it can be loaded very fast. The journal only ever gets appended to, and I also used a special temp append file to make the appending crash-safe so that you never corrupt your journal. Anyway, the part I really liked is that when the cached data structures change or whatever, the program detects it and loads the journal instead automatically and regenerates the fast version. While developing I never have to worry about my fast structure being backwards compatible, and I never have to run a "database fix" program, I just keep running GoldBullion, usually it starts up instantly, and sometimes it detects a bad cache file and takes a while to start up. Very nice IMO.
Some of the debugging stuff was also very cool. Checking on the bots is not trivial because there are so many situations they can be in, and many of them are trivially easy, you can't really just give them a regression test that you can step through and verify they're working - they might look good on 100 hands and then do something weird on the next; it's also really hard to define what right or wrong behavior is. But there are things you can do. For one thing having the old fixed-function TTH bots was a nice baseline. It lets you play your research bot against them and not worry about them being buggy or changing. Just letting the bots sit and play against each other was very good; I would use it in 2 ways - 1. I could log the hands generated and make statistics on the players just like I could on live players, and then you can look at the stats of how your bot is playing over 100,000 hands and see flaws in things like the aggression numbers or the continuation bet %, and 2. I could use the same tools I used on real histories to filter for the very interesting hands and manually examine how the bots played those hands. This leads to the next cool debugging tool - I could make the bots replay any hand history, and have them log a bunch of info about what they're thinking at each step. I could also output the 13x13 bitmap image of the bayesian hand probabilities and see them change over time visually.
It's weird, right now a ton of people that I know are moving to Seattle (or Olympia, WTF boy?). Most of my favorite people in the industry are up there now or will be in the next few months. That's pretty sweet, though it would be better if we were all congregating somewhere with more sun.
Talking on your cell phone in public. This is so 1990's valley girl. It's completely uncouth and shows a complete lack of manners and refinement. It's roughly equivalent to cutting your nails or picking your nose in public. Bluetooth conversations are even worse.
Showing off your hi-tech gadgets. Gadgets are no longer cool. Technology is not amazing. If it's an effective tool for helping you live better, then use it to live better. The gadget is no longer and end in itself, it is a means. Are you going to show off how amazing scissors are next? Get over it.
Talking about Myspace or Facebook or pretty much anything on the internet. ZOMG you do stuff on the interweb? What's that? How fascinating and unique. Oh wait, no it's neither fascinating nor unique. Yes we all have fucking blogs and we read blogs, but we don't talk about it. This is akin to recounting the plot of your favorite TV shows. It's a mindless pleasure that you can indulge at home alone.
Snarky comments making fun of others. Your attempts at humorous condescension just sound like bitterness and pessimism; they aren't as funny as you think, and we've all thought of it before. In the rare case that you actually capture les mots justes to really skewer someone, then go ahead, but you probably didn't. We're all ridiculous, they're just trying to live.
Complaining about Windows or C++ or the US government or how dumb the populace is. Yeah yeah, it sucks, whatever. That's not interesting. If you'd like we can talk about concrete practical ways that we can improve our programming environment despite the suckitude of Windows and C++, or we can talk about how we can improve America despite our broken system.
Making lists of stuff that's over. Also, writing douchey things but then mocking yourself to try to absolve the sin.
I'm really not looking forward to commuting. Commuting starts my day off all sour and cranky. I really like to put the unpleasantness near the end of the day so I can work out and get drunk and go to sleep and forget about it. The morning should be slow and calm and peaceful, a time for hope, when you still think of the world as good and full of possibilities, you're excited about all the things you can accomplish. I like to nurture that energy and get some good thinking and work done before I get frazzled.
ADULT Tickets US $22.00 x 2 Total Convenience Charge(s) US $9.05 x 2 Total Building Facility Charge(s) US $2.00 x 2 Order Processing Charge US $3.36 TicketFast® US $2.63 TOTAL CHARGES US $72.09 VISA Total billed : US $73.01
There have been 16 class action suits against Ticketmaster, but none have produced anything that I can tell. I'm not sure why they aren't subject to antitrust or anticompetetive laws.
One thing I've realized from unemployment is that a lot of what makes bohemian kids cool is just their complete lack of anything to do. They're very chill because they have no todo list. They're up for getting drunk or high or partying whenever because they don't have to do anything tomorrow. They have lots of free time and energy and they're bored, which lets them do art projects and make crazy outfits. They wander around the city and go to bars a lot which make them familiar with everything and friendly with proprietors which make them seem in the loop. Basically all the attributes I thought of as admirable stem from just being idle. (of course there is something admirable about them - they're having fun with their idleness, not just being pure layabouts like the traditional white trash drunkard).
1 GB can hold 5000 novels. (1 M letters per novel at 0.2 bits per character)
1 GB can hold about 15 CDs. (10^9 / 192 / 1000 * 8 / 60 / 45 = 15.4)
I think it's intuitively obvious that 333 novels contains more real information than one CD.
Here's another way of seeing it : an entire human genome is only 0.8 GB. I can write the code to make a musician, and I still have 0.2 GB left over in which I can store 10,000 songs in sheet music, as well as detailed instructions on how to manufacture instruments. This is a program to produce music (the fact that we can't currently execute this code is irrelevant to the theoretical consideration, it is executable in principle). I just encoded 10,000 songs in 1 GB. (albeit with a lot of loss in a PSNR sense)
Basically audio is jam packed full of useless detail. For example, if somebody sits and tries to strum a chord on a guitar exactly the same way over and over, the raw wav data for every one of those chords will look vastly different, but to our ear they all sound very similar, and the differences are just randomness. If you had a chord generator that could randomly make a sound that was somewhere in that space of what he was playing, you could let the generator replace all those notes. In a raw PSNR sense they would be way way off, but the experience would be identical to a human listener.
Let me add a little more detail :
Anything that a compressor does not learn, it is transmitting. So, for example, text compressors are still not really learning grammar, which means they are implicitly transmitting the information about the grammar. That means within the 0.2 bpc output, a lot of that information is actually the rules of grammar.
A basic audio compressor is also obviously transmitting tons of things it's not learning about the music. It's not learning what sound comes from what instrument, what those instruments tend to sound like (eg. a waveguide simulation that reproduces that sound), what instruments are vocal and the throat simulation parameters of that vocalist, etc.
However, even if the audio compressor learned all that stuff it would still be really wasteful. The problem is there's just so much irrelevant nonsense in audio. As a simple example, a pretty decent model for audio is a bunch of synth wave packets with effects. A wave packet is some amplitude curve applied to some periodic wave shape. Each of these has various parameters that can change over time. Each step also has random noise on it. The parameters of the noise (mean & sdev) are important, but the exact values that come out of the noise are not. Also, the phase of the basic wave shape at the base of the synth is irrelevant to how it sounds. But if you regenerate the exact same sound again with different random noise on the params and different phase, it will come out looking totally different.
If for some reason you still disagree, here's another way to see this : you can go to [KONTROL] or something and download some techno DJ mix MP3's. These are generally around 80 MB an hour. However, obviously they can be reproduced from the original tracker data, which is note timing + effect parameters over time. The total data for all that is maybe a few MB, perhaps less - it's very tiny. Modern techno is not trivial like MIDI, they're running a ton of complex processing with parameters that change over time. Now obviously techno is simpler than some guitar song - but the actual information content is not several orders of magnitude different.
All the things you learn over time that really help you live tend to be these sort of trite one-sentence platitudes. Unfortunately, they are also things that you can't really learn from just by hearing; you have to go through some long personal experience, and then finally you see the wisdom of the little saying and it starts to actually affect how you behave.
Anyway, I've been thinking through this thing I learned about communication. People don't necessarily say what they mean or mean what they say, but they are trying to tell you something, so if you think about what made them say what they did, you can see what they're really thinking. The profound thing for me was actually the reversal - when you say something, people are not in fact just listening to your words, they're trying to guess what you really mean behind those words, or why you said that. So if you're trying to convey a certain message, you don't necessarily accomplish that by making words that contain that message.
When you listen to someone, there are many levels. First, there's the actual logical content of their words. Often, you should just ingore that. Then there's what they meant to say in their words. For example, somebody might ask a question badly, like "hey cbloom, why do you look boost so much?" , and if I was a retard I would go off about how I don't really love boost, I love the STL, but if I would listen to the question they *meant* to ask, I could just answer that, which is something like "why do you like standard libraries so much?".
Then on the next level you've got not just what they meant to say, but what message they meant to convey by saying that. This is where you think to yourself "why did they choose to say that?" and of course there's nonverbal communication as well. There are tons of examples of course, but a common one is just when someone tries to make chitchat with you. The actual words are garbage, but the real message is "hey, I want to talk to you". If their chitchat was lame and you don't give much of a reply, you're saying "fuck off, I don't want to talk to you". If you want to encourage the chitchat you should reply in a nice way even if its not logical in purely verbal sense based on what they said.
It didn't really hit home for me until I studied PUA a while ago. There's a lot of evil stuff in PUA, but a large part of it is just about being aware of communication and what messages you're really sending and what messages other people are really sending.
Similarly you need to be aware that what you mean doesn't come across in your words. Don't just say the words that express your idea, because people are not listening to your words. Instead realize how people hearing will take those words, and say the words that create the impression you want. A classic one of course is with guys trying to show they're nice guys at a bar, you go up to a girl and say "hi" and then get into "a like your dress" ; you may think these words are conveying that you're a good guy and you're interested, but the message that's going across is "I'm a boring loser who's uncreative and timid and perhaps just wants to bed you".
In some sense this seems too analytical and manipulative, but it sort of has to be. If you just listen and speak naively, you will be miscommunicating all the time. One of the things that's always tripped me up is the whole line of questions like "does this make my butt look fat?". God, what a retarded question, if I just listen to the words, it makes me angry and not want to cooperate, but if you stop and listen to the real message, they're saying "hey honey, I feel insecure, compliment me", and that's a totally reasonable thing to say and you should respond well to that message, and just ignore the verbal text. Also I used to get sort of pissed at people for obviously sending subtextual messages like that - I would think hey just fucking say what you want - but of course that's ridiculous, for one thing people are shy, but for another thing, everyone is operating on a subtextual level, so if you just say what you really want people will hear the subtext. Like if you just went up to a girl and said "hey we're both hot, we should fuck", what she hears is the subtext "I'm a psychopath".
It's sort of a constant problem that as computers get bigger and more powerful, programmers get lazier. Programs are a gas, they expand to fill whatever space is available. To some extent that's reasonable, as computers are more powerful it's not wise to spend so much time on micro optimization, you should use that power to get your program done faster and with more features. However, people usually do this the wrong way.
Just because the computer is bigger and faster doesn't mean it's okay to use systems with bad asymptotic behavior. That is, your O() should still be right, but you can just be a bit more sloppy about the constant factor in front of that. Bad programmers instead get lazy and do things like use O(N^2) systems instead of O(NlogN). Similarly, just because you can use more disk space or more memory doesn't mean its okay to keep growing your disk cache without limit, or to have a memory leak and just never free things. Yes, you can be more bloated, but you can't be just plain wrong.
For example, there are certain coders that will go off on the evils of C++ and Windows at the drop of a hat. Yes, yes, yes, they are fucked up, so what, we've all heard this a million times before, it's not helping anything, let's just use what we've got and make the most of it. A certain amount of frustrated ranting is fine but then you get down to it, you don't check out and refuse to play.
Of course many smart nerdy guys do exactly that with the social world. They say : god damn, girls are so dumb, they don't see how great I really am, they just judge people by the way they're dressed and how smooth their pickup line is, I see the girls being all gaga over these guys that I know are the scum of the earth; this game is retarded, I refuse to play.
My new philosophy for trying to be positive about the world is the "1% rule". 99% of everything is shit. That is not a complaint, and it shouldn't get you down or surprise you. When you go out and meet people, sure you're most likely to be running into the 99% that's shit. Keep trying. It just means you should really cherish the 1% that's great. The same goes for movies, restaurants, etc. Another generic mediocre experience? No surprise, no biggy, it's just part of the 99%. Something actually good? Wow, yay, I love it, what a treat!
Also in ChukSH now is "tabdir" which does a recursive dir in a format that's nice for use with tabview. It's pretty decent way to check out what's going on with your drive. I haven't done the bit to count actual clusters used yet.
Oh, evil warning if you try to build any of this code : "tabview" builds on its own, that's easy. Newer chsh stuff depends on "cblib" my new library, older chsh stuff depends on "crblib", my deprecated library. You can pretty much tell the difference because ".cpp" = new and ".c" = old.
I sort of vaguely tried to make tabdir 64-bit correct but then got lazy and annoyed and started using "int" again. That's going to be a pain in the ass if that ever actually happens. Like if we ever have individual files bigger than 2 GB a lot of programs are going to crap out and eat their own ass. It'll be like the clusterfuck I just went through with unicode.
The only actual foolproof way is there's a low level function which will actually give you a list of where all the clusters allocated to a file are. You can walk the list and count them to get the actual size on disk, and you can see the fragmentation too while you're at it. Use the DeviceIoControl API with FSCTL_GET_RETRIEVAL_POINTERS. See good article here on the Cluster walk APIs .
What a pain.
Oh, and it's kind of an ambiguous question whether you should include the size of the MFT entry as part of the "size on disk" for a given file. Every file takes up 1k in the MFT, which may or may not include some of the file data.
Using existing libraries is just so inherently superior on many levels, that you need to have a really really good reason to not go with an existing standardized solution.
For existing libraries I'm talking about things like the C stdlib, the STL, and also open source libraries that are stable and old and very well tested such as Boost etc.
These things have a very low chance of bugs, the performance is generally okay, and the features are usually pretty complete. But what's more important is that the performance characteristics are well known, the feature set is the standard one so that you know you have the same features as everyone else, you can adopt improvements to the standard, other people's code fragments are interoperable with yours, etc.
Most importantly, they're familiar to lots of users. Familiarity has *huge* value. You may not like the way std::map works, but lots of people are familiar with its quirks, so you really should not make a better replacement. Familiarity lets me write code without reading through all your documentation, and your documentation usually sucks so I actually have to go and read your code and I waste a ton of time. If your code uses standard stuff and is written with the standard styles, anyone can read and instantly know what's going on without digging all over to figure out your system.
In fact, familiarity is so valuable that new interfaces that you make should be designed to mimic standard ones that people are familiar with. That means any container should be made to look and act just like an STL container. Simple string routines should mimic the conventions of the stdlib string functions. Doing it a "better" way is really much worse.
Valve Publications
Bungie Publications
Insomniac Publications
Naughty Dog Publication
Apparently people are pretty high on Lock-free / wait-ree synchronization for the theoretical future of many many cores; as usual the Wikipedia page is a good start with some nice links; I also found this nice page : High Performance Synchronization by Michael Scott which has lots of downloadable code for crazy widgets.
Somewhat off topic, but for the threaded future you want nice threading allocators like the pretty awesome TCMalloc in Google Perf Tools .
It would be cool if there was a game programming mailing list still alive. I scanned a bit of GDAlgorithms, it seems to be semi-alive still, but I don't see many real working game devs in there.
I can definitely be the silent fumer sometimes, but I'm working hard to be the quick casual complainer. Of course someone who complains too often is also bad. Life is hard.
In the 90's America was in an amazing stretch of super prosperity, there was largely peace around the world, we mostly liked our government and everything was roses. So we listened to grunge and emo and nine inch nails and metallica and all the rich white kids whined about how hard life was.
I guess if you look back at the first age of disco, which started around 1970, it was another really down time for the US. I'm sure someone else could fill in the gaps better, but a few things are obvious. It was near the peak of disillusionment with the Vietnam war (Tet was 1968, we were in 'nam roughly 65-73). Watergate was 1972 so there was much hate and distrust of government. We weren't too far off the Kennedy assasination and the Cuban missile crisis still, so there was fear of the cold war and all that. It was also a period of severe racial strife and unrest among the poor; it was the time of massive urban riots all over the US, mainly 67-69. From that you obviously get the most candy pop music fad ever, with a glorification of living fast and partying hard.
It will be kind of a shame if Obama wins and makes the country happy again, because the whole current youth movement of partying and sex and fast living will die. Fortunately, I'm quite sure that even if Obama wins the US is still headed for the shitter, so the fun new-disco is here to stay for a little while.
Some ideas I had :
It would be cool to build a Penny Farthing (aka an old timey bicycle), and ride around with a top hat and a giant handlebar mustache. BTW while searching for penny farthing sites I found this insane guy riding around the world on a penny farthing .
Get a real bear skin and wear it as a cloak. Ideally get one with the bear head still attached so you can wear the head on your head. Strap the arms to your arms, then you can get down on all fours and walk around like a bear too. Some hippie might give you shit about fur, but you can always lie and say you're an amazing artist and you made it from synthetics.
For example, in data compression, if you want to weight two models, you should pick something like one PPM and one LZ so they are very different. In Netflix if you are weighting two models, you want to pick one that's very local (similar users & movies matrix) and one that's very global (low rank SVD).
I see the same thing in human life decision making. I don't really want to talk to a smart advice giver who will see the pros and cons and give me a thoughtful hedged answer, like "well, there's this side and that one" - yes yes, I know that already. It helps a lot more to just be able to go to an expert who presents one side of the argument very strongly. You can listen to that and consider it. Then you go listen to an expert who presents the other side. Then you make your own decision.
A lot of old people call this "wisdom". I think that's disingenuous. They pretend that through the benefits of experience they see the error of writing lots of complex code and can wisely choose to do less. I don't believe they're actually doing that. Neither the young over-eager coder, nor the old cautious coder are truly making a logical decision about how to solve the problem. Both of them are just following their illogical gut instinct and natural inclination. When the old coder chooses to get the job done with less work, it's really just fatigue and laziness.
Certainly, doing less is usually the right answer. Thus the old coder is more often right than the overeager young coder. But that does not mean he has actually made any progress toward true rational decision making.
You see the same thing with all sorts of decision making. eg poker. Young players tend to be too aggressive and too tricky. Old players often get very conservative and straightforward. They call this "wisdom", but true wisdom would be seeing that both ways have their benefits and you should be able to turn them on and off when appropriate.
Anyhoo, Urban Outfitters is a really good barometer for what was super cool like 2 years ago, and what is no longer cool. Something I noticed in particular this time were all the hats. Lots of fedoras and shit like that. Funky old school hats (on men) have been big in the hipster crowd for the past 10 years or so. Urban Outfitters is now pushing them, so your dentist who is 50 and white and dorky but likes to think he is "with it" will soon be wearing them, thus they are no longer cool. An occasional check in with UO is pretty valuable, it lets you know what to give away in your next Buffalo Exchange swap.
ps. yes, I know Tigers are very 2002, but they fit my feet well and I really hate shopping for shoes, when I find a style that fits I want to keep buying the exact same shoe for the rest of my life.
CMG is also full of amusing sarcasm and biley wit. I was just reading their list of Top 15 Steve Albini Records ; part of the Listravaganza ; in it I discovered that Albini is the engineer behind my beloved Songs Ohia and also Will Oldham ; WTF , the Breeders, Nirvana, Pixies, stuff I was expecting, but the modern indie-blues-country stars was a big surprise. (As another example of how awesome CMG is, one of the lists is "Top 5 Sub-Par Beach Boys Tracks That Are Still Better Than Any Song by Wolf Parade").
I think CMG's taste is far better than Pitchfork's, but it's even more obfuscated; that's partly intentional, CMG is intended for people who get all the referential jokes, but it's rather forced most of the time and becomes tedious.
Of course this fantasy that confrontation would somehow make it all better isn't real either. I've gotten into a few confrontations recently and they rarely satisfy, you just get all angry yelling at the person, and they aren't apologetic or anything for being an ass, and you can't do anything about it, so you feel just as frustrated and the anger lingers just like if you did nothing.
The best thing to do, (as Thatcher recently wrote), is to immediately say something in a casual joking way, like when someone tries to cut in line, say "hey, nice try cutting there, I like your moxy, better luck next time" or I dunno, something better that someone less awkward than me would say.
Recently I've been often in the gloom about wanting to do something and not doing it. I don't think that doing it is actually any better, but you kind of have to just do it so that you can feel okay about yourself, and so you can be a person who does it. Is that vague enough?
I wish we could just cold-cock somebody who's being an ass the way that childish macho fantasy character on Californication does.
Unfortunately, their hardware is really good. Somehow they managed to hire some really good hardware guys, but their corporate directors are still doing their damndest to make them fucked.
I guess I'll wait for the Google phones.
I like baked potatoes. I don't have a microwave oven, and it takes forever to bake a potato in a conventional oven. Sometimes I'll just throw one in there, even if I don't want one, because by the time it's done, who knows?
I keep thinking about it when I think about having an electric stove. When you get home from work, you should just turn the stove on high even if you're not planning on cooking, because by the time it gets hot, who knows?
Adjusting temperatures on an electric is hopeless; what you can do is just turn on all 4 burners to different levels. Then only cook one pan at a time and move it around the stove to get different amounts of heat.
It's widely said that the classic Donna summer hit I Feel Love (music by Moroder) is one of the most influential tracks on modern dance music. That may be so, but there's a more direct correspondence between Moroder's solo work and the new indie-disco music; the Donna Summer score is just part of the history of people like Eno or Timbaland doing cool techno backup for pop songs, whereas the Moroder solo stuff is a direct correspondence with the modern dorky white guy who can't sing fronting a solo disco dance group.
It reminded me of this video I found a while ago that's also great : Herbie Hancock in the studio with Quincy Jones ; the old electronics are fascinating. (Okay, I wasn't going to do it, but I have to link the RockIt video cuz it's like the most awesome video ever made)
I feel obliged to link in this too : Jean Michel Jarre guides you through his instruments ; this is a bit after the fact when the stuff is already retro.
I'm like no expert in musical history or music or anything so I'm way out of my element. Obviously the old stuff is all very similar because hey they only had Moogs and a few types of synths and sequencers, everyone was on the same gear trying to figure out what they could do with it, and the easiest thing is making pretty spare repetitive sounds.
So I'm not an expert at gathering these examples, but I thought it would be fun to play a new vs. old listening game :
Glass Candy - "Life After Sundown"
Trilogy - Not Love
Cut Copy - Saturdays
Dance Department - Paradise
Chromeo - Fancy Footwork
Moroder - From Here to Eternity
Moroder - E=Mc2
Chromatics - Lady
Eurythmics-Sweet Dreams vs
Glass Candy - Beatific
New Young Pony Club vs
Pat Benatar
I could get really distracted and link in the whole other veins of old vs. new electronic music and waste a lot of time and not contribute anything because I suck at this. For example you could get into the whole Kraut evolution, I started to link these : Krafterk - The Robots , Depeche Mode - Shake the Disease , but that's really a bit off topic.
Sort of unrelated, but it's awesome how the Chromeo - Bonafide lovin' video plays off the classic Dire Straits - Money for nothing video ; I like to think he's also winking at the fact that Dire Straits was so clever about making songs that were sort of sarcastic and perhaps making fun of their audience, and Chromeo is doing the same thing; you're not quite sure how serious he is or whether he's mocking.
Also semi-unrelated, I realized the other day that Junior Boys - In the Morning is the musical soul mate to Zombies - Time of the Season ; the basic background sound with the breathing is the same, just a bit slowed down, and they both have the same kind of syrupy boy singing that's sexy and a little bit creepy. Okay, maybe more than a little bit creepy. You're too young, who's your daddy?
Coincidentally in unrelated searching, I discovered "The Black Ghosts" ; they're pretty rad. Hmm.. apparently they're another manifestation of Simian. They're the more indie-poppy Simian, as opposed to the Mobile Disco which is more techno/housey.
addendum : we saw the Black Ghosts live show and it kind of sucked. Do not recommend.
On the opposite side your partner has a very hard situation to deal with. They see you're working hard and you're stressed, but you come home and just want to be left alone, you're snappy and easily annoyed and they get scared away from you. They also see you keep working or messing around on the computer in your free time and think that you don't really need to be doing that and could have more time to spend with them, but you're choosing not to. They don't understand your brain is stuck in computerland and can't just switch over to the normal world so easily.
For a relationship to work you have to both be working to make each other happy. If one person isn't putting in effort it doesn't matter how hard the other person works. It's a partnership, an agreement to have fun. Hell, most ways of "having fun" are like that. If you go to any event - a parade, a party, whatever - just going is not really much fun, you have to go in as part of the group that is cooperating to be a fun group; you're sort of becoming part of a performance group pretending that it's more fun than it is really is. If you all go along with it, it's a blast.
For all you geeks out there, it's like playing D&D. The party and the DM are making a social contract to try to get into the spirit of the game and enjoy it. If you just follow the rules and go through the motions, it's no fun. If you get into the spirit but everyone else doesn't, it's no fun. You need the DM to try to give you interesting scenarios, and you need to give him feedback that you are pleased and amused by his storytelling, and then you also need to contribute mirth and creativity in your actions.
Something that I often fail to do is give enough feedback that I'm enjoying what someone else is doing for me. The pleased reaction is just as important as the original kind action; by being a couple you're agreeing that when your partner does something nice, you will reward them by being happy because of it. If you are hard to please or inscrutable, it's no fun to try to make you happy, and you can't have a relationship. The relationship must be a series of back and forth mood enhancers. I do something to make you happy, and you show you like it; you do something to make me happy, and I show that I like it; back and forth forever. ))<>((
Just seeing the caves in Asturias where they age the Cabrales cheese - natural caves in the mountains, with the perfect humidity and temperature, over time the Penicillin has taken up residence and they put the cheese in there and it naturally does its magic - that's where I want to live, I want to be around that.
We think of Spain as being part of Europe and the 1st world, but really it's quite unique. It certainly isn't 3rd world, but it hasn't been democratic for very long at all; it's still very poor and rural. The evils of the rich civilized western world still haven't really fucked up Spain even today (though the popular tourist spots where the UK chavs weekend are fucked).
Ignacio told me that in Spain lots of people have butane cylinders and cook with that. I've read it's quite common all around the world outside of the US, particularly in poorer countries where they don't have gas lines.
"Butane" and "Propane" are both not actually butane and propane. What's called "butane" in most of the world is a mix of butane & propane, what's called "propane" in the US is another mix. The more correct generic name for both is LPG for "liquified petroleum gas" , but the colloquialism is just to say "butane" in the rest of the world and "propane" in the US. The exact mix depends on the temperature - hotter places sell you more butane in your LPG mix.
You can get little single burner LPG ranges for $10.
Propane is totally safe to use indoors. There are a few things to be careful about though.
Propane needs a lot of O2 to burn fully. If it burns with enough O2 it produces only H2O and CO2. That's good. If it doesn't get enough O2, it produces CO. That's bad. Make sure you open a window in the kitchen. It wouldn't hurt to buy a CO detector too, they cost like $30.
Propane is heavier than air. Natural gas (methane) is lighter than air so even if you have a leak it diffuses and goes up through vents and gets out of the house and you rarely get a dangerous concentration. This is why even if you leave a gas burner turned on and not lit you don't get a huge explosion when you light it. Propane on the other hand will pool up on the floor around the stove. This creates a dangerous explosion hazard. It's generally recommended that you keep the cylinder outdoors so that if it leaks there's less risk.
In the US it's illegal to have a 20 pound cylinder or larger inside your home. Many people in the country in the US have a 100 or 500 outside and get deliveries. You could also keep a 20 outside and run a gas line through your window.
Apparently propane cylinder theft is quite common in the US. WTF, people are such hooligans. Cylinder owners lock them. Personally I'd be more worried about someone fucking with the valve or the line if I had my cylinder outside.
Almost all gas ranges can be set for "LP" (that's LPG, which is propane, recall). It's a slightly different gas/air mix so don't try to use LP on a gas range without setting it to LP.
You can get propane-burning range tops (no oven) that are made for RV's for like $600. These could sit right on top of your counter or your old oven.
I haven't completely found a happy solution that I think would be safe and legal, but this is all sort of interesting.
But it's still valuable. I'm not really too worried about client side security, I keep my machine on lockdown, I use ProcessGuard for example so that no app I don't tell to run can ever run. I am, however, worried about the security of the places that have my password. Even retards like Visa that you would think should be really secure are incredibly incompetent about computer security and are constantly losing everyone's account info to the Russians.
To slightly protect myself from host-side security breaches, I use a different password on every site. I used to just keep track of that by hand, but that's a pain in the butt (and most of my random passwords where turning into asdlkfgj - only slightly semirandom, you can see the left to right hand swipe). So what KeePass is actually good for is generating random passwords and remembering all the damn passwords for all the damn sites for you.
One thing it doesn't have is automatic entry generation when you register for the first time with a site. That would be pretty easy to code and make it much nicer to use.
Won recommended "Moovers" - they look pretty good. They're the only mover recommended by MovingScam . Actually if I had a bit less stuff I would use ABF U-Pack ; they get glowing recommendations, and the only way to make sure your stuff is packed right is to do it yourself.
In San Francisco, average price is $11,000
In Seattle, average price is $16,000
Maybe I'll start a side business driving used Subarus from SF to Seattle. Presumably the CA cars are also in better condition because we have no weather to mess them up. Actually the lack of depreciation for used Subarus in the Seattle area seems pretty nuts. 2004 WRX Wagons are going for $20k which is insane.
WTF, I don't get it. 2004 WRX Wagons for $20k, brand new 2008's for $24k.
So I was thinking about trying to shift earlier. That means working like 6 to 3. You get off and still have the late afternoon with light to go play in the park, have dinner, watch a movie, then go to bed. That sounds pretty sweet. I'd love to be able to do that, but there are a few problems. One is all other game devs are probably shifting late, so you're out of sync and not around when they are. The other problem is that waking up at 5 AM is totally cool right up until you have a late night out partying, and then it screws you all up.
I'm not quite sure what to do. I remember when I was managing I didn't like the early guys. They weren't around in the evening when the shit hit the fan (and the shit always hits the fan in the evening as most people screw around all day and then try to cram near the end), and I'm pretty sure the early guys worked less because they were working real 8 hour 7-3 days unlike the rest of us whose 9-5 usually turned into 9-7 or 9-9.
I'm also concerned about trying to leave reliably before rush hour. It seems like any number of things could delay leaving - a meeting, just being in the groove working and not wanting to stop, helping a client with a problem. If you miss that pre-rush-hour departure time then you have to wait 3 hours or so until your next allowed departure time, which blows.
I found a cool site about Logging on the Big River, Mendocino . There are lots of great old photographs on that site, visit and click them.
Mendocino was incredibly prosperous from 1860-1900 as the lumber barons cut down masses of redwoods and made a fortune and built the fancy houses there. We read yesterday that the entire coast from Big Sur up to southern Oregon was entirely covered with redwoods back in 1800. Today less than 4% of that land has redwoods on it (and hardly any of that is original growth). There are a few little redwood parks around Mendocino today, but for the most part it's barren bluffs with a few Monterey Cyprus type things, wind swept and imposing.
There are tons of historic bridges all down the Oregon coast. I'm a bit of a bridge nut so it was quite a treat. Oregon is really cool in that they provide scenic view points for most of the bridges, so you can pull over to the side a bit and see their profile. Near the CA border lots of the bridges have little short trails (a few hundred feet) out to a cliff edge view point, definitely worth it.
Drove down through CA today. Humboldt is full of hippie pot-heads on the side of the road trying to hitch hike. "Get a job you stinking hippie!" I yell as we scream past. Pretty much the whole drive on the 101 from Oregon to Santa Rosa is gorgeous, through valleys full of trees and hardly a touch of civilization; in many places the 101 becomes a windy mountain road and snakes right past redwoods.
We stopped in Redwood National Park and did the short Lady Bird trail to see some big trees. It was foggy as hell and the Redwoods were doing that thing they do - grabbing the moisture out of the fog and condensing it into drops of water - so it was raining near the trees but not away from them. I read that the Fern Creek hike in Prairie Redwoods Park is amazing, but it's a rough drive to the trailhead and I didn't want to put my car through that.
We're spending tonight in Mendocino. What a ridiculous place this is. It's like all the cheezy pretentiousness of Napa moved to the coast in their Audis and Priuses. The shops remind me of Carmel. Stuff like crystal dolphins, jeans for old ladies with elastic control tops. The restaurants are all way overpriced and mediocre, but everyone says they're great because they're supposed to be great, and nobody has a real opinion of their own.
All the old buildings in town here are actually super cute and unusual. I bet it was nice here 30 years ago.
Today we drive back to SF. I'm relieved to finally get to sleep in my own bed, but sort of sad that the road trip is coming to an end.
Side note : Alissa makes great pancakes; I've always sucked at them, so hopefully I will learn a thing or two. One of the biggest tricks aside from the batter recipe that I've learned is the super minimal amount of grease (butter) and the moderate heat; you heat the pan well, but not super hot, and you butter the pan, but then wipe it out with a paper towel; you aren't trying to make greasy fried cakes, but brown fluffy cakes. The other big thing is to use a heavy pan; cast iron would be best, non-stick is very bad no-no. When the pancake hits the pan it sucks out a lot of heat, a thin pan will go cold and not cook right.
The coast drive down 101 is very slow; it's one lane so you get stuck behind RV's and such and are constantly passing. God I fucking hate people who resist being passed. They've been driving slow the whole time, finally we get to a passing lane and they slam on the accelerator. Cockmuncher! It's so retarded; just let me pass and then I'll speed off and we never have to see each other again, it's better for both of us, instead you just prolong this annoyance.
Lots of the Oregon coast is very boring. There are a few isolated spots that are quite gorgeous. The good parts are a lot like Big Sur, big rocks, pounding waves, fog and cold wind, pine trees, steep cliffs. The good parts are : Cape Perpetua, Devil's Elbow (and the Heceta Head lighthouse), and Humbug Mountain (and south of there). We got out a few times and did some short hikes around.
Just south of Humbug Mountain there is a pullout onto a patch of gravel. There are no signs. On the north side of the pullout is a trail which leads north to a 4x4 road. The 4x4 road leads out to a cluster of huge rocks in the ocean. It's the windiest place I've ever been in my life.
Has the room ever been a smoking room?
Is there construction in the building or next door?
Do you allow pets? (if so, the place will fucking stink)
Crucial thing to do when first walking in the room :
Find the clock-radio and make sure the alarm isn't turned on for 3 AM.
Hotels are really one of those things where brand new is much better; I also realized that the quality of brand new hotels is actually a case of free added value. The room rate at a brand new hotel is not that much different than an old one - pricing in hotels is heavily driven by location and capacity, not room quality. With a chain like a Holiday Inn or whatever, it costs a lot to make a hotel, then it takes many years to make back that investment, and then after that it's pure gravy for a while, and then you gut it. During the gravy time, the old hotel is subsidizing development of new hotels. When you stay in a new hotel, you are being underwritten by people staying in old hotels.
There's a certain pressure to just not ask questions, come in, do what you're supposed to, book a room. Good people, players, alphas, they just smile and go right ahead and ask the question.
For almost exactly the same money, we could rent a whole house in Green Lake or Ballard or even Madrona. The little craftsman bungalow houses are going for about $1800/month.
Bleck, it's one of those things like the job choice where no matter what I do I'm going to regret certain aspects of it. It's actually even more frustrating because here I know that the ideal place is in fact out there, I just have to keep looking and maybe I'll find it, though when you keep looking it costs a lot of time and money, and you lose the ones you've already found because they disappear. Bird in the hand and all that.
For the record, let's do cbloom's guide to Seattle apartment hunting , in the city that is.
WalkScore map of Seattle is pretty cool. Even if you ignore the walk scores it's a pretty good boundary map of the neighborhoods for people trying to learn what's where.
So obviously you start with your craigslist apartment listings . Seattle craigslist doesn't have neighborhood filters like SF does (WTF) but you can search by neighborhood names, though not all posters mark their neighborhood right, so YMMV. Unfortunately, not everybody puts their junk on craigslist.
A lot of people just put "vacancy" signs outside their building and don't seem to list the place at all. Yay. You have to just drive around the neighborhoods to find those places.
There are other sites with listings, but they are mostly garbage. For example, NWSource has a big page but it's super out of date which makes it worthless. Places don't go quite as fast as SF here (in SF they go within an hour of showing, generally if a place has an open house you need to be the first one to show up) - but they do generally go within a few days, so you can just ignore old listings. If a place is listed for more than a few days and hasn't gone then there's something wrong with it.
SeattleRentals has okay listings that are semi up to date.
There are a few big apartment manager companies. They are :
RPManagement.net - broken awful page
NW Apts - useful
Cornell & Associates - listings are copied to craigslist, not useful
Alliance Apts - broken awful page
The NW Apts listings are updated by the individual building property managers and generally pretty up to date. (BTW don't confuse NW Apts with the "NW Apts" at NWSource - that's garbage).
Most buildings here seem to have an individual property manager who may or may not live in the building. They usually have other jobs which makes them pretty hard to reach; many of them are only reachable after 6 PM and don't return phone calls. You have to keep calling these people, it's annoying. They will also only be able to show places in the evening so you have to schedule carefully.
In my experience, you can pretty much ignore anything under $1200 ; there's just always something horribly wrong with it for that price. There are a lot of disgusting buildings around from the 70's that you want to avoid. You either want a "vintage" or "classic" building, or a brand new one.
The other tricky thing at the moment is all the construction. You want to be away from the massive condo construction, not just the construction site itself, but also the path that the trucks take to the construction site; it's a never ending stream of semis and dumptrucks that screw up traffic and create a huge racket. This pretty much rules out all of South Lake Union (not that it was in contention anyway).
A quick neighborhood roundup (assuming you want an urban life) :
Capitol Hill : easy access to the 520 for commuting east; walkable, plenty of restaurants and such though most of it is pretty shitty; lots of bums and gross hippies and such on Broadway. East of broadway gets very quiet and residential and nice, it's pretty sweet over there but hard to find availability. West of broadway there are many streets full of apartments, some of them are nice, most are nasty, and there's projects and halfway houses and stuff mixed in which add some unsavory characters. The south end of Broadway is actually the happening part these days, around Pine/Pike you've got the hipster bars and some good music clubs like Neumos. There are various busy artery streets around Cap Hill that are undesirable, the tree lined streets east of broadway are ideal. Cal Anderson park is a bit like Dolores.
First Hill : the actual main first hill area which is around the medical center is horrible. There's no life and there's also a ton of construction right now. Some maps consider the Pine/Pike area west of Broadway to be part of First Hill, and that area is pretty good, but not a lot of rentals available.
Belltown : giant condo towers; the units in these are outrageously expensive and super tiny, one bedrooms are generally 700 square feet or less. The good restaurants are generally around here, but you can just cab in to them, no need to live here. The people who live here are mostly douchebag frat boy prep types and trashy girls. The streets feel super dead and weird. It's weird, there must be a ton of people down here in all these giant condo buildings, but they aren't on the street.
Fremont : Kind of a cute little neighborhood; feels very isolated, though it's not very far from downtown by car (it is too far to walk). Somewhat rough commute to the east side from here. There are new condos popping up, but they're smaller buildings and it's mostly still houses and townhouses; rentals are much cheaper here, you can rent duplexes and such easily. The actual strip with restaurants and such is just really really tiny, it's like 2 blocks. The crowd is old, lots of kids and strollers. There is a nice organic market.
Ballard : too far.
Lower Queen Anne : one of the days we came over here we ran in to some ridiculous traffic due to some event at the Seattle Center. That's a huge problem with this neighborhood and pretty much rules it out. It took us about 30 minutes to go the 2 miles from I-5 to LQA. I also just never liked the hood for some reason; it's got a small strip of a few restaurants and bars and grocery stores, but just walking around there I don't get a vibe that appeals to me. Shrug. Anyway, there are actually a lot of huge and nice vintage buildings here with nice big units. Mainly you want stuff that's on the lower slope of the hill.
Some other random notes :
SeattleRentals FAQ is actually okay. They detail most of the stuff I've mentioned, and the notes on the market seem right to me.
WA Tenants Union where you can learn about how little rights you have here, other than the right for your landlord to fuck you.
WSDOT traffic maps important for commuters; or just use Google.
RentalGuide Rental Application (PDF) - I find it really useful to print this out and fill it out before going to rentals, so that I make sure I have all the info I need to fill out applications.
Questions to ask on the phone before bothering to see a place :
What kind of stove does it have?
What floor is it on? (out of how many?)
How many square feet? (850 is the minimum for two people really)
Is there laundry in the building?
What year was it built? (you want old or new, not 60's-80's)
Other minor factors :
Is there parking?
Is the unit away from noise sources in the building like the front door, mailboxes, laundry, etc.
Are the windows double, quiet, or drafty?
What kind of heat does it have? Radiant is best, space heaters are the devil
Also, I forgot my check book. Fuck. Some of the landlords here have some very cruel rules here. They take a $500 deposit with the application to prevent you from applying multiple places. If your application is rejected, or if you take the place, you get the money back, but if you're approved and choose not to move in, they keep the deposit. Pretty whack. In SF landlords just take a bunch of applications, if one person pulls out it goes to the next person, they don't lose any rented time. I suspect it's because Seattle has shit for renter's rights protection and no decent renter's union.
So many of the landlord sites use Yahoo maps or Mapquest. WTF Yo, Google maps is da best !
It's important to be aware of the inherent value of keeping things the same. Changes should only be made when there is enough of an improvement to outweigh the disadvantage of loss of familiarity. In this case the designer was far too "clever".
Next I'd like to see a Vietnamese cart with an actual charcoal grill, the kind they squat down to on the street and the grating of the grill is like 1 inch off the coals, and they sear up the skewers of tasty meat at super high heat.
There should be words for people who live on the coast (mainly in the big cities) vs. the trash that fills the middle of the US. I dunno, it's not popping into my head, so send in suggestions. Maybe "coasters" ? "midopotamus" ?
90% of the apartments here seem to have electric stoves. Electric stoves are fucking garbage, you simply cannot cook properly on them. There was a brief retarded period from '50-'70 when people thought they were this cool newfangled technology that was better than silly old gas. Thank god that's past us. I think now they might put electric stoves in apartments because gas stoves are more of a fire hazard. Lame.
Fucking electric! Everything is electric! Fuck! Maybe I can just get a tank of propane and put my own range on top of the fucking useless electric range. The fucking fume hoods in apartments are worthless too, maybe I should just get a good gas grill and cook everything on the balcony like a Vietnamese street merchant.
Anyway, there are good things about Seattle. Trees are good. Greenery is good. Great hiking nearby which we may sample this week. Nice residential neighborhoods with actual houses and lawns very close to downtown, that's pretty cool. I love the cozy tree-lined streets back in the residential part of Cap Hill.
But the really great thing is the chill attitude up here. Everything is a little slower, people are less pretentious. The restaurants aren't all about image. Everything is a bit cheaper, more honest, more authentic. You can get in to a great restaurant without a reservation (weeks in advance in some places in SF).
It's actually nice in a way that it's smaller. San Francisco has a feeling of being unknowable; you may get familiar with your hood (after several years) but the next hood over is a whole new pile of mystery. Seattle you can actually get to know all the nooks and crannies over a few years, and that's not so bad. It makes things more comfortable and familiar.
People are very defensive about where they live, it's hard to have a rational conversation about it.
3 stars : "parking should be included in your stay. the extra charge is a joke!"
2 stars : "I felt the $10 parking charge was too high"
Umm, no. Go back to the fucking country, you bumpkin, you obviously don't know the first thing about the real world. The W here charges $35 for parking. Now that is a fucking ripoff that you can complain about. An extra $10-15 parking charge is totally standard.
However, your connection to a neighborhood is drastically different when you're unemployed. When you're basically gone all day every day, it doesn't really matter that much what's going on in your hood. Your priorities are totally different; you're busy, it becomes more about convenience, you want to be able to do your shopping or go someplace to eat without headaches. You spend your time mostly at work or inside your home, only a tiny fraction in the hood. I realized that most of the shops in the Mission that I love close at 6 PM ; if I was working I would never ever be able to go to them, so it wouldn't matter that they existed.
I'm really sad to be leaving the idle life in the Mission, but it was unsustainable, and I'm getting too old for the demo there anyway. Sure I could move back there some day, but it would never be the same, I would be old and disconnected from the cute hipsters biking around in their ridiculous outfits.
Start with something like the Google Maps building view like they have of downtown SF where you can see the outline of every building. Color the building based on what type of thing it is - restaurant, shopping, residential. That way you can just visually browse around a neighborhood and see - oh this street has the shopping, this area is really residential, etc.
Actually the maps that WalkScore makes are kind of decent, but they'd be so much better if the businesses were color coded and packed together by size instead of just icons plopped on top of each other. You know side of the street and you can estimate extents from the address range. The pop up icon tab things they use gives you a really false idea of what's going on in a neighborhood; it can look really rich with shops when it's not.
BTW that reminds me; I don't get why Google Maps isn't using the census data yet; that stuff is really cheap and would let you make really sweet population density maps.
On the way back down here I'd like to do some site seeing. Somehow I've driven WA - CA a few times and never really taken it slow and stopped in Oregon. I'm thinking maybe spend a night in Portland, check out the Columbia Gorge, maybe Crater Lake, maybe Mt. St. Helens ? Dunno, we'll see how it goes I guess.
It's weird, I usually get around and take a lot of road trips and check things out, but when I was in Seattle I somehow didn't really get out of the city much. Never went to the Olympic Peninsula, never went to the San Juan Islands, never got close to Mt. Rainier, never went to North Cascades or Mt. St. Helens. There's a lot of cool stuff to do around there that I missed. I guess I was working a lot, and when I wasn't working I was obsessed with writing code for personal projects.
If you have some creativity or sense you can craft your own much more genuine accomplishment by going trekking somewhere out in the wild where a mob of tourists don't do the same path every day.
Belltown = Marina / South Beach
Upper Queen Anne = Nob Hill
Lower Queen Anne = Tender Nob
Capitol Hill = Haight
First Hill = Hayes Valley
Ballard = Mission
Fremont = Noe Valley
Downtown = Downtown
U District = U District
Green Lake = Richmond
Or something.
WalkScore map of Seattle is pretty cool.
Everything about this video is amazing. For one, there's the way he's ridiculously coked out and spazzing all over the place. Then there's the audience reaction shots, especially the fat old lady around 1:46 that looks like she's about to faint. There's the line "big little" (did he just say "big little" ?). And of course the miming out the body parts like this is some kind of perverted hokey-pokey.
There's also something really weird about the song structure; it jumps abruptly to faster tempo in the chorus, or I guess it stays at the same tempo but picks up a hard accent on the half beat which makes it feel like double time. I don't know how to describe music shit.
Most blogs fall into two categories : 1) hugely popular with mass readership; these tend to be bombarded with absolutely retarded comments from the general internet community, and the comments often turn into flame wars between various readers and are just generally useless; 2) intimate, read mainly by friends.
This latter one is a little weird. If the comments are public, or even if they're friend-only and you're one of the friends, you get to read the very personal notes that are left between friends. This has an addictive appeal - blogs in general are largely interesting as voyeurism, and seeing intimate friends' comments about posts just makes you feel even more like you are getting a sneak peak into someone's life. It's weird to me that people act almost as if this isn't happening. Most people who write comments on blogs write little notes directly to the author. Why don't they just email the author directly if it's a personal note? Why don't you write as if your audience is the anonymous internet reader? (a similarly bizarre phenomenon exists with the Yelp Compliments, which are public, and yet people shamelessly send desperate pickup attempts to girls through the compliments, and the girls go ahead and approve them for public viewing; I don't get it).
So I think I like things the way they are. I like getting into email conversations with readers. When people send me things that are corrections or useful extra info, I often post it back here if I think it is interesting and appropriate for the general readership.
My Old Fashioned :
2 Oz whisky (1 Oz = a small shot glass full)
5 square inches of orange peel, bruised with muddler
1 full circle slice of orange, mashed
3/4 tsp of simple syrup
3 drops of bitters
optional : tiny tiny splash of soda (1/2 Oz, 1 tbsp)
My Manhattan (no cherry) :
2 Oz whisky
1/2 tbsp sweet vermouth (= 1/4 Oz)
2 drops bitters
1/4 tsp simple syrup or maraschino cherry liquid (but no cherry)
2 square inches of orange peel
Combine and shake with great vigor to produce ice chips
The unifying character of all variants of whisky is the aging in charred oak. You really are not tasting the fermented grain; the beautiful golden color and the rich flavor come from the charred oak barrels that whisky is aged in. American whisky is a mix of wheat and barley and corn. Bourbon is mostly corn, which makes it sweeter. Rye is mostly rye (except Canadian Rye which is just a name for whisky in Canada and not necessarily made of rye); rye is another type of grain similar to wheat and barley, it produces a slightly dryer more bitter whisky. Rye is actually the classic whisky for use in these cocktails; if using real rye, reduce the amount of bitters.
Rye and barley pretty much look exactly like wheat. If I saw a field of any of them, I wouldn't be able to tell them apart. So they pretty much all produce your basic grain alcohol. The difference between your basic hillbilly moonshine and whisky is just the aging in oak. In fact Scotch originally comes from the rural peasants; in every country the peasants have their own tradition of taking some of their product and sticking it in a corner of their barn to ferment and make alcohol.
I encourage you not to be overly seduced by the mythology of scotch which has sprung up due to massive marketing in the last 30 years. The truth is it's plain grain alcohol, aged in barrels, and then they add water and artificial caramel color (some of them do, anyway). The big difference is the large proportion of smoked malted barley which provides the smokey flavor; also they use grains and no corn which reduces the sweetness as compared to american whiskeys.
There are blended scotches which the average drinker would rate higher in a blind taste test than the coveted single malts. The average drinker prizes things like balance and smoothness which are really not related to quality at all. The same thing is true of wine of course, but wine snobbery has so pervaded society that it's hard to fight. The true appeal of a single malt (or a non blended wine) is the ability to taste the distinctive character and unique flavor notes that come from the region of the product. Also, just like wine, longer ages are not necessarily better. With scotch, anything over 20 years is highly questionable. Somewhere around 15 years is generally optimal, though the peak age depends on the exact character of the original spirit.
With delicate, simple delicious products, we must remember that the details are incredibly important. The finest scotch is produced in almost exactly the same way as an average/cheap american whiskey, but the difference on the tongue is quite profound. Something I've been noticing watching "Made in Spain" - he tours a lot of cheese makers, since cheese is quite important in Spain, and the funny thing is - every cheese maker looks exactly the same to me. They add rennet, seperate out the curds, press it into rounds, salt it and age it. Every single cheese in the world basically goes through that exact same process, and yet there are so many unique and beautiful flavors that come from the minute differences in production. Certain things, like cheese and whisky, are much like creatures and their DNA - the instructions for making a man and the instructions for making an E.Coli are 99% identical, and yet the product seems very different.
When I was in college I decided I should learn about all the things a "man" should know. I wanted to be educated in the ways of the world, capable, never at a loss. I taught myself to cook and fight; I read about drugs and sex; I tried different types of cigarettes and cigars, and booze. When it came to booze, mainly I taught myself about whiskys, partly because they are delicious and I enjoyed them, but also because I thought it was particularly manly and sophisticated and impressive and it would make me a real qualified grown up.
I keep finding more apps that don't work right with unicode. The old version of zip that I use doen't work (2.1). Windiff 5.1 doesn't work. So I just fucking DeUnicode everything. It would be easier if those crazy foreigners would stop putting goofy characters in their file names. Don't they know that the universal language of computing is English !?
Dexter is pretty good so far. I don't really like the way the bad guys he kills are like so ridiculously obviously evil; there aren't really people like that in the real world, real evil people are more just like ordinary douchebags that are just slightly more callous and selfish. It would be a lot more morally interesting if the people he was killing were more like real ambiguous criminals.
If I was alone or with other biking people I would ride to Crissy Field for the fireworks. Driving over there is madness but it would be fun to bike. I hung out with a biking crew here for a brief while; it was really fun biking around the city to do stuff; unfortunately they were nut-job losers.
I suspect that the secret and little-known "Jack Early Park" might be a good viewing spot, but I haven't tried it so I'm not quite sure.
The new Dove commercials make me want to puke. The old ones were the ones that just showed semi-naked fat chicks to advertise Dove products. Okay, whatever, that's fine. But it's pretty disingenuous and manipulative; the reality is you're selling products based on making people feel like they need your products to be beautiful, rather than actually do what it takes to get attractive, they hope it's in a tube and that's how Dove makes money. It reminds me of the old Sprite adds where they would say "don't listen to some advertisement, don't trust a celebrity, obey your thrist, drink Sprite!" ; ummm... you do realize that you're advertising Sprite to me, right? so you're disparaging yourself? and you are a celebrity hawking this product? (it was usually some basketball player).
Anyway, that's the old Dove adds. The new one is about their program of seminars for children to help little girls build self esteem and think of themselves as beautiful. They show this kid reading the line "I promise to think of myself as beautiful every day". Dear god I hope not. You'll grow up to be one of those ugly fatties that wears spandex and a sports bra to walk around Las Vegas because she has no concept of how revolting she is. Or maybe one of those "sassy" girls that does burlesque because she's "big and beautiful" ; well you are big, that part is true...
The vast majority of people are ugly. That's just by definition. The way we define hotness is relative to the average, so by definition something like the top 5% are "hot". It's just the same way with wealth; it doesn't matter how many dollars you have, it's relative to how well others are doing, only the top 5% are "rich".
The message to all the hopelessly ugly girls out there should not be that they are somehow beautiful. It should be that beauty isn't everything. Hey, you're ugly. Tough shit, move on. You might still manage to be funny or smart or kind or have some other redeeming feature. The problem with these girls is that their self-worth is 100% wrapped up in being cute, and when they fail to be cute they're crushed. But no, you are not beautiful, and you should stop buying Dove shit and hoping and pretending that you are beautiful.
Oh, and BTW, it doesn't matter how smart or self-confident you are, guys will always just want the hottie, and they'll make you feel bad, and the hot chick will get all the breaks, easier access to everything, tons of favors. Better start building a deep well of bitterness.
Aside : Hock vs. Hawk (verb). To sell is "hawking your wares". To spit and cough is to "hawk a loogie". To sell something to a pawnbroker is to "hock". Basically it's always "hawk" unless you're talking about pawning or the ankle of a quadruped.
I've always liked the Yoga that's kind of like gymnastics; a lot of the related stuff on that page is cool too.
I've wanted to be able to L-seat for a long time, and I'd love to be able to "flag" but that stuff is pretty far away for me still. The definitive site for this stuff is Beast Skills - all bodyweight feats of strength. Very inspiring. I'd much rather be able to say I can L-sit or flag or do a full rollout than say I can bench whatever number.
The first time I saw Cirque de Soleil, they had the standard two strong men act, where they do planche moves and balance on each other and all that, it blew me away, I got goosebumps. I think that shit is just gorgeous and so inspiring. The strong men act never gets much applause. Some stupid clown gets all this applause for being dumb, but oh two guys doing amazing hard beautiful things, meh, yawn.
Browsing Youtube for circus strong men acts, I find two interesting things. First, most of the clips of strong men seem to be posted by the duos themselves looking for work. Don't worry boys, when I get rich I'll hire you to perform at my crazy parties. The other thing I notice is that the strongmen duo acts have been embraced by the gay community. No surprise there and I certainly don't blame them, but the video of flames is a bit too on the nose ; and Les FarFadais are just one accidental slip away from gay porn. Now this is a good old standard manly strong man duo; I love the T planche they do around 3:00
On a semi-unrelated note, Cirque Berzerk used to do a lot of shows in SF but they disappeared for a while and have now resurfaced in LA. If you're in LA, definitely check it out. It's like a cool cirque with great acrobatics, but a bit younger, less cheezy, a bit more fun and edgy, not nearly as professional as something like Soleil but that's part of the fun, it's more intimate.
stat() on most dirs will fail if you stick on a trailing slash, eg. stat("c:\windows\") is no good, you must stat("c:\windows");
However :
stat() on the root dir of a drive will fail if it DOESN'T have a trailing slash. eg. stat("c:\") is good but stat("c:") is not.
So, you can make your own stat() wrapper that removes the trailing slash if strlen is > 3. I guess you should probably also look for len 2 drive root specs and add a slash.
Hmmm .. Jon pointed out this is bad on Xbox 360 since I'm relying on drive names being 1 letter. You can do the same thing without explicit lengths by working off the colon; ending with a ":" is bad, ending with ":\" is good, otherwise ending with "\" is bad.
int __cdecl mystat (const char *spec, struct _stat *st)
{
size_t len = strlen(spec);
if ( len == 0 )
{
return -1;
}
else if ( spec[len-1] == ':' )
{3
// add trailing slash :
char * temp = (char *) _alloca(len+1);
memcpy(temp,spec,len);
temp[len] = '\\';
temp[len+1] = 0;
return ::_stat(temp,st);
}
else if ( spec[len-1] == '\\' && len > 1 && spec[len-2] != ':' )
{
// kill trailing slash :
char * temp = (char *) _alloca(len);
memcpy(temp,spec,len);
temp[len-1] = 0;
return ::_stat(temp,st);
}
else
{
return ::_stat(spec,st);
}
}
BTW there is a bit of ambiguity if somebody tries to stat something like "c:" - did they mean the root, or did they mean the current dir on c drive in that DOS way of tracking current dirs on each drive?
I can remember cups and gallons thusly : "A quart is a quarter of a gallon and also a quartet of cups". Thus there are 16 cups in a gallon.
Similarly, tbsp:cup as cup:gallon, or "the gallon's cup is the cup's tablespoon". So there are 16 tbsp in a cup.
In a system of powers of two this all sort of makes sense. Powers of two makes sense because you can combine two of one measure to make the next measure. 16 is a nice place to put the major divisions. If you like, 2^8 tablespoons is a gallon. A gallon is a byte, a cup is a hex digit, and a tablespoon is a bit.
Two tablespoons are an ounce. If you like you can remember this in a weird way : first of all "a pint's a pound the world round". There are ounces of volume and ounces of weight, but they are the same for water. Since a pound is the fundamental unit of weight, 16 ounces make a pound, since 16 is our primary division and the ounce:pound as cup:gallon. Thus since a pint is double a cup, an ounce must be two tablespoons.
Three teaspoons are a tablespoon. This one is trouble.
On the other hand, swimming in nature is pure joy. Especially in a big lake where there are no boundaries, scenery, the smell of woods, no one else around, sun shine, no lanes, no pressure. You can just swim out as far as you can, then swim back. Go exploring, try to swim to the other side.
It would be pretty sweet to have my own pool, a huge pool big enough to swim laps. It would be retardedly expensive and wasteful but fuck it, that's what money is for. With good tree protection from the neighbors I could swim naked and lie around poolside drinking cocktails and reading in the sun.
Sometimes I think I could be happy as a kept boy.
There are no fucking swimming lakes around here, even though there are plenty of lakes, they're all forbidden (except stupid little swim lagoon areas). Fucking laws. I've been thinking about going up to Kent Lake near Fairfax. It's a fucking drinking water reserve or something so you're not supposed to swim in it, but I figure if I bike out to a hard to reach section I should be able to swim without disturbance. People should be fucking glad that they get to drink water that's touched my body. They should pay me for the privilege.
Swimming in a pool is like riding a stationary exercise bike. Bleck. That's inhuman.
Many pretentious writers have begun to use the expression "orders of magnitude" without understanding what it means. [...]
If you don’t have a firm grasp on such concepts, it’s best to avoid the expression altogether.
Unfortunately he has diluted his pearls by cluttering the page with many simple mis-spellings, and entries that are just plain foolish, like his silly suggestion for the cake line
Hang on now. We sort of take this for granted that that's reasonable, but it's 100% not reasonable.
I almost never write those files, but I read them often and list the contents often. The layout of those files on disk could be totally optimized for recursive listing. In particular, all the directory descriptors for all the subdirs could be packed on disk immediate contiguously, so that to do a full recursive list it's just one single fast continuous hardware read and blammo I have it all.
Obviously you can't do that for dirs you're changing a lot all the time, but for the vast majority of dirs that are semi-static, the content listing could be laid out far better.
I wrote before about another common case where NTFS is badly broken : the "log file" usage pattern where you're doing lots of appends and flushes. (it frags the hell out of files in that case)
This stuff is designed by smart people, but that doesn't mean it's perfect. I get a feeling a lot of these Smart People are too theoretically rigorous; they look at mean behavior and big O()'s and malicious attack usage patterns. I see the same thing with Google Search, and of course I would see the same thing a lot when reviewing my guy's work at OddWorld or anywhere else. Hey, that algorithm sounds good on paper and all, but look I can see the way we're actually using it and this behavior I'm seeing is not ideal, so let's fix the case that's actually being used.
A lot of Smart People fail the "human in a cage test". With any piece of software I imagine instead of a computer I have a guy inside a box with slots where we can pass data to each other. I ask myself, if I had a human in a box, how would he solve this problem? Would he do better than my software? If so, my software can do better.
There's another point that's actually very important. It that's the usage pattern and the algorithm are not seperable. Smart People, even those who take the good step of studying typical usage patterns and tailoring the algorithm to typical usage, make the mistake of treating the usage as this external force that's constant and not responsive to the algorithm. Of course that's not true. The users are human and will change their behavior to suit the algorithm.
You can see this of course in memory allocators. If you're considering swapping in some different allocator, you might look at your current usage pattern and pick the allocator that gives you the best improvement for your current usage. But your usage need not be held constant. For each allocator choice you should consider what you could win if you changed your usage slightly.
At something like the operating system level, it's usually a win to make typical usage slightly worse if you can provide an easily acheived fast path. If people know there is a certain behavior that will give them a fast path, they will change their workflow slightly to use the fastpath. The {user,algorithm} system is tied and they should respond to each other; the user is not held as constant over changes of algorithm.
For example, with our NTFS file system case, if I knew there was a certain way to use it to avoid fragmentation and have fast dir listings, I could change my usage to do that. In reality, NTFS is just really old and seems semi-broken.
This is extremely obvious of course, but people often miss it. If you provide some new allocator that has a much faster fast path, there will no doubt be objections that it doesn't actually optimize the current usage pattern. Yes, true, but the usage pattern can change!!
BTW, how to get Lie and Lay right.
BTW #2, Hardware designers seem to suffer almost the exact opposite problem, which is they just don't give a damn about usage at all, they just do whatever is good for the hardware and figure people can adapt their software to work in the new way. This of course isn't wise either, you need to optimize the joint {user,algorithm} system.
Bass is a semi-commercial audio library that does decoding, playback, mixing, all that basic stuff. They support just about every format known to man. Pretty simple and sweet.
But so far as I can tell there's no good audio processing library out there !? By processing I mean stuff like windowed STFT, MDCT/IDCT, equalizing, lowpass/highpass/bandpass, quadrature filters, phase vocoder stuff, DSP stuff like effects, etc. Basically a library of fundamentals that you could build on to build more complex audio algorithms like instrument separation or compression algorithms or pitch correction or beat detection. It must be out there, I just haven't found it yet.
Quick fig compote on yogurt with walnuts and honey (+ granola optional).
Seared figs / fig chutney on pork chops.
Caramelized figs with balsamic reduction on chevre toasted Tartine bread. I had this amazing baked chevre on toast once in France and I've never been able to reproduce it. The cheese was just in a big hunk on a piece of bread, but it was cooked so that the outside of the cheese caramelized and browned, while the inside just got slightly melty but still had the sort of pasty raw chevre consistency. Any time I try it in a home oven or broiler, in order to brown the outside it completely melts the cheese, which is no good. I think perhaps the secret is a super hot wood fired oven. Another possibility might be a very thin glaze of something on the cheese to encourage the brown crust to form.
It would be pretty sweet to have a restaurant style Salamander. Being able to control the distance of the flame to the food is so useful. I made some amazing steak the last time we went camping, and the key was the shitty camp grill actually has a height adjustable grate. You can let the coals get hot, let the flames die, and then lower the grate almost right onto the coals so it's blazing hot. So much better than the shitty Webers we all have at home.
It occurs to me that unmixing an audio track is basically the same problem as the "image doubler" I've written about before. If you consider the simple case that you're trying to unmix into 2 streams, then it's very very similar to the image doubler. Basically you have a constraint that A + B = I , that is, streams A and B add up to the input I. This is underconstrained of course, there are an infinite number of solutions, but that doesnt make it impossible.
You assume that your component streams A & B come from some real world likely audio generating sources. That is, just like in all data compression, not all streams are equally likely, and in fact very very few streams are likely. Each way of unmixing a given float has a certain probability of having been generated, and you just pick the single most likely way.
This is of course exactly what our brain does when we listen to things. Say you listen to a track. It starts off with a few piano notes. Then there are a few guitar plucks. Then there's a piano note + guitar pluck at the same time. In fact, this superposition is a big jumbled mess that looks like neither of the two pieces. And of course it might not actually be a piano note + guitar pluck, maybe it's some weird other sound source that creates sounds that are very similar to the combination of guitar + piano. But our brain assumes that the most likely source is right and it unmixes the sounds. Instead of your brain thinking "hey here's this new sound I've never heard before" it thinks "hey that's a guitar and piano combined". Of course software could do this exact same thing.
Exploring this stuff for purposes of compression is no longer super compelling, but it is interesting for processing. As I have always, compression research is always useful even if you don't really care about compression ratio, because to acheive high compression of data is equivalent to acheiving high understanding of data.
From cbloom@texas.net Thu Jan 28 20:02:10 1999
Newsgroups: comp.compression
Subject: Re: the Lapped transform and JPEG
Some followup info on the Lapped transform:
We can think of it as a smoothly windowed
DCT. The basis functions are :
Bnk(x) = Wn(x) C(k*x)
(n and k are subscripts, that's B_n_k)
where the C() is the normalized cosine
as in the DCT :
C(f) = sqrt( 2 / L ) * cos( 2pi *f / L)
n is the interval number, x is the discrete
spatial coordinate, and k is the frequency.
For simplicity, let each interval be of width
(0-L), and then k runs 0 <= k < L
Then our transform is :
g(n,k) = Sum[x] Bnk(x) f(x)
For clarity, consider the special case where
Wn(x) = { 0 , x < n*L
1 , n*L <= x < (n+1)*L
0 , x >= (n+1)*L }
(that is, the step function on the nth interval).
Then g(n,k) is just the DCT of the input signal
f. Back to our main line:
the reconstruction is :
F(x) = Sum[nk] Bnk(x) gnk = Sum[nky] Bnk(x) Bnk(y) f(y)
Obviously, we get reconstruction IFF :
Sum[nk] Bnk(x) Bnk(y) = delta(x-y)
So, what condition does this place on W ?
delta(x-y) = Sum[nk] Wn(x) C(kx) Wn(y) C(ky)
= ( Sum[n] Wn(x) Wn(y) ) ( Sum[k] C(kx) C(ky) )
Now the final sum is just something we see all the time
in DCT, and we know
Sum[k] C(kx) C(ky) = delta(x-y)
So:
delta(x-y) = ( Sum[n] Wn(x) Wn(y) ) delta(x-y)
or:
Sum[n] Wn(x) Wn(x) = 1
or:
Sum[n] Wn(x)^2 = 1
So, this is a very nice and simple constraint!
For example, our step function obviously satisfied it.
(in fact, if our W's don't overlap, then the step
function is the *only* solution! hence the DCT..)
On the other hand, let's allow our W's to overlap,
but only overlap with one neighbor. That is:
Wn(x) * W(n+m)(x) = 0 if abs(m) >= 2
In this case, the constraint becomes
Wn(x)^2 + Wn+1(x)^2 = 1
in their region of overlap.
There are lots of nice functions that satisfy this.
Besides our step function, the next simplest is a
triangle peaked at the center of our interval, and
goes to zero at the peaks of its neighbors :
Wn(x) = sqrt(1 - abs( x - (n+.5)*L ))
The constrain is satisfied because :
1 - abs( x - (n+.5)*L ) + 1 - abs( x - (n+1+.5)*L) )
= 2 + (x - (n+.5)*L) - (x - (n+1+.5*L)) = 1 !
I'll post some references on more choices for W()
if people are interested. In the end, you're going
to discretize W(), so it's really just a table of
values for the coder.
If the W's are symmetric, and are all just translations
of the mother function :
Wn(x) = w( x - (n+.5)L )
w(-x) = w(x)
Then the constraint reads
w(x + L/2)^2 + w(x - L/2)^2 = 1
or
w(L/2 + x) = sqrt( 1 - w(L/2 - x)^2 )
In other words, if we specify w() in the range 0 to L/2 ,
then it is fully constrained in the range -L to L
If we choose L = 8 , we can take advantage of the
standard JPEG machinery. In fact, we can do our
inverse transform in two steps :
1. for each interval, do an 8->16 IDCT
2. multiply the (16) un-DCT's valued by Wn(x)
and add them to the main stream.
This is 16 more multiplies & memory accesses per
IDCT, which could probably be dramatically reduced
if you're more clever than I !
(we need 16, because we need our interval of 8, and
possible overlaps of 4 into each neighboring interval).
The advantage over normal JPEG is obvious : the
choice of W() is like modeling; if you throw away
or quantize your coefficients, then the shape of W()
starts to "show through". (on the encoding side,
a good choice of W will concentrate the energy more).
In particular, the blocky artifacts at very-low
bitrates can be essentially removed.
Anyhoo, the HP Voodoo Envy 133 is a worthless brick, but it does bode well. Maybe their next model will be a less trendy slightly larger system that's actually usable (eg. a 15" screen, a 7200 RPM drive, you know, at least as good as my notebook from 5 years ago).
BTW the fact that they keep making notebooks where the keyboard is inset and only uses a small portion of the possible available space makes me so furious. First of all, making the keyboard bigger is not a technical difficulty - the keyboard circuit is literally 1 millimeter thick, it doesn't get in the room of anything else. The big flat spaces on the sides of the keyboard are not there by necessity, they're there due to pure retardation. The cramped keyboard is a big problem, it needs to be absolutely as big as possible. (BTW putting a fucking numpad on is even worse; now my hands are off to one side of the fucker!? WTF!) It seems like they always use the same 13" keyboard regardless of the size of the laptop.
It certainly seems that more gay men are fit (and thus attractive) than the general populace. I conjecture this is primarily because they get more direct rewards for physical improvements. Similarly I've been noticing this weekend with Pride that there are an awful lot of fat ugly lesbians. Surely part of that is because lesbian coupling is not as highly driven by appearance as heterosexual coupling is. People automatically respond to the conditions of reward, just like monkeys being given pieces of fruit when they pull the right lever.
Of course I also can't help wondering if there might be some population selection in the correlation. That is, are ugly girls more likely to become lesbians? Perhaps two girls might have the exact same genetic predisposition to homosexuality, which is presumably some chemical/neurological property of the brain. Whether or not that predisposition is acted upon depends on environmental factors; many people may be 25-75% predisposed to homosexuality and may or may not actually act on it. One of the girls is hot and is rewarded by society with status and attention and many male suitors. Another is ugly and is ostracized by normal heterosexual society. Presumably the ugly one is much more likely to seek an alternative social environment where she is more welcomed. (obviously this is just the same reason kids become "stoners" or "goths" or "skin-heads" or "gamers" or whatever fringe social group where they can be accepted and valued outside of the normal ranking attributes of physical appearance and social fitness).
BTW off topic a bit, but the lesson from paragraph 1 is that if you want to make the general populace do the right thing you need to give them immediate feedback they can understand. This is why people do things like destroy shared resources - if you ask people to actually make a reasonable decision based on thought, they won't. You have to flash a green light and make their score go up and ring a bell when they do the right thing. If you wonder about why people do things that are so awful for the earth - not recycling, driving big cars, littering, living way out in suburbs, voting republican - it's not really a mystery, you don't need to ponder their motives. They're just fucking retarded. If you want them to act in a reasonable way you need to give them direct & immediate feedback; any delay in feedback or any slight obfuscation on what causes the feedback will not work.
"Mad Men" is like "The Thin Man" without any of the witty banter.
Level 0 : defining the terms, just agreeing on what exactly you're talking about, establishing the base axioms that are known to be true.
Level 1 : making the obvious conclusion about what that means or what to do.
Level 2 : Seeing how the obvious conclusion is wrong (or right for a different reason); seeing what others typically think about the problem and how that affects the situation; seeing the real reason why it is the way it is.
The other thing that surprises me is the way people act in the little interview segment. Haven't you seen these little anecdotes a million times? Don't you know that your funny story about your cat is just going make you look like a retard?
Right before watching the show I had this rant percolating in my head about how one of the most common mistakes of amateurs is not browning their food enough. Amateurs don't use high enough heat; you need whopping high heats, big flames; amateurs stick too much in the pan too fast, they just toss in all the ingredients right away, it's better to go in stages and brown each stage; amateurs add too much liquid too soon, they think liquid = moistness, or that dry pans will burn, in reality drying and removing moisture concentrates flavor & makes good browning. Anne covers this pretty well. She also reveals the two biggest "restaurant secrets" : 1. lots of salt and 2. lots of fat.
With "Jamie at Home" we actually have two shows on TV about real cooking. Sacrebleu!
It's funny to look back on the early days of food network, when Good Eats was in real production, we had Molto Mario, The Naked Chef, East Meets West, Melting Pot, hell even the hated Bobby Flay was doing actual cooking on Boy Meets Grill instead of worthless junk like Throwdown. At the time I thought it was a cheezy edutainment network with low information content fluff, but in comparison to the last few years it was down right high-brow back then.
I kinda like the new Presets album Apocalypso. It's a bit like the harder/darker cousin of Cut Copy. Cut Copy is sort of like very early Depeche Mode, and Presets is like later Depeche Mode. Like Cut Copy wears the really loose t-shirt that falls off one shoulder, and Presets has black finger nail polish.
God damn I hate everything about iPods and iTunes. The hardware UI is so fucking awful; I hate the fucking spinny dial, I hate the pop sound it makes in my headphones when I turn it on, I hate how slow and evil iTunes is, I hate the fact that "The Presets" is filed under "P" but they don't change the name to "Presets, The". If it wasn't free I would be really angry. The fact that I can't fucking scroll around the song list smoothly is just absurd. When I change the sort order it doesn't keep me focused on my current item. WTF WTF this is basic UI shit.
I bought an iTrip car-FM-iPod thing. That was a waste of money. It works exactly like it should, it's just unusable. Trying to browse through the iPod while driving is asking for an accident (partly because of the shitty hardware design that doesn't have tactile buttons you can find without looking). The other problem is the background noise. The iTrip signal is plenty loud, but you need a clean FM channel and I can't find one, all the frequencies here are full of really loud static. Maybe out in the country it might work okay, especially with a copilot to work the song selection for me.
A lot of kids now treat youth like the goal is to party as much as possible before you get "old". They think college is just a great opportunity to party and goof off without responsibility, and even the time after college is often thought of as your prime years to take some time out of the system and just travel or live somewhere great and get drunk a lot. There's certainly some merit to this, when you're young your body is ripe, sex is amazing, the social scene is vibrant, you fit in, you can abuse your body and it can handle the punishment (sort of - there are pretty bad long term effects from very heavy drug and alcohol use which kids don't seem to realize). However, they think that somehow when they get to 30 and decide it's time to get serious that they can somehow just quit goofing off and walk into a great job. Of course that isn't true, because their resume sucks and they haven't been learning any employable skills. The girls who were crazy counter-culture partiers often marry a yuppie investment banker type at this point and get him to pay off their debt.
I think both ways are pretty equally retarded. They're both ignoring very clear benefits of the other side. Unfortunately it seems very few people manage both. I don't think they're inherently mutually exclusive, it's more an issue of mind set, it's much easier to have the mind set for one or the other than it is to be flexible & smart about when you're responsible and when you party.
The awesome thing about J2K wasn't that it gave you slightly better quality at normal bit rates, obviously nobody gets that excited about having 40 dB PSNR instead of 38 at 4 bits per pixel. It was the embedded prefix quality of wavelet bitstreams that made J2K a big improvement. That is, you could just output the lossless encoding. Want a smaller file? Just truncate it. This is so fucking rad for many applications, but people never got it, and it was never supported right.
One of the classic examples was digital cameras. There's no longer such a thing as a "capacity" of # of photos for cameras. You just keep taking photos. The first 100 or so are lossless. Then you take another and all your images lose a tiny bit of quality to make room. Take another, quality goes down another microscopic bit. If you want you could take 1000 crappy photos.
In terms of daily use, I would store nothing but lossless J2K on my machine. I never have to worry about picking a quality setting again. I never have to worry about saving a JPEG and then loading it to do more edits and compounding errors. I never have to make internet versions of files. When I want to upload something I just upload the J2K. Smart servers could just terminate the upload when they decide they have enough bits. Or they could accept the whole thing and only serve up a prefix depending on bandwidth. It's so fucking superior.
J2K could've been the in-camera format and it would've provided a lot of benefits even if you typically converted to JPEG when you pulled it onto your machine. There's no need for taking RAW photos if you take lossless J2K in camera. But consumers didn't really drive any demand for it, and camera makers had long pipelines making JPEG-based chips and had no need to devote all the extra engineering to implementing the more complicated encoder. The J2K encoder is a bit complex, and while it was intended for simple camera hardware it's not nearly as easy to encode as JPEG.
Another obvious one is automatic bandwidth customization of web pages. The web server can have a desired max load or something and when it's under stress it just sends smaller prefixes of the J2K files. You could also do really nice quick previews to make the web pages load very fast then pull in the rest of the bits.
A few things killed J2K. Perhaps the biggest was the patent fuckups by all the retards who crammed too much in the standard; this also made the standard unnecessarily complex as everyone in the group tried to get their favorite technology piece in the standard. The other was lack of a good free library for encode & decode being made available quickly. The last was lack of consumer education.
BTW I'm not really a fan of the actual J2K standard; it was overly complex and contained too many different modes and options, like different transforms, lossy and lossless modes, etc. It should have just been one good single lifting reversible truncatable stream.
Bill Crow's HD Photo Blog has lots of goodies in it; it's got good intro material just about HD photography in general, not just on the format.
HD Photo could be a cool thing in various ways. The slightly better compression is pretty meh. The cool thing would be if it actually standardized the encoding of gamma, exposure, and HDR images. While the general public is not going to get this, if it's supported by the OS and the hardware (cameras) it can kind of happen automatically. The camera can tag the exposure information into the file, then when you work with it the OS knows your gamma, and all that junk can be tagged in automatically so that when somebody who actually knows their shit gets the file they can figure out the true meaning of the pixels.
Now, Bill Crow says some things on his blog that are just wrong and quite naive propaganda. He says that the way wavelets concetrate the error in high frequency areas is bad, and that somehow HD Photo's action of spreading error uniformly is better. That's way off. The whole idea of perceptual coding is that you want to put error where it's not noticed. One of the things that makes wavelets great is that they put error in the right place, and the error they introduce tends to be a smoothing, which is visually not annoying. In contrast, HD Photo seems to make blocky errors, and the tests I've seen indicate that HD Photo's human visual error is much worse at the same PSNR.
these guys at some Science news group seem to know WTF is going on.
There are some general things in HD Photo that are interesting to mention.
It does a "lapped" transform as a preprocess. If you search for "lapped image" there are tons of papers on this now. Lapped transforms are a reversible convolution that you can apply to any other transform, but they go best with block-based schemes like the standard JPEG DCT. Basically the convolution takes the lowest bit rate DC signal and changes it from being a bunch of blocks into being smooth bumps. Like instead of the 0th coefficient being an 8-pixel hard step, it's a 16-pixel wide smooth bump. There are a bunch of papers about sticking lapped pre & post processes on standard JPEG, and it improves perceptual error a lot without increasing computation time much at all. Any modern block-based coder should have something like a lapped transform in it.
HD Photo also uses one of the newer lossless "Y-Chroma" color transforms that's based on lifting operations. I think I wrote about this in Rants before. There's a lot of papers on this topic as well. More generally, you could make it so the encoder could write the lifting color transform out to the stream. This would only take a few bits and not cost anything really in the decoder. You can improve compression performance by optimizing the color transform for the given image; it takes a lot of computation so it wouldn't usually be done, maybe never.
eSATA port. Should be SATA internally of course, just expose a hole to me. For some reason this is super rare. I think it's probably pretty easy to plug into the SATA internal and run it out of the case, but that's a bit lame.
Digital video out. Fuck VGA ports. Should be able to do 2560 x 1600 on the external line. Again this continues to be super rare, people keep putting VGA out on laptops. WTF.
Cool and quiet. No monstrous hot desktop bricks like the Sager shit.
Port replicator would be nice, so I can get a docking station at home and one at work and just go snap instead of changing 20 plugs every day. Really only awesome if the port replicator does your video and eSATA too which pretty much none of them do.
Must come with Windows XP out of the box, supported by manufacturer. I don't want to deal with changing OS's and finding my own laptop drivers, I did that on my current laptop and it was not fun.
I'd love it if it was super sturdy and had a secure closing latch and big rubber corners. I'd like to be able to drop it and not break it. Toughbook seems okay but they're super crippled in terms of performance/capabilities.
Sear pork shoulder with a tiny bit of butter. Remove from pan. Add lots of butter + lots of onions and garlic. Cook until browning. Pour in 1-2 cups of hot milk. Return pork to pan. Boil to reduce until milk is almost gone. It will curdle, don't worry. Pour in 1 beer. Add 1 tsp cracked fennel seed + zest of 1 lemon. Liquid should come about half way up pork, if it doesn't then add stock. Put in 325 oven for 2 hours or so, or until liquid is almost completely gone. Serve on wide flat egg noodle with grated parm and a drizzle of OO.
BTW it's pretty retarded to change recipes you've never made before. I should always just make the recipe as spec'ed once to understand the baseline before I muck with it.
Conclusion : the porky onion garlic milky sauce and tender meat was top top. As a pasta topping it was lacking, maybe I would saute some extra stuff at the last minute to give me some variety and some more oily saucy something to toss the noodles in. Maybe like artichoke hearts, fennel bulb, onion, something like that.
I made some ghetto meat pies in frozen puff pastry the other day cuz I had extra puff and didn't want to make any more turnovers. It was okay but not worth repeating. I guess it would be a decent sort of party food cuz its easy and cheap and you can make ahead and all that but fuck party food, it's shite.
Frozen puff pastry turnover technique :
Thaw puff per package. Roll out quite a bit. The thickness in the package will make ridiculous thick puff wedges, roll to maybe 50% of original thickness. Cut into squares about 7" a side. Place fruit filling in the middle. Of course apples should be peeled and sliced, and lots of sugar needs to be added to apples, less to peaches. Add cinammon or apricot to apples. This is a good use for vanilla sugar BTW. Dot fruit filling generously with butter. Put as much filling as possible, lots and lots, because it will cook way down. Paint 2 adjacent edges with egg wash, about 1/2 to 1 inch wide. Fold non-egged side over to egg and press together. Crimp edge. I prefer a simple hand crimp by successive folding, but you can fork crimp if you like. Egg wash the top. Sprinkle top *very* generously with turbinado sugar. Almost cover it completely, the Puff doesn't have enough sugar in the dough. Cut very big holes in the top. If you cut small holes or poke with a fork, they will seal back up when the puff does its thing and puffs. Don't worry about making too many big holes, too much venting is better than too little, in fact it's sort of cute to just cut the hell out of the top so that it creates a sort of spring-like open ribbing. Bake at 400 about 35 minutes (start checking color at 30, you want them very brown all over, not brown in parts & pale in others). When done glaze with butter.
I made a movie viewer app in Galaxy3 to view the Netflix movie database as points in 3d, located by the SVD to rank 3. Basically movies that are correlated are neighbors in a 3d space. I fade the names of the movies in & out such that when the font scale is near 1.0 they are opaque and as they get too big or too small they fade out. It doesn't work worth a damn, you can't find any good information by looking at it. Oh well.
The SVD was an okay way to get to 3d, but I was thinking about the general distance-embedding problem. Say you have N points in very high dimension (what dimension is perhaps unknown and you may not even know the coordinates of the points). What you do have are a bunch of point-point distances (more than N, but perhaps not all N*N of them). You wish to find an embedding in some lower dimensional space of K dimensions (such as K=3), such that the distances in K are as close as possible to the given distances.
Obviously if K >= the necessary dimension of the points, you can find an exact location that satisfies the desired distances. In general you can't satisfy them exactly.
You want to minimize the error
E = Sum_ij { ((Xi - Xj)^2 - Dij^2)^2 }
Where Dij is the desired distance between points i and j, and you optimize the set of points X, and the sum
is taken only over the pairs where Dij is defined (Dij may be sparse).
I don't think there's any way to solve this directly. What we can do is the old trick of solving for one Xi and pretending all the other X's are held constant, do that for all the X's, that's one step, and then keep stepping until it converges.
Starting from the slightly different error measure :
E = Sum_ij { (|Xi - Xj| - Dij)^2 }
Take deritive in Xi and set to zero, do some algebra and you get :
Xi = Sum_j { Xj + Dij * Unit(Xi - Xj) } / Sum_j { 1 }
Where Unit(V) = V / |V| , and the Sum is over terms where Dij is given and i != j
Now this doesn't look too useful because it's a solution for X in terms of X, but we can play a trick. The X on the right hand side is the X from the last "time step", the X on the left hand side is new X that we get for the current time step.
You can actually see what's happening here geometrically. This is like the Verlet constraint solver that game people use a lot. We have all these pair distance constraints of Dij. To solve for the new Xi, we take each "fixed" point the old Xj, and we make the point that satisfying the distance constraint by walking along the unit vector to the old Xi. Then we just average all these points that satisfied each constraint.
Now that we see that, we can play with this. In particular, we can weight each of the terms in this average. Rather than treat all the other Xj are equal, what we really care about are the points near our Xi. That is, I don't really care much about getting the very large distances exactly right, but I do care a lot about getting the closest points right. In particular I really want the identity of which point is my closest neighbor to be preserved by this mapping. Now that we think of this we can see our original choice if squared distance error was pretty poor. The squared distance error says that it's more important to turn 1004 into 1000 than it is to turn a 4 into a 1. Obviously that's wrong. We should have something that measures the fractional error, maybe
E = Sum_ij { (|Xi - Xj|/Dij - 1)^2 }
In any case, its obvious a decent weighting now would just be 1/Dij. That makes smaller D's much more important.
next Xi = Sum_j { Xj/Dij + Unit(Xi - Xj) } / Sum_j { 1/Dij }
Note that if any Dij are zero, this form snaps those points together exactly, which is good.
This iteration looks good, but there're a few niggles that still bothering me. This thing is pretty sensitive to the initial seeding and I don't have a really good way to do that. I have a hunch this iteration may be prone to getting stuck in local minima too.
I guess classically this problem is called Multidimensional Scaling . In 2000 in Science 290 there were two papers that seem to have shaken up this old problem. One introduced Isomap ( Isomap homepage ) , the other was Locally Linear Embedding . Both are pretty sexy.
My favorite part is just all the helicopter flyovers of the French countryside. It's beautiful and it makes me imagine biking through it myself. It's inspiring to watch the pros kick huge gears up monstrous hills and it makes me want to get out there myself and ride harder.
Orientations in LA always got me confused. LA actually points mostly south, and the mountains run east-west. I always felt like the ocean should be to the west and the mountains should run north-south. Well, it turns out it was that way 25 million years ago. The mountains around LA to Santa Barbara are called the "Transverse Ranges" because they run east-west, and they were rotated 90 degrees 25 million years ago as the plates slammed together and all sort of chaos happened.
Some good sources for satellite smoke maps and such : US Air Quality Blog , National Weather Service SF Area
Just read another one that's similarly shocking. Population of Berlin in 1925 : 4M , population in 2007 : 3.5M
If you look at a graph of the population of any (current) major city in the US or the US as a whole, it's pretty much an undisturbed exponential, we just keep growing and growing. (by current major city I mean LA, NY, Seattle, Houston, something that's still a healthy city, not Detroit, Cleveland, etc. that have died).
Let me back up a bit. I'm not really delighted with my String. For ease of edits, I really like plain old char []. I even like the null-delimit of C that some people hate. The null delimit is really swank because you can take a big string and split it into substrings in place just by jamming a null, then you restore it by putting the original char back. This is a very common and sweet thing, for example if you want to split a full file spec into the path part and file part you just find the last slash and jam a null, blamo you have path part and file part, then you can get the full file spec back just by going filepart[-1] = '/'; how hot. I also really like the sprintf() way of making strings.
So, what's the problem with char[] ? A few things. One is the static sizes. Mostly that's okay (assuming you use all the "n" versions of functions to prevent overruns, which you probably don't). Even if you do, it's ugly for cases of very highly variable lengths, like emails or something. The other big one is they don't go in containers well. sprintf is very unsafe, but if you use my safeprintf you get a lot of protection against the common errors there.
Now the String I have in cblib is a COW string class which mainly doesn't provide edit functions. My design idea was that you use it for storage, and to do edits you get the cstring and stick it in a char[] and edit, then jam the result back in a String. Sort of like the Java readable string / writeable string. My String is not strictly read-only but it's just a bit of a pain to edit so I rarely do. COW is pretty far out of favor these days but I still think it has a lot going for it. For one thing it lets you just return things by value and pass by value in function args and not worry about making copies. That's very handy. The real reason COW is nice though is that it plays very well with STL containers; you can make a vector < String > and not have lots of unnecessary copying, and you can even just std::sort on it and it's all good. Of course you could get the same benefit by wrapping your string in a ptr, like vector < shared_ptr < std::string > > or something.
Okay, so anyway, the idea of a string class that's very simple and easy to use like char[] but is packed up and safe and containerable like my String is pretty appealing.
"Better String" is pretty close. It's really not like a containerable string class unless you use shared_ptr< CBString > because if you just use vector< CBString > you get copies like crazy. It's really just a wrapped and cleaned up version of char[] which will resize instead of overrun and all that kind of good stuff. However :
It's an annoying thing that it doesn't treat null the same as C strings. If you want to track the length in a seperate variable to accelerate strlen and strcat, that's fine, you can do that and still support null. Rather than having an operator[] that returns a char, you have an operator[] that returns a CharProxy. When CharProxy is assigned a null, it updates the length. If CharProxy sets a null to non-null, it updates or invalidates the length. But this has a problem :
When we work on C strings, we often temporarily invalidate them and this is hard to translate to bstring or any other string class. The simplest example goes like this :
1. int len = strlen(string); 2. string[len] = 'a'; 3. string[len+1] = 0;
This is code to stick an 'a' char on the end of string. It looks pretty normal (maybe), but it holds a trap. In between lines 2 and 3 the string is temporarily fucked. We stomped on the null and made the string of indeterminate length. We simply rely on the fact that during this phase of temporary fuckitude, we will be treating "string" only as a char array and not as an actual string. Obviously this is a silly example but this general pattern of temporarily fucking the string and treating it as a raw char array is very common to C-style string manipulation, and IMO is part of what makes it cool.
I dunno, I'm still kind of unhappy. It seems to me that maybe making a solid EditString and ConstString might be the way to go. That was kind of annoying in Java though.
Anyhoo, these days curbing to prevent roll-aways seems rather quaint. It is however, very useful still. When you parallel park on a steep hill with a manual transmission, it's very hard to avoid hitting the cars in front & behind you. Now say you parked okay, but when you get back to your car you need to start up from a dead stop on a very steep hill with a car about 2 inches behind you. That's tough. However, if your wheels are curbed tightly it's much easier because the curb keeps you from rolling back, and having your wheels rotated gets you going in the right direction. It means you can put the car in neutral and let off the brake and you don't roll back into the guy behind you, because your wheels on the curb stop you. Then you can gas it and clutch and get going without a big roll-back.
Sierraville is a high Sierra ranch town on a big plain; how strange. Hwy 49 between Camptonville and Sierraville is gorgeous, it runs along the North Fork Yuba River in a deep valley cut through the Sierra. The river was running strong still, we stopped randomly along the road on the way back home and jumped in the water (it's super cold snow melt). Downieville is really touristy but looked pretty cute, old downtown, lots of cafes and lots of mountain bikers and outfitters. I guess they run a lot of rafting out of Downieville in the spring; looks like that would be pretty fucking rad. Bassetts is not so much a town as it is one store that sells wood and ice.
The Sierra Buttes is a huge granite craggy set of peaks carved by glaciers or some shit. It's pretty impressive towering over the scenery. The first evening there we hiked up the short 4x4 road from Lower Sardine Lake to Upper Sardine Lake, about a mile. The view of the Buttes from Upper Sardine is amazing, the solid rock seems to grow straight out of the lake. Alissa took a good picture . There are some rough camp spots around Upper Sardine Lake that would be pretty sweet and very isolated; it would take a true 4x4 to get up that road though.
The next day we drove the access road up to Packer Lake which you can take all the way to the ridge top next to the Buttes. There's a good description of the roads at climber.org . Packer Lake Road is paved & a very easy drive way up to the top of the ridge and you can see for miles in all directions. We didn't actually do the hike to the lookout tower on the top of the Buttes; it looked pretty amazing but we're both semi-crippled injured sad people right now.
The actual Lakes Basin area is a bit north, all along Gold Lake Hwy. There are just tons of cold clear alpine lakes all over; the mountains made of giant hunks of rock that were glacier cut, so there are many crags and shear faces. It was alpine spring time, so there were still some patches of snow around in shady dips, and lots of flowers. It's a pretty popular area, even on a weekday it was a bit crowded. I mean, it's nothing like a Yosemite or Sequoia, but it's not exactly wilderness. The short hike to Frazier Falls was pretty mobbed. As usual, however, if you just hike a bit you can get away from everyone. We did the Lakes Basin Loop from Long Lake trailhead by Elwell Lodge, and we did the little detour up past Silver Lake to Helgramite Lake which nobody else does and we were all alone. We took a swim in Helgramite and froze.
Lying in the sun up at Helgramite, the clouds over the rocky ridge suddenly started to glow with colors; first the higher clouds started to glow red and orange, then a bank of lower clouds lit up turqoise and green and blue. We took some pictures (see one on Flickr ), but they can't really do it justice. I guess it was a Sun Dog , which would make sense in the sierra, the clouds would have lots of ice crystals in them which would cause the refraction.
The Pacific Crest Trail runs right through the area past some very scenic wilderness. It made me fantasize about doing some chunks of the PCT some day. I don't really like the idea of carrying a load on my back though. We're fucking humans, masters of the earth, can't I get a donkey or something to carry my gear?
Lakes Basin hand drawn map
Forest Service Lakes Basin Page with a good
downloadable map.
We camped at Salmon Creek because we happened to find a really sweet spot there. #33 ; they don't reserve, but if you can get it, do. But, in general Salmon Creek kind of sucks. It's close to the highway, like most of the camp sites around there. WTF I don't get that, we're out in the woods, we drove hours to get there, there's nothing around, then the campgrounds are directly on a semi-busy highway. We checked out some of the other campgrounds around and they mostly sucked balls. That stupid fish-brained fucker Stienstra rates some of them 8 or 9 out of 10 even though they have very poor seperation from neighbors and are directly on highways. The other standout spot was in the Diablo Campground, which is mostly awful, there's one spot (#13) which is really sweet.
I'm finding the best way to scope campgrounds is just with a map. If you have a detailed map of campgrounds ( this atlas is pretty good) you can see where they are. Directly on a road? No. Directly on a reservoir? Probably no, check to see if motor boats are allowed. Motor boat = no me because it attracts rednecks. Check for proximity to cities. No. Okay you have found a campground that actually might be decent. Now just search it on the internet to read about it. When you search a campground name, you can usually get a PDF map of the actual campground layout. From that you can usually tell if it will decent. Is there a single road loop with sites crammed in the middle of the loop? That's bad. Are there a bunch of feathery roads with camps far apart from each other on the arms of the feathers? That's good.
While doing my map scanning I noticed that the Middle Fork of the Feather River is really remote. Hardly any roads get near it. What a prize! Turns out you can do a very intense rafting trip down it.
Places I've scoped out for the future :
Clark Fork : maybe a bit crowded; near Iceberg Meadow
Highland Lakes : looks very sweet, Aug-Sept ideal; good high alpine trails nearby
Loon Lake North Shore, Camino Cove : meh, boats, but supposed to be very nice anyway; good access to Desolation Wilderness
Yosemite Creek : high camp in Yosemite, maybe July
Silver Fork : simple river camp; seems pretty quiet
Pi Pi : lower El Dorado camp, in logging road territory
Casual browsers would be able to type in their city and search. They could search for ride groups, events (stuff that happens on a specific date such as meetings, classes, political stuff, jams), or routes. If you look at routes, you can see the start points on a map like businesses, and they'd be rated by other users. You click on a highly rated route. On the route page, you would see the Google Map overhead route, the elevation profile (with grade %'s), and notes along the route. The route description would be like a Wiki edited by the community. You could click on points along the route to read user comments or see user pictures. If you scroll down you could see member comments on the route with their review rating. You could see if your friends had done the route and what they rated. If you were a member you could also see your own training history on the route - if you'd done it, and possibly a chart of previous speeds (maybe more data if you uploaded from your bike computer). On the side you could see a list of similar routes, like "people who liked this also liked ...". From each person's review of the route you could click on them and visit their blog, see their groups, etc.
Regular members would update the wikis of route descriptions, add new routes (with the simple Google Map style clicking of end points and dragging mid points), rate routes, track their training, track what rides they're doing. In addition to the route pages, you could view your ride history in a calendar format, which would also show upcoming events or group rides you were signed up for. From the calendar you could also graph things like your speeds and weight over time. You could also have your own blog page. You blog page would include the reviews of routes and events that you write, and also any other blogging about your riding that you want to do.
You could connect with other members and see what rides they're doing and what they recommend, send messages to each other, etc. ala Yelp / Myspace / etc. Of course there would be a forum. People would upload pictures taken along routes. Pictures could go into their blogs and also into the route pages. Of course people would want to take pictures of their rides and use their bike picture as their avatar.
I got "Pig Earth" from the library; it's a John Berger book about peasant life in rural France. Some jackass scribbled notes all over the book, highlighted sections, wrote in definitions of words, etc. He should be punched in the nose and kicked in the balls. People are such fucking scum.
Last night was another intense short heat wave; I've written before about how the city goes nuts on a hot night. It makes me feel very alone. Slutty neighbor got home around midnight with a cute young blond boy. I was happy to see that she was satisfying her need for male approval with someone who at least looked half decent, it made me sad when I saw the 45 year old short bald guy leave her place.
It occurs to me that just going out and getting HPV and Herpes would be sort of liberating, because after that you really don't have to worry much about STDs any more. I mean Syphilis and Gonorrhea and Chlamydia all suck, but are easily cured and pretty rare, you just take antibiotics, no biggie. HPV and Herpes sure they sort of suck but for 99% of people who get them they're very mild, just like having some pimples. The only thing left is AIDS, but the big secret is that AIDS is actually very rare (in the US, among wealthy white heterosexuals) and especially for men the rate of transmission is very low, even without a condom. So if you just go ahead and get yourself the Two H's you really don't have to sweat STDs any more, just use a condom and go nuts.
BTW you should never end your acronym with an S.
I uploaded new versions of cblib and the ChukSH executables that should handle unicode pretty decently. The main piece of code is a function in cblib/FileUtil.h called "MakeUnicodeNameFullMatch" which takes a char string and does a file search in each directory portion of the path to promote the single byte char strings to unicode one by one. (fixes the flaw in earlier posted code on this page).
I've straightened out a few things. For one the "%S" (capital S) unicode printing is just totally broken, don't use it. Console output is indeed "OEM", so in my console apps I am treating all single byte char strings as OEM, and any time I do any file IO, I use the unicode file IO functions (the single byte char file IO functions would be in "A" code page, so you cannot use them if you treat your char strings as "A"). For example, I do FindFirst/FindNext in unicode, then kick down to OEM single byte to do substring compares to the command line args, then promote back up to Unicode to do a file rename or copy.
Some notes for people using consoles :
cmd.exe seems to do everything "right" in the sense that it displays unicode by converting to OEM code page. The dir autocomplete and "cd" and such all take the OEM code page names.
4NT is just totally broken for unicode. You can't even "cd" into dirs with unicode names. That's sort of okay because 4NT is deprecated and you're supposed to use :
TCC is pretty weird with unicode. "dir" appears to be incorrectly outputting "A" code page names, not OEM, but the console is still OEM code page, so you get bad characters. I believe what's actually happening is TCC is actually putting unicode chars in its screen buffer (since you can drag-select-copy and get the true unicode names in the clip board), and windows is converting those unicode chars to "A", not OEM, for display. That seems to just be a bug. If you drag-select a unicode name and paste it to the TCC command line, it converts to OEM.
On a related note : the fucking power LED's on electronics just keep getting more tasteless and retarded. If I'm watching a DVD in a dark room I don't want a bunch of fucking 100 Watt super bright blue LEDs on all my power indicators. Fortunately this is pretty easy to fix. Just get the screwdriver, open up your electronics, disconnect the LED, throw it on the ground and stomp on it, then scream curses at the retarded fucking product designers that made you waste your time on this.
In fact, there are very few electronic devices which should even have a power light at all. If it's got a hard switch that you can tell is flipped one way or the other (which it should always have) then it doesn't need a power light. If it has any kind of LCD or other activity indicator, it doesn't need a power light. If it makes noise when on, it doesn't need a power light. The only things that should have power lights are things that don't have on/off switches or may be hard to tell if they're on or not, such as microphones and gamepads.
CA is paradise; the weather, the sun, the lack of rain and humidity, the variety of scenery, there's nothing like it in the US. Unfortunately, everybody knows that, which means it's full of damn people. Actually even 15 years ago I would think to myself "why in the fucking world do people live in Minnesota when they could live in CA?". To some extent that's still true, but there has been a massive exxodus from the middle of the country to the west in the last 15 years. High prices here now keep people out to some extent.
To find ideal spots these days you have to be willing to suffer some minor inconvenience that most people aren't willing to suffer. You can still go to deserted tropical islands if you're willing to take a local flight, maybe catch a little boat, and wind up traveling all day to get there. You can go to amazing places if you're okay with places that aren't easy for tourists, where perhaps people don't speak english, you have to find your way around and figure things out.
char buf[256]; strncpy(buf,from_str,256);You just wrote buggy code. If from_str is actually longer than 256, buf will not have a null and when you try to use it as a string it will hose you.
The way I like to replace library functions now is with a namespace and a using :
namespace my_strncpy
{
inline void strncpy(char * to,const char *fm,int count)
{
::strncpy(to,fm,count);
to[count-1] = 0;
}
}
using namespace my_strncpy;
Any code that follows this and calls "strncpy" will actually call my_strncpy::strncpy
I want to go to one of the high country (8000+ feet) camps in Yosemite, but they aren't open yet. There's a lot of good stuff up Hwy 4 in the Bear Valley - Hermit Valley area, but it seems maybe a bit too early still.
The Highways that cut the Sierra Nevada are rich in wilderness - mainly the 4 and the 108, but also the 88 and 120.
I'm also pretty limited by my car's complete lack of offroad capability, though lord knows Dan & I took it places it never thought it could go. I've gotten it stuck a few times and don't care to do that again. The California Sierra seem to have a lot of the best trailheads only accessible by high-clearance vehicle. I don't care to park a few miles early and walk the road.
Lots of good info at climber.org ; I like how you can browse around there hitting the North,South,East,West buttons. sherpaguides is pretty amazing.
BTW hiking searches are one of the many ways Google is broken. It literally takes me hours to find the pages that have actual content. For example, if you do any search related to Yosemite, 90% of the results will be pages that just show crappy copies of the government's content. Also lots of hiking searches now return pages from fucking hikercentral which appears to be an autogenerated text aggregator that someone cooked up to make money from ads. The shame is that google search even returns crap like that at all.
1. A standard set of functions for working with file specs and paths, and for doing standard command line app type arg parsing, file spec qualifying, renaming, etc.
2. A standard very basic 3d app harness and 3d drawing utils. How in the world do I not have this?
I guess I could make it myself with a bunch of this fucking retarded shit :
size_t strlen(const wchar_t * s) { return wcslen(s); }
BTW it's easy to get a unicode argc/argv using CommandLineToArgvW( GetCommandLineW() ) - but as I said before, do NOT do this! It's an illusion of correctness that is not true. You must take the ansi argc/argv and do the search match to find the right unicode promotion for file names.
How can engineers be so fucking retarded. How did this shit pass review in a code design committee? Why am I not in charge of everything?
Oh, I just discovered this new awesomeness. It's perfectly legal to make two file names which appear 100% identical to the user. There are multiple different ways to make the accented characters, such as in "1-15 Crème Brulée.mp3" ; you can have two file names with have identical display chacters but different unicode names because one of them uses composed accents and one doesn't. Awesomeness. If you take the version of Creme Brulee that's made with composed accents and copy-paste into an ansi text editor, it turns into "1-15 Cre`me Brule´e.mp3" - even though the accented e's are perfectly well representable in the windows "A" single byte code page.
Okay, so rather than deal with this BS I just made an app "DeUnicode" to get rid of this nonsense. It's in exe now.
Addendum :
I should note that "wchar" is pretty evil in another way that I haven't mentioned - it gives you the false illusion that you are solving the problem, and that one wchar = one visible char, but of course that isn't true. 16 bits isn't enough for some languages, so you still need composed chars or escapes.
There's some appeal to using UTF-8. It lets you still use normal string storage and compares and such. You still have a little bit of an issue to interact with a console correctly.
Also printf with "%S" (that's upper case S) doesn't do at all what you want. It supposedly takes wchar strings, which it does, but it doesn't actually covert them to oem code page to printf to a console, so you just get gunk.
The "dir" in CMD seems to be converting to OEM which is fine. The "dir" in TCC seems to actually be trying to show the unicode, but the non supported chars show up as squares. If you select-copy the name in TCC you seem to get the true unicode file name, but if you paste that to the command line, it converts to OEM. (FYI, TCC is the successor to 4NT, it stands for Take Command Console)
Sometimes on a nice day I sit out on the stoop in front of my building. It makes me feel like a real city dweller to sit on the stoop, and I can see the appeal; people walk by and you can say hi to your neighbors or people you know, flirt with girls, or just check out the freaks.
[Kontrol] is an SF DJ group that does minimal tech stuff. Follow the link and browse around, they have a ton of big mix mp3's to download for free that are very good if you like the minimal techy sound.
The other SF group I really like is DirtyBird . Again on the link there are bunch of big free mix mp3s. DirtyBird is more standard house, but it's tasteful, good quality.
The Satellite SF guys have a good weekly and lots of free mixes to download : here
There are lots of other big name SF DJs, like Mark Farina, M3, Miguel Migs, David Harness, Dimtry Mykonos, all of whom I think are total crap. They play "funky house" and it's just gross, tastless, big beat junk.
Most of the Burning Man related groups, like Green Gorilla and Space Cowboys are pretty meh to me. I do generally like the Opulent Temple stuff (Opel Productions). There's a good free mix by Syd Gris (Opel) but I can't find it now with cursed Google. There's also a good mix by Myles Egner I like but I can't find the download link to give you.
For "bar food" like burgers or hot dogs or peanuts, beer is the perfect partner, the bitterness of the hops balances the heavy fat, and the sweetness of the malt accentuates the sweetness of the caramelized sugars in the food, but I can sort of be okay with soda as a substitute there.
With French and Italian food I just can't find a substitute for red wine, and the food just doesn't work without it. I take a bite of spaghetti carbonara, my mouth is full of cheese and garlic, now I need something to balance it, I take a sip of water - bleck, fuck, yuck, it doesn't work. It needs the acid and tannin of the red wine to play counterpoint. You have to go bite-sip-bite-sip. The problem is if you eat a ridiculously large amount, as I do, then you wind up drinking an awful lot too, which is not always what I want.
I've started getting files with unicode names and am discovering that lots of old apps crap out very badly with them. I mainly get these in mp3's where the damn music database decides it's going to do all the correct accenting and it's not possible in ascii. Some old apps that don't support unicode names throughout will crap out.
Usually this happens when apps enum the dir and see the files, grab the names in ascii, and then try to do something to the file - and windows refuses to find it. Windows isn't nice to you, it won't let you open the file with the ascii version of the name where you just crammed the unicode into ascii. All the old POSIX dir enum stuff that's just ascii like readdir is thus useless and old unixy command line tools break badly.
(BTW I'm using "ascii" wrong in these first paragraphs, I'm going to try to refer to "single char strings" in the remainder; so far as I know there's no good standard way to refer to single byte char strings of indeterminate encoding)
Okay, so I've done a bit of research and the result is even nastier than I thought. First, let's talk a bit about character sets.
The "wchar" in Windows is unicode, I believe it's UTF-16. Note that there can still be composite characters in UTF-16, it's not necessarilly one short = one character.
The "A" in Windows means a single byte string, but it's not exactly ANSI or ASCII and it's also not UTF-8. What it is, is an encoding in the Windows Code Page. That can actually change depending on your locale settings. By default it is "Latin 1" which is similar to ANSI but not quite the same.
Now, just to have even more fun, if you are writing a console app, you also have to deal with the "OEM" code page. It has nothing to do with an OEM, it's really just the DOS code page. Note that this is also a single char code page, but it's not the same as the "A" code page. If you printf stuff, it will use the OEM code page. If you just take "A" chars and put them in printf, some weird junk will come out.
In practice for English, the OEM code page is basically a subset of the "A" code page, the low 128 chars are the same, so you can take OEM strings and cram them into "A" strings and you think everything is fine. But it's not, because the file names won't be the same. When we usually talk about "ascii" we are sort of vaguely referring to single chars that are either OEM or A strings.
External reference : Michael Kaplan on OEM & A code pages , there are a few pages on this over at "Old New Thing" : such as this , and this , and a a page at smallcode .
Okay. But none of these people really address how this is fucked and how to deal with it.
1. You cannot really convert between OEM and "A" file names. That is, if you have some Unicode string and you convert it to OEM and "A" versions, you will get two different results (sometimes). Now if you take those different results - there is no way to get between them at all. If a user does something like "dir" in a DOS box, they will see the OEM names. On the other hand, if they look at the names in Explorer and do a copy-paste of the file name into a (non-unicode) text editor, they will see the "A" name. The A name and OEM name are now just both char strings and there is no function that will turn one into the other.
2. When you use something like FindFirst/FindNext , Windows will give you the "A" versions of the file names. So far as I can tell these "A" names are made using this call :
WideCharToMultiByte(CP_ACP,0,from,-1,to,maxlen,NULL,NULL);
(*) it's important to me to know exactly how Windows makes the "A" names; this appears to be it, but it would be lovely to get confirmation. Note that with composite unicode names, using WC_COMPOSITECHECK|WC_DISCARDNS will give you much prettier looking "A" names, but you can't use that because it's not the same thing that windows does. Note that you may be tempted to try to pretty up the names for display, but DON'T because you want the user to be able to copy the name you show and paste it and have it be a valid file name, so you must use the standard convention at all times.
3. Windows will *SOMETIMES* accept the "A" versions of file names for file IO functions. This is easy to test. Run FindFirst/FindNext over a bunch of names and try to fopen them all. It works with all the simple names, and sometimes it works with weird unicode names, and then sometimes it doesn't work. Yay. I believe that the failure cases have to do with composite characters. With the weird file names that fail, I have not been able to find any "A" encoding of the name that will succeed in fopen.
This #3 is actually a pretty horrific problem. It means that legacy apps will actually fail to open some files. For example even the plain DOS copy and move will fail. This can make your apps very confused and can cause you to lose data.
4. Just to be clear - even files that are not even unicode have some of these problems, when the "A" and OEM encodings are not the same. For example : "Í gær.mp3" , is not unicode, that's the "A" encoding, the "OEM" encoding is "I gær.mp3". And if you just take the "A" encoding and output it with printf and don't convert to OEM, you display "- gµr.mp3"
Okay, so like obviously this is pretty fucked and you should be well scared and hating MS right now. It would've been pretty trivial to make an "A" equivalence for file names that always worked, but they didn't. It's pretty obvious that FindFirst/FindNext should always give me names that function even in "A" mode, but they don't.
Alright, so you decide to bite the bullet and do everything in unicode like you're supposed to (including converting Unicode to OEM before doing console displays). You think that's grand, until you start taking command line arguments. Now you're back in the world of hurt, because users can pass in file names in various encodings. It's perfectly reasonable to do something like "dir" and then copy-paste a name (in OEM encoding) and use that as a command line argument. Or they might just use the cmd shell name autocomplete (which appears to also be OEM encoding). But your app could also be invoked directly from someone passing unicode args, or passing "A" encoded names.
Note that you could have this problem not just with command lines but of course any time you take text input from the user, they might paste in file names from any encoding. Also note that while you can get the Unicode version of the command line, that doesn't really solve anything because the most common case is that the user is not actually typing in correct unicode commands.
The best solution I have to this is to work internally all in unicode and whenever you get input in a char string, try to convert to unicode.
Of course there is no function to convert a char string to Unicode and match the file name that you want. (if you just blindly convert the char string to unicode, it will not match the file name). The best solution I have is to search the dir containing the file name to find the unicode name that converts down to the char string. Of course in general there could be multiple unicode names that map to the same string and we should check for that and scream loudly about ambiguity, but if that ever actually happens you are super fucked anyway.
Here's the code for GetUnicodeFileNameFromMatch. This is imperfect in a few ways if you want to fix it. First of all, it only works with bad unicode file names - not bad unicode dir names. To make it work for dir names too you should start at the drive root and search each dir up the path spec and match as you go. Second of all, it only works for full file names, not partial files and wilds. Ideally it would be able to match not just full strings, but substrings. eg. if somebody does a DOS autocomplete on a unicode name and then deletes the first few and last few chars, I want to still match the internal substring and get the unicode equivalent.
This also provides a way to correctly convert between OEM and "A" encodings. Take the encoding and use Match to find the unicode file name, then convert to the other encoding. This also lets us do a nasty way of avoiding making our whole app unicode. First take command line args (OEM) and promote to unicode then convert to "A" encoding. Work internally entirely in "A" encoding. Right before doing any file access calls, use Match to find the true unicode name.
void StrConv_AnsiToUnicode(wchar_t * to,const char * from,int maxlen)
{
MultiByteToWideChar(CP_ACP,0,from,-1,to,maxlen);
}
void StrConv_OemToUnicode(wchar_t * to,const char * from,int maxlen)
{
MultiByteToWideChar(CP_OEMCP,0,from,-1,to,maxlen);
}
void StrConv_UnicodeToAnsi(char * to,const wchar_t * from,int maxlen)
{
WideCharToMultiByte(CP_ACP,0,from,-1,to,maxlen,NULL,NULL);
}
void StrConv_UnicodeToOem(char * to,const wchar_t * from,int maxlen)
{
WideCharToMultiByte(CP_OEMCP,0,from,-1,to,maxlen,NULL,NULL);
}
// GetUnicodeFileNameFromAnsi
// from name must be a full path spec
// does a search for the uni name that matches the ansi
// only works if the dir names are ansi !! does not support uni dir names !!
enum EMatchType
{
eMatch_Ansi,
eMatch_Oem,
eMatch_Either,
};
bool GetUnicodeFileNameFromMatch(wchar_t * to,const char * from,int maxlen,EMatchType matchType = eMatch_Either)
{
// have to do a search :
const char * filePart = strrchr(from,'\\');
if ( ! filePart )
return false;
filePart++;
char findSpec[1024];
strncpy(findSpec,from,1024);
char * lastSlash = strrchr(findSpec,'\\');
if ( ! lastSlash )
return false;
lastSlash[1] = 0;
strcat(findSpec,"*");
wchar_t wFindSpec[1024];
StrConv_AnsiToUnicode(wFindSpec,findSpec,1024);
WIN32_FIND_DATAW data;
HANDLE handle = FindFirstFileW(wFindSpec,&data);
if ( handle == INVALID_HANDLE_VALUE )
{
return false;
}
do
{
// process data
bool match = false;
if ( matchType == eMatch_Ansi || matchType == eMatch_Either )
{
char ansiName[1024];
StrConv_UnicodeToAnsi(ansiName,data.cFileName,1024);
match |= (strcmp(ansiName,filePart) == 0);
}
if ( matchType == eMatch_Oem || matchType == eMatch_Either )
{
char oemName[1024];
StrConv_UnicodeToOem(oemName,data.cFileName,1024);
match |= (strcmp(oemName,filePart) == 0 );
}
if ( match )
{
wcscpy(to,wFindSpec);
int len = (int) wcslen(to);
len--;
to[len]=0;
wcscpy(to+len,data.cFileName);
FindClose(handle);
return true;
}
}
while ( FindNextFileW(handle,&data) );
FindClose(handle);
return false;
}
Jacques went through a traditional apprenticeship, which never happens any more. It harkens back to an older time when young boys would go to learn a trade by working for free for a blacksmith, or a cobbler. It gives you a depth of appreciation for the basic techniques, because you had to do them for years. It also produces admirable knife skills and sensitivity (he learned in the days when baking was done in wood burning ovens with no thermometers; to tell if the temperature was right or anything was done required feel and experience, not precise formulas).
When I was growing up "Nouvelle Cuisine" was something that was roundly made fun of. It was a standard joke on sitcoms right next to the toilet seat up and how people of various races drive. In the joke, nouvelle cuisine was a tiny portion of something very simple served on an enourmous white plate. Certainly that ridiculous stereotype did exist and the practitioners went a bit overboard, but it makes us miss how important nouvelle cuisine was. I, like many food lovers, have read the history of the classic recipes from the time of Escoffier and laughed at how ridiculous they seem now. Armies of chefs preparing these elaborate food scenes, and yet all brown, all glace and butter. Thinks like fish stuffed with langoustine and puree of scallops, baked in a salt crust that's carved to look like the fish, and presented with potato puree rolled in truffles and carved to look like heads of coral. It's this bizarre superlative iteration under constraint. Like you're only allowed to use meat and potato and mushrooms and butter, everything has to have a typical gravy like taste, and now spend as much time and money as you want to make it as fancy as possible. This classic style french food doesn't exist any more, all modern high end restaurant food (the generic CIA style we get so much) is a descendant of nouvelle cuisine.
The book actually reminds me of Papillon a lot. Partly it's the style of the way anecdotes are crafty, slight exaggeration, and a kind of bragging that's quite charming. Mainly it's the attitude that every challenge is an opportunity for adventure, and even disasters (Jacques was in a really severe car crash) are something you face so you can get back to fun.
It makes me think of the life I wish I had - hanging out with great chefs, doing food related adventures like gathering mussels or wild mushrooms, trying to do a huge clam bake or cook your own whole cow head to make tete de veau, and having some of your experiments go horribly wrong. What fun, that's an ideal way to live for me.
Sunny days per year for working stiffs (2/7) : SSF : 46 : Seattle : 20.
Currently I'm (potentially) alive 160 days a year. It's hard for me to imagine really only being alive 20 days of the year.
Part of what makes this area so fucking perfect for cycling is that with all the microclimates you can get the perfect temperature just by driving 30 minutes. A bit cool out? Palo Alto will be perfect. Summer heat and you want it cooler? Head to the coast and ride the 1, or up to Marin. Winter and it's quite cold? South or east will still be hot.
Headphones are one of the classic perpetrators of this flaw. That's easy to fix with some electrical tape and you will be happy about it later. Black twist ties work too. In many cases you can also loop the cord back and just make a little knot around the device. My coffee grinder also has this flaw. More annoying, my digital probe thermometer has this flaw, and that's a bit harder to fix. I can't use tape because it has to live in a 500 degree environment.
The country home should have a vegetable garden, a big herb garden (mainly of perenials like thyme, marjoram, rosemary, tarragon, sage), fruit trees. Lately I've been eyeing the wood burning brick oven that Jamie Oliver's got but I would probably tire of that. I'd like to be able to bike right out of my house onto good country biking roads. It should be isolated or protected with enough shrubbery that I can walk around my yard naked all the time. (don't ever use a weed whacker while naked; also make sure to check for ticks).
One thing I've always wanted is a more social kitchen. I like to hang out in the kitchen, but my girlfriends are usually scared to get in there with me because it's a small space and I'm a bit of a whirling dervish at work. I'd like a big inviting space. Recently I've realized one of the crucial things that would be cool : having two seperate gas ranges so two people can work without being in each other's way at all. They shouldn't be right next to each other either, you could have the rack of pans and tools in between the two ranges so they are convenient to both work stations. The other huge thing that most home kitchens get wrong is insufficient ventilation. You need functioning fume hoods so that you can sear the fuck out of stuff and make a bunch of smoke and have it all sucked away. Part of this is not just the fume hood but the entire air flow design of the space; quite often your only window is adjacent to the stove. That's very bad, because if you turn on the vent fan and open the window, the air is sucked directly above the stove and out the vent. What you want is a window on the opposite side of the room so that air comes in, across the stove and out the vent.
I guess one problem with the two house method is US tax laws give you a break only for primary residence. Another is that condos in the US tend to be shitty, unlike the old flats in European cities.
BTW that reminds me of an interesting thing I heard on NPR the other day. The guy said that our perception that people used to build things better in the past is mainly due to sampling bias. That is, what we see today is not a representative sample of old buildings, since most of them have burned down or simply been torn down for new construction. What we see are the very best examples from each period that were strong enough to endure or were preserved because of their beauty. I think it's certainly an interesting point, and worth considering, and perhaps is true on other topics, but I think he's actually wrong about building. Obviously we have lots of new technology, but even with it the average home of the upper middle class now (such as your typical McMansion) is shit compared to the home of some lower gentry of yore.
I've done a few rides recently, my first of the year. Holy crap! I forgot how good it feels and how much I love it. The sun, the scenery, my body and the machine, the coating of sweat all over me, the hypnotizing rhythm of the pedals, the way the tension bleeds out of me around mile 15 and suddenly I feel fast and smooth. When I get back from a ride I'm actually smiling and cheerful and pleasant; who knew I had it in me !?
my bikely paths . Bikely is pretty fucking god awful in every way, but it seems to be the best we have at the moment. I mean I can't even begin to list the fuckups with it it's so broken.
I guess bikers aren't enough of a community to make a decent biking web site? No, that can't be true. This is a huge Web 2.0 opportunity waiting to happen. It also ties in very well to adds because you can sell bike gear. You have a big forum, review new products, have a map making and route sharing setup, tied into the Web 2.0 so people can review routes and share them with each other, you coordinate groups and group rides, etc. You'd probably get more press profile by tying it into urban biking and gas conservation and commuter advocacy and all that nonsense, though that's a little bit of a tough dance because the serious recreational cyclists and the urban hipster cyclists tend to be antipathetic communities. We could have experts writing articles, but more geared toward beginners and well organized; there's not a single good cycling web site out there that I can point people at. Sheldon Brown of course has great stuff but that site is a mess. There is no great site for routes, just lots of little messes. My theoretical Web 2.0 site could gather people's cycling blogs together too, connect them to the shared route maps, and also have training / progress tracking for fitness.
Doing some research - the East Bay actually has a ton of swim lakes, which seems like it should be awesome, but all of them seem to be fucking lame like Anza where you're not allowed to swim anywhere in the lake.
The one exception is Del Valle out near Livermore. That actually seems pretty awesome, it's a big lake and you can swim anywhere in it. A few problems though. 1. Motor boats are allowed. 2. It's pretty far from here. 3. It's 92 degrees there today.
One highlight at Tilden - we layed out in a field for a while and watched a feral house cat hunting.
When some retard has got themselves stuck in the middle of the intersection, don't squeeze right up to them and box them in, give them space and let them get out. It's much faster for everyone. (not super rare, nice people do this)
When you park on a line of cars, and you are the last one that can fit on the available curb space, don't pull right up to the car in front of you. Instead, park as far back as you can on the curb, potentially leaving some space between you and the next car. This is significant because parked cars are not permanent fixtures. (I've never seen anyone but me do this). Quite a bit more people get this one right when they are parking on the front of the line, presumably because if you put something right in front of someone's face they tend to go for it.
People are so retarded.
There are trees all around the river and the river runs north-south, which means you only get full sun exposure for maybe 3 hours in the middle of the day (east-west rivers get more continuous sun on the north bank). It takes about 80 minutes to get there from SF if you drive fast. It's like 5 minutes from Santa Cruz. The main swimming hole is called "Garden of Eden" and is a very short and easy walk from the road. The combination of easy access and proximity to Santa Cruz mean it's jam packed with people, both locals and college kids. It's not worth going to the main hole. Direct access to the holes is easy from the many parking spots along Highway 9 between Felton and SC. There's no need to pay the park day use fee or go into the main part of the park at all. Another major hole is "Big Rock Hole" that you have to hike about 2 miles to get to, starting at the Rincon Fire Road gate. I thought maybe that hike would make it more empty, but there were a ton of cars parked at the gate so we didn't check that out, maybe they all went to "Frisbee Beach" and not Big Rock Hole so maybe that would've been a good spot.
On the map there's only official parking at the Ox Trail gate and the Rincon Fire Road gate, but in reality there's parking all along, and most people park very close to Garden of Eden and cut down. Don't do that, it's a short walk from Ox Trail gate and there's no need to add to the erosion. It looks like "Ox Trail" is separate from the railroad, but actually it runs right along it. Also the railroad actually runs right along the river edge, so as you walk you can spy the river and check out the holes. There are various little paths people have cut down the bank - do not take them. They're really badly eroded and hard to climb, and it's also pointless. Just go down to Garden of Eden, which is well signed and easy to walk, and from there it's easy to walk along the river bank upstream to more holes. We went about 200 yards upstream from Eden and were alone almost all day.
I don't think the main holes are really worth a return visit due to overcrowding and excessive ease of access, but the river is very promising. I'm sure there are plenty of other holes that aren't so well known, and with a bit of scrambling around on rocks you should be able to get a secluded swim.
On the plus side, Henry Cowell is a pretty setting, lots of nice redwoods, a rich smell of redwood in the air, some decent trails and one hike to a view. It is a small park that is everywhere very near civilization, but you can occasionally forget and feel like you're far out and alone.
p.s. hole crap Santa Cruz is so bizarre and trashy. I actually sort of like the run down beachside carnival town aspect, but now it's got yuppie gentrification randomly scattered around it, with brand new condos and the big strip of chain store shopping which creates a really bizarre contrast. Scott's Valley is even worse. It seems to have sprung up over night and is now a tract-home + big-box-store suburb plunked down in the mountains.
All the trash left around these popular river swim spots really hurts my fragile faith in humanity. I start feeling okay about people again, I think, hey there are actually people who appreciate nature and get out and do fun things with their time, these are my kind of people. Then they go and fuck it up. It's not just that they fuck it up, it's that it's so purely destructive and retarded. It's not even the usual way that humanity fucking sucks - if people can give themselves some small pleasure at great cost to others, they generally do it. Okay, I've come to know and accept that, though I'm not happy about it. But this littering in nature, it's not really even much of a pleasure to the litterer, it's just a purely destructive asshole thing to do. Even among the decent subset of humanity that actually gets outside, a large percentage of them are fucking dicks. Sigh.
On a related note, I'm so fucking sick of all these "crime gone wrong" movies. The robbers tried to time the shifts of security guards, but Amos had to go home early for his daughter's play so the schedule was changed and a guard walks in on them cracking the safe and they shoot him, and then of course everyone totally freaks out and panics and starts yelling at each other and they dispose of the body stupidly and leave lots of evidence behind. Every fucking edgy crime movie now is in this vein and it's boring. Look you killed him, it went bad, now fucking get your head on and take care of it, it's not that fucking hard. I kind of want to go rob a bank and kill some security guards just to prove how fucking easy it is to screw your shit on for a few hours to get the job done. It's pretty much the definition of being a man. When you have to, you just disconnect your emotional reaction and go into pure logic task-doer mode and think about what you're doing and kick that shit out. Of course once you get it all clean and escape, and get off on your own in your motel room in the desert of the American Southwest, then the floodgates open and you freak out and break down and cry for hours and then kill yourself.
French onion soup : really really cook the onions hot and long, I pretty much always don't do it long enough or hot enough. Broth should be much richer than you think it needs to be because the bread and cheese are mildening agents. Need good beef broth. If your broth is shitty, you can cheat and punch it up with Worcestershire.
French apple tart : it's easiest to just blind bake the tart crust and cook the apples in a pan seperately, and then put together. You want quite a thick crust, like double the thickness of an american pie crust; the star of the tart is really the crust, the apples are just like a topping on the sweet buttery pastry. Also glaze the crust before putting on apples, it will harden the boundary. Between the crust and the apples you want to have a bit of glue, a thin layer of something that will bake firm and absorb flavor, like an apple sauce + ground almond paste. To get a good caramelization you want to foil the edges of the tart and broil. The secret to the real french glisten is lots and lots of butter (during baking) and lots and lots of glazing with apricot jam (at the end), way more than you think.
The right fat % for hamburgers is somewhere around 12%. More is gross oily, less is nasty dry. The "Kosher" ground beef at TJ's seems just about perfect. The other stuff they sell is too lean or too fat. I guess if you were really fancy you could grink your own and add some nice fat to just the right amount.
How to prep garlic : first of all, a "clove" is one little piece of a head of garlic, a "head" is a bunch of cloves. I saw a couple in a grocery store the other day in line in front of me, the guy asks his girl to run and grab a clove of garlic (wrong), she actually runs off and comes back holding one clove (dumb, obviously he meant a head). I hate it when people react to what you actually said and not what you obviously meant. Anyhoo. Take a clove (skin still on) and cut off the stem end, you only need to cut about a tenth of a centimeter off. You don't want to eat the stem end, but mainly this is to release the skin. Lightly bash the clove. Personally I don't like to bash with my chef's knife because I've found over time I've been putting slight bends in my knife from bashing garlic and it's not perfectly straight any more. If you are into silly unitaskers like Alton Brown is, you can use a hunk of granite. I find board scrapers are a very useful tool and make good garlic bashers too. Mostly I just use the heel of my hand. You aren't trying to crush to a pulp here, just a light bash. The skin should now pop right off. At this point you have various options. For a very fine dice you can use a garlic press. I think there are very few dishes where that is actually the right cut for garlic; it is the way to go generally for asian garlic use. For most applications you just want to dice with a knife, which produces a controllable size and larger pieces which cook sweeter and without the bite of crushed garlic. To make thin garlic flakes, if your knife skills are not super top notch the easier way is to use a vegetable peeler. Garlic flakes fry quickly and make a lovely garnish for garlic dishes.
BTW something I've learned from Jamie Oliver is that you can use garlic very nicely with the skin on. Take a clove, and cut off the stem end as usual which will make it easy to squeeze out later. Now when making a roast, such as oven roasted carrots or brussel sprouts, or a roast shoulder of lamb, or whatever, just toss a bunch of skin-on cloves in the mix. 40 minutes at 400 or whatever and you'll have nice roast garlic, which will also have perfumed whatever you roasted. The skin keeps the outsides from burning which it would do if you took the skin off in these applications.
Sugar is a cruel temptress. In the last 2 weeks I've had : Joy of Baking molten chocolate cake, Jacques' brownies (+ lots of plain roasted hazelnuts, yum), Nigella's chocolate chunk cookies, carrot cake (thanks babe), banana bread, banana banana bread bread pudding (lol, parse that beeyotch) (aka banana bread banana bread pudding), french apple tart, in addition to lots of tartines (aka bread with jam) and some chocolate. And when I say "brownies" I don't mean like one or two, I mean a batch. Work used to provide a good outlet for my bad baking habit, because I could make a batch, eat a few, and take the rest to work. Now I have to eat them all myself.
Actually "worst thing since sliced bread" would be good, but you can't actually say things like that in the real world because you waste your life explaining.
Ryan says it is true, so I'm not crazy to keep doing this. It should be fucking automatic though. Hey you have a good hard wire connection, turn off the fucking WiFi now.
BTW why can't I fucking switch blogger to be past->present instead of present->past !? When you want to catch up on someone's travelogue you want to fucking start at the beginning and go forward.
Type A : you have talent, you're wasting it, do something intellectual and productive. I believe that these people measure success in life by what you accomplish.
Type B : you're still young, live it up, chase girls, travel, party. This mainly comes from aging lothario types who either miss their younger days or regret not partying more.
I don't believe that either of these get me anywhere, and both are phases I've gone through and I believe that I've grown past. In fact I'm quite proud to be past "Type A" and I consider it one of the few major emotional accomplishments of the past few years.
I used to believe that the best thing in life was to do some great work, and it didn't matter how shitty everything else was if you had some intellectual toil that was worthy. Certainly having good work is an enjoyable thing, and to feel like you are doing something important is very emotionally satisfying. Note that actually doing something good or important is irrelevant. What feels good is working at something you believe to be worthy of your work, and then the accolades afterward feel good too.
"Type A" also works for fame, though they usually don't admit it. I certainly did. To some extent, that is logical. I've written about this before, but fame is valuable. It gives you access and respect. It lets you talk to a better quality of people. I mean, if you go to GDC and you're just some shmo, you will talk to the other shmoes. If you're famous, you'll be in the back room with Will Wright and Masaya Matsuura and whoever else you think is cool.
But too often Type A is about avoiding all other aspects of life and seeking solace in work. And the truth is the actual accomplishments don't mean shit. You have certain pride about what you did in the past, but I don't need that any more. I think it mainly satisfies worries about your capabilities.
I used to be a totally shallow Type A. I didn't respect anyone except based on what they had accomplished, or what they were working towards. When I was in college doing physics, I would dream that there would someday be a "Bloom's Law" that kids would learn. Even when I was a complete social & life loser I would take solace in a sense of superiority based on accomplishments or my projected future accomplishments. Yeah, you may be friendly and happy and well adjusted and have all the girls, but some day I'll do something important.
"Type B" is all well and good, but those pleasures are just so temporary and tiring, they don't get you anywhere. There's nothing wrong with that per se, but it doesn't lead to happiness. Happiness comes from building something. Anything. A life. Chasing short term pleasure doesn't build anything, and the memories fade.
Now I see how silly that all is. I actually am not terribly impressed by people's accomplishments, though it does quickly send me a signal of what level I can talk to them on. Hey, you invented the iPod, I can at least talk something intellectually with you. Hey, you haven't done shit, let me just be quiet and roll my eyes at you.
The thing that really impresses me now is basic behavior.
I admire people who can interact with the common man without dumbing themselves down, but not condescending or being pedantic either, that's despicable. It's very rare. To actually talk to the average dolt and enjoy what they have to offer, but without agreeing with the retarded shit that they say (like "it doesn't matter who you vote for, they're all corrupt"). People who can be food snobs but still have a dinner party with non foodies and actually enjoy it and be nice.
I admire people who can do things they suck at and still enjoy it, but without being ironic or making fun of it. Like singing or dancing, any kind of performance, dressing up for halloween, whatever - but not the people who are actually good at it, that's not hard. The people who suck and KNOW they suck and do it anyway, and just enjoy it. That's amazing to me.
I admire people who can address confrontation or just talk directly about issues, but without making it a big deal. Like if someone does something you think is really rude to you, like they ate your food at the work fridge. If you can talk to them without getting all upset or passive aggressive or turning into the "mmkay" Office Space boss, I'm impressed.
I stopped to help a guy with a flat yesterday; he didn't need any help but he was so delighted somebody stopped.
You've already found the first N singular vectors and you wish to find the next one. You have a "residual" matrix Rij which is the original matrix minus the SVD so far. Think of the problem as a best fit approximation. The next rank SVD are two vectors Ui and Vj which you want to approximate the remaining residual as well as possible with the outer product Ui*Vj. So you have an error :
E = Sum_ij { Wij * (Rij - Ui*Vj)^2 }
Note that I've added a weight term, Wij, which measures the importance of each element. I won't say more about this but it's a cool thing to have. Also note that the Sum may be sparse, which is the same as having W = 0 for some terms. In particular there may be elements where Rij is unknown. For those we set Wij = 0 and they don't appear in the sum.
Now, we can just use this, but even better is to regularize. Since the sum is usually very sparse, we may have a bad problem with overfitting, which in practice usually means that instead of the U and V being around the right magnitudes they wind up with huge very large magnitude values that oscillate like crazy. To regularize we just add a penalty to the error for large U and V :
E = Sum_ij { Wij * (Rij - UiVj)^2 } + Sum_i alpha * Ui^2 + Sum_j beta * Vj^2
Where alpha and beta are regularization parameters. Their value must be tweaked.
To solve we just take the derivative in Ui and Vj and set the result to zero. It's some trivial algebra and you get :
Ui = Sum_j { Wij Rij Vj } / ( alpha + Sum_j { Wij Vj^2 } )
Vj = Sum_i { Wij Rij Ui } / ( beta + Sum_i { Wij Ui^2 } )
Now we can't just plug these together and solve, but we can do the hacky iteration solution. We have an equation for U only in V, and an equation for V only in U, so we step them over time :
U(t) = func( V(t-1) }
V(t) = func( U(t) }
Note that V is computed from the current U, not the previous one, so it's not a symmetric step. This is actually a very general hacky way to iterate hard equations. I talked about it here a while ago. In fact I mentioned before it's a cool trick for solving hard equations that are only in one variable by introducing a fake 2nd variable.
Now supposedly it's been proven that this iteration for the SVD actually converges and all that. That kind of rigor is beyond me, I'm afraid, but I have crufty experience with this kind of iteration. In practice I've found a few hacky options can help a lot.
Time centered parameter for V :
U(t) = func( V(t-1) }
V(t) = func( lerp(U(t-1),U(t),0.5) }
Incomplete step :
U(t) = lerp( U(t-1), func( V(t-1) ) , frac)
V(t) = lerp( V(t-1), func( U(t) ) , frac )
where frac is some fraction of a full step. This in theory doesn't change convergence but can make you converge must faster and prevent oscillation. I really don't like the way other guys have to cut off their iteration to avoid overfitting. For me, iterations should smoothly take me towards the ideal value, and I should only be cutting them off because I'm close enough and don't want to spend more CPU time getting closer. With some of the Netflix SVD implementations it's a huge hacky tweak parameter to do just the right amount of iteration.
Also note that you need some initial values. You actually only need one, V(0) then you can compute U(0) from that. All zeros is not an okay choice. All ones is not too bad. I usually use all random values in [0,1].
I should add that the BellKor guys do some other heuristic things that seem to improve their SVD. After they compute each pair of singular vectors, they scale down the residual before doing the next pass. This explicitly forces the later singular values to be smaller (something that should be happening automatically, but doesn't always work). It means that you're only modeling a portion of the error in the higher vectors, which turns out to be a good thing because a lot of that error is just noise and you don't want to model the noise.
I think a lot of men think about women this way, though they may not be fully aware of it or admit it.
[semi spoiler alert]
After the movie, around the time it was coming out, Billy finally played in public and retook the record. I have the feeling he had that up his sleeve all along but he didn't want to do it for the movie people. Or he had some master plan to make a really dramatic performance but it somehow went awry.
I also wonder where the Japanese are. It's unbelievable to me that so many old American guys hold the records, and not a bunch of Japanese teenagers.
MIT HAKMEM from 1972 contains lots of weird little hacks and tricks and is quite an entertaining read, because you can see followup responses of people figuring out better ways or the math behind it. For example, check out Item 149, then the next few.
Won sent me some more cool similar stuff :
The Aggregate "Magic" algorithms; this stuff is mostly pretty weak, but something might be useful there. Not related to Eberly's Magic Software which is more better.
Doing divide with multiply detailed page on how to do it correctly. This is something I hack frequently and get slightly wrong.
I love printing out papers to read. Being able to write notes on the paper is a huge benefit. In theory you should be able to do that on the computer, but even if that software was decent and ubiquitous and uniform, it still wouldn't be the same because writing by hand where you can make arrows and underline and circle things is so superior.
Something huge that's missing is you can keep important things open, or queued. You can put a post-it on a page and have that tab hanging out. You can put that paper on top of the pile so you see it in the corner of your eye all the time. That's of huge value - it reminds you to come back to it, it keeps it in your brain, you don't lose it in the mess of your computer. It can be spread out on a tricky page in the corner of your desk for weeks where you keep scanning it occasionally. You can keep stacks of papers to read together and on top of your pile.
You can also collate and bundle different types of data. Like some paper, some other paper, some pages of my own notes, paperclipped together. It forms a bundle of data and action items that is useful.
One of the key things is that these bundles are dynamic. We see that perhaps even more so with CDs. Yeah you have your filing, which is alphabetic or whatever, but you form little temporary bundles. There's the pile next your CD player, which is partly a history but also maybe stuff you took out to listen to and didn't play. Then maybe there are piles scattered around, a cluster of jazz you took out cuz you wanted that one night, or a cluster of your favorite stuff.
These are all things we'd like on the computer.
"Blindness" the novel didn't do much for me. It was fine I guess but the characters were weak and nothing at all surprising happened and several bits were extremely unrealistic.
I do think the stories of the French Resistance are a bit ridiculous in general. The resistance really didn't do much of anything, and the obsession of the French with the resistance is an obvious attempt to glorify the one redeeming aspect of their wartime experience. It would be interesting to have a movie that combines the resistance, the racism of the ordinary French, the plight of the jews in France, the life of collaborators, how the non-collaborators felt about their compatriots, the political maneuvering of DeGaulle to create a myth and manufacture power for himself. Hard story to tell. It would have to be a mini series.
Anyway it got me excited so I pushed up some more French movies in my Netflix queue and made myself a Cassoulet and drank some French red. Bleck French red is so gross. It's fine with food because it's very bland which I guess is the idea.
I'm still convinced that I could make a super-premium wine by blending some cheap wines. I don't really understand why there aren't more cheap blended wines - winemakers could easily do this themselves and balance out the strengths and weaknesses of various bottles. You could easily take something like the Bear's Lair Cab which has nice pepper and tannin, and blend it with the Coppola Syrah which has a nice round mouthfeel and good initial fruit. I'd like to get a little leather and earth in there, maybe I could find a cheap Grenache. I think the Smoking Loon Cab had a decent earthy profile. The only problem is I have to drink 3 bottles worth :( I should get a vacuum resealer.
For some reason people seem to think "thin", "dry", and "minerally" are positive adjectives for wine. I want none of those qualities in my wine.
Now, if we had a genetic databank of all the current bovine diversity (though it's a shame we're too late, we've already fucked up cows pretty bad) then we could rest somewhat more easily, since if there is a disaster we would still have those genes in the bank.
Don't try to make hard cuts in flip flops.
It doesn't really answer many of my questions though. Like WTF does "deep house" mean exactly? And how do you classify some of the newer electro that certainly doesn't have a steady beet like traditional dance music, but also doesn't really fit with what we normally call "breakbeat" ? Stuff like Hot Chip or Junior Boys, what is that?
"If I were a Carpenter" - nothing good but the Sonic Youth song. And IMO not even the best Sonic Youth cover song; I love "Get into the groove(y)".
"The Presets" - mmm, kind of a more generic clubby sound version of Cut Copy. Just not super great.
Cut Copy's "So Cosmic" mix - mmm, more house/dancey than their stuff normally is, it's nice to have a smooth mix, I definitely could see listening to this for workout music or something like that.
The Album Leaf - Into the Blue Again - meh, I'm kind of over the Album Leaf. I really hate all the songs with singing, they need to really not sing, and too many of the songs are just boring new agey piano shit. Some of the early EP's were nice, it's just hard to listen to because it's so inconsistent.
St. Vincent "Marry Me" - yuck. Lots of layers and complication that leads to nowhere. Compare to someone who does this sound well like Beirut or Sufjan and this is just amateur.
Destroyer - "Your Blues" and "Destroyers Rubies" - mmmm.. I really like his sound and the music, but I just don't like his voice. May have to give this another listen to try again.
Final Fantasy - "Has a good home" - this is the album before "He Poos Clouds" ; not quite as good, but still nice. I kind of wish he wouldn't sign and just do instrumental cuz his voice sucks balls, but the music is so great it's still listenable.
Gomez , Glitch Mob - WTF, why did I get these? ass.
Efterklang - atmospheric, but too glitchy and annoying for background music. Me no likey. I kind of put M83 and Caribou and Hot Chip all in this category too. I just don't know when I would want to listen to this. It's too jarring for background but not energetic enough for foreground.
Ben Watt's "Lazy Dog" - blech, gay house music. I really like Buzzin Fly, but a lot of the Ben Watt CD's are awful.
Heiroglyphics - seems like some pretty sweet old school style rap; reminds me of Jurassic 5.
Simian Mobile Disco - there are a couple really great songs on "ADSR" and a few stinkers; there are also a ton of mix tapes made by these guys available online that are pretty sweet. I don't actually like the way they mix songs together, they tend to put big breaks in between the tracks, it's smooth but not continuous. Still their song selections and remixes are really good. It's sort of dirty electro/dance music.
Hercules and Love Affair - WTF why do people like this? Super gay disco house. I actually like the guy's weird voice but the music is totally uninspired.
Band of Horses - digging this. Emo country rockish. Reminds me a bit of My Morning Jacket.
MGMT "Oracular Spectacular" - hipster operatic rock. Pretty good, I dig it.
VHS or Beta - slightly more punk cousin of MGMT. Also dig it. The songwriting is a little bit retarded over simple and they rely a bit too much on the cool throwback sound ala early 2000's cute boy bands like the Strokes.
Cut Copy - really fun trashy electro. Actually really reminds me of old Depeche Mode.
Peter Bjorn & John - "Writer's Block" - hmmm, I guess I missed this, I listened to Young Folks when it came out of course and just figured they were a one hit wonder and never listened to the rest of the album, but it's actually pretty good.
Of course we did (do) have the same problem with JPEG. Exposing technical parameters to the average user is just dumb. The defaults need to be better and exposed in ways that are more intuitive. I don't blame the user for doing it wrong when it's exposed so badly. I always had the same philosophy when writing tools in games; if the coders expose the control in a really awful nonintuitive way or with broken default values, it's the coders fault when the content is broken.
The MPEG group (redundant like Mount Fuji I know) is generally very smart about defining the decoding standard and not defining the encoder. That allows lots of room for improvement in the future, because they're smart about making the format pretty flexible so future better encoders can change the code stream enough, and compatible decoders just keep working. The problem is that you rely on the 3rd party software makers to make decent encoders, and the software makers don't, and the user doesn't really know or care.
When faced with really tough decisions where there's no obvious best answer, I tend to just do nothing. I think that's a mistake. There was some dumb fucking shallow article in the NYT recently about a study of soccer goalies, you know how soccer goalies tend to just guess a side and dive, the study found they would make more saves if they didn't guess and just stayed put. The NYT articles tried to extrapolate that to general life decisions, but that's entirely foolish and not analogous. In life when facing a decision with no clear best choice it's usually best to just go ahead and pick one. Doing something is better than doing nothing because at least it moves you in some direction. If nothing else it provides you with powerful psychological benefits : 1. you stop debating that decision and just move on to other thoughts, and feel good that you made a choice, and 2. it puts you in a mind set of rapidly deciding and acting, which gives you momentum for moving forward, whereas not deciding makes you feel static and carries into the rest of your life.
Several years ago I thought of making some PC games that work with the DDR Pad as simple exercise games, stuff like the old Track & Field arcade game but where you actually run on the pad or whatever. I thought up a few game designs (such as Simon Says), and came to the conclusion that the best possible exercise game on a DDR Pad is DDR.
1. Most people consider it completely safe in reasonable quantities, with cycling.
2. Creatine supplementation definitely improves athletic performance and muscle growth in people who have a creatine shortage for some reason, either due to disease or due to creatine-poor diets, such as vegetarians.
3. Creatine definitely increases the size of muscles due to muscle tissue water retention; most people who take creatine see this effect and believe creatine has "worked" because of it. Of course for most people, merely looking strong is the goal.
4. Modern diets rich in red meat provide dietary creatine far in excess of what the body needs. Even without creatine supplementation we have far more than ancient man.
5. There is no scientific evidence that creatine supplementation in healthy people actually increases athletic performance, though this is widely accepted in the weight lifting community. (note that lack of evidence here doesn't mean it's not true, since sport performance studies are uniformly poor).
6. Cyclists and other weight-sensitive athletes actually think creatine is contra-indicated because the weight gain due to water retention hurts performance.
I put some pics of the keyboard on Flickr . Chopping off the numpad has made me wish the arrows were gone too. Not completely gone, but like moved up above the backspace key, so that whole side area could be gone.
I've never really found a great Molten Choco Cake recipe, but you get a pretty good result just by making a good flourless brownie recipe and cooking it too hot in a small ramekin for a shorter time. Cook at 400 instead of the regular 350, and around 15 minutes in a typical ramekin.
BTW I like Jacques Pepin's brownie recipe from Fast Food My Way, but he has an error. He says to toast the hazelnuts for 5 minutes at 350. That produces a semi-raw hazelnut which is quite disgusting. A better hazelnut roast is 13-14 minutes at 325. You may need to experiment a bit with your oven because nuts go from perfectly toasted to burned very quickly. Don't worry about the nuts roasting further inside the brownie - they won't. In general in the majority of baking recipes you want to go ahead and use fully roasted nuts in the batter, don't use raw nuts, because inside the batter the nuts will not cook much at all. With something like a quick bread you should use nuts that are 75% roasted.
I think the soufflay style actually is authentic with the original "molten chocolate cake", that's just now what I want. Also there is a whole world of tweaking I've never explored. If you start with any soufflay style recipe, you can make it more or less dense by tweaking what you do with the egg whites. At one extreme you make proper stiff peaks and fold it gently, at the other extreme you just stir in the liquid egg whites with no beating. In between you could do things like whisk just to soft peaks and stir it in without folding.
BTW "douchebag" actually looks much worse if you put a space in it, like "douche bag".
It's about a mile hike down to the river from camp, which is a good thing because it means nobody is at the river. If you scamper about 500 feet upstream from the access point there are some nice swimming holes, and you have privacy so you can get naked and freeze your balls off in the snow melt water. It's a nice mix of pines and deciduous trees with plenty of understory.
The major well known swimming holes (such as Edward's Crossing, Bridgeport, Purdon Crossing) are crowded with locals who park and walk the few feet to the water. But like everywhere, if you just hike a mile from the parking you can be all alone. People are lame and lazy, and that's to my advantage. I'm guessing that if you do the trail from Malakoff Diggins down Humbug Creek to that river access it's probably deserted there as well since that's like a 4 mile hike. (btw Malakoff Diggins is a really good name for a hobbit).
The next day we went down to Bridgeport on the way out to take a different route. We passed an original Wells Fargo office from 1857 when this was gold country. There's lots of cool old gold-rush historical crap around here if you're into that. The river at Bridgeport is much hotter and drier, it's brown grassland a lot like San Luis Obispo, or so much of California. It's also more crowded with people there, including some loud mobs of local teenagers.
We did get to watch two youngsters have sex. The trail along the river is high above the water with occasional access paths. The couple was lying on the sand at river's edge and we were on the trail above hiking along. I saw the somewhat chubby bikini clad girl crawl on top of him and bend over his swim trunks; her head started bobbing up and down. I wasn't sure what was going on so I stopped to have a look and watched as she sat up, still straddling him, and scooted up to align their hips. She started bouncing up and down while gyrating her hips like a tilted spinning top, making her jiggly butt bounce vigorously. And then it was over just as it was getting interesting.
The town of Wildwood is one of the more bizarre things I've ever seen. It's in the middle of fucking nowhere, right next to the town of "Rough and Ready" (which pretty much described my condition when we passed there). It's like 20 miles from the freeway and 50 miles from Sacramento, with huge open spaces in between, and yet it's built like a suburb. There are rows of tract houses packed together, and there's a fucking gated community with a guard. WTF - who exactly are you guarding from? I guess there is like one row of older houses inhabited but the actual country people who used to live out here before this bizarre development got built, so the gate is to make damn sure they never come in.
Even though it's really good, it's not exactly my camping-swimming fantasy. I kind of suspect that fantasy cannot be fulfilled in the Sierra Nevada, since all the remote hike-in streams are snow melt and really only great swimming maybe 1 week out of the year at the end of August. South Cal has the warmer weather, but it's so dry there are basically zero swimmable rivers in the whole of Southern California outside of the Sierra. (I've been to the exceptions : Red Rock, China Hole, Big Sur River, Arroyo Seco). I think maybe somewhere in Northern Cal is actually a better bet, because it gets so much more rain up there, you can find rivers outside of the high mountains. Maybe somewhere in the Shasta-Lassen area, or in the Mendocino Forest area (that's not the same as the Mendocino coast).
It would be awesome to do while I'm still young, when I can still move and enjoy it. But then I also need to get back to work while I'm still young. And I can't really work and live at the same time.
When I first took the screws out, the keyboard seemed to be stuck together and I couldn't get it apart and was kind of stumped. I was just about to try to force it apart when I noticed the stickers on the back of the keyboard. Yep, there are screws hidden under the stickers. You can find them just by feeling around on the stickers for a spot with no plastic - it's a pit with a screw in it.
When I read that site for some reason I thought that he was tucking the circuit board back in the keyboard. He's not, he's tucking it UNDER the keyboard so it's just exposed to the desktop. That kind of sucks. I tried tucking it back inside, but that's just not possible.
On a related note - the numpad circuit has not been disabled! That circuitry tucked under the keyboard is still live and pressure sensitive! That means if you push on the body of the keyboard along that edge it will push numpad buttons which is seriously whack. I need to get some kind of layer of insulating material between the two layers of circuitry. I'm not sure what would be best, maybe just some paper.
If I was hot shit I would cut that damn exposed circuit sheet off and connect the broken loops.
Also something to be aware of - the feet that hold up the keyboard are in the numpad area. Now I personally hate those flip-up feet that tip the keyboard forward (and they're very bad for you, if anything the keyboard should be tipped BACK not forward), but if you like them you're fucked. The cut also removes the little rubber feet, which means the keyboard is resting right on the folded circuits, and also means the left side that still has the feet is higher than the right. I need to buy some little adhesive rubber feet and put them on both sides to even it out.
I cut my keyboard with my jig saw. It worked fine. Make sure to wear protective eye wear because plastic bits fly everywhere.
I'm considering cutting the outside edge off the numpad and superglueing it to my chopped keyboard so that I get a nice sealed edge. Seems like it would be hard to make the interface good enough. Probably some silicon or something would be better than super glue since the two sides won't mate very well.
BTW FYI tiny hard saddles are totally correct for racing bikes but don't really make a ton of sense for city riding. For one thing, the reason they have no padding is because it's assumed that you will wear bike shorts that have the padding built into the shorts. If you are doing city riding in street clothes, you should have a saddle with a bit of padding. This is one of those cases where people think they are cool for using the more "hard core" component without understanding its function and appropriate use.
The "definitive" Stienstra books are not great. The basic factual information I can get online. His editorial information is primarily about the fishing, which seems to be all he cares about, and I could give a rat's ass about how good the fishing is. He also rates highly places which I'm pretty sure I would hate, like places with boat ramps on reservoirs - those tend to be full of noisy douchebags and the camp sites generally don't feel wild at all.
Anyway I've narrowed it down to 4 choices. I'm somewhat limited because my car can't handle rough roads at all and it's still cold up high.
Pi Pi in El Dorado, on the Cosumnes river, near Grizzly Flat.
Moore Creek, on the Mokelumne river, further up the 88, near Salt Springs Reservoir.
South Yuba BLM Camp, on the South Fork of the Yuba River of course, near Nevada City & Malakoff Diggins. Edwards Crossing is a very popular and heavily used swimming hole here.
Fiddle Creek or Indian Valley on the North Yuba River, near Downieville.
One of the prime areas I've spotted is just north of Truckee, around the 89-49 intersection. Apparently off "Gold Lake Hwy" there's tons of rustic camping if you have a 4x4, because lots of spots are accessible only on very rough dirt roads. A bit south of there Faucherie Lake looks amazing. Below Tahoe along the 88 is supposed to be good too, around the Shealor Lakes. I guess most of this is Emmigrant Wilderness and Tahoe National Forest, and then below that is Stanislaus National Forest.
I think we're gonna go camp this week, maybe somewhere around there but in the lower Sierra where it will be a bit warmer.
Anyway, it's something I know about myself and I can manage it by just never having those things in my house in significant quantities, so I can't ever do too much damage to myself. When I'm in that bad state, if I have to make the effort of actually going to the store to self-destruct I can usually control that and convince myself not to.
It is a pain in the ass, though. It means I can never have a well stocked bar. I can only buy booze in small quantities so that I don't have a big stock on hand. The same goes for chocolate, I can never buy bulk chocolate, and in fact I can't even keep baking chocolate in my pantry because I'll bake something bad. I have go out and buy supplies each time I want to bake something.
Lately I've picked up a problem with almonds. I'd like to be able to eat nuts as part of my diet, they're very good for you in reasonable quantities, but lately if I buy almonds I eat the whole bag in a day or two which is not a reasonable quantity.
Maybe I could get one of those machines for old people with Alzheimers where you put in the week's worth of drugs then it locks and you get fed your daily ration on a timer.
I have a lot of sympathy for people with mental flaws. However, I do not have sympathy for people who don't try to control or minimize their mental flaws. Even if you can't actually fix what's broken around you there are always ways to minimize the amount of damage the flaw can do.
My birthday's coming up soon. I fucking hate birthdays, I wish I didn't have one. They provide a painful annual reminder of how shitty my life is and how I have no friends and couldn't throw a party if my life depended on it. Thanks calendar! I managed to push that pain out of my mind over the last 11 months, lucky for me this mandatory celebration has rolled around once again to bring back this particular sorrow.
I talked to Ignacio a bit about the problems with tangent spaces. Ignacio wrote a while ago about how the standard seam break thing that people do for flipped tangents is BS. I actually feel that the whole way that has become standard for us to make tangent spaces is very primitive. The standard way is to use the UV mapping as a handy way of getting a continuous direction field on your mesh. That is indeed convenient since you already have a UV mapping, but it may not be the most natural way to get good tangent spaces. For one thing, there's a big difference - the tangent spaces are constrained by the normals on each vertex, and the UV mapping was made without consideration of those normals. This is of course why you get tangent space flips and degeneracies even with decent UV mappings such as LSCM.
Using the UV mapping is sort of a quick hack to get tangent spaces, and it works okay, but really we should just be optimizing the tangent spaces directly. Your vertex normals are a constraint so each tangent space has 1 DOF, a rotation angle of the tangent around the normal. You want to optimize the tangent spaces to be continuous across the surface of each chart on the mesh, and specifically constrained to have no flips or degeneracies.
I haven't thought about this a whole lot yet, but I did find that Bruno Levy et.al. have a new paper out that's basically on this topic : N-Symmetry Direction Field Design
BTW this is my autoadjuster bmp (zip) . You need to paste that into an image the size of the native resolution of your LCD. You don't want any scaling of the image, the one pixel black and white grid must be preserved.
The autoadjuster image helps your LCD hardware correctly self-adjust when you're driving the LCD with an analog (VGA) signal. Obviously you should be using a digital signal and most of you are now, but some of us are stuck in the shitty past. If you autoadjust without this image up, it won't adjust quite right and if you display the black and white grid, you will see it shimmer, or even worse you may see big lines move through it. If you let it autoadjust with the grid up, you should get a pretty nice crisp image.
Old drunk women who hang out in groups and laugh loudly and are outspoken and aggressive really terrify and repulse me. I have waking nightmares about them, kind of similar to evil clown nightmares. I think they're a lot like clowns, seemingly jovial, grossly overly jovial, yet creepy and sinister.
Hot, smart, competent, sweet - that's just the baseline. Exceptional traits are things like : wry subtle wit, sexy dancer, good taste in music, good taste in TV comedy, disdain for the common man, liberal politics, good hiker, willing frisbee partner, great at sex, strong enough to defy my negativity, and so on.
I could give a fuck about historical crap or famous sites or checking the wonders of the world off my list. I don't give a rats ass. I just want my little idyllic swimming hole to myself. I'll bring my own booze and music and food and have a little happy party.
I have found some sites for the US now : Waterfalls West , WayMarking swimming holes , Swimming Holes dot info
I suppose that on this issue I am becoming one those weird old people who become overly obsessed with some obscure pleasure. I often mocked these strange oldsters when I was young because it is pretty ridiculous and silly. They pick some certain thing, for many it's something generic and uncreative like golf, for others it's swing dancing where they get all the outfits and practice all the time, or maybe it's wine varietals, and they just spend way too much time on that one thing way beyond what's reasonable or pleasurable for a sane person. Well, the truth is that as you get older you realize that most things in life just fucking suck balls, and when you find something that you like, you just want to do that thing a lot. But as you do it more you become more picky about it, so you want to do it better, then you want to do it perfectly, so you gradually become this bizarre obsessed person who spends months preparing for this little event that seems like no big deal to a sane young person.
Government has grossly failed us in this. Obviously this US government has failed miserably, but so have many others around the world and so have many previous US governments.
Now having the government as a backup insurer is not necessarilly a bad thing. It would be very expensive for companies to properly insure themselves if they had to, or they would have to take much smaller risks. Imagine if when a corporation went bankrupt the board & CEO had to personally cover the debt - they would become much more cautious, which would hurt the economy as a whole. What is irksome is that the large corporations enjoy this special benefit that nobody else gets.
This model is very good in general for getting people active & caring about issues. If you give them some very small easy way to get involved in something in their daily lives, in an activity that they do anyway, then they will accept it and make it part of their routine and grow to care about it.
Friday night was boiling hot in my apartment so we went out and sat in Dolores park; it was still toasty, and we admired that great night time view of the city from "Dolores Beach". There were a ton of people in the park, lots drinking and hanging out, probably a few hundred people all trying to get out of the heat. Around 11 or something a whole bunch of cop cars showed up and chased everyone out of the park. The big mass of hipsters down below put up some resistance to the police but eventually got chased off too.
In general in life I'm torn about trying to fight my natural self, or to accomodate it and tailor my life to make it work. eg. knowing that little rejections can send me into 3 days of depression, should I just put myself out anyway and try to fight my immature natural tendancy and be better, or should I just accept that that's the way I am, and do what I need to do in order to avoid putting myself in the bad situation in the first place.
I'm not totally happy with my spiced nuts method. It's basically roast nuts, heat 2 tbsp sugar + water in a pan until liquid, toss in nuts and quickly coat, toss on spices. That works fine but I don't like how sugary they are, but if you use less sugar it's not enough to coat evenly and the spice doesn't stick evenly.
There are alternative methods. One is the egg white coating method to get stuff to stick. That sounds weird and gross. Another is the butter coating method. I think that kind of makes your nuts taste like chex mix (and every girl knows you don't want your nuts to taste like chex mix).
Perhaps I could use a bit less sugar and add some butter to make a sort of very thin light caramel and use that.
Over the same period, stocks (the S&P 500 to be precise) rose even more, by about 225% , or 8.48% anually. Over longer time spans stocks look even much better vs. housing, I was just surprised that even during the biggest housing boom in modern history stocks did better, even despite the big crash in 2001-2002.
BTW obviously housing in hot spots did better than the national average, but also stock sectors like energy & technology did better than the S&P so let's not get into that game.
Of course the big advantage with houses is that you can massively leverage your investment (and the interest deduction, and the tax break on gains). If you leveraged a big stock bet the same way you would do better on average. For the most part people don't do that. The reason is that housing is supposed to be much safer. Leveraged bets are very risky; no bank would ever loan you money in order to invest it in the stock market, but they will make that loan for housing.
1 Oz lime juice
1 Oz simple syrup (simple syrup = 2 parts sugar, 1 part water)
1 Oz light rum
1 Oz dark rum
Stirred, not shaken (no ice chips please!). Serve up in frozen glass. Garnish with a wafer thin wedge of lime, floated.
If you like the malty flavor, you can use simple syrup made from turbinado sugar.
While I applaud 10 Cane (LVMH) for trying to bring back the classic daiquiri, actually putting 10 Cane in a daiquiri is comparable to making a vodka-cran with Grey Goose or whatever. (btw expensive vodka = lol)
One of the common ones is the pop-up failure box after a long batch process. Lots of things do this - iTunes music imports, Windows Installers, etc. You set it doing some huge thing and walk away, only to come back an hour later and find it only ran for 5 minutes and then decided to pop up an interactive yes/no box about some warning. Even worse of course is when it runs for 2 days and then pops up a "whoops couldn't complete" box. Thanks. Of course it's blatanty obvious that any time you do a time consuming process you should check the possible failures and anything you need to ask about right up front, and get that all verified, and then let the user know you're about to go non-interactive for a long time and let him go away. Furthermore a semi-accurate progress percent is pretty important.
The progress percent is another one where people seem to just get a laugh at fucking with you. There's a few funny ones :
The progress bar that's actually just an hourglass. It moves across the bar steadily and you feel all happy, and then it gets to the end and just starts over at the beginning and keeps moving again. WTF. iTunes does this.
The progress bar with super non-linear speed. It ticks along nice and fast, you decide not to even stand up, and then after five minutes it hits 98% and just stops. Then it hits 98.1%. Doh.
The progress bar that restarts over and over. Windows installers love to do this. You see a progress bar and you think hey this won't take too long. Then it restarts for the next phase and it's ticking a little slower. Hey no big deal I can wait this out too. Then it reaches the end and restarts another phase. Doh!
"pederast" is not the same as "pedophile", though they are somewhat related. Pederast is more specific, and refers to someone who has anal intercourse with young boys. It's sometimes specified that it's against the boys will or with them as passive partners, ergo they are being raped, but I don't believe that really needs to be explicitly indicated, it can be assumed.
Also, what's the word for someone who likes walking (going places by foot)? I'm pretty sure it's "pedephile" (?) , which makes me a huge pedephile. Not to be confused with someone with a foot fetish, which is a "podophile".
More than anything I wonder why they insist on telling me these stories about their youthful debauchery. Hey that's great, you got drunk and had sex with lots of people, good for you, why don't you just keep that a secret? Why are you telling me that !?
Of course the worst bits always come out in off hand little comments. There are two primary types : 1. the knowing comment and 2. the horrible thing passed off as funny and no big deal.
1. The knowing comment is some little remark that indicates experience with something that's a big deal, but it's said in a sort of off hand way in a quiet voice. If you ask "what was that?" they always say "oh nothing". For example, you're watching TV together and there's an interview with a porn star who just did some video of 101 guys coming in her or something. The porn star says "the main thing you have to worry about is lubrication, with so many guys you can really get rubbed raw" and your girlfriend mumbles "yeah you can". You say "huh?" and she goes "oh nothing".
2. The horrible thing passed off as funny and no big deal. This often comes up as a "funny story" that's really not that funny and just horrifying, like "yeah it was my birthday, we went to this bar and I met a couple of guys and got totally wasted and I can't remember anything that happened, but I woke up in my bed and I only had one stocking on and my panties were gone; haha, I wonder how I did that? isn't that funny?" oh my god no that isn't funny it's shocking and disgusting.
There must be some reason girls drop these kinds of things so often. (by "often" I mean about once a year, any more than zero is pretty often for this IMO). Maybe it's to keep me from feeling too important and too secure, to let me know they've had wilder and could have it again any time they want so I better work for it.
The funny thing is that these stereotypes have nothing to do with reality, and everyone keeps up the illusion to make each other feel better. That guy's stuffed peppers might actually suck, and he might be really sick of making them all the time, and nobody really wants them, but everyone keep up the charade because it's the group dynamic and it makes everyone feel valuable, like they have a special skill and they're contributing.
If you somehow get to a good current state, that's all that matters, but of course your past strongly affects your current state. If you were a huge slut and slept around with lots of losers, that's fine in theory if it didn't affect your brain, but of course it does affect your mind in ways that stay with you. If you partied all through college and just drank and didn't study, okay, good for you, I'm glad you had fun, but of course that affects your mind in the present in a negative way.
Everyone's entire past is simply the road they have taken to try to build a perfect self in the present. Your past does nothing for you that's productive in the present other than contribute to the current state of your self (mind and body). Having fun memories is of course part of your current self and that's a valuable contribution, but it actually doesn't do that much to improve your present self.
I really don't understand people who make huge changes in behavior and talk about their past self as if it was a different person, they'll say "it wasn't the real me". Of course it was you, it was your mind. I don't believe that human minds really change very much. Your outward behavior and the portion of your mind that you choose to let control you can change dramatically, but the core of your brain doesn't change much at all. Anyone who's worked to try to change their brain knows how hard it is to even make tiny tiny changes in your fundamental personality.
Obviously people can make huge outward changes; this is most obvious in things like when an alcoholic goes clean. Their outward negative behavior was being greatly amplified by the alcohol in their system, so when they manage to go clean their behavior can in fact change very dramatically, but the basic thing in their brain that made them an alcoholic in the first place is of course still there, and the depressiveness and desire to avoid the real world and self loathing and whatever else made them turn to the bottle are all still there.
Actually it reminds me of something I've been thinking about old single people a lot, and I believe I mentioned this before. Someone of my age (30) who's single almost always has something horribly wrong with them. It's actually a really bad sign when that thing is not obvious. For example, if you meet someone who's just butt ugly, you can go okay, I know why you're old and single, you're ugly as sin. But when you meet someone like me who appears attractive and desirable and has money and whatever else girls want, ruh roh, that's a danger sign. There must be something horrible that's not obvious and that's much worse.
The best person to meet is someone who has some horrible obvious flaw that is something you don't personally mind. For example someone who's really shy and awkward might be a good candidate, because it's possible they could be single because of that despite being otherwise wonderful. Another good flaw might be someone who's just way too picky, as long as you can pass their high standards then their flaw becomes not too bad. I guess even better would be someone where the flaw is actually a positive; for example if you meet a girl that's just super geeky/nerdy and you're into that, then that's ideal for you.
It's like when you find a couch on the sidewalk with a "free" sign on it. If it's really old and ratty, okay you see why it's free. If there's a big obvious coffee stain on it, okay, flip the cushion and take it. But if it looks great and there's no obvious flaw and it looks expensive - ruh roh, something disgusting has happened to this couch and you shouldn't touch it.
I love it here. I wish someone like Bungie or Valve or RAD was in SF. Instead I've got myself a real dilemma. :(
First the instruction :
Stand the mango vertically and line up the seed so the long side points away from you. Put your knife next to the tip of the mango right at the very top. Work it down gently until you feel the seed, now tilt your knife and work it gently to one side so that you go down right along the seed. Note you are not cutting straight down, you are cutting an arc to exactly trace along the seed. This is easy because you can feel the seed. Repeat on the other side so you have two curved halves.
Now take each half and slice it in half the long way. Now you have a long wedge of mango with skin on the outside. To remove the skin you need to make two cuts to avoid wasting flesh. The smoothest way to do this is to pick up the wedge of mango with your hand, with the mango skin touching your skin. Insert the knife near one end just above the skin. Push the knife in slightly past half way. Now run the knife down almost all the way to the bottom. Rotate the knife around to the other side while you also rotate the mango in your hand. Now run the knife back up the other way. The flesh should now come off the skin with no waste.
Note that you have the pit left over, but it has almost no flesh on it because we made curved cuts. I just suck the little bit of flesh off the pit with my mouth.
You should now have 4 big chunks of flesh, you can very quickly dice them if you like.
I used to do the standard method of cutting into 3 pieces and then cutting a grid into the halves and then inverting the skin to pop it out. That method is taught by just about everyone on the net : retard , bad , bad , bad . That method sucks balls. It's slow and clumsy.
So far as I know nobody else demonstrates the cbloom method of cutting mango.
WARNING : Cutting while holding fruit in your palm should not be attempted by the dumb, clumsy or inexperienced. You may cut yourself, and don't blame me! Go do some more practice dicing onions.
Cut the potatoes into wedges, place in a bowl and toss with a little EVOO. Spread evenly on a rimmed baking sheet. Butterfly the chicken along the back bone (not the breast) and flatten on your board then place on top of the potatoes.
Place in a 425 oven for 40 minutes.
Remove the chicken, sprinkle the potoatoe with S&P and place them back in the oven for 5-10 minutes more until they absorb all the chicken juices and turn crispy brown.
My comment : this is extremely similar to my roasting in pieces method, I'm not really sure if the butterfly is better in any way than pieces; I guess it looks a bit cooler in presentation.
Result : yeah, it's pretty to serve on a big platter with the butterflied chicken and roast potatos and carrots and whatnot around it. Could roast some fennel and turnips and such too. The chicken came out perfect; I rubbed the skin with soft butter as I always do and it was crispy, the meat moist. The roast potatos underneath were delicious, but would've been better if I'd taken it all out and flipped the potatos half way through cooking; the sides that were on the bottom were too charred and the sides not touching the bottom were not charred enough. Also obviously any roast veg that's not under the bird cooks very differently than stuff that is under the bird, so you can't leave them in the same length of time.
A few days ago I saw this video of Girls doing Parkour . WTF? They're doing the easiest beginner moves and their flow sucks.
I don't believe that girls genetically inherently suck, which means they *choose* to suck, which is actually worse. If they were somehow genetically inferior and doing the best that they could, that would be respectable, but they are in fact not limitted and just suck because they aren't trying, or something. Perhaps some of it is because they're coddled and told they're awesome when they in fact suck.
Now don't fly off the handle. Of course I'm not talking about every single woman, I'm talking women in general. If you just tried to disprove my general point using specific counter examples, I'm guessing you're probably a woman.
Their basic philosophy of game development is very appealing to me. They're devoted to making a "simulation" that responds consistently and logically; the user only has a few ways to interact with the world so that you aren't creating tons of canned interactions, rather the way you can poke the world always works and leads to lots of interesting scenarios because the systems all work together. Their game design also seems to be very logical, in the sense that they have certain feelings and types of play they want to create and they find the game systems that lead the user to experiencing those things.
On the other hand, WTF is up with the music in the Halo games!?
Talking to people in Seattle got me excited about games again. It's a pretty interesting time. The big negative at the moment is how huge and complex games are, and how huge the teams have to be, which kind of sucks. On the other hand, games are still advancing very rapidly, and some big advances are going to be made in the next 10 years. We're finally getting to the point where we can realistically talk about making true dynamic simulations of complex worlds.
In contrast, at the moment there are basically two types of games : 1. "Deep, narrow" games, that are simulations, but in very limited ways - the user can only do a few things and the environment is strictly limited in how it responds; this includes things like Halo as well as lots of old games like Mario etc. 2. "Broad, shallow" games that have lots of canned hacky interactions and try to create the illusion of a huge world you can interact with in lots of ways, but aren't true simulations and you can't do anything the designers didn't specifically code in; this includes things like GTA and the Sims as well as most of the classic j-RPG's and stuff like that.
Everyone is very excited about the continuing growth of CPU power as we continue to move into the multi-core era. The problem is that with machines getting more complex we can do a lot more and run a lot more content, if we keep making games the way we do now that would require 10-100 X as much art & design work, which means prohibitive schedules and team sizes. So we need a way to make tons more interaction without a lot more content creation, which of course means code.
The big exciting things coming up IMO :
Procedural interaction ; N*M problem. We want to have N types of things in the world and M things the user can do, but we don't have to manually set up N*M special interactions, and of course the user can put objects together and they should respond to each other as well which is N*N or even N*N*M, etc. This means that the way things work together needs to be more procedural. Currently in games for me to be able to do a "pick up" , I need to code or animate a different "pick up weapon" , "pick up box" , "pick up humanoid", etc. In the real world if I know how to do a "pick up" I can pick up anything.
"sparse virtual geometry" ; importance-based object detail & existance. This is very vague and nobody knows really how to do it, but we know it's what we want to do. In fact, I and others have been talking about this since 1998 or so. I believe Carmack has been talking about it a lot recently. I should emphasize first off this is not about rendering performance, though rendering is part of it. The idea is that you want to have a world which has "virtual" geometry and objects of massive detail and uniqueness. We want to get away from instancing and just decorators on simplistic backgrounds, and actually have something like a city that's full of millions of unique objects all interactable. Of course you can't just have all those objects in the simulation all the time, so you want to page out stuff that's not important and down-res the distant stuff. Down-res means lower LOD, not just for rendering, but also for collision, AI, pathfinding, etc. etc. The overall goal is that you wind up with a constant performance system similar to the sparse virtual textures, with more detail where you need it.
Dynamic everything. Currently all complex games rely very heavily on having the basic structure of the world static or semi-static, which allows you to precompute lots of helpful things like AI paths, radiosity, collision acceleration structures, etc. People are doing semi-dynamic worlds at the moment mainly by allowing only small or specific canned changes to the static world and precomputing the effect of those changes. The goal in the future is of course to support dynamic everything, which means fully realtime lighting, PVS, etc. I actually don't think the rendering is the hardest part of this at all; things like packaging for paging, and AI are much bigger problems, which leads us to -
AI that can understand its environment. Currently nobody has AI that can actually understand geometry. The designers do lots of tagging, or some complex tool runs a preprocess to analyze and figure things out about the world, and the result is some simple tags like "you can walk here" or "this is a good place to shoot from" etc. There are two reasons this is bad. One, of course if you have totally dynamic geometry you can't do this. Two, the amount of work it takes to tag all this stuff for designers is pretty massive and we'd like to eliminate it. This is a huge area of work that we'll probably only begin and could continue for a hundred years, in the extreme case it includes things like strategic reasoning about environments. In the short term we'll probably have to continue to rely on markup for the macroscopic issues (like "this is a flanking area", "this is a good first retreat area") but we'd like to advance to dynamic smart AI for microscopic issues (like "I can walk here" or "I can take cover here").
This is all pretty pie in the sky; there are a lot less insane things that are also going to be happening, or maybe just some baby steps in these directions.
Also this is all very exciting tech, but in terms of what actually makes games good or bad in the short term, none of these have anything to do with making better games. The problems with games in terms of the user experience are the same as ever :
1. Not enough time spent on all the little details that annoy the user; stuff like UI usability, controls, load time & paging, good tutorial integration, etc.
2. Shitty stories, boring characters, uninspired worlds, gameplay that doesn't integrate the play and the user and the world/backstory, generic uncreative art designs, schedule cuts that wind up wrecking the world/story/art.
3. Generic repetitive gameplay due to lack of game design vision and lack of risks taken in prototyping/prepro.
To some extent these things can be improved by technology, largely by making content easier to create, more foolproof, and faster to iterate. The goal of game content creation should be that the artists/designers can just try anything they want, instantly see it in the game, and have it all "just work", so they don't have to know a bunch of weird rules about how to make good content and don't have to worry about manually tagging up a bunch of junk.
I did find SharePodLib which is pretty awesome, but I'd rather not write my own app, plus his sample project seems to be a C# project that uses some Vista.NET thingies because my version of VS.NET refuses to open the project.
Rice : 2 cups water, 20 minutes, covered simmer.
Steel cut oats : 3.5 cups water, 25 minutes then check and maybe cook 5 minutes more or add liquid (milk optional). uncovered simmer. The goal is "al dente" not mush. Usually pre-toast in dry pan. Stir minimally. Finish with butter.
Rolled oats in the microwave : the quaker oats says 2 cups water (to 1 cup of oats); I find it's better with 1.5 cups water, otherwise it's just oat soup. 2.5 minutes for me; I like my oats with a tiny bit of tooth, not soggy mush.
Couscous (fine) : 1.5 cups boiling water, 5 minutes. seal and let sit off heat. This produces a semi-dry couscous which is intentional because I plan to use it as a bed for a saucy main dish or pour some other flavorful liquid over it.
Warning : This is for the typical fine grain couscous that Americans get; real traditional couscous is a much larger grain and takes a lot longer to cook; don't be thrown off by traditional couscous recipes. There are also medium grain couscouses available which would be different.
Kasha : 2 cups water, 10-15 minutes, covered simmer. Usually pre-toast.
Warning : there are a wide variety of kasha (buckwheat groat) kernel sizes, so you may need to do some experimenting to see what you get. There are completely whole kernels (not recommended, a bit weird IMO), cracked kernels (best) and fine kernels (bad). Start with 10 minutes cooking and see what you get. The stuff I get at Rainbow takes about 10 minutes.
Also, IMO the traditional "varnishkes" method with egg is a little bit weird and definitely unnecessary.
Polenta : 2.5 cups water, 40 minutes then start checking for doneness and maybe 5 minutes more, uncovered simmer. Minimal stirring. Finish with butter & parm. Lots of salt.
Quinoa : 2 cups water, 10-15 minutes (generally 15 unless you like it really poppy like fish eggs). Covered simmer. Note : actually if you rinse the quinoa it holds so much water that you only want 1.5 cups water.
Warning : you must rinse quinoa before cooking, though many grocery store brands are pre-rinsed.
Yes yes I know couscous is not a grain, it's nuggets of wheat, but I treat it like a grain so whatever. Also Kasha is technically not a grain, it's a "groat" but it acts like a grain, and quinoa is some kind of seed or something.
The #1 mistake people make with grains is not salting. Grains needs a LOT of salt. Salting during cooking is generally good, but supposedly bad for steel cut oats (questionable). The #2 common mistake is probably overcooking. When in doubt slightly undercook because there will be carryover. Your goal is not mush.
General warning : it's almost impossible to cook less than 1 cup of a grain. If you're single or a small eater you may be tempted to try to cook less, but it's too little mass and the water evaporates too much and it probably won't turn out very well. Grain is cheap, just make 1 cup and throw out the excess.
Other notes on steel cut oats : Alton likes to add dairy, but personally I prefer them without any dairy; I've tried cream too, and any kind of dairy in the oats just really mellows out the flavor and subtracts from the nutty oaty goodness; I'd rather add extra butter, though the better the oats are cooked the less butter & sugar you need, you just want to appreciate the texture and natural flavor. If you are single and want to make a batch and don't plan on eating the whole thing - scoop out what you want to save after 20 minutes of cooking and put in tupperware. Lid it and stick it in the fridge. At 20 minutes it's very undercooked, but the residual heat will keep cooking it, so when you take it out of the fridge the next day it will be almost cooked, and then after a few minutes in the microwave it will be done.
Groupthink almost always develops in these groups. What I mean is a certain style of thinking becomes accepted by the majority and no longer questioned, and people find it easier to just go along with majority. This style might be something like love of STL, or love of very simple exposed C-style interfaces, or just the general concept that C++ is broken and many of our woes are due to the language, or whatever. It's some belief that's not really rational and becomes a common framework for everyone and the group thinks similarly. Groupthink develops for various obvious reasons. The senior people tend to hire new people that think similarly to them. The new people are taught the current way of thinking. People who think differently get in big debates all the time and get sick of it and just stop objecting. When the majority is against you, you tend to just stop talking.
Leaders and followers almost always develop. Some people are just naturally pushy, or very respected, or whatever, and take up leadership roles even in a putative true democracy. Similarly some people are just weak or natural followers or just lazy or don't care, and so rather than really be independent they just follow one of the leaders. This means that a few loud voices tend to dominate and you don't really get a bunch of independent thoughts on problems. This is totally independent of any formal heirarchy, and of course it develops in social groups of all types. At a place like Google, for example, I'm sure that many people adopt the "Larry and Sergey" way of doing things because it's easier to defend.
A lot of the problem comes from subconscious laziness. Really thinking independently about various problems is very tiring. Most people stop doing so and just go with the flow because it's easier. Usually this isn't even a conscious decision and people aren't aware of it. I've commented before about how when I'm out cycling by myself, sometimes I'll zone out and stop paying attention to my pace, and then all of a sudden I wake up and discover I'm going like 5 mph. The human mind has a built in subconscious desire not to work; it's very lazy, it's designed to conserve your energy for the next big chase or fight. In intellectual work, if we don't force ourselves to be active and vigilant in our thinking, we slip into lazy habits and just go with the flow and stop thinking for ourselves.
One way to fight this is turnover. You want to hire new people with very different styles from your core. This goes against most people's hiring practices who do retarded things like favor candidates that use the same coding convention as you. That may make it slightly easier to integrate someone, but it's much better for the health of the group to bring in people with different ideas. Then when you do hire them, you have to be a bit careful to not beat them into the groupthink mold. You also want to listen to their ideas on how you do things, because they bring a very valuable fresh mind. Often when I was moving around from company to company I would come into a new place and they would have some absolutely insane onerous process that made it so hard for the artists to work, and everyone there was just convinced that "that's the way it is", and I would be like "whoah whoah this is insane, you shouldn't have the artists spending 2 hours to sync every morning, or running a debug build at 1 fps" or whatever. Of course the newbie will also be a bit retarded since they don't know your process, so you have to be smart about what you listen to and what you ignore. When I was hiring I mostly did this the "bad way" ; it's definitely tricky to balance the immediate usefulness of hiring similar people to the long term health of keeping a diverse population.
Another problem with groups is that people have a tendency to develop an "us vs them" mentality. This is also subconscious and it pervades all groups, not just these companies. People have an innate desire to be part of a tribe and to feel like they're banded together against the rest of the world. It's a sort of pack mentality, and it leads to being very defensive of the practices inside the group and being dismissive of voices from outside the group.
Part of the "us vs them" mentality comes from creating myths about how great your practices are. All successful groups tend to over-value their practices and think the way they do things is great because they've been successful in the past. Well, maybe so. More likely your success is due to A) good people B) good circumstances, and C) luck. Human beings in general vastly underestimate the amount of variance in success, and look too hard for direct cause & effect relationships that often do not exist. This is most obviously retarded in gamblers; anyone who wins a hand of poker makes up all kinds of reasons why their style somehow led to that success. It's less obvious in endeavors with lower variance, but still present. For example, maybe some of your practices really are good, but many of your practices may not be; people tend to associate success with every single practice and elevate them all to the magic formula that brought that success.
None of that is to say that the democratic models are a bad thing, obviously they're very cool and successful if done right. But the idea that decisions will be made rationally and on their own merits is a bit of a dream. And how well you fit in is not so much about how you work in a democracy, but about how you meld with the dominant thought camps in the borg network.
I wish more Japanese places had real natural soy sauce & fresh wasabe. The shit they serve is kind of like a breakfast place putting Aunt Jemima on the table (= Kikkoman Soy), and I Can't Believe It's Not Butter (= tube Wasabe). I think about the Seinfeld where Jerry sneaks in his own maple syrup. I imagine getting my own fresh wasabe root and smuggling it inside my pants, then I take a rasp out of my coat pocket, poke the wasabe out through my fly, hold my plate down at my crotch and grate off a bit.
In video games, the most basic aspects of the player interaction are still some of the most unsolved. How do the sticks turn into motion. How does that motion show in animations. How does physics & kinematic animation interact. How does physics limit your motion. How does a 3rd person camera track the player & the action. etc. very basic stuff, really not solved, and lots of interesting technology to work on.
Ruh roh shaggy.
The right way ("right" being defined as fast & easy) is to cut the flesh away from the core, not to try to cut the core out of the pepper. Basically you want to chop off the outsides the same way you take the outside off a pineapple. Also never detach the stem part of the top from the core, you want it to hold the core together so you don't make a mess.
In detail : stand the bell pepper up vertically ; put the most stable end down, whatever that is. Your non-knife hand should be stabilizing the pepper by placing a finger tip at the top. Make vertical cuts downward with your knife, following the shape of the outside of the pepper, to cut off just the edible pepper walls. The knife should go right along the inside of the pepper walls so that the veins are left attached to the core. Don't try to cut too much in one slice or you will cut into the core or the veins - just take off the outside. It will take 3-8 cuts to take off all the outside depending on how irregular the shape of the pepper is. Your non-knife hand should now be holding the core with all the seeds and veins attached, which you throw away. When you do it right (very easy with practice) you will be left with 6-8 slabs of edible pepper exterior with almost no veins or seeds, completely ready for use.
For example, all of these people are 100% retarded. retard 1 , retard 2 Like hey, I know nothing about anything and my skills suck and my brain is broken, let me make videos telling people how to do things that is totally the wrong way. The blind leading the deaf or something. Yay interwebs.
(I mistakenly had this guy in the retard list, but actually he just shows the wrong way first and then the right way, not retard )
This guy at video.about.com roughly does it right, but his knife skills suck donkey balls. Maybe this is how you will fare since you probably suck ass with a knife too. Go practice dicing onions.
Okay I made my own video . I only had one bell at home so I knew it had to get it in one take. The pressure was on so I went extra slow and careful.
BTW I don't mean to rag on the amateur home chef with shitty skills. This is for you to learn. The thing that pisses me off are these people who presume to be teachers and just suck so bad. How dare you think that you are qualified to teach anyone anything when you obviously haven't studied or put any effort into this subject at all !? I have great respect for the people out there who actually have skills, and there are plenty of them, and it's disgusting for someone to put themselves on that level when they don't deserve it.
I now see it's an example of how people can take very different approaches to a problem, think that they have spanned the solution space, and yet still be ridiculously far off the optimum performance.
The right way to take the ends of blue lakes is similar to the right asparagus solution : just use a knife. Line up a bunch on a board and chop. Line up, chop. You're done. It's an order of magnitude faster than the hand breaking method, like seconds instead of minutes.
Presumably the very common practice of breaking off the ends of green beans by hand came from the historical practical of de-stringing string beans, but modern green beans don't have strings so this practice is vestigial.
Some of the better places now are grass feeding early and then stuffing with corn to "finish" before slaughter. Maybe that would work. I think wild Salmon is similarly shitty, the flavor is nice but it's so dry and dense compared to the lovely light tender farmed stuff.
It's basically trivial to spend a lot of money and produce good food; certainly plenty of people fail to do that, but it requires gross incompetence to screw up. Spending little money and producing delicious food takes care and skill. Of course it also takes a lot of skill to spend lots of money and produce truly superlative food, but very few people in the world ever accomplish that. Even their fanciest creations rarely surpass a good piece of buttered bread.
The better way is just to use your eyes. You can see the transition. This is of course what they are doing, using their eyes to decide where to hold it to snap it. Even if you use your eyes I can't really recommend the snap method, because it's very imprecise and you often snap off lots of good tasty bits. Just use a knife.
Once you cut it, you will see the exposed ring at the base. You can now see how thick the skin is there and decide whether you need to bother with peeling the stalk. Generally the actual woody part is very small or not existant at all on store-bought asparagus, and all you need to do is a bit of peeling.
Addendum : while on the subject of asparagus let's talk about size. It's really funny when people proudly brag about what nice thin asparagus they bought as if it's some prize. The truth is that in the supermarket, the thick asparagus is usually best. The love for thin asparagus is a very common sign of the yuppie fake-foodie pretentious douchebag who hasn't really put any study into food at all but acts like they are some authority just because they shop at Whole Foods and watch Rachel Ray.
The myth of thin asparagus is I think just based on foolishness. We could pretend that it's based on the fact that if you grow your own asparagus, the very first shoots will in fact be thin and tender and delicious, but I'm pretty sure that fact has nothing to do with this common erroneus belief. Asparagus is this plant that's mainly underground and sends up flower stalks over and over kind of like a mushroom. You chop off stalks a few times and it sends up more. When farmers grow asparagus, they of course do not chop off the first growth when it's very young - they sell by the pound and they want it to get bigger. So they let the first stalk grow big, then chop it off. This is the best asparagus and it comes in spring and is quite thick. Then they let it grow stalks again and chop it off. Then they do it again. These stalks will be thinner and thinner as the plant is getting out of season. In the fall you get very thin stalks and they are horrible. Of course the real way to judge the quality of your asparagus is to look at it like any other vegetable. Size doesn't matter so much as the color and texture. It should be all green, without any yellow splotches. The skin should be plump and smooth, never wrinkly. If you can touch it, it should be crisp and snap easily, never bendy.
Amusingly, this asparagus error is so common that you will often find the asparagus bin has been picked through and all the crappy thin stuff has been removed, and only the nice plump crisp thick stuff is left. Well, okie doke. To give people some credit, part of the misconception comes from the fact that thick asparagus does need some peeling. That can be done very quickly with a paring knife if you have top skills, or slightly slower with a veggie peeler.
Now if you are one of the many people suffering from bad information and believe that thin asparagus is good, that doesn't make you a horrible person. But if you brag about that fact and act like you know far more than you do, that's bad. There's general disease in our culture that people like to act like experts and take pride in things that they have put absolutely zero effort into; have you studied food, have you read books, have you practiced, have you asked questions? no? then why the fuck are you pretending to know what you're talking about? The real test comes with how you react to correction. Good people are glad to be corrected and welcome the new information, perhaps with skepticism but still with gratitude.
I'm learning more and more that the idea of really living honestly and connecting to people on a deep level is not possible, and even trying generally makes your life worse. If you just do the superficial/manipulative thing of pretending to be the person that they want, positive & funny & loving & caring & interested in what they're saying & supportive and etc. that your life will be much better. eg. just fake it. You don't even have to "fake it till you make it", you just plain fake it, there is no "make it". A lot of people have a negative reaction to this idea because they have very false ideas of what "faking it" is like; they think of the total douchebag guy who's always smiling and acting your friend. That guy is just a really bad faker and obviously not a good example of how to live. The better example is the charismatic guy who's always nice and seems real and is fun to be around. He's a total faker, but he's good at it, and that makes his life better and the lives of everyone around him better.
In fact, being "real" and not faking it is very discurteous to others. Everyone can think of examples of this. Say you and your spouse throw a dinner party and he does something right before to piss you off. The mature thing which benefits everyone is to just hold it in and pretend to be happy until after all the guests leave. But even after they leave, why exactly do you need to say anything about being hurt? If you can say something and have it improve the situation and make it happen less in the future, or make you both feel better, then that's great, say something. But that's often not the case. Often you are saying something just to make yourself feel better, and it will make him feel worse and make you both angry at each other. Then you shouldn't ever say anything. Those cases are in fact the majority, and if you look for these spots you'll see more and more than the really considerate and mature thing to do is to ignore your real feelings and just act jovial and entertaining and sweet.
I'm so angry at my fucking human biology which makes me need the company of other humans. I wish I could just go away and live in the woods and commune with the squirrels and be happy, but I can't. My own cells betray me. They force me to seek the approval of these fucking walking turds. My own cells that I care for so well, they force me to feel like a loser if I don't fit in with these slags.
I guess I'm having a bad day. I'm kind of depressed, and in a somewhat amusing feedback loop, it really depresses me when I get depressed. If I was the strong uberman that I think I should be, I wouldn't let myself get depressed, so feeling depressed is a fucking failure, it's being weak, it's giving in to wallowing in teenage woes, and I'm such a fucking loser for doing that, which of course just makes me more depressed.
Bleck. While I'm ranting about it, these fucking web people just keep making the most awful unusable sites with fancy shit that doesn't work. I fucking hate fucking web apps and their shittiness and bugs and fucked interfaces. Yesterday I spent half an hour filling out the online application for a passport, and I get to the end with the magic button that says "generate form" and I click it and it takes me to a flash page and spins the loading graphic and then does absolutely nothing. Awesome.
Even more common these days are all the active forms where like every time you click a check box or something on a page it has to load to update some derived shit or show you something useless, so instead of being able to tab through the dialog and click things fast you have to go click, oh wait while it changes, click, wait, oh fuck my cursor moved, click, whoah the blank I was about to fill is gone. Fucking fucked retards.
One of the most common examples of this now is the fucking date entry widgets. I tab into the date entry field and start typing it out, then look up and notice that some fucking GUI widget has popped up over the date blank and now I have to mouse around to find the date I could've typed in half a second.
Basic composed pot roast : sear the meat in a big pan, salt & pepper of course. Toss a bit of flour in the pan and stir around in the meat fat (this will wind up thickening the sauce). Add liquid to almost cover, stock or maybe some beer, also bay leaves, whole garlic cloves, etc. Put on a tight lid or aluminum foil and toss in a 325 degree oven. Cook about 2 hours. Now jam the oven up to 425. Toss in a sheet of carrots rubbed in olive oil and salt & peppered. Also toss in a sheet of potato wedges with the same treatment and also perhaps some thyme or similar. Cook about 30 minutes at the higher heat. Make sure you don't completely run out of liquid on your meat, add liquid if necessary but not too much. The carrots should get nice and charred. When it's all cooked, remove from oven. Pour the juices off the meat & reserve. Toss the carrots and potatos in the pot with the meat. Toss in some frozen peas and let it all sit 5 minutes so the peas cook.
Turn the juices into a sauce. To really do this right you should've cooked the whole thing ahead so the drippings can cool and you can take off some of the fat. Or you can skip that. Taste the juices and maybe don't do anything. If it's too thick, add wine or beer or stock. If it's too thin, you can either cook some flour in the pan you cooked in to make a gravy/roux, or make a cornstarch slurry and add that, or if it's thin and the quantity is sufficient you can just cook it down a bit to reduce. Perhaps add salt & pepper to the sauce. Finish with a bit of butter.
On a related note, even "hedge funds" these days don't actually hedge. LOL.
Anyway, that's changed now, and Alissa introduced me to the Junior Boys. Who knew that my love of offbeat indie music and my love of electronic dance music could be combined? They're pretty rad.
1. The amount of work vs. amount of reward ratio is way off. The amount of work expected of employees is massive, and you have to be very smart, and the reward is nowhere near what you can get for similar highly skilled work in other industries (such as being a quant in finance, or a consultant for petro companies, etc. etc.). The big problem is that so many people want to work in games because it's fun and they love playing games, that it drives down the wages and makes the working conditions worse.
2. Competition with other crunchers. I suppose this happens in other industries as well, but the problem is to some extent all the game companies are competing to do the next cool thing, and everybody else is way overworking and crunching to produce things fast, and everyone is making things with a lower budget and shorter time than is really needed, and you have to compete with that. Some people seem to avoid this trap to some extent, like Valve and Blizzard, but they can really only get away with it because of the fact that they are the only ones that do it. And I don't think they're working at any less of a fever pitch, they just do it for longer.
3. Bad management. Most of the people running game production are not qualified for the task. I'm not sure this is necessarilly worse in games than it is in other industries, but the thing is game technology and production is changing so fast that you really need powerful intelligence to run a game company, whereas in other industries there are these learned best practices that have developed over N years that people can just copy and do okay. If you like you could phrase this as saying that the high rate of change of methods and technologies is what makes games so hard & painful to make, but really those things just expose the weaknesses of planners that can't handle thinking ahead and can only learn from experience. (eg. was the debacle of the Iraq invasion necessary because it was a new situation, or did the novelty of the situation just expose the incompetence of the planners that didn't anticipate the challenges correctly?). Also by "management" here I'm not necessarilly just talking about the game studios, but also the direction from publishers. Of course the rapidly changing technology is what makes it really fun to program for.
There's a whole new kingdom of hiking if I consider going as far as Mendocino or Auburn/Grass Valley , but those are mighty far for day hiking.
The only things I haven't done here are the short Alamere falls hiking in Reyes, and I haven't actually been to the top of Diablo, though I've been around it. I also haven't been to Sunol/Ohlone so that's something to do.
Anyway, the attraction for me was always the swimming hole ("China Hole"). It's a moderately strenuous 5 mile hike in to the hole which keeps the crowd down a bit, at least on week days. It's a nice big clean hole in a river with some fun jumping rocks. There's a bit too much traffic for nudity unless you're an incosiderate freakazoid who likes to show off their wang and belly to hapless hikers. I went with Alissa and we spent a few hours jumping in the cold water then lying out on the rocks to heat up, then jumping in the water again. There were fish and turtles swimming around us, wild turkeys making their psychopathic-clown-laugh sound, and much clumsy buffoonery by me.
I would go more often if it wasn't a 1:30 drive :( ; I put a few pics on flickr.
Kevin's Hiking Page
The best overall hiking page about CA. He hasn't added much content in the last few years so it's failing to keep up a bit, but still
very well organized and lots of useful information.
Gambolin' Man
Two-Heel Drive, a Bay Area Hiking Blog
Two excellent hiking blogs. Good photos and descriptions of lots of Bay Area hikes. Two-Heel is more strait to the point information,
Gambol' is more of a prose poem about the wonders of hiking with lots of great photos.
California Hiking Trail Finder
SlackPacker is a cool site with good general info on how to be a decent hiker. Their link page of CA information is quite good.
.. Hiking in Big Sur ..
Really superb site detailing the hikes in Big Sur.
WaterFallsWest CA Index
WaterFallsWest Blog
WaterFallsWest is a cool page I just found. Obviously it's focused on waterfalls which I don't care that much about, but it's got tons of
information on hikes in CA, and waterfalls very often = swimming holes, which gets me pretty excited. It's also a mix of a hiking blog + a
useful database which is a pretty sweet combo.
Openspace.org - Your Preserves
The Peninsula Open Space main page ; the site blows but their maps are superb, so just download all the PDF's and figure out your own trails.
Redwood Hikes
RedwoodHikes is a commercial site selling maps & trail guides. There's plenty of free information though and their trail descriptions and
photos are very good quality, unlike the shitty bahiker. Even their limited previews of maps are better than most of the free maps you can
get elsewhere.
Running Trails - trailrunning tips and information.
Marin County trail running site. I hate trail running, but this site has some useful descriptions of trails with good information you
don't often get, like how to link various trails together and water stops and grades. Also, these people are fucking irresponsible
douchebags, running up & down steep trails with trekking poles totally ruins the mountain, so if you stop by email them some hate.
Random other hiking links I have :
Waterfalls of California - Traverse Creek Falls; Placerville, El Dorado Natl. Forest
Waterfalls of California - Shingle Falls; Spenceville Wildlife Area, Marysville
Waterfalls of California - Gold Country Regional Map
The Tahoe Sierra A Natural History ... - Google Book Search
South Yuba Trail
South Yuba River SP
South Yuba Map
Popular Day Hikes that Start at Henry W. Coe State Park Headquarters
Point Reyes National Seashore - Maps (U.S. National Park Service)
Nevada County Today's Feature Summer swimming holes They're plentiful along the Yuba River if you know where to look - TheUn
Mycological Society of San Francisco
Malakoff Diggins Shp, Northern Sierra Nevada, California
Henry Cowell The Truck Trail and Fall Creek
Henry Cowell Swimming Hole
Henry Cowell Redwoods Big Rock Hole Swim
China Hole & the Narrows
Camp Spots by Swimming Holes - Weekend Sherpa
Best hikes in the San Francisco Bay Area
BAY NATURE Fields of Color Wildflower Viewing in the Bay Area
Bay Area Hiker Tennessee Valley Trailhead
Bay Area Hiker Memorial Park
Bay Area Hiker Ano Nuevo State Reserve
Arroyo Seco Nude River Hike (NSFW)
In general in human decision making processes, adding another type of factor to the decision make it almost unsolvable. If you're just looking at {job} you can give values to your choice and pick the best. When you start trying to make a decision on {job,location} you suddenly have a metadecision - how to weight the two factors. The problem is they're in different units, so there's no absolutely correct way to combine them to make a single rating, it's totally arbitrary and you just have to "feel" how you want to want the two factors, which leads to dead end logic and circular reasoning and general failures to make a decent decision.
There are three good web sites about hiking in the bay area : Hiking with Kevin , Gambolin' Man, and Two Heeled Drive. When you search for hikes on Google, quite often not one of those three will show up on the first page even though they have info on that hike. In order to get the information I want, I have to do searches like "portola redwoods kevin" or "portola redwoods gambol" which is fucking retarded.
Step 1 improvement : The system should know I like those pages and automatically give me results within them.
Step 2 improvement : The system should've figured out I would like those pages based on my tastes and how other similar people already rated the sites.
I've always had a pretty active online life, but unlike the new generation of web 2.0 kiddies, I like to keep it separate from my real world life. I think that's pretty common among the older generation like me, we don't merge our physical and digital worlds so much. I'm okay with taking people from the online life and promoting them to real-world friends, but after that I can no longer be as free around them online, and any intimate communication has to be real world. Once I make too many real-world friends on a certain site, I can no longer be free there and have to leave and go to a new site where I don't know anyone in the real world.
BTW I think we should call web 2.0 sites "BBS's" since they're really not much more or less than an old BBS. They are similarly isolated from each other. They're a similar mashup of forums and other content. The BBS's generally had much better moderation and community management and screening. It's kind of funny that we went from these little islands of BBS's that had many great advantages, and we blew them up and went to the totally spread Web model which threw away the greatness of community forums, and now we're back to basically a BBS model and we haven't really improved on it much at all, except for the trivial UI improvements that you would expect from the huge increase in network speeds and computer power.
I'm talking to ILM and PDI to see if there might be a fun job for me there. It seems like it could be a pretty good fit; I imagine they have some smart research guys, but I think I could bring an ability to understand practical issues and implement good technical solutions. But my background is not in film, and they don't know me, and my resume/experience doesn't impress them at all, so I get tossed in with the regular candidate pool and have to list my skills and all that junk, it's quite humbling and I'm really not used to it.
I would be taking a big pay cut & seniority cut at these places, but I'm totally fine with that as long as the work is good. The problem is it's hard to tell if the work really is good. I really don't put salary as one of the more important things about a job, I care more about what work I get to do, how cool/smart my coworkers are, how good the management is, how much freedom I have at work, etc. However, on all those criteria you will be lied to by the people trying to hire you. Salary is the only thing that you actually know for sure you will get what you are promised.
It reminds me of back in the day when I first interviewed at some game jobs, and I interviewed at Valve, and I was kind of laughing to myself inside the whole time, because I could tell the Valve guys were not really impressed with me at all, and I knew that I was a fucking code ninja and they just couldn't see it.
ps. I'm not actually as arrogant as this post makes me appear to be.
Basically a good film-buff human is way better at recommending movies that are related to something I like. That really shouldn't be. The computer has way way more information about my taste history and about the movies that are out there, but it still isn't close to making good recommendations.
And I also have to mention Emir Kusturica and Takeshi Kitano. If you haven't seen their core body of work, they are absolute must sees; I always think of them as pretty mainstream and well known, but it shocks me to find how many film buffs haven't seen any of their movies.
The core Emir Kusturica set is "Time of the Gypsies" , "Underground" and "When Father was Away on Business".
The core Takeshi Kitano set is "Hana Bi", "Sonatine" and "Kikujiro".
K & D are unitless config parameters of the PD K = 1 and D = 1 are reasonable ; D = 1 is critical damping time_scale = desired time to converge dt = current time step x0,v0 = start position & velocity x1,v1 = target position & velocity ks = 36 * (K / time_scale)^2 kd = 9 * K * D / time_scale scale = ( 1 + kd * dt + ks * dt^2 ) a = ( ks * (x1-x0) + ( kd + ks * dt ) * (v1-v0) ) / scale vt = v0 + a * dt xt = x0 + vt * dt
If you had no min velocity that would be it. Note the funny scale numbers in ks & kd ; those are just there so that the time to converge roughly matches "time_scale", and so that K = D = 1 is a good choice. Note that K,D, and time_scale are really not three independent parameters, there are only two free parameters, but it's easier to tweak if they're seperated because you can leave K and D alone and just change "time_scale" to match your desired duration to converge.
To handle min velocity you add some logic after the above PD step :
mv = min velocity
if ( |xt - x0| <= (mv * dt) )
{
if ( |x1 - x0| <= (mv * dt) && |v1 - v0| <= 2*mv )
{
xt = x1;
vt = v1;
}
else
{
vt = (x1 > x0) ? mv : -mv;
xt = x0 + vt * dt
}
}
This is ugly in various ways. The first part was a pure PD that works in N-d. Now we've gone to 1d. Also the first part
worked with arbitrary end velocities. This min velocity part only really works for a still target. I think it's not too
hard to fix for a moving target by using a min velocity relative to the target but I haven't bothered.
Now of course PD's don't always take the same amount of time to converge, unlike the cubic. Converge time depends on initial seperation and initial velocities. With the constants in the equations above, and if you set up your tweaks right, then you can have a PD that converges in roughly "time_scale" for typical starting situations. Here's how the time varies :
the X axis is the "time_scale" parameter, and the Y axis is actualy time to converge. If it converged in the time you wanted, all the points would be on the red line (Y=X). There are four series of points for different starting distances so you can see how converge time varies for starting distances. The distances are {160,320,480,640}. In the graph the start & end points are all at zero velocity.
I figure I should write up the maths for the record since I've described it previously but haven't been totally clear. There's an implementation in testdd you can look at.
The goal is to make a curve that goes from initial position & velocity {X0,V0} to final position & velocity {X1,V1}. Position and velocity are N-d vectors. Traveling this curve, you should at no point exceed the maximum acceleration "m". m is a scalar. I'll use caps for vectors and lower case for scalars.
The lowest order polynomial curve that fits these condition is a cubic. A parametric cubic has 4 vector coefficients which can be used to fit the end position & velocities. It also has a free scalar - the time to travel the parametric interval from 0 to 1. This duration can be fit to "m" the max acceleration.
Using the Bezier form we have :
B(s) = B0 *(1-s)^3 + B1 *3*(1-s)^2*s + B2 *3*(1-s)*s^2 + B3 *s^3 s = (t / d) is parametric time t = real time d = duration of curveAnd fitting to the end conditions :
B0 = X0 B1 = X0 + V0*(d/3) B2 = X1 - V1*(d/3) B3 = X1Now, the velocity of a cubic curve is quadratic, the acceleration is linear. The means the highest acceleration on the interval [0,1] is either at 0 or 1. So we have to just check the acceleration of the two end points :
A(0) = 6*(B0 + B2 - 2B1)/d^2 A(1) = 6*(B3 + B1 - 2B2)/d^2Now you have to solve both end points and use the shorter of the two durations. You may want to early out to handle the trivial case, if you can use a tiny value for "d" and not exceed maximum acceleration at either end point, then just return. In fact "tiny value" could be the duration of the frame - if you can step the whole curve in one frame then just do that.
If we just consider A(0) for now we have to solve :
|A(0)| = m m = max accel parameter or A(0)*A(0) = m^2 (B0 + B2 - 2B1)^2 = m^2 * d^4/36 ( (X1-X0) - d*(2V0 + V1)/3 )^2 = (m^2/36) * d^4You can expand out the dot product and you are left with a quartic polynomial in the duration "d". Solve this polynomial. There are in general 4 complex roots of a quartic. You must choose the lowest magnitude positive real root. There should always be a positive real root because all the coefficients are real.
Note that the quartic arose because A was a vector - if we want to just solve the 1d problem it's much easier, because the equation in d is just quadratic. Note that you can not just solve the 1d problem and run it indepedently on each dimension of a vector, because that allows maxaccel in each dimension seperately and gives you curves that are obviously axis-aligned (it breaks rotational invariance of your space).
Once you have solved for the shortest duration "d" which gives you a curve that doesn't exceed maxaccel, you can now simply step along the curve. Note that we are not simply applying a force, but taking an exact step along the curve, you evaluate the position and velocity from the curve at the end of your current time step. This is equivalent to doing an exact integration with a force that is changing.
NOTE : we are not solving this curve once and hanging on to it; our system has zero state. A new curve is solved each frame using the current position and velocity. Because the cubic is exactly constrained, if the external conditions are not changing, then solving each frame will produce exactly the same path as just following the original solution the whole way. If the external conditions are changing, then the path changes smoothly.
ADDENDUM : talked to Drew about this, he made me aware of two issues. One thing I should state clearly : when you are changing the duration of the cubic, you are not just changing how long you take to follow the same curve. Obviously changing the rate of change of the parameter would change the acceleration, but that would also change the start & end velocity. In the math we did here previously, we are scaling the duration of the curve while keeping the real-time start & end velocity constant, which means that we are changing the parametric velocity of the ends of the curve. That means the curve actually has a different shape as you scale the duration.
The other note is that it might be possible to have seperate accel/decel parameters by using a different "max accel" parameter for A(0) and A(1), since you are generally at max accel at the start and decelerating at the end. That's not necessarilly true if the start & end velocities are not zero so maybe a bit more thought is needed, but in general the idea of using different maxaccel to get a control over accel & decel seems possible.
BTW you can also acheive the same purpose using a piecewise quadratic. To use a piecewise quadratic you have 3 phases of travel :
phase 1 : accelerate up to max velocity phase 2 : travel linearly at max velocity phase 3 : decelerate to hit targetSo in phase 1 you are fitting the end points {X0,V0} and ending max velocity. The maths for piecewise quadratic are slightly simpler, but the logic is quite a bit more complex because you have to figure out what phase to use and also handle the degenerate cases where phase 2 is not needed because you're close enough to the target.
I find the cubic is more appealing because you can just do the math and get an answer. There is one advantage of the piecewise solution, which is that you can have seperate max accel parameters for the acceleration and deceleration parts of the curve, which can give you non-time-symmetric curves.
The ideal sensual movie is intelligent, titillating, lush. It's a very fine line between cheesy and hot, because you do want a little bit of that orange-light soft-focus over-acting-pleasure, but if you get just an ounce too much it crosses into cheese and doesn't work. The ideal movies tease
There are a lot of classic Hollywood movies from the studio age that sort of qualify, but I'm not going to include any of them because they never quite cross the line from alluring to arousing. Something like "To Have and Have Not" may in fact be more appealing to women, or pretty much any early Brando, Bogart or Cary Grant movie.
I'm also not going to list movies that have like 5 sensual minutes that are sort of out of place in the movie and don't fit in with the general mood.
Not Sexy :
The truly sensual movies are as much about the director and the look and feel of the movie as what happens to the characters. They also have to be good enough to be watchable just as movies.
Sexy (in no particular order) :
Typical office conversation around noon : Where do you want to go to lunch? Uh, I dunno, whatever, where do you wanna go? Whatever. Well what about that one place? Mmm, nah, not there. Well how about blank? Nah.
I like to play "Choice Giver / Selector". This is sort of like the fair way to cut cake. One person cuts the cake into pieces, then the other person gets to choose which piece they want.
In "Choice Giver / Selector" , first someone is nominated or volunteers to be the Choice Giver. The Choice Giver should give 2-3 fair options which are reasonably distinct, eg. you can't just give the one option you want and then other straw man options. There's always protection against a bad choice giver, because the Selector gets to choose one of the options, or he can select to swap roles - he says "none of the above" and then becomes the Choice Giver and must give options himself.
In terms of a social dynamic, two details of this are important. The Choice Giver is only giving a few choices - not simply listing every possible option. By only giving 2-3 options he is expressing his own preferences, not putting all ther burden of decision making on the Selector. The Selector also can't just simply say "no" - if he doesn't like the options then he must take on the burden of giving options, and he must then offer 2-3 options that are reasonable and distinct.
I've given the example for two people, but this works in a group too. The initial Choice Giver volunteers or is nominated by the group. The group then votes on the options, or votes "none of the above". If none of the above wins the vote, then the group votes to nominate a new Choice Giver.
Of course it's quite common for people to play an informal version of Choice Giver / Selector but they leave out some of the very crucial aspects of the rules which ruins the entire balance of the game.
Hybrid cubic works like this : if the target is stationary, the max time to converge is set by a user parameter. A shorter time can be used at any time as long as max accel (user parameter) is not exceeded. The result is that you get the desired behavior of the original cubic controller of reaching the target exactly within a certain time interval, and it avoids the weird quirk of sometimes taking extra long curves because it was always taking the same amount of time - now it can take a shorter time in a reasonable non-hacky way. Note that this is not some tweaked out fudgy solution. There are two user parameters : max time to converge & max acceleration on the path, and the cubic path that fits those constraints is found exactly each frame.
I wrote something about this on game-tech but I never posted it here I don't think. To me, PD controllers and this cubic controller thingy seem like very opposite ends of a theoretical spectrum of controllers. On the one end, the cubic curve is exactly symmetric. That is, the path from P0->P1 and the path from P1->P0 are identical under time reversal. The cubic goes from point A to point B in controllable finite time, and basically never overshoots. The PD is sort of the opposite in every way - it's very asymmetric, it attacks hard to cover distance fast initially, then slows down and comes in to settle very slowly (eventually infinitely slowly for a pure PD). A standard critically damped PD will definitely overshoot as part of the price to attacking quick and then stopping gently. In hand-wavey terms the PD feels very "springy" while the cubic feels very "robotic".
Now in theory it would be awesome to have this as a parameter. So if parameter is 0, you get a cubic, if parameter is 1, you get a PD, and in between you can play with how robotic or how springy your controller is. And of course that's easy. You can just blend the controllers. It's important to note why you can blend the controllers - they are stateless and linear. You could just get the acceleration from each and blend that, but that's not exact since with both the PD and the cubic I've solved them to take exact time steps, going to a discrete integrator with a constant acceleration would be lame. But of course Newton's equations are linear too, so I don't need to blend the accelerations, I can just run both controllers independently and blend the resulting position & velocities. This is now in testdd as "mode 10" ("blend").
A quick note on PD's. You generally want a critically damped PD. PD's will never exactly converge, so you need to fudge it. The best fudge I found was a "min velocity" parameter. This make the controller try to at least move you at a speed of "min velocity" towards the target, which cuts off the long exponentail tail of PD convergence and make the end part linear. Now, with this you might go ahead and try using an overdamped PD to reduce overshooting. That does work but it's a little weird looking. I can't imagine why anyone would ever want an underdamped PD, they're just gross. I couldn't find a clean stateless way to give a PD controller a max acceleration. If you do it naively, you prevent it from stopping fast enough and get horrible oscillation. If you try to prevent that naively by allowing decceleration, you get weird looking curves when your points move around in 3D space because you've created a splitting plane where your controller changes discontinuously.
It used to make both Dan and Tiffiny very upset, not because I was writing anything personal about them or our relationship, but because they felt like I was sharing more of my inner thoughts with the anonymous internet than I was with them.
The positive effect is mainly that it leads me to email threads with people I'm close to on a much more intimate level than we would otherwise communicate. I've gotten some very good emails recently because of that, but in theory I could have those conversations with my friends without using a public blog to initiate them. In practice I probably can't.
More : 11/2007 to 03/2008