Here's another view: Accounting is the instrumentation that lets you make sure the machine (the business) stays calibrated, and that the inputs match up to the outputs.
299 karma · joined September 10, 2010
Here's another view: Accounting is the instrumentation that lets you make sure the machine (the business) stays calibrated, and that the inputs match up to the outputs.
Another impressive spot is the top of the Stratosphere Tower in Las Vegas -- it manages to capture the spike at the top fairly well. It'd be interesting to know how much hand-editing they did for sites of interest like that, and how they represent hand-edits in a way that can be re-applied when new lidar datasets come in.
Many of us have presumably seen our share of brilliant people flame out because they could not adjust to the ambient value system, and figure out how to get the right things done. Often these people flourished in a prior context: school or another company with more or fewer constraints.
Assessing that context match is hard. The most successful way is to have a mutual trial period (ex: internship). Failing that, in interviewing for a full-time position, the closest you can get seems to be by trying to simulate what it'd be like to work together. That's why you try to throw them at coding exercises or difficult problems. "Brain teasers" are silly but coding challenges where you see how far they can go with some direction are actually pretty useful. They give you a large dynamic range within which to quicky hone in on someone's current skill level. More interesting than their current skill level is how quickly you think they can progress, and so that's what you try to simulate in an interview.
This was a brilliant move for Google because it removes the friction they face to push web-client functionality where they want it to go. For example, I woke up one day and suddenly I could run all these new webgl apps. We have all granted them implicit license to push code out to all our desktops -- at the cost of no longer controlling what version and bug/feature tradeoff you are running.
Whereas App Store apps, where the user controls updates, are somewhere in the middle of this shrinkwrap vs. web app continuum. You get the constant nagging to download version N.epsilon.epsilon of iTunes, with 20 pages of block text describing updates that are only interesting if you are the person driving Apple's grand product strategy, but you at least get the ability to say no thanks, don't ask me again. (Of course they will ask you again, but that's just due to inevitably skewed incentives.)
- inevitable human motives when faced with a chance to escape poverty
- different cultural expectations about what it means to deliver on a manufacturing contract (i.e. does it have to always be exactly to spec, or can it just be roughly equivalent in the important ways)
- different cultural focus on surface appearances vs. less visible qualities
- information asymmetry between local operators and distant foreign counterparties
- greed on the part of foreign counterparties, which the Chinese manfucaturers exploit to get deals and then ruthlessly trim back everywhere they can get away with, backing off only when they push too far and get called on it
What's almost as interesting are the similarly misaligned incentives within the foreign counterparties. Western capitalist companies are unabashedly greedy, short-term (gotta make the quarterly numbers), share-price-oriented, and have all their own dysfunctions as a result. That's not to say the kickstarter guys are guilty of any of that -- just that there's plenty of parties trying to screw the other on both sides of this international dynamic, and finding a truly honest partner is difficult in business anywhere.
http://www.amazon.com/Poorly-Made-China-Insiders-Production/...
Much like the kickstarter project mentions, this book covers repeatedly broken promises, misleading claims (like the laser etching that turned out to be CNC), continuous reassurances followed by convenient disappearances, completely mythical factory sites and machinery, supposedly mechanical processes that turn out to be skilled hand-labor, and the need for vigilant and cynical quality control. It makes a convincing argument that once you account for the cost of all these shenanigans, export manufacturing is nowhere near as good a deal as it seems.
As has ILM: http://www.openexr.com/
Beyond benefiting from open source and wanting to give back, these studios use lots of software with different features and file formats to work on the same assets. It's really helpful when they can use the same techniques or files across multiple packages. They open source this tech in the hope that it will be adopted more broadly among the software packages they use. Hence Alembic, OpenEXR, etc.
But I think his underlying point is that Apple consistently executes similar values and priorities in many different areas -- for a company of its size, it's amazingly coherent and consistent.
Compare them to HP, where the CEO kills an entire product division that their webpage is still breathlessly promoting for days afterwards, which makes it seem like no one knows what the hell is going on over there and that they don't really believe in anything they do. As soon as Apple announces something, its whole public persona is consistent with that. It's kind of amazing. At the very least, you can count on being consistently annoyed with their values.
If you were designing a search algorithm it does not seem like you want want to give much weight to an embedded easy approval button (reddit, digg, +1, like, etc.) compared to something that requires more investment of someone's time and thought, like making a del.icio.us bookmark. I mean, half the time you have to go try to remember what your password was, then have them send you a password reset mail, then re-login -- now that's a bookmark I care about.
Sorry, I don't mean to be presumptuous; I just think this kind of thing is so rarely discussed until you're in the middle of it.
It doesn't really simulate how light bounces locally around an object, nor light emitted by an object. Rather than a light transport simulation it's more of a clever CG approximation hack that looks great and is pretty cheap.
But to the real point I think you were trying to make: yes, there have been a lot of strides in simulating light since the 70's, and more advanced techniques exist that should give more accurate results.
If this goes well, you might also want to acknowledge that this may mean taking less sophisticated, less forward-looking approaches. A lot of over-engineering is like over-training a model to historical data, assuming the future will be exactly like the past. Anyone who's worked on software for very long will be acutely aware that needs change over time.
1. custom methods let you get/put specific fields, without having to transfer the whole thing or split resources up as you add new methods.
2. custom methods avoid needing to implement complex or heavy state mutations on the client. the example was rotating an image 90 degrees; you wouldn't want to download an entire full-res image to your wimpy battery-powered phone, rotate it, and re-upload it when you can just do that on the server.
(... of course this should just update some orientation metadata instead of resampling the image -- it's just an example)
It suffers when you have multiple people working simultaneously, or if you have to take a break before returning to the project. In those case, a secondary automated statement of what the system should do is quite useful.
Resist excessive abstraction
Set performance targets for yourself
Excellent points for making any software perform well. I am working on performance in a non-web app that suffers greatly from over-abstraction, and over-caching to hide the overhead. Since design is subjective, railing against this got me nowhere -- but setting performance targets truly shifted the focus of the team. Now instead of debating how many internal layers we need and how to name them, we focus more on our runtime budget, and how to make the hardware solve the problem in that time.
http://syntensity.com/static/python.js
Also geeky fun to try to recognize what constants like 4294967295 correspond to -- it's all over the place!
And lots of literal char* strings encoded as integer sequences:
>>> s = [111,98,106,101,99,116,46,95,95,102,111,114,109,97,116,95,95,32,119,105,116,104,32,97,32,110,111,110,45,101,109,112,116,121,32,102,111,114,109,97,116,32,115,116,114,105,110,103,32,105,115,32,100,101,112,114,101,99,97,116,101,100,0]
>>> ''.join(map(chr,s))
'object.__format__ with a non-empty format string is deprecated\x00'Also, be wary of recommendations from people who work in a different part of your company. They may think they understand what you do when they don't, and use up your time with unqualified recommendations. Learning how to politely decline can save a bunch of time.
okclnt_t *make_newclnt (ptr<ahttpcon> x);
This declares a function that makes a new client from an http connection. It returns a raw pointer, so I presume the caller is responsible for the client lifetime. Whereas the connection argument is some ptr template, which I expect is a ref-counted or otherwise managed pointer, which suggests the client will keep the connection object alive. This is copying the ptr value, which if this is a ref-counting ptr would do an unnecessary extra ref-count during the function call, so they might want to pass it as a const-ref instead. okclnt_simple_t (ptr<ahttpcon> x, oksrvc_simple_t *o) : okclnt2_t (x, o), ok_simple (o) {}
This is a constructor to make a simple client from an http connection and a simple service. The only thing unusual is that a _t suffix usually suggests a typedef, and I don't think you can use a type alias to define a constructor.I haven't looked at the API or done any web programming; I thought it was interesting what I could tell from this snippet regardless.
I can imagine doing this with an A* search: snapshot the graph, including which nodes are open or already visited, along with the heap ranking of the next nodes to visit. You might also want to show all the newly neighboring nodes and annotate them with their updated cost estimate.