{"by":"wooby","descendants":0,"id":48962629,"parent_chain":[],"root_id":48962629,"score":3,"time":1784410297,"title":"Klong for the Web","type":"story","url":"https://tailrecursion.com/klong/"}
{"by":"wooby","descendants":0,"id":48929700,"parent_chain":[],"root_id":48929700,"score":2,"time":1784168786,"title":"Klong for the Web","type":"story","url":"https://tailrecursion.com/~alan/Klong.html"}
{"by":"wooby","dead":true,"id":48786473,"parent_chain":[],"root_id":48786473,"score":1,"time":1783181598,"type":"story"}
{"by":"wooby","descendants":0,"id":48145037,"parent_chain":[],"root_id":48145037,"score":3,"time":1778824505,"title":"Programmable Phones","type":"story","url":"https://tailrecursion.com/~alan/ProgrammablePhones.html"}
{"by":"wooby","id":47154473,"parent":47154336,"parent_chain":[47154336,47154195,47154127],"root_id":47154127,"text":"Thank you! I spent a lot of time eliminating launch-time work. Most state is precomputed or lazily initialized after first render. I wanted it to feel like a calculator, not an app.","time":1772039920,"type":"comment"}
{"by":"wooby","id":47154195,"kids":[47154336],"parent":47154127,"parent_chain":[47154127],"root_id":47154127,"text":"I built GridCalc because spreadsheets on phones feel fundamentally wrong.<p>On desktop, spreadsheets work because you can see formulas, references, and structure all at once. On mobile, that collapses. You’re constantly panning, zooming, tapping small cells, and losing context.<p>RPN (Reverse Polish Notation) removes parentheses and operator precedence by using a stack. Instead of writing = (a + b) * c, you enter a b + c *. The order of operations is explicit and linear.<p>GridCalc combines those ideas: a visible RPN stack with a reference grid.<p>It’s built for quick, ad-hoc modeling on a phone: loan calculations, position sizing, cash flow scenarios, engineering back-of-napkin math.<p>It’s not trying to replace Excel. It’s trying to make mobile calculation feel native instead of cramped.<p>Happy to answer questions about design decisions or implementation.","time":1772038722,"type":"comment"}
{"by":"wooby","descendants":3,"id":47154127,"kids":[47154195],"parent_chain":[],"root_id":47154127,"score":4,"time":1772038450,"title":"GridCalc: An RPN Spreadsheet for iOS","type":"story","url":"https://tailrecursion.com/~alan/GridCalc.html"}
{"by":"wooby","id":47141876,"parent":47141571,"parent_chain":[47141571],"root_id":47141571,"text":"I built GridCalc because spreadsheets on phones feel fundamentally wrong.<p>On desktop, spreadsheets work because you can see formulas, references, and structure all at once. On mobile, that collapses. You’re constantly panning, zooming, tapping small cells, and losing context.<p>RPN (Reverse Polish Notation) removes parentheses and operator precedence by using a stack. Instead of writing = (a + b) * c, you enter a b + c *. The order of operations is explicit and linear.<p>GridCalc combines those ideas: a visible RPN stack with a reference grid.<p>It’s built for quick, ad-hoc modeling on a phone: loan calculations, position sizing, cash flow scenarios, engineering back-of-napkin math.<p>It’s not trying to replace Excel. It’s trying to make mobile calculation feel native instead of cramped.<p>Happy to answer questions about design decisions or implementation.","time":1771962519,"type":"comment"}
{"by":"wooby","descendants":1,"id":47141571,"kids":[47141876],"parent_chain":[],"root_id":47141571,"score":1,"time":1771961448,"title":"GridCalc: An RPN Spreadsheet for iOS","type":"story","url":"https://tailrecursion.com/~alan/GridCalc.html"}
{"by":"wooby","descendants":0,"id":47063311,"parent_chain":[],"root_id":47063311,"score":2,"text":"I built GridCalc, an RPN spreadsheet for iOS.<p>It combines the efficiency of Reverse Polish Notation with the visible structure and reactivity of a spreadsheet. You enter numbers and operators step by step, and you can retroactively change any value. All dependent calculations update immediately.<p>I love spreadsheets but I've never liked how cramped traditional spreadsheets feel on a phone. My goal was to make ad‑hoc, spreadsheet-like calculation on a phone feel direct and fluid.<p>Here’s a short demo:\n<a href=\"https://youtu.be/M0HwzrGGuyc\" rel=\"nofollow\">https://youtu.be/M0HwzrGGuyc</a><p>App Store link:\n<a href=\"https://apps.apple.com/us/app/gridcalc/id6759011187\">https://apps.apple.com/us/app/gridcalc/id6759011187</a><p>Happy to answer questions.","time":1771434463,"title":"Show HN: GridCalc, an RPN Spreadsheet for iOS","type":"story"}
{"by":"wooby","descendants":0,"id":46532079,"parent_chain":[],"root_id":46532079,"score":1,"time":1767817571,"title":"ActorAgents","type":"story","url":"https://tailrecursion.com/~alan/ActorAgents.html"}
{"by":"wooby","descendants":0,"id":46462473,"parent_chain":[],"root_id":46462473,"score":2,"time":1767340464,"title":"Destination Driven Compilation","type":"story","url":"https://tailrecursion.com/~alan/Lisp/DestinationDrivenCompilation.html"}
{"by":"wooby","id":45070089,"kids":[45073121,45070496],"parent":45037419,"parent_chain":[45037419],"root_id":45037419,"text":"The book looks awesome. However, I find some irony in the presence of a “no AI” badge on the back cover considering Lisp was AI research.","time":1756506204,"type":"comment"}
{"by":"wooby","descendants":0,"id":42769228,"kids":[42769240],"parent_chain":[],"root_id":42769228,"score":1,"text":"This is an AI side project I've been having a lot of fun with. I start with an absurd premise, then generate "source documents" with ChatGPT. Then I feed those into NotebookLM and generate a podcast. The theme is from Suno. I use ffmpeg and sox to composite and edit audio. I'm actively looking for alternatives to NotebookLM for the audio synthesis, if anyone knows any.","time":1737384292,"title":"Show HN: Operation Voidstar, AI-Generated Conspiracy Comedy","type":"story","url":"https://open.spotify.com/show/5T6VfCMkkntOE7R7L15Wk4"}
{"by":"wooby","descendants":0,"id":42640678,"parent_chain":[],"root_id":42640678,"score":3,"time":1736386915,"title":"EForth and Zen","type":"story","url":"https://www.ultratechnology.com/efzen.htm"}
{"by":"wooby","descendants":1,"id":42635532,"kids":[42635688],"parent_chain":[],"root_id":42635532,"score":1,"time":1736352032,"title":"Laws of Computing, Version 2.0 by CH Ting [pdf]","type":"story","url":"https://wiki.forth-ev.de/lib/exe/fetch.php/projects:laws_of_computing_pages_10_v5.pdf"}
{"by":"wooby","descendants":0,"id":34875932,"kids":[34875963],"parent_chain":[],"root_id":34875932,"score":2,"time":1676948605,"title":"Bat Bomb","type":"story","url":"https://en.wikipedia.org/wiki/Bat_bomb"}
{"by":"wooby","id":34719203,"parent":34716924,"parent_chain":[34716924],"root_id":34716924,"text":"Photoprism rocks. I wrote up my experience with it in 2021, and I'm still happily using it: <a href=\"https://tailrecursion.com/~alan/HomePhotos.html\" rel=\"nofollow\">https://tailrecursion.com/~alan/HomePhotos.html</a>","time":1675911352,"type":"comment"}
{"by":"wooby","descendants":0,"id":28076607,"parent_chain":[],"root_id":28076607,"score":3,"time":1628183636,"title":"AbcDatalog","type":"story","url":"https://abcdatalog.seas.harvard.edu/"}
{"by":"wooby","id":28042351,"parent":28041728,"parent_chain":[28041728,28032886,28032455,28028542,28028172,28028005,28027934,28027853,28027710,28023686,28022363],"root_id":28022363,"text":"> Realize a successful 51% attack is just the beginning of the war, not the end of it.<p>I think you're right; the war will go on for awhile. But I'm convinced by <a href=\"https://news.ycombinator.com/item?id=28028542\" rel=\"nofollow\">https://news.ycombinator.com/item?id=28028542</a> that in the end, if anything bests fiat, it will be gold.<p>Barring some new technological breakthrough, it seems to me that bitcoin has no value in a fiat world, and no value proposition in a sound money world. It's a noble dead end.","time":1627936975,"type":"comment"}
{"by":"wooby","descendants":0,"id":27997154,"parent_chain":[],"root_id":27997154,"score":2,"time":1627569910,"title":"Turbo Pascal navigational aids that saved my life in 1991","type":"story","url":"https://github.com/timonoko/sextant/blob/master/README.md"}
{"by":"wooby","descendants":1,"id":27714460,"kids":[27718428],"parent_chain":[],"root_id":27714460,"score":8,"time":1625247656,"title":"Home Photo Management with PhotoPrism","type":"story","url":"https://tailrecursion.com/~alan/HomePhotos.html"}
{"by":"wooby","descendants":0,"id":27695889,"parent_chain":[],"root_id":27695889,"score":3,"time":1625108919,"title":"Electricity","type":"story","url":"https://www.emacswiki.org/emacs/Electricity"}
{"by":"wooby","descendants":0,"id":27595605,"parent_chain":[],"root_id":27595605,"score":2,"time":1624387987,"title":"PhotoPrism, a privately hosted photos app","type":"story","url":"https://photoprism.app/"}
{"by":"wooby","dead":true,"id":26894140,"kids":[26894499,26894523],"parent_chain":[],"root_id":26894140,"score":18,"time":1619032337,"title":"In Support of Richard Stallman","type":"story","url":"https://stallmansupport.org/"}
{"by":"wooby","descendants":0,"id":26257735,"parent_chain":[],"root_id":26257735,"score":1,"time":1614210002,"title":"Trillion-Dollar Coin","type":"story","url":"https://en.wikipedia.org/wiki/Trillion-dollar_coin"}
{"by":"wooby","descendants":0,"id":26257364,"parent_chain":[],"root_id":26257364,"score":1,"time":1614207720,"title":"The Irish of Barbados (2015)","type":"story","url":"https://irishamerica.com/2015/10/the-irish-of-barbados-photos/"}
{"by":"wooby","descendants":0,"id":26092707,"parent_chain":[],"root_id":26092707,"score":2,"time":1612980580,"title":"Earth–Moon–Earth Communication","type":"story","url":"https://en.wikipedia.org/wiki/Earth%E2%80%93Moon%E2%80%93Earth_communication"}
{"by":"wooby","descendants":32,"id":25661701,"kids":[25670264,25663082,25664647,25667329],"parent_chain":[],"root_id":25661701,"score":117,"time":1609963908,"title":"Debugging Lisp (2015)","type":"story","url":"https://malisper.me/category/debugging-common-lisp/"}
{"by":"wooby","descendants":0,"id":25645223,"parent_chain":[],"root_id":25645223,"score":1,"time":1609853088,"title":"Argumentation Ethics","type":"story","url":"https://en.wikipedia.org/wiki/Argumentation_ethics"}
{"by":"wooby","descendants":0,"id":25641016,"parent_chain":[],"root_id":25641016,"score":3,"time":1609811087,"title":"Oberon","type":"story","url":"http://ignorethecode.net/blog/2009/04/22/oberon/"}
{"by":"wooby","descendants":1,"id":25608608,"kids":[25609296],"parent_chain":[],"root_id":25608608,"score":1,"time":1609545009,"title":"Indent with Tabs, Align with Spaces","type":"story","url":"https://dmitryfrank.com/articles/indent_with_tabs_align_with_spaces"}
{"by":"wooby","descendants":0,"id":25435346,"parent_chain":[],"root_id":25435346,"score":2,"time":1608066877,"title":"Bastiat's famous Candlestick makers' Petition","type":"story","url":"http://bastiat.org/en/petition.html"}
{"by":"wooby","descendants":0,"id":25421738,"parent_chain":[],"root_id":25421738,"score":1,"time":1607972861,"title":"The Machine Stops by E.M. Forster (1909)","type":"story","url":"http://www.visbox.com/prajlich/forster.html"}
{"by":"wooby","descendants":0,"id":25387394,"parent_chain":[],"root_id":25387394,"score":1,"time":1607703460,"title":"Herbert Dow and Predatory Pricing","type":"story","url":"https://fee.org/articles/herbert-dow-and-predatory-pricing/"}
{"by":"wooby","descendants":0,"id":25328594,"parent_chain":[],"root_id":25328594,"score":3,"time":1607305665,"title":"The Invention of the Chilean Sea Bass","type":"story","url":"https://priceonomics.com/the-invention-of-the-chilean-sea-bass/"}
{"by":"wooby","descendants":0,"id":25250165,"parent_chain":[],"root_id":25250165,"score":3,"time":1606703183,"title":"Zero One Infinity Rule","type":"story","url":"https://en.wikipedia.org/wiki/Zero_one_infinity_rule"}
{"by":"wooby","descendants":0,"id":25223021,"parent_chain":[],"root_id":25223021,"score":2,"time":1606420142,"title":"How Private Property Saved the Pilgrims","type":"story","url":"https://www.hoover.org/research/how-private-property-saved-pilgrims"}
{"by":"wooby","id":25221146,"parent":25218839,"parent_chain":[25218839,25213086,25212424,25212315,25212289,25212241,25212121,25212074,25211212],"root_id":25211212,"text":"It's not a crazy thought at all. Many Americans see government in this light. Others do not:<p>"No one will really understand politics until they understand that politicians are not trying to solve our problems. They are trying to solve their own problems -- of which getting elected and re-elected are No. 1 and No. 2. Whatever is No. 3 is far behind".<p>Thomas Sowell","time":1606406789,"type":"comment"}
{"by":"wooby","id":25213735,"parent":25213165,"parent_chain":[25213165,25212854,25212526,25212241,25212121,25212074,25211212],"root_id":25211212,"text":"Moving fast and breaking people is, horrifically, the status quo. Special interests in healthcare, enabled by heavy regulation, go great lengths to insulate doctors from the consequences of providing poor care and the rewards of providing excellent care. We all suffer as a result.<p>Your experience with healthcare might be different, but my own experience in the US has been this: I rarely see doctors that have later contacted me to see how the treatment they prescribed was working. Nearly every other service or product I purchase entreats me with a satisfaction survey at some point. I've asked myself: why don't doctors care about my outcome?<p>I have concluded that while I am the one with the sick body and paying money to fix myself, I am not the only customer. The regulatory agencies, credentialing schools, special interest groups, pharmaceutical companies, and healthcare unions are too.","time":1606335143,"type":"comment"}
{"by":"wooby","id":25213086,"kids":[25218839],"parent":25212424,"parent_chain":[25212424,25212315,25212289,25212241,25212121,25212074,25211212],"root_id":25211212,"text":"Arguably, regulatory forces <i>created</i> the environment in which money could be used to so effectively manipulate doctors at the cost of patient outcomes. If doctors stood to lose business when they lost patients -- instead of fearing only for their license being revoked -- perhaps they'd be incentivized more to treat patients well than to engage in opioid schemes.","time":1606331859,"type":"comment"}
{"by":"wooby","id":25212854,"kids":[25213165],"parent":25212526,"parent_chain":[25212526,25212241,25212121,25212074,25211212],"root_id":25211212,"text":"If you have good Yelp reviews or if I could speak with happy patients I would consider taking you up on it. Seriously.<p>I've received enough terrible medical and dental care from various "trained" and "registered" practitioners to value referrals much more than any credential or certification.<p>If you yourself truly believe that a professional registration is satisfactory, then I trust you practice what you preach by never researching doctor reviews. To do so would invalidate your argument.","time":1606330539,"type":"comment"}
{"by":"wooby","descendants":0,"id":25205384,"parent_chain":[],"root_id":25205384,"score":3,"time":1606271596,"title":"The Origin of the Name Posix","type":"story","url":"https://stallman.org/articles/posix.html"}
{"by":"wooby","descendants":0,"id":25198573,"parent_chain":[],"root_id":25198573,"score":3,"time":1606227290,"title":"Common Lisp Iteration","type":"story","url":"https://tailrecursion.com/~alan/Lisp/CommonLispIteration.html"}
{"by":"wooby","descendants":1,"id":25183784,"kids":[25184362],"parent_chain":[],"root_id":25183784,"score":4,"time":1606108275,"title":"Government Cheese","type":"story","url":"https://en.wikipedia.org/wiki/Government_cheese"}
{"by":"wooby","descendants":0,"id":25132998,"parent_chain":[],"root_id":25132998,"score":7,"time":1605671381,"title":"Computer Science Explains Why Communism Can't Work","type":"story","url":"https://mindmatters.ai/2020/11/computer-science-explains-why-communism-cant-work/"}
{"by":"wooby","descendants":0,"id":25084177,"parent_chain":[],"root_id":25084177,"score":1,"time":1605286248,"title":"History of Gherkin, a Lisp Interpreter in Bash","type":"story","url":"https://tailrecursion.com/~alan/Lisp/GherkinHistory.html"}
{"by":"wooby","descendants":0,"id":25073516,"parent_chain":[],"root_id":25073516,"score":2,"time":1605207842,"title":"FairDivision","type":"story","url":"https://tailrecursion.com/~alan/FairDivision.html"}
{"by":"wooby","id":25008007,"parent":25006277,"parent_chain":[25006277],"root_id":25006277,"text":"See also: <a href=\"https://github.com/micha/json-table\" rel=\"nofollow\">https://github.com/micha/json-table</a>","time":1604674731,"type":"comment"}
{"by":"wooby","descendants":0,"id":24992226,"parent_chain":[],"root_id":24992226,"score":1,"time":1604518161,"title":"GTK+ with Broadway","type":"story","url":"https://developer.gnome.org/gtk3/stable/gtk-broadway.html"}
{"by":"wooby","dead":true,"id":24974218,"parent_chain":[],"root_id":24974218,"score":1,"time":1604356016,"title":"Arrow’s Impossibility Theorem Exposes a Big Problem with Democracy","type":"story","url":"https://mises.org/wire/arrows-impossibility-theorem-exposes-big-problem-democracy"}
{"by":"wooby","descendants":0,"id":24830329,"parent_chain":[],"root_id":24830329,"score":1,"time":1603137761,"title":"Last Diminisher","type":"story","url":"https://en.wikipedia.org/wiki/Last_diminisher"}
{"by":"wooby","id":24217931,"parent":24213445,"parent_chain":[24213445,24210997,24210828,24209948],"root_id":24209948,"text":"Your concept of a de-fanged FDA reminds me of the NTSB and is interesting to think about.","time":1597878631,"type":"comment"}
{"by":"wooby","id":24217082,"parent":24215776,"parent_chain":[24215776,24213432,24213200,24212860,24212157,24210828,24209948],"root_id":24209948,"text":"I don't see how you can contest that they're both products and that they can both kill people if they're defective. To me these two similarities are plainly true, and it is only these two similarities that are material to my argument.<p>I might misunderstand, but the direction your argument seems to be heading is that the free market is somehow incompatible with products that have complex failure modes or that can be defective in subtle ways, and that the FDA is thus necessary. Is that right?","time":1597873717,"type":"comment"}
{"by":"wooby","id":24215986,"parent":24215702,"parent_chain":[24215702,24215041,24214538,24212860,24212157,24210828,24209948],"root_id":24209948,"text":"You're right, that last paragraph is a flawed argument. I retract it, and your findings compel me to assert that I think there was probably never a good reason for the FDA.<p>But it's the second, and weaker, of the two arguments I made. The argument I develop in my first three paragraphs stands.","time":1597869092,"type":"comment"}
{"by":"wooby","id":24215041,"kids":[24215702],"parent":24214538,"parent_chain":[24214538,24212860,24212157,24210828,24209948],"root_id":24209948,"text":"What upsets you about other people using their own money to buy placebos, other than the fact that you can't understand why? At this very moment, millions of people across the globe are buying things for themselves you would never buy for yourself.<p>Has it occurred to you that the health supplement buyer is in a much better position to decide how to allocate their money than you are? You have limited, aggregate information; they have a total view of their own finances and life situation, and are willing to devote their own time to research their personal decision to buy. For example, they might discover through research that a supplement generally regarded as a placebo has a benefit under circumstances known only to the them.<p>When you limit the choices of others, based only on general information or your personal perspective, you limit the set of choices others may take. If you do this long enough, you might find yourself some day prohibited from buying something you desperately need, because your situation is an exception to some general rule that nobody ever considered.<p>The FDA might have made sense at a time when most people were illiterate and information was hard to come by. Now that most (at least in the US) are literate, and own smartphones, taking away choices for the benefit of some hypothetical illiterate serves only to worsen the life of the average person.","time":1597865213,"type":"comment"}
{"by":"wooby","id":24213781,"parent":24212027,"parent_chain":[24212027,24211437,24210997,24210828,24209948],"root_id":24209948,"text":"It is my understanding that malnutrition, clean water, and access to education/information are foremost among the problems of the developing world, and it's not at all clear to me that regulating medication in those countries would improve anyone's situation measurably.<p>For my part, here in the "developed" world, I have a family member with a rare autoimmune condition, and access to comparatively few medications. Those that are available are very expensive and not covered by any insurance. There is little competition between their manufacturers.<p>Because it costs at least 1.4B to bring a drug to market, and because of the rarity of her illness, it's unlikely any company will pursue new research. Thanks to the FDA's inordinately expensive approval process, no company is incentivized to bring a drug to market with an upside of <= 1.4B, regardless of how many people it could help.","time":1597860494,"type":"comment"}
{"by":"wooby","id":24213432,"kids":[24215776],"parent":24213200,"parent_chain":[24213200,24212860,24212157,24210828,24209948],"root_id":24209948,"text":"I mean only to say that they are both products, and that they may both result in injury or death if they are produced irresponsibly.<p>Would you not agree with those two points of comparison?","time":1597859139,"type":"comment"}
{"by":"wooby","id":24213376,"kids":[24215755],"parent":24212253,"parent_chain":[24212253,24212155,24211854,24211422,24210997,24210828,24209948],"root_id":24209948,"text":"I can think of a few systems in place that mitigate cases like the one you mention.<p>First, I can think of very few things that could happen to someone's car that would disadvantage you without disadvantaging them. In the case you mention, the missing tire would render the jalopy inoperable, and so the buyer suffers for their poor choice of vehicle. Any buyer thus factors reliability and safety into their decision, whether or not they are particularly concerned about the safety of others. Plus, now they have to walk, and you probably won't be giving them a ride. A counter-argument to this would be effect on climate, an externality that's maybe best left out for now :-)<p>Second, individuals may sue other individuals for personal or property damage. So, at least one factor preventing everyone from terrorizing you with their jalopies is that they are liable for damage their jalopy causes to others. The decision to purchase a jalopy includes this risk, disincentivizing the purchase of dangerous (to others) vehicles.<p>Third, it's already a requirement in most jurisdictions that drivers are insured because of the above liability, and insurance companies could easily deny coverage to unsafe vehicles, as determined by any (private) mutually agreed 3rd NHTSA/DOT-like party.<p>Finally, because there is no competition in the area of safety certification, it seems highly unlikely that the government's assessments of risk correspond to the risk assessed by the average consumer. The fact that most people choose to drive used vehicles that don't meet the government's latest safety standards feels like implicit proof of this.","time":1597858954,"type":"comment"}
{"by":"wooby","id":24212860,"kids":[24214538,24213200],"parent":24212157,"parent_chain":[24212157,24210828,24209948],"root_id":24209948,"text":"If you have any choice in how you are treated, you will make your best judgement based on information available to you, such as by the recommendation of a friend, or a Yelp review. This is the same process you use to make any important purchase.<p>Before you have work done on your car, do you fly to China to inspect the part factory? You don't, because the relatively low risk you perceive that these parts will fail doesn't justify the expense of travel.<p>Do you perceive low risk because a government agency put a stamp of approval on the part? Probably not. Most likely, your risk assessment is based on information you've gathered about the final product, the auto shop -- that it is well-reviewed, and that your mechanic seems knowledgeable.<p>Furthermore, <i>only you</i> really know your exact needs. An expensive high-performance car part might provide you some marginal benefit, but not so much benefit that you're willing to buy that part at the expense of something else that's important to you, like your electric bill. A race car or Uber driver might make a different decision and choose a different part to suit their needs.<p>Medicine is like car parts. Bad ones can kill. But through the free market, a system of feedback is established that tends toward a wider variety, and higher quality, of parts overall.<p>When politicians prioritize some drugs over others, they interfere with this system, and money is spent on drugs and research that people don't necessarily want or need. You can imagine race car drivers getting together and lobbying politicians to subsidize high performance parts. Because these subsidies are funded by taxes, money is effectively taken from individuals who might prefer a different part. Now, those individuals who are not race car drivers have less purchasing power, and fewer choices overall.<p>You're correct that this is more or less the libertarian perspective, but I find it in no way extreme. I find it principled, direct, and humane. In our society, where nearly everyone has a smart phone and may conduct research at any time, I can't imagine a more effective system. I'm sure it was much easier to criticize the free market in a time when people couldn't read, or didn't have a global information database accessible on their person at every waking moment.","time":1597857087,"type":"comment"}
{"by":"wooby","id":24212155,"kids":[24212253],"parent":24211854,"parent_chain":[24211854,24211422,24210997,24210828,24209948],"root_id":24209948,"text":"Like the FDA, and as monopolies, NHTSA and DOT have much less stake in the safety of a consumer than do either car producers and drivers.<p>Personally, I trust myself not to buy a car that I've heard explodes. You may not, and I respect that. But I see no reason to pay for a service that assures you when I myself require no such assurance.<p>If NHTSA and DOT operated like UL, products that were less safe probably wouldn't have NHTSA or DOT seals, and those products would be much cheaper. People willing to trade safety for cost would be able to own a car. People willing to pay for safety would pay more. Because of the lower barrier to production, there would be probably much greater choice in car buying, and cars would be universally cheaper. In either case, the choice would rest with individual consumers, who know best their situation and risk tolerance.","time":1597854038,"type":"comment"}
{"by":"wooby","id":24211437,"kids":[24212027,24212220],"parent":24210997,"parent_chain":[24210997,24210828,24209948],"root_id":24209948,"text":"Pharmaceutical companies have every incentive to make their drugs safe, because if their drugs hurt people, the drugs will not sell.<p>Many drugs have passed FDA approval but later killed people. If the FDA were a private company, it might have gone out of business. But as a government monopoly, it's very hard to stop paying for. Between pharma companies, the government, and individual patients, the FDA has the least stake in the health of a particular patient.<p>UL is an example of a non-government organization that offers product safety certification. You see the UL seal on most consumer electric appliances. Imagine an FDA seal.<p>Drugs are not magical or special. They are a product like any other, and it is the consumer's right to choose a doctor, and for that doctor to choose proper medication. We regularly choose the best mechanics, plumbers, and other specialists we can find, and their reputation is partly a function of the type and quality of the parts and tools they use.","time":1597851073,"type":"comment"}
{"by":"wooby","id":24210828,"kids":[24210997,24211317,24212157],"parent":24209948,"parent_chain":[24209948],"root_id":24209948,"text":""Antibiotics present an enduring economic puzzle. These drugs changed the world. Yet despite their unique power, the free market doesn’t value them."<p>No. The free market -- people -- values these drugs. If there wasn't demand, this article wouldn't have been written. The problem is that drugs are too expensive to bring to market for their developers to profit, and that the single greatest cost is often FDA approval.<p>The article implies that the solution is to funnel more BARDA grants to companies in order to make drug development profitable. This amounts to using taxpayer money to help private companies pay government fees, with lots of bureaucratic overhead (employees, forms, computer systems, buildings) at each end of the transaction. This is dramatically suboptimal.<p>Instead of this, the FDA process should be cheaper, or the FDA itself should be privatized, and operate as an entity like Consumer Reports or any other review organization. Government need only be involved with prosecuting fake producers. The consumer requires only access to information, and assurances that a substance they bought is the same they have researched.<p>Paying government expenses with taxes is an unsustainable Ponzi scheme, and takes us further away from a real solution.","time":1597848011,"type":"comment"}
{"by":"wooby","descendants":0,"id":24071263,"parent_chain":[],"root_id":24071263,"score":2,"time":1596724589,"title":"Secretary Problem","type":"story","url":"https://en.wikipedia.org/wiki/Secretary_problem"}
{"by":"wooby","descendants":0,"id":23272987,"parent_chain":[],"root_id":23272987,"score":1,"time":1590160505,"title":"Closos Specification of a Lisp operating system [pdf]","type":"story","url":"http://metamodular.com/lispos.pdf"}
{"by":"wooby","id":22968756,"parent":22968290,"parent_chain":[22968290,22961296],"root_id":22961296,"text":"I believe the answer to your question of why developers don't generally treat quality the way dentists do is one of economics.<p>The world needs enough software, and the world's requirements for quality are low enough, and the average developer writes reliable-enough code, that in most cases money can be made without special attention to quality.<p>In some domains, quality is paramount. I imagine that quality and bug mitigation are the primary concerns of someone who manages, say, an X-ray machine firmware project, or avionics software. Software for these purposes that is not extremely reliable cannot compete in that market. For other kinds of software people are paid to write -- like social networks for pets -- reliability is a much lower priority.<p>Certain kinds of software needs to be rewritten constantly to meet the demands of highly-evolving markets. Games are an example of this. Reliability is important, but not paramount, because the underlying business can only continue to compete by at some point stopping work on the reliability of existing games, and moving on to developing new games.<p>I'm sympathetic to the respect you have for the value of high quality software. But the reality is, the value of quality varies dramatically within the software industry -- much more than it does within, say, dentistry, or medicine, or aviation.<p>Fewer bugs isn't necessarily the primary concern of those using and buying any particular kind of software.","time":1587740867,"type":"comment"}
{"by":"wooby","id":22947134,"kids":[22952988],"parent":22921171,"parent_chain":[22921171,22916723,22914397,22913534,22912853,22907138],"root_id":22907138,"text":"Yes. My plan is for the image dumping facility to support tree-shaking and direct linking. I think tree-shaking by itself might produce reasonably-sized images, for my purposes at least. If not, the direct-linking would make Babel/Google Closure applicable.","time":1587572002,"type":"comment"}
{"by":"wooby","id":22918727,"parent":22916063,"parent_chain":[22916063,22913534,22912853,22907138],"root_id":22907138,"text":"Thanks for your interest and the pointer to Amber. I'll check it out. With JACL I hope to find a good balance of internal vs. external development tools, without necessarily ruling out either by design.","time":1587329872,"type":"comment"}
{"by":"wooby","id":22916723,"kids":[22921171],"parent":22914397,"parent_chain":[22914397,22913534,22912853,22907138],"root_id":22907138,"text":"The JACL reader is asynchronous, and so JACL can read characters from external sources (in-browser REPL, DevTools connection, websocket, experimental File API) without blocking the event loop and without relying on an external tool. JACL app artifacts will be created by dumping the Lisp image using a Lisp function.<p>Other than these technical differences, there seems to be a difference in "philosophy of use". I have the sense that the ClojureScript project does not emphasize or particularly support the idea of using self-hosted ClojureScript to build web apps.","time":1587312201,"type":"comment"}
{"by":"wooby","id":22913534,"kids":[22914397,22916063],"parent":22912853,"parent_chain":[22912853,22907138],"root_id":22907138,"text":"Hi, thanks for your interest. The main thing I'm after is a "residential" [1] Lisp development system, where applications and tools co-evolve in the same environment.<p>Most contemporary compile-to-JS languages <i>target</i> the browser, but do not <i>inhabit</i> it. I'm excited about a system that encourages apps and tools to evolve organically together, instead of tools developing separately from applications, which is the status quo.<p>Other than that, Common Lisp has some really interesting capabilities relative to ClojureScript, and is also fun!<p>1:<a href=\"http://bitsavers.org/pdf/xerox/interlisp/Interlisp_Reference_Manual_Oct_1983.pdf\" rel=\"nofollow\">http://bitsavers.org/pdf/xerox/interlisp/Interlisp_Reference...</a> section 1.2","time":1587270802,"type":"comment"}
{"by":"wooby","id":22738316,"parent":22737612,"parent_chain":[22737612],"root_id":22737612,"text":""C is JQuery for the computer."<p>-- Micha Niskin","time":1585667859,"type":"comment"}
{"by":"wooby","descendants":0,"id":22628873,"parent_chain":[],"root_id":22628873,"score":3,"time":1584634423,"title":"A Non-Conformist's Guide to Success in a Conformist World (2014)","type":"story","url":"https://www.econlib.org/archives/2014/07/a_non-conformis.html"}
{"by":"wooby","id":22075324,"parent":22066501,"parent_chain":[22066501,22065632],"root_id":22065632,"text":"Why the cynical view? People have fun, organizers make money, and a charity makes money. Without the event, nobody has fun, and nobody (including the charity) makes money.","time":1579274524,"type":"comment"}
{"by":"wooby","descendants":0,"id":22061716,"parent_chain":[],"root_id":22061716,"score":1,"time":1579149328,"title":"Moon's Mark Down","type":"story","url":"http://users.rcn.com/david-moon/MMD/HTML/index.html"}
{"by":"wooby","descendants":0,"id":22056498,"parent_chain":[],"root_id":22056498,"score":2,"time":1579110977,"title":"A Bootstrapping Dynamic Forth Interpreter/Compiler for WebAssembly","type":"story","url":"https://github.com/remko/waforth"}
{"by":"wooby","descendants":0,"id":22014705,"parent_chain":[],"root_id":22014705,"score":1,"time":1578686054,"title":"Shrdlu","type":"story","url":"http://hci.stanford.edu/winograd/shrdlu/"}
{"by":"wooby","descendants":0,"id":21984710,"parent_chain":[],"root_id":21984710,"score":1,"time":1578430475,"title":"Collecting Without Loop: Macro Edition","type":"story","url":"https://tailrecursion.com/jlt/posts/collecting-macro-edition.html"}
{"by":"wooby","descendants":0,"id":21981866,"parent_chain":[],"root_id":21981866,"score":1,"time":1578416624,"title":"Colonies in Space","type":"story","url":"https://space.nss.org/colonies-in-space-by-t-a-heppenheimer/"}
{"by":"wooby","descendants":0,"id":21764906,"parent_chain":[],"root_id":21764906,"score":1,"time":1576086737,"title":"Collecting Without Loop","type":"story","url":"https://tailrecursion.com/jlt/posts/collecting.html"}
{"by":"wooby","descendants":1,"id":21608403,"kids":[21610092],"parent_chain":[],"root_id":21608403,"score":2,"time":1574447269,"title":"B-58A Escape Capsule","type":"story","url":"http://www.ejectionsite.com/eb58caps.htm"}
{"by":"wooby","id":21564842,"parent":21535165,"parent_chain":[21535165],"root_id":21535165,"text":"I am working on a CL for JS that I will likely share at some point. I post updates about it occasionally to Mastodon [1] if anyone is interested in following my progress. I'm also happy to discuss rationale, design, and implementation -- it's been really fun to work on.<p>1. <a href=\"https://mytoot.net/@alandipert/103120653862853368\" rel=\"nofollow\">https://mytoot.net/@alandipert/103120653862853368</a>","time":1574089772,"type":"comment"}
{"by":"wooby","descendants":1,"id":21391169,"kids":[21417129],"parent_chain":[],"root_id":21391169,"score":2,"time":1572377713,"title":"Genetic Algorithm Walkers","type":"story","url":"https://rednuht.org/genetic_walkers/"}
{"by":"wooby","descendants":0,"id":21263576,"parent_chain":[],"root_id":21263576,"score":3,"time":1571172608,"title":"Homunculus","type":"story","url":"https://en.wikipedia.org/wiki/Homunculus"}
{"by":"wooby","descendants":23,"id":21138290,"kids":[21147760,21149393,21147516,21145336,21148703],"parent_chain":[],"root_id":21138290,"score":63,"time":1570033915,"title":"In-Memory-Only ELF Execution Without Tmpfs","type":"story","url":"https://magisterquis.github.io/2018/03/31/in-memory-only-elf-execution.html"}
{"by":"wooby","descendants":0,"id":21085899,"parent_chain":[],"root_id":21085899,"score":3,"time":1569534273,"title":"Kowloon Walled City","type":"story","url":"https://en.wikipedia.org/wiki/Kowloon_Walled_City"}
{"by":"wooby","descendants":0,"id":20567434,"parent_chain":[],"root_id":20567434,"score":3,"time":1564509665,"title":"Sprite (Operating System)","type":"story","url":"https://en.wikipedia.org/wiki/Sprite_(operating_system)"}
{"by":"wooby","descendants":0,"id":20443592,"kids":[20443659],"parent_chain":[],"root_id":20443592,"score":2,"time":1563214740,"title":"Curt Herzstark and His Pocket Calculator CURTA","type":"story","url":"http://www.vcalc.net/cu-bckup.htm"}
{"by":"wooby","id":20246785,"parent":20246266,"parent_chain":[20246266,20245913],"root_id":20245913,"text":"I haven't seen that one, but it looks very similar to the one I use: <a href=\"https://github.com/micha/json-table\" rel=\"nofollow\">https://github.com/micha/json-table</a>","time":1561156084,"type":"comment"}
{"by":"wooby","descendants":0,"id":20126351,"parent_chain":[],"root_id":20126351,"score":1,"time":1559925431,"title":"L. Peter Deutsch in Conversation with Stig Hackvän (1998)","type":"story","url":"https://web.archive.org/web/20041013082602/http://devlinux.org/deutsch-interview.html"}
{"by":"wooby","descendants":0,"id":20117867,"parent_chain":[],"root_id":20117867,"score":2,"time":1559847660,"title":"Brennan Torpedo","type":"story","url":"https://en.wikipedia.org/wiki/Brennan_torpedo"}
{"by":"wooby","descendants":0,"id":20004046,"parent_chain":[],"root_id":20004046,"score":3,"time":1558722239,"title":"Doomsday rule","type":"story","url":"https://en.wikipedia.org/wiki/Doomsday_rule"}
{"by":"wooby","descendants":0,"id":20003385,"parent_chain":[],"root_id":20003385,"score":2,"time":1558717011,"title":"Re-Introducing Reform","type":"story","url":"https://mntre.com/media/news_md/2019-05-20-reintroducing-reform.html"}
{"by":"wooby","id":19272504,"parent":19270886,"parent_chain":[19270886],"root_id":19270886,"text":"If you're interested, it's also possible to run the actual original Lisp 1.5 on emulated hardware via SIMH.<p>See this page: <a href=\"http://web.sonoma.edu/users/l/luvisi/\" rel=\"nofollow\">http://web.sonoma.edu/users/l/luvisi/</a><p>I got it running on my Mac a few months ago. SIMH is on Homebrew.","time":1551371250,"type":"comment"}
{"by":"wooby","descendants":0,"id":19132604,"parent_chain":[],"root_id":19132604,"score":3,"time":1549869460,"title":"ViolaWWW","type":"story","url":"https://en.wikipedia.org/wiki/ViolaWWW"}
{"by":"wooby","descendants":59,"id":19106796,"kids":[19107246,19107013,19107062,19109509,19107468,19107854,19107073,19108172,19109837,19107384,19108107,19106948,19107086,19108782,19107619,19107085],"parent_chain":[],"root_id":19106796,"score":181,"time":1549561235,"title":"Coroutines in C (2000)","type":"story","url":"https://www.chiark.greenend.org.uk/~sgtatham/coroutines.html"}
{"by":"wooby","descendants":0,"id":19027224,"parent_chain":[],"root_id":19027224,"score":2,"time":1548776820,"title":"How to Give an OK Presentation","type":"story","url":"https://tailrecursion.com/wondr/posts/how-to-give-an-ok-presentation.html"}
{"by":"wooby","id":18843341,"parent":18843232,"parent_chain":[18843232,18842694,18842024,18842012,18841817,18841781,18841707,18834945],"root_id":18834945,"text":"Thanks for clarifying. I remembered it as a point of contention in the Scheme community.","time":1546844489,"type":"comment"}
{"by":"wooby","id":18842694,"kids":[18843888,18843232,18844415],"parent":18842024,"parent_chain":[18842024,18842012,18841817,18841781,18841707,18834945],"root_id":18834945,"text":"Strictly speaking: yes. But whether conses (aka pairs), lists, or other derivative structures support pervasive FP in a language is probably most influenced by whether conses are mutable or not.<p>In Common Lisp, they are. In Scheme, they are not.<p>Mutable conses are useful because at least because values can be accumulated in a list from the end by retaining and mutating the tail.<p>However, the presence of mutable conses detracts from a language's ability to support FP, since it must be done by convention and with much copying.<p>I see Clojure's innovation in this area not in the fact that its lists are immutable (Scheme did this already) but in the fact that its lists are immutable <i>and</i> there's never a need to mutate the tail, because lazy sequences are supported throughout the language. The icing on the top of the story is that concrete lists and lazy sequences both inhabit the "Seq abstraction", and so don't require different APIs most of the time.<p>Of course, I'm pretty sure lazy sequences existed before CL was standardized (they're in SICP), but I can imagine how the designers would have preferred a simple, well-known tool (mutable conses) over admitting a whole other sequence abstraction. Plus, immutable conses would have been a breaking change.<p>So, it's not that anything that Clojure does with regard to lists couldn't have been done before, just that it wasn't -- while also being packaged in a vehicle that was wildly compelling for many other unrelated reasons.","time":1546833865,"type":"comment"}
{"by":"wooby","id":18775023,"kids":[18775200,18775165],"parent":18774888,"parent_chain":[18774888,18767592],"root_id":18767592,"text":"At a Clojure meetup I attended a couple years ago, a long-time Java programmer asked "how do you manage huge projects without static types?"<p>The best answer I could think of was, "don't manage huge projects." Instead, divide projects as early as possible in development into supporting libraries, each capable of being independently tested and maintained.<p>In my experience, applications developed with this attitude coalesce themselves into a small ecosystem of mostly generic library code with a domain-specific apex "application" entrypoint to bind them.<p>In an application factored like this, type checking isn't something you want as much anymore, since the constituent libraries interface with one another at a level above. They present and consume "public" (intra-application) APIs, the behavior of which are defined not just by types but by at least documentation and tests. The thing that static types let you do -- have huge amounts of code, woven together with structural dependencies -- is no longer a thing you need or want. It would seem bad, actually, since what you'd have is an inscrutable mass only a machine can understand.<p>I haven't worked enough with large non-Clojure codebases to say whether or not this approach is superior, but I can say that it scales. Another nice thing about it in a business setting is that supporting libraries lend themselves to open-sourcing, and a relationship with an open source community is a good thing for a company's development efforts/hiring/contracting in my experience.<p>To answer your specific questions:<p>* I don't think I write more unit tests (I should probably write more tests in every language I use)<p>* I don't have any experience with clojure.spec<p>* All of the features of Lisp work together to make it awesome, including macros. In particular, in the context of an "ecosystem of libraries" approach, macros are a fantastic tool for exporting a DSL from a supporting library. They're also use for DSLs in the apex code, where application-specific behavior can be defined in terms of a DSL.<p>* I don't really wish I had static types - I love Lisp the way it is. But I have found various languages for structural checking useful with certain kinds of sub-program, like receiving data from the outside world, and for writing compilers. If you write a compiler as a series of transformations, it's nice if the shape of the code between transformations is well-defined somehow.<p>You're definitely smart enough to use Lisp. I think the key to success is not necessarily smarts, but attentiveness to modularity or cognizance of the difference between "library" and "application" types of code.<p>* There's a Paul Graham essay related to this idea: <a href=\"http://www.paulgraham.com/progbot.html\" rel=\"nofollow\">http://www.paulgraham.com/progbot.html</a><p>* I think this approach is applicable not just to Lisp, but maybe to any dynamic language with a sufficiently rich set of generic collections and with the concepts of a "module" or "package".","time":1545974273,"type":"comment"}
{"by":"wooby","descendants":0,"id":18760227,"parent_chain":[],"root_id":18760227,"score":2,"time":1545793895,"title":"Snap-dragon (game)","type":"story","url":"https://en.wikipedia.org/wiki/Snap-dragon_(game)"}
{"by":"wooby","descendants":22,"id":18564037,"kids":[18565783,18566117,18565883,18570495,18565164,18567453,18567494,18565728,18564332],"parent_chain":[],"root_id":18564037,"score":54,"time":1543525757,"title":"Richard Stallman: How I do my computing","type":"story","url":"https://stallman.org/stallman-computing.html"}
{"by":"wooby","descendants":0,"id":18499984,"parent_chain":[],"root_id":18499984,"score":3,"time":1542771344,"title":"IBM and the Holocaust","type":"story","url":"https://en.wikipedia.org/wiki/IBM_and_the_Holocaust"}
{"by":"wooby","id":18410320,"kids":[18412574],"parent":18409989,"parent_chain":[18409989,18406684],"root_id":18406684,"text":"I've been using it daily for about a year. I run it behind Apache (for SSL with LetsEncrypt) on a 1 year reserved T2.Nano VM in AWS ($3.125/month) that I also occasionally use for other things.<p>I'm involved in a lot of open source but had used IRC only intermittently until I got The Lounge running.<p>I've really enjoyed it. I'm able to log in and see the same unreads and direct messages across my work PC, personal PC, and phone and iPad. The software has been reliable and relatively painless to update. The UI functions nicely on touch devices.<p>Before The Lounge I operated ZNC in EC2, but configuring device-specific clients to use it was a chore, and I didn't find myself using IRC very much. Now, I use IRC all the time.<p>Obviously if you're not comfortable maintaining a server then this isn't the option for you, but as a "power user" I've found the web UI perfectly tolerable. Instead of maintaining IRC clients on multiple devices and pointing them at ZNC, I maintain a single IRC client -- The Lounge.","time":1541713417,"type":"comment"}
{"by":"wooby","descendants":0,"id":18338835,"parent_chain":[],"root_id":18338835,"score":3,"time":1540919081,"title":"Lisp Machine Inc. K-machine","type":"story","url":"http://fare.tunes.org/tmp/emergent/kmachine.htm"}
{"by":"wooby","descendants":0,"id":18191511,"parent_chain":[],"root_id":18191511,"score":2,"time":1539242243,"title":"The Jesuit Republic of South America","type":"story","url":"https://www.vqronline.org/essay/jesuit-republic-south-america"}
{"by":"wooby","descendants":0,"id":17701048,"parent_chain":[],"root_id":17701048,"score":1,"time":1533584729,"title":"Querying Trees in R","type":"story","url":"https://tailrecursion.com/wondr/posts/querying-trees-in-r.html"}
{"by":"wooby","descendants":0,"id":17614533,"parent_chain":[],"root_id":17614533,"score":2,"time":1532569934,"title":"Coin Operated Television Chairs, Circa 1970","type":"story","url":"https://www.tvobscurities.com/2008/12/coin-operated-television-chairs-circa-1970/"}
{"by":"wooby","id":16401199,"parent":16400320,"parent_chain":[16400320],"root_id":16400320,"text":"A worthwhile alternative to this approach (a JSON-specific query language) is a language for converting JSON structures to newline-delimited records. Then, standard shell tools can be used to query and join: <a href=\"https://github.com/micha/json-table\" rel=\"nofollow\">https://github.com/micha/json-table</a>","time":1518883093,"type":"comment"}
{"by":"wooby","descendants":0,"id":16141632,"parent_chain":[],"root_id":16141632,"score":2,"time":1515880354,"title":"The Cardinal Rule of Functions","type":"story","url":"http://www.cs.northwestern.edu/academics/courses/325/readings/cardinal-rule.php"}
{"by":"wooby","descendants":0,"id":15754605,"parent_chain":[],"root_id":15754605,"score":1,"time":1511330258,"title":"Structural Regular Expressions","type":"story","url":"http://www.perlmonks.org/?node_id=665719"}
{"by":"wooby","id":15716213,"kids":[15716788],"parent":15713904,"parent_chain":[15713904,15710533],"root_id":15710533,"text":"Not sure if this is what you meant by tag browsing, but I've been using <a href=\"https://github.com/kupospelov/vis-ctags\" rel=\"nofollow\">https://github.com/kupospelov/vis-ctags</a> successfully today.","time":1510863632,"type":"comment"}
{"by":"wooby","id":15716007,"kids":[15718227],"parent":15712878,"parent_chain":[15712878,15710533],"root_id":15710533,"text":"Where does Guy Steele make this point? I'm curious to know the context, thank you.","time":1510862266,"type":"comment"}
{"by":"wooby","descendants":39,"id":15710533,"kids":[15713904,15714169,15712870,15712878,15717558,15715942,15712710,15714097,15716872,15716450],"parent_chain":[],"root_id":15710533,"score":170,"time":1510811815,"title":"Vis – A vi-like editor based on Plan 9's structural regular expressions","type":"story","url":"https://github.com/martanne/vis"}
{"by":"wooby","descendants":0,"id":15543438,"parent_chain":[],"root_id":15543438,"score":3,"time":1508866726,"title":"Dogs can predict epileptic seizures (2004)","type":"story","url":"https://www.newscientist.com/article/dn6047-dogs-can-predict-epileptic-seizures/"}
{"by":"wooby","descendants":0,"id":15473524,"parent_chain":[],"root_id":15473524,"score":5,"time":1508006374,"title":"Tail Recursion in R with Trampolines","type":"story","url":"https://tailrecursion.com/wondr/posts/tail-recursion-in-r.html"}
{"by":"wooby","descendants":44,"id":15254506,"kids":[15255116,15258827,15254672,15255499,15256770,15255120,15256376,15256065,15254878,15254860],"parent_chain":[],"root_id":15254506,"score":265,"time":1505447655,"title":"Statically Recompiling NES Games into Native Executables with LLVM and Go (2013)","type":"story","url":"http://andrewkelley.me/post/jamulator.html"}
{"by":"wooby","descendants":0,"id":15132494,"parent_chain":[],"root_id":15132494,"score":2,"time":1504104285,"title":"Generational GC, Write Barriers/Write Protection and userfaultfd(2)","type":"story","url":"https://medium.com/@MartinCracauer/generational-garbage-collection-write-barriers-write-protection-and-userfaultfd-2-8b0e796b8f7f"}
{"by":"wooby","descendants":0,"id":14721284,"parent_chain":[],"root_id":14721284,"score":2,"time":1499455430,"title":"The Surprising Psychology of Rock-Paper-Scissors","type":"story","url":"https://www.psychologytoday.com/blog/the-blame-game/201504/the-surprising-psychology-rock-paper-scissors"}
{"by":"wooby","descendants":0,"id":14720754,"parent_chain":[],"root_id":14720754,"score":1,"time":1499451795,"title":"It's a Nonlinear World – Interactive Dashboard","type":"story","url":"https://www.linkedin.com/pulse/its-nonlinear-world-interactive-dashboard-edgar-ruiz"}
{"by":"wooby","id":14640597,"parent":14639321,"parent_chain":[14639321,14637763],"root_id":14637763,"text":"The "801 paper" (I think): <a href=\"http://www.ece.ucdavis.edu/~vojin/CLASSES/EEC272/S2005/Papers/801-report_nov81.pdf\" rel=\"nofollow\">http://www.ece.ucdavis.edu/~vojin/CLASSES/EEC272/S2005/Paper...</a>","time":1498513019,"type":"comment"}
{"by":"wooby","id":14622818,"kids":[14624284,14623285],"parent":14622552,"parent_chain":[14622552,14619888],"root_id":14619888,"text":"> more readable\n...to you.<p>It's possible I suck at what I do, but somehow I've enjoyed building, shipping, and maintaining services and applications in dynamic languages.<p>I used a lot of Clojure, and it was basically smooth sailing, even on teams.<p>Along the way I used various statically typed languages, such as C# and a tiny bit of SML (to be able to read Okasaki), and enjoyed them too. Just not as much.<p>Anyway, I can't refute your experience programming, or the way that you feel. With more experience, perhaps some day I will agree with you. But right now, for whatever it's worth, I don't.<p>Dynamic (functional) languages all the way.","time":1498252181,"type":"comment"}
{"by":"wooby","descendants":1,"id":14268306,"kids":[14268467],"parent_chain":[],"root_id":14268306,"score":2,"time":1493928551,"title":"pigz: A parallel implementation of gzip","type":"story","url":"http://zlib.net/pigz/"}
{"by":"wooby","descendants":14,"id":14145297,"kids":[14153495,14154660,14154097,14154227,14155898],"parent_chain":[],"root_id":14145297,"score":113,"time":1492573656,"title":"Lisp macros for C","type":"story","url":"https://github.com/eudoxia0/cmacro"}
{"by":"wooby","descendants":0,"id":13941081,"parent_chain":[],"root_id":13941081,"score":3,"time":1490285495,"title":"Getting Started with Datomic","type":"story","url":"http://docs.datomic.com/getting-started/brief-overview.html"}
{"by":"wooby","descendants":0,"id":13385049,"parent_chain":[],"root_id":13385049,"score":2,"time":1484247586,"title":"cdecl: translate C declarations to English and vice versa","type":"story","url":"http://cdecl.org"}
{"by":"wooby","descendants":1,"id":13331169,"kids":[13332282],"parent_chain":[],"root_id":13331169,"score":1,"time":1483648814,"title":"Burning Down Your Back End","type":"story","url":"http://adzerk.com/blog/2017/01/burning-down-your-backend/"}
{"by":"wooby","descendants":0,"id":13286727,"parent_chain":[],"root_id":13286727,"score":1,"time":1483126633,"title":"How boot solved our FTP problem","type":"story","url":"http://ingesolvoll.github.io/2016/12/26/how-boot-solved-our-ftp-upload-problem.html"}
{"by":"wooby","descendants":0,"id":13246424,"parent_chain":[],"root_id":13246424,"score":4,"time":1482518200,"title":"Scripting with C","type":"story","url":"http://adzerk.com/blog/2016/12/scripting-with-c/"}
{"by":"wooby","descendants":0,"id":12677662,"parent_chain":[],"root_id":12677662,"score":1,"time":1476113734,"title":"Supertasks","type":"story","url":"http://plato.stanford.edu/entries/spacetime-supertasks/"}
{"by":"wooby","descendants":0,"id":12317928,"parent_chain":[],"root_id":12317928,"score":1,"time":1471579754,"title":"Halloween documents","type":"story","url":"https://en.wikipedia.org/wiki/Halloween_documents"}
{"by":"wooby","descendants":0,"id":11405875,"parent_chain":[],"root_id":11405875,"score":2,"time":1459526947,"title":"Kanban and the Stages of Grief: A Semi-Agile Model for Software Development","type":"story","url":"http://adzerk.com/blog/2016/04/kanban-and-the-stages-of-grief/"}
{"by":"wooby","descendants":0,"id":11106136,"parent_chain":[],"root_id":11106136,"score":1,"time":1455571608,"title":"Json-table: Transform nested JSON data into tabular data in the shell","type":"story","url":"https://github.com/micha/json-table"}
{"by":"wooby","descendants":0,"id":10972938,"parent_chain":[],"root_id":10972938,"score":4,"time":1453809050,"title":"Use S3 as a Private Git Repository with Jgit","type":"story","url":"http://www.fancybeans.com/blog/2012/08/24/how-to-use-s3-as-a-private-git-repository/"}
{"by":"wooby","descendants":117,"id":10935532,"kids":[10935877,10936357,10936025,10935897,10935858,10936262,10935905,10936883,10935992,10935947,10936134,10935962,10936975,10936005,10937463,10936326,10937208,10936385,10937818,10937811,10936510,10936539,10937138,10937343,10936324,10936495,10936082,10936313,10937432,10937380,10936704,10936436,10936681,10936245,10936062,10936342],"parent_chain":[],"root_id":10935532,"score":415,"time":1453254783,"title":"Thanks for Trumpet Winsock","type":"story","url":"http://thanksfortrumpetwinsock.com/"}
{"by":"wooby","id":10751495,"parent":10746336,"parent_chain":[10746336],"root_id":10746336,"text":"They aren't a problem if the operations at the leaves of the graph are idempotent, which is usually the case if these operations are UI repaints.<p>If the operations are for other effects - such as Ajax calls - then glitch elimination is handy. Eliminating glitches at the dataflow level prevents debounce logic from leaking out to the code performing the effects, preserving the clarity and generality of that code.<p>I find glitch elimination most useful when the dataflow graph is value-propagated, vs. event-propagated, as it is in the dataflow library I helped implement, Javelin - <a href=\"https://github.com/hoplon/javelin/\" rel=\"nofollow\">https://github.com/hoplon/javelin/</a><p>Javelin also supports transactional input, another feature that's helpful when building dataflow graphs on which effects other than UI-repaint are hung.","time":1450361353,"type":"comment"}
{"by":"wooby","descendants":0,"id":10587663,"parent_chain":[],"root_id":10587663,"score":2,"time":1447855054,"title":"Getting Your First Programming Job: Not as Hard as You Think","type":"story","url":"http://adzerk.com/blog/2015/11/getting-your-first-programming-job-not-as-hard-as-you-think/"}
{"deleted":true,"id":10587660,"parent_chain":[],"root_id":10587660,"time":1447855004,"type":"story"}
{"by":"wooby","descendants":0,"id":10265194,"parent_chain":[],"root_id":10265194,"score":2,"time":1443018831,"title":"Hoplon and Javelin, WebDev Alternate Reality","type":"story","url":"https://www.youtube.com/watch?v=UoZyyo2Bwr8"}
{"by":"wooby","descendants":0,"id":10251633,"parent_chain":[],"root_id":10251633,"score":2,"time":1442837050,"title":"Learn from AWS Outages with After-Action Reviews","type":"story","url":"http://adzerk.com/blog/2015/09/team-learning-by-aar/"}
{"by":"wooby","id":10088390,"kids":[10089374],"parent":10087306,"parent_chain":[10087306,10083697,10081305],"root_id":10081305,"text":"Legacy code remains accessible to cheaper contractors, expense of overhauling build/deploy in sunsetting legacy app not justifiable. Gives us the ability to direct most of our effort toward the (Hoplon) all-Clojure/Script replacement.","time":1440017426,"type":"comment"}
{"by":"wooby","id":10083697,"kids":[10087306],"parent":10081305,"parent_chain":[10081305],"root_id":10081305,"text":"If you're interested in bringing functional/reactive style code to an existing application, you might also be interested in splint.js: <a href=\"https://github.com/adzerk-oss/splint.js\" rel=\"nofollow\">https://github.com/adzerk-oss/splint.js</a><p>I wrote a blog post about it recently: <a href=\"http://adzerk.com/blog/2015/06/splint-functional-first-aid-jquery/\" rel=\"nofollow\">http://adzerk.com/blog/2015/06/splint-functional-first-aid-j...</a><p>In a nutshell, it's a jQuery-friendly packaging of the ClojureScript runtime and the Javelin cell library, usable in existing applications. You basically write ClojureScript in JavaScript syntax.","time":1439958791,"type":"comment"}
{"by":"wooby","descendants":0,"id":10012183,"parent_chain":[],"root_id":10012183,"score":10,"text":"","time":1438802590,"title":"Raspberry Pi Displays for the Adzerk Office","type":"story","url":"http://adzerk.com/blog/2015/07/Raspberry-Pi-Displays-for-the-Adzerk-Office/"}
{"by":"wooby","id":9942357,"parent":9940126,"parent_chain":[9940126],"root_id":9940126,"text":"Spreadsheets rule. For ClojureScript there is the Javelin library: <a href=\"https://github.com/tailrecursion/javelin\" rel=\"nofollow\">https://github.com/tailrecursion/javelin</a><p>It has a few novel features like transactional input.<p>We use Javelin for state management in the hoplon.io web framework.","time":1437749401,"type":"comment"}
{"by":"wooby","descendants":0,"id":9700488,"parent_chain":[],"root_id":9700488,"score":3,"text":"","time":1434038639,"title":"Splint.js: ClojureScript first-aid for legacy JavaScript","type":"story","url":"http://adzerk.com/blog/2015/06/splint-functional-first-aid-jquery/"}
{"by":"wooby","descendants":0,"id":9685331,"parent_chain":[],"root_id":9685331,"score":2,"text":"","time":1433851156,"title":"Throwing together a weekend project with boot-clj","type":"story","url":"http://adambard.com/blog/throwing-together-worldclassifiedlist/"}
{"by":"wooby","descendants":0,"id":9634021,"parent_chain":[],"root_id":9634021,"score":4,"text":"","time":1433077148,"title":"Boot 2.0 Released","type":"story","url":"http://adzerk.com/blog/2015/05/boot-2.0.0-released/"}
{"by":"wooby","descendants":0,"id":9564008,"parent_chain":[],"root_id":9564008,"score":2,"text":"","time":1431952207,"title":"What I've Learned about Lisp (Clojure)","type":"story","url":"http://tailrecursion.com/~alan/index.cgi/wiki?name=What+I%27ve+Learned+about+Lisp"}
{"by":"wooby","descendants":0,"id":9256904,"parent_chain":[],"root_id":9256904,"score":1,"text":"","time":1427208504,"title":"Adopt DevOps Practices Organically, but Don’t \"DO DevOps\"","type":"story","url":"http://devops.com/features/adopt-devops-practices-organically-dont-devops/"}
{"by":"wooby","id":9147640,"kids":[9147771,9153766,9147687],"parent":9147141,"parent_chain":[9147141,9147127,9146506,9146272,9146206,9145360],"root_id":9145360,"text":"I hope that you are mis-representing Rust. I'd be pretty discouraged if I was learning a new language and one of the first interactions I had with a notable community member was a notice of take-down containing neither encouragement nor constructive criticism.","time":1425506257,"type":"comment"}
{"by":"wooby","descendants":0,"id":9121459,"parent_chain":[],"root_id":9121459,"score":2,"text":"","time":1425072382,"title":"GitHub Streaking for Fun and Profit","type":"story","url":"http://adzerk.com/blog/2015/02/github-streaking-for-fun-and-profit/"}
{"by":"wooby","id":8963160,"kids":[8974517],"parent":8961530,"parent_chain":[8961530,8956313],"root_id":8956313,"text":"Unfortunately Clojure start time is about the same regardless of build tool, and it's especially not good on the RPi.","time":1422486712,"type":"comment"}
{"by":"wooby","id":8959931,"kids":[8965652],"parent":8957971,"parent_chain":[8957971,8956313],"root_id":8956313,"text":"The reason we use a different extension is because a build.boot file is not semantically a Clojure file.<p>Clojure's default namespace is 'user'; .boot files run in 'boot.user'. Clojure only automatically refers clojure.core; we refer clojure.core and also boot.core.<p>So, dependencies notwithstanding, Clojure wouldn't be able to make sense of a build.boot file, and we think the .clj extension would be disingenuous.<p>We differ in these ways from .clj because one of our goals was to make it easy to create Clojure applications as single scripts.<p>The downside is users must configure their editors to get syntax highlighting, but we think this is the lesser evil.","time":1422455133,"type":"comment"}
{"by":"wooby","id":8957156,"parent":8956953,"parent_chain":[8956953,8956313],"root_id":8956313,"text":"This is a good comparison: <a href=\"https://groups.google.com/d/msg/clojurescript/yxpDGv6RrXQ/FsyxlK9pf44J\" rel=\"nofollow\">https://groups.google.com/d/msg/clojurescript/yxpDGv6RrXQ/Fs...</a>","time":1422404534,"type":"comment"}
{"by":"wooby","descendants":15,"id":8956313,"kids":[8957971,8961530,8956953,8958520,8958464,8957797],"parent_chain":[],"root_id":8956313,"score":61,"time":1422396063,"title":"Boot: Getting Started with Clojure","type":"story","url":"https://lionfacelemonface.wordpress.com/2015/01/17/boot-getting-started-with-clojure-in-10-minutes/"}
{"by":"wooby","id":8926982,"parent":8925690,"parent_chain":[8925690,8924865,8924545,8924337,8924227,8924093,8923939,8923835,8923776,8923385],"root_id":8923385,"text":"This was a great example, and I think you are absolutely right that it\nis the identical in function, if not in form, to mine.<p>Interestingly, in the course of concocting a counter-counter example,\nI came up with this in an effort to show the two dynamic variables we\nstipulate - <i>host</i> and <i>target</i> - were absolutely required:<p><pre><code> #+clj\n (defmacro my-macro []\n (cond\n (contains? *features* :clj) `(some-clojure-thing)\n (contains? *features* :cljs) `~(do (require 'some-ns)\n ((resolve 'some-ns/some-fn)))))\n</code></pre>\nMy hope was to make the point that 'some-ns/some-fn would run in a\ncontext where (<i>features</i> :cljs) is true - as it is in the caller's\n(macro body) environment - which would result in the system attempting\nto run ClojureScript code, which would explode because the macro is\nClojure. Then I realized that require runs load, and load is in the\nmacro body. The load/require available in the environment is\nClojure-specific! Thus, load/require can bind disj :cljs and conj\n:clj before reading and compiling some-ns.<p>My counter-example failed, but did bring me a little closer to the\ntruth - that we only need one dynamic variable, <i>platform</i>. Any\nplatform that has the ability to load code also has an opportunity to\nbind <i>platform</i> and thereby inform macros of target. This simplifies\nthe Feature Macro proposal by half and we are excited to amend it.<p>Our updated cross-platform example becomes:<p><pre><code> (case-platform\n :cljs nil\n :clj (defmacro my-macro []\n (condp = *platform*\n :clj `(some-clojure-thing)\n :cljs `(some-cljs-thing))))\n</code></pre>\nInstead of <i>host</i> and <i>target</i>, we are down to just <i>platform</i>. We\ncontinue to see no need for a <i>features</i> set because of Clojure's\nplatform-symbiosis.","time":1421890422,"type":"comment"}
{"by":"wooby","id":8925445,"parent":8925376,"parent_chain":[8925376,8925338,8925045,8923385],"root_id":8923385,"text":"The proposal is not dependent on boot, only our demonstration of it is.","time":1421871604,"type":"comment"}
{"by":"wooby","id":8924337,"kids":[8924545],"parent":8924227,"parent_chain":[8924227,8924093,8923939,8923835,8923776,8923385],"root_id":8923385,"text":"I agree that Feature Expressions don't add power, because yes, they are semantically equivalent to C preprocessing and orthogonal to the idea of Lisp.<p>What excites us most about Feature Macros is that they <i>do</i> add power. Here is an example of something we think is powerful from the proposal - a cross-platform macro:<p><pre><code> (case-host\n :cljs nil\n :clj (defmacro my-macro [name & body]\n (case-target\n :clj `(.println (System/-out) (str (do ~@body)))\n :cljs `(.log js/console (str (do ~@body))))))</code></pre>","time":1421862691,"type":"comment"}
{"by":"wooby","id":8924093,"kids":[8924227],"parent":8923939,"parent_chain":[8923939,8923835,8923776,8923385],"root_id":8923385,"text":"Ah, point taken. Here is a valid version:<p><pre><code> (case-host\n :clj\n (deftype Foo []\n JvmOnlyInterface\n (aMethod [blah blah] ...))\n :cljs\n (deftype Foo []))\n \n (extend-type Foo\n SomeCommonProtocol\n (someMethod [blah] ...))\n</code></pre>\nIt is true there are countless examples. There are also countless counter-examples. And for the examples that are competitive in terseness, there is already cljx.<p>I personally don't "just want to hack it", especially when it comes to writing portable code. I agree that portability poses subtle new challenges to application design. I just prefer to meet those challenges in a way that is programmable, which syntactic extension is definitely not.","time":1421860622,"type":"comment"}
{"by":"wooby","id":8923835,"kids":[8923939,8923889],"parent":8923776,"parent_chain":[8923776,8923385],"root_id":8923385,"text":"What's wrong with:<p><pre><code> (deftype Foo\n SomeCommonProtocol\n (aMethod [blah blah] ...))\n\n (+clj\n (extend-type Foo\n JvmOnlyInterface\n (someMethod [blah] ...)))\n</code></pre>\nCan you come up with another example you consider intractable?","time":1421858342,"type":"comment"}
{"by":"wooby","descendants":32,"id":8923385,"kids":[8923816,8923776,8925386,8925045,8924018,8923499,8923521,8923558],"parent_chain":[],"root_id":8923385,"score":80,"text":"","time":1421853211,"title":"Feature Macros, an Alternative to Feature Expressions in Clojure","type":"story","url":"https://github.com/feature-macros/clojurescript/tree/feature-macros/feature-macros-demo"}
{"by":"wooby","id":8767262,"parent":8765956,"parent_chain":[8765956,8765518,8763060],"root_id":8763060,"text":"Wow, that all sounds like an absolute nightmare!<p>Have you taken a look at broccoli[1]? We ran across it after going the Fileset route, but were refreshed to see that it also does a kind of Fileset thing (they call them "trees")[2]. I don't know much more about it other than that it's what's underneath ember-cli, and the Ember people do a lot of good work in tools realm. Anyway, it could be a way for you to realize some of the niceties of the boot approach over in JS-land.<p>1. <a href=\"https://github.com/broccolijs/broccoli\" rel=\"nofollow\">https://github.com/broccolijs/broccoli</a><p>2. <a href=\"http://www.solitr.com/blog/2014/02/broccoli-first-release/\" rel=\"nofollow\">http://www.solitr.com/blog/2014/02/broccoli-first-release/</a>","time":1418912170,"type":"comment"}
{"by":"wooby","id":8763411,"parent":8763225,"parent_chain":[8763225,8763060],"root_id":8763060,"text":"Sure! A minimal Java project with boot might look like:<p><pre><code> mkdir -p boot-java/src\n cd boot-java\n echo 'public class Main{public static void main(String[]args){System.out.println("hi!");}}' > src/Main.java\n boot -s src/ javac jar -m Main\n java -jar target/project.jar</code></pre>","time":1418839773,"type":"comment"}
{"by":"wooby","descendants":11,"id":8763060,"kids":[8765518,8765463,8763225,8763188],"parent_chain":[],"root_id":8763060,"score":25,"text":"","time":1418836018,"title":"Clojure build tool Boot 2.0 RC1 out now","type":"story","url":"http://adzerk.com/blog/2014/12/boot2-rc1-out/"}
{"by":"wooby","descendants":2,"id":8551830,"kids":[8553357],"parent_chain":[],"root_id":8551830,"score":17,"text":"","time":1415033684,"title":"The Genealogy of Eliza","type":"story","url":"http://elizagen.org/"}
{"by":"wooby","descendants":0,"id":8515430,"parent_chain":[],"root_id":8515430,"score":14,"text":"","time":1414418268,"title":"A Dashboard with Hoplon","type":"story","url":"http://adzerk.com/blog/2014/10/a-dashboard-with-hoplon/"}
{"by":"wooby","descendants":0,"id":8075564,"parent_chain":[],"root_id":8075564,"score":2,"text":"","time":1406135816,"title":"CSS, Lisp, names, scopes, predicate dispatch, Cassowary, and a plot to kill CSS","type":"story","url":"http://hoplon.discoursehosting.net/t/lets-talk-about-layout/223/6?u=alandipert"}
{"by":"wooby","descendants":0,"id":7097223,"parent_chain":[],"root_id":7097223,"score":2,"text":"","time":1390329385,"title":"Writing the Prince symbol in Unicode","type":"story","url":"http://parkerhiggins.net/2013/01/writing-the-prince-symbol-in-unicode/"}
{"by":"wooby","id":7058976,"parent":7054720,"parent_chain":[7054720,7051877],"root_id":7051877,"text":"Yes, the arithmetic primitives don't support variadic arguments. You can see how + works - and that it only deals with the first two arguments - here: <a href=\"https://github.com/alandipert/gherkin/blob/278354246aebf14b86e05c726cb7a4db31658f56/gherkin#L914\" rel=\"nofollow\">https://github.com/alandipert/gherkin/blob/278354246aebf14b8...</a>. A pull request fixing this would be welcome.<p>In the meantime, for variadic addition, one can do:<p>(load-file "core.gk")\n(reduce + 0 '(1 2 3)) ;=> 6","time":1389726261,"type":"comment"}
{"by":"wooby","id":6866697,"parent":6866085,"parent_chain":[6866085],"root_id":6866085,"text":"Bash has many features and for me has been useful to know because it's almost everywhere, but it was never designed to be what it has become. I'm working on escaping it forever with gherkin, a Lisp I wrote in Bash 4.<p>gherkin is still in its early days, but if you're interested in such a thing see <a href=\"https://github.com/alandipert/gherkin\" rel=\"nofollow\">https://github.com/alandipert/gherkin</a> or join us in #gherkin on freenode.","time":1386432550,"type":"comment"}
{"by":"wooby","id":4994836,"parent":4994624,"parent_chain":[4994624,4994414,4994374,4994208],"root_id":4994208,"text":"I enjoyed the article but was also a little bummed `for` wasn't mentioned at all.<p>Minor nit: `for` is a macro in the clojure.core namespace, not a special form. Special forms in Clojure are these: <a href=\"http://clojure.org/special_forms\" rel=\"nofollow\">http://clojure.org/special_forms</a>","time":1357090144,"type":"comment"}
{"by":"wooby","dead":true,"descendants":-1,"id":4908541,"parent_chain":[],"root_id":4908541,"score":1,"text":"","time":1355284738,"title":"Making it real with 3D printing","type":"story","url":"http://www.infoworld.com/d/computer-hardware/making-it-real-3d-printing-208721"}
{"by":"wooby","descendants":1,"id":4893813,"kids":[4894172],"parent_chain":[],"root_id":4893813,"score":4,"time":1355027937,"title":"A History of the Sentence \"Buffalo buffalo buffalo buffalo buffalo.\"","type":"story","url":"http://www.cse.buffalo.edu/~rapaport/BuffaloBuffalo/buffalobuffalo.html"}
{"by":"wooby","id":4704149,"kids":[4705990],"parent":4701476,"parent_chain":[4701476,4699056,4697874,4697634],"root_id":4697634,"text":"My point is that they desugar directly to data structures (instantiated in Java, in LispReader) instead of operation forms that evaluate to data structures.<p>See vector creation: <a href=\"https://github.com/clojure/clojure/blob/52633274225370dfb0581c1c6fa1e14a2ec56061/src/jvm/clojure/lang/LispReader.java#L1080\" rel=\"nofollow\">https://github.com/clojure/clojure/blob/52633274225370dfb058...</a>","time":1351283627,"type":"comment"}
{"by":"wooby","id":4699056,"kids":[4701476],"parent":4697874,"parent_chain":[4697874,4697634],"root_id":4697634,"text":"Your example is nonsense. Clojure's keep is based on lazy sequences instead of concrete lists, and is also optimized for performance.<p>That said, you raise a point that occurred to me recently, and it relates to Clojure's literal representation of data beyond lists and your point about the \"ruined magic\".<p>In most Lisps, the only evaluation semantic is that of the \"operator form\": a list of operator car and arguments cdr, both of which are evaluated themselves.<p>Clojure, however, adds an evaluation semantic for its data literals. Consider this code:<p>{(+ 1 2) (+ 3 4)}<p>It results in the map {3 7}, but where is the \"operator form\" that caused the top-level evaluation?<p>In Lisps with reader macros, an expression like above boils into code resembling (hash-map (+ 1 2) (+ 3 4)), a classic \"operator form\", which is then evaluated.<p>In Clojure, however, which does not provide reader macros, there is no intermediate list representation of the expression accessible to the programmer. Effectively, Clojure adds evaluation semantics to Lisp beyond \"operator forms\": data literals evaluate their contents, and qualify in many ways as \"special forms\".<p>I have run into at least one implication of this design having to do with the structural representation of Clojure code. With a \"classic\" Lisp, an IDE or editor is empowered to present to the user any representation of the code, and can convert it to Lisp expressions arbitrarily the same way reader macros do.<p>With Clojure, this type of \"skinning\" is harder, because IDE-like navigation of data implies ordering. The ordering exists in the character-wise representation of a map like {3 4} but not in its evaluated counterpart.","time":1351192913,"type":"comment"}
{"by":"wooby","descendants":0,"id":4674910,"parent_chain":[],"root_id":4674910,"score":5,"text":"","time":1350672451,"title":"Write Your Own Compiler in 20 Minutes","type":"story","url":"https://vimeo.com/51721992"}
{"by":"wooby","descendants":61,"id":4576140,"kids":[4576186,4576862,4577248,4576420,4576684,4576476,4576303,4576883,4580015,4578652,4576541,4576227,4579827,4577021,4576404,4576585,4577302,4576451,4577097,4576485,4577214,4576165,4577387,4577462,4576353,4576593],"parent_chain":[],"root_id":4576140,"score":204,"text":"","time":1348673621,"title":"MMO in loving tribute to xkcd-1110","type":"story","url":"http://1110.n01se.net/"}
{"by":"wooby","descendants":0,"id":4493141,"parent_chain":[],"root_id":4493141,"score":2,"text":"","time":1347118976,"title":"Clojure on the Raspberry Pi","type":"story","url":"http://pi.tailrecursion.com/"}
{"by":"wooby","descendants":0,"id":4486623,"parent_chain":[],"root_id":4486623,"score":1,"text":"","time":1346970496,"title":"Learn the basics of programming using LOLCODE.","type":"story","url":"http://www.youtube.com/watch?v=NkmJcgbXkJA"}
{"by":"wooby","id":4446745,"kids":[4447035],"parent":4446668,"parent_chain":[4446668,4446391,4444793],"root_id":4444793,"text":"Rich has a CS master's degree.","time":1346205713,"type":"comment"}
{"by":"wooby","id":3615192,"kids":[3615439],"parent":3614613,"parent_chain":[3614613,3614550,3614099],"root_id":3614099,"text":"Also using underscore, with sortBy:<p><pre><code> _.chain(people)\n .sortBy(function(person) { \n return person.firstName.length + person.lastName.length; })\n .last()\n .value()</code></pre>","time":1329797561,"type":"comment"}
{"by":"wooby","id":3614186,"kids":[3614216],"parent":3614060,"parent_chain":[3614060,3613990,3613634],"root_id":3613634,"text":"That, and they handle transcoding to all kinds of different formats for us.","time":1329776099,"type":"comment"}
{"by":"wooby","id":3454091,"parent":3453674,"parent_chain":[3453674,3453648,3453599,3453208],"root_id":3453208,"text":"Rich Hickey's \"Simple Made Easy\" talk from Strange Loop is filled with great ammo: <a href=\"http://www.infoq.com/presentations/Simple-Made-Easy\" rel=\"nofollow\">http://www.infoq.com/presentations/Simple-Made-Easy</a><p>Personally, it gave me new vocabulary and conceptual tools for explaining why I like Clojure so much.","time":1326322452,"type":"comment"}
{"by":"wooby","descendants":1,"id":3250632,"kids":[3250730],"parent_chain":[],"root_id":3250632,"score":2,"text":"","time":1321591422,"title":"Of Aviation Crashes and Software Bugs","type":"story","url":"http://duartes.org/gustavo/blog/post/of-aviation-crashes-and-software-bugs"}
{"by":"wooby","descendants":0,"id":3128919,"parent_chain":[],"root_id":3128919,"score":4,"text":"","time":1319003519,"title":"Original Spacewar! on JavaScript PDP-1 emulator","type":"story","url":"http://spacewar.oversigma.com/html5/"}
{"by":"wooby","descendants":0,"id":2940060,"parent_chain":[],"root_id":2940060,"score":6,"text":"","time":1314676914,"title":"Do aliens have LISP?","type":"story","url":"http://www.quora.com/Do-aliens-have-LISP"}
{"by":"wooby","descendants":0,"id":2885316,"parent_chain":[],"root_id":2885316,"score":4,"text":"","time":1313378510,"title":"The Evolution of Lisp","type":"story","url":"http://www.dreamsongs.com/Files/HOPL2-Uncut.pdf"}
{"by":"wooby","descendants":0,"id":2848187,"parent_chain":[],"root_id":2848187,"score":2,"text":"","time":1312499325,"title":"Processing arrays using CPS","type":"story","url":"http://blog.n01se.net/?p=362"}
{"by":"wooby","id":2796309,"parent":2796035,"parent_chain":[2796035,2796026,2795995,2795803],"root_id":2795803,"text":"It's a one-time cost, but we're also not done improving Closure Compiler's ability to minify core.<p>There's a lot of Closure Compiler-specific metadata we're not leveraging yet, and our goal is to reduce the baseline to much, much less.","time":1311401146,"type":"comment"}
{"by":"wooby","descendants":15,"id":2749150,"kids":[2749179,2749940,2749538,2749274,2749956,2749360,2749288,2749300],"parent_chain":[],"root_id":2749150,"score":54,"time":1310348625,"title":"WebRTC","type":"story","url":"https://sites.google.com/site/webrtc/"}
{"by":"wooby","descendants":0,"id":2745083,"parent_chain":[],"root_id":2745083,"score":3,"text":"","time":1310188977,"title":"Do-it-Yourself DNA extraction","type":"story","url":"http://vimeo.com/23146278"}
{"by":"wooby","descendants":0,"id":2465303,"parent_chain":[],"root_id":2465303,"score":3,"text":"","time":1303275440,"title":"Implementing Monads in Emacs Lisp","type":"story","url":"http://dorophone.blogspot.com/2011/04/deep-emacs-part-1.html"}
{"by":"wooby","descendants":0,"id":2454014,"parent_chain":[],"root_id":2454014,"score":1,"text":"","time":1302964559,"title":"Why BASIC?","type":"story","url":"http://www.basic256.org/whybasic"}
{"by":"wooby","descendants":0,"id":2215223,"parent_chain":[],"root_id":2215223,"score":2,"text":"","time":1297656689,"title":"The autobiography of SAIL ","type":"story","url":"http://www.inwap.com/pdp10/sail-shutdown.txt"}
{"by":"wooby","id":2215140,"parent":2214534,"parent_chain":[2214534],"root_id":2214534,"text":"The episode \"The Thinking Machine\" of the Nova miniseries \"The Machine That Changed the World\" is my favorite introduction to the history of AI up until around AI winter.<p>The episode, along with four others, are available here: <a href=\"http://waxy.org/2008/06/the_machine_that_changed_the_world_the_thinking_machine/\" rel=\"nofollow\">http://waxy.org/2008/06/the_machine_that_changed_the_world_t...</a>","time":1297654914,"type":"comment"}
{"by":"wooby","descendants":0,"id":2157075,"parent_chain":[],"root_id":2157075,"score":3,"text":"","time":1296352234,"title":"Three Questions About Each Bug You Find","type":"story","url":"http://www.multicians.org/thvv/threeq.html"}
{"by":"wooby","descendants":3,"id":2130133,"kids":[2130376],"parent_chain":[],"root_id":2130133,"score":27,"text":"","time":1295681297,"title":"Using Haskell’s ‘newtype’ in C","type":"story","url":"http://blog.nelhage.com/2010/10/using-haskells-newtype-in-c/"}
{"by":"wooby","descendants":0,"id":2065803,"parent_chain":[],"root_id":2065803,"score":2,"time":1294113763,"title":"Reversible Computation","type":"story","url":"http://strangepaths.com/reversible-computation/2008/01/20/en/"}
{"by":"wooby","descendants":0,"id":1903408,"parent_chain":[],"root_id":1903408,"score":3,"text":"","time":1289750144,"title":"The Two Things","type":"story","url":"http://www.csun.edu/~dgw61315/thetwothings.html"}
{"by":"wooby","descendants":0,"id":1845443,"parent_chain":[],"root_id":1845443,"score":2,"text":"","time":1288309292,"title":"HAKMEM","type":"story","url":"http://home.pipeline.com/~hbaker1/hakmem/hakmem.html"}
{"by":"wooby","descendants":0,"id":1791378,"parent_chain":[],"root_id":1791378,"score":1,"text":"","time":1287072093,"title":"Cyberwars: Already Underway with No Geneva Conventions to Guide Them","type":"story","url":"http://www.buffalo.edu/news/11862"}
{"by":"wooby","descendants":0,"id":1766527,"parent_chain":[],"root_id":1766527,"score":2,"text":"","time":1286415264,"title":"Clojure Concurrency Tutorial","type":"story","url":"http://www.pluralsight-training.net/microsoft/olt/course/toc.aspx?n=clojure-concurrency-tutorial"}
{"by":"wooby","descendants":0,"id":1758601,"parent_chain":[],"root_id":1758601,"score":2,"text":"","time":1286253119,"title":"A DIY Telepresence Robot","type":"story","url":"http://spectrum.ieee.org/geek-life/hands-on/a-diy-telepresence-robot/"}
{"by":"wooby","descendants":7,"id":1753108,"kids":[1753497,1754194,1753332],"parent_chain":[],"root_id":1753108,"score":40,"text":"","time":1286126753,"title":"Fun with Clojure: Turning Cats into Dogs in Hanoi","type":"story","url":"http://jkkramer.wordpress.com/2010/08/27/fun-with-clojure%C2%A0turning-cats-into-dogs-in-hanoi/"}
{"by":"wooby","dead":true,"descendants":-1,"id":1655671,"parent_chain":[],"root_id":1655671,"score":1,"text":"","time":1283419173,"title":"JVM Language Summit Videos","type":"story","url":"http://java.about.com/b/2010/09/01/jvm-language-summit-sessions-online.htm"}
{"by":"wooby","id":1623154,"parent":1622477,"parent_chain":[1622477],"root_id":1622477,"text":"\"We're an XML shop\": who says that?","time":1282408526,"type":"comment"}
{"by":"wooby","id":1622047,"parent":1621714,"parent_chain":[1621714],"root_id":1621714,"text":"A friend and I have a WIP lisp compiler targeting JS that uses this <a href=\"http://github.com/alandipert/pantless\" rel=\"nofollow\">http://github.com/alandipert/pantless</a>","time":1282354261,"type":"comment"}
{"by":"wooby","id":1603517,"parent":1603381,"parent_chain":[1603381],"root_id":1603381,"text":"You might check out bashreduce: <a href=\"http://github.com/erikfrey/bashreduce\" rel=\"nofollow\">http://github.com/erikfrey/bashreduce</a>","time":1281802850,"type":"comment"}
{"by":"wooby","descendants":0,"id":1583845,"parent_chain":[],"root_id":1583845,"score":2,"text":"","time":1281200622,"title":"Automated Antenna Design","type":"story","url":"http://ti.arc.nasa.gov/projects/esg/research/antenna.htm"}
{"by":"wooby","id":1546982,"kids":[1547014],"parent":1546924,"parent_chain":[1546924,1546898,1546808,1546666,1546500],"root_id":1546500,"text":"Unlikelier considering the Stinger is filled with oddball proprietary batteries, and a canister of argon (for cooling the seeker head right before launch) that I've been told leaks over time.","time":1280113147,"type":"comment"}
{"by":"wooby","descendants":1,"id":1426729,"kids":[1426959],"parent_chain":[],"root_id":1426729,"score":25,"text":"","time":1276387233,"title":"Incanter now has standalone executables","type":"story","url":"http://data-sorcery.org/2010/06/12/incanter-executables/"}
{"by":"wooby","id":1375479,"parent":1374718,"parent_chain":[1374718],"root_id":1374718,"text":"If you're into this article, you might like \"Guns, Germs and Steel\" by Jared Diamond. I'm reading it on the recommendation of my favorite anthropology professor, and it's great.","time":1274729618,"type":"comment"}
{"by":"wooby","descendants":1,"id":1296423,"kids":[1296771],"parent_chain":[],"root_id":1296423,"score":22,"text":"","time":1272321203,"title":"Clojure's Approach to Polymorphism","type":"story","url":"http://www.developer.com/features/article.phpr/3878656/Clojures-Approach-to-Polymorphism-Method-Dispatch.htm"}
{"by":"wooby","descendants":0,"id":1230894,"parent_chain":[],"root_id":1230894,"score":1,"text":"","time":1270007908,"title":"Shepard's Tones","type":"story","url":"http://www.cs.ubc.ca/nest/imager/contributions/flinn/Illusions/ST/st.html"}
{"by":"wooby","id":1226762,"kids":[1227086,1228877,1227366,1228381,1227352],"parent":1226736,"parent_chain":[1226736],"root_id":1226736,"text":"Zen and the Art of Motorcycle Maintenance","time":1269878620,"type":"comment"}
{"by":"wooby","id":1223518,"parent":1223492,"parent_chain":[1223492,1223288],"root_id":1223288,"text":"Sure. You can do it with a regular function, for an example see page 12 of the upcoming Joy of Clojure book: <a href=\"http://www.manning.com/fogus/Fogus_MEAP_Ch1.pdf\" rel=\"nofollow\">http://www.manning.com/fogus/Fogus_MEAP_Ch1.pdf</a>","time":1269719192,"type":"comment"}
{"by":"wooby","id":1177210,"parent":1175799,"parent_chain":[1175799,1175136],"root_id":1175136,"text":"Whoops, it's supposed to be x11proto-print-dev. I've updated the deps in the README, should build no problem on 9.10 now.","time":1268099421,"type":"comment"}
{"deleted":true,"id":1175552,"parent":1175496,"parent_chain":[1175496,1175426],"root_id":1175426,"time":1268063672,"type":"comment"}
{"by":"wooby","descendants":10,"id":1175136,"kids":[1175365,1175196,1175328,1175195,1175776,1175799],"parent_chain":[],"root_id":1175136,"score":47,"text":"","time":1268046680,"title":"NCSA Mosaic on GitHub","type":"story","url":"http://github.com/alandipert/ncsa-mosaic"}
{"by":"wooby","descendants":0,"id":1153626,"parent_chain":[],"root_id":1153626,"score":5,"text":"","time":1267206231,"title":"The Doctor's Dilemma","type":"story","url":"http://www-formal.stanford.edu/jmc/docdil.html"}
{"by":"wooby","id":1142766,"parent":1142685,"parent_chain":[1142685,1142669,1142656,1142398],"root_id":1142398,"text":"The US military has a standardized test called the DLAB (Defense Language Aptitude Battery) that tests not your ability to use a particular language, but to learn a new, fictitious language - much like this programming test.","time":1266850850,"type":"comment"}
{"by":"wooby","descendants":0,"id":1109632,"parent_chain":[],"root_id":1109632,"score":1,"text":"","time":1265634903,"title":"Compile-time metaprogramming for PHP with no performance penalty","type":"story","url":"http://github.com/jaz303/phpx"}
{"by":"wooby","id":1086016,"parent":1085398,"parent_chain":[1085398,1085135],"root_id":1085135,"text":"Here's another throwback: <a href=\"http://web.archive.org/web/20011024015856/www.apple.com/ipod/\" rel=\"nofollow\">http://web.archive.org/web/20011024015856/www.apple.com/ipod...</a>","time":1264748964,"type":"comment"}
{"by":"wooby","id":1076753,"kids":[1076781,1076948,1076857],"parent":1076488,"parent_chain":[1076488,1076405],"root_id":1076405,"text":"As a friend of mine pointed out, how is this possible? Shouldn't fraudulent numbers also follow Benford's law?","time":1264468898,"type":"comment"}
{"by":"wooby","id":1069060,"parent":1069003,"parent_chain":[1069003,1068877,1068781],"root_id":1068781,"text":"I too had done diverse programming until Scala, and the language introduced me to the functional paradigms which I now hold very dear. That being said, I was completely - and unprecedentedly - blown away by Clojure, as, in the Perlis-quote tradition, it completely changed the way I think about programming in ways that Scala did not. I've since decided that if I was going to master a JVM lang, it would be Clojure, and I've had the most fun programming Clojure since my Commodore Basic days.<p>If you haven't seen any of the Rich Hickey videos on InfoQ, particularly \"Are We There Yet,\" I can't recommend seeing them more. It sounds like you might be following a similar path to mine, and I can't recommend Clojure more highly.<p>In the meantime though, enjoy your Scala trip - I did! :)","time":1264131827,"type":"comment"}
{"by":"wooby","descendants":0,"id":1059546,"parent_chain":[],"root_id":1059546,"score":2,"text":"","time":1263797040,"title":"Parrying Programs","type":"story","url":"http://maclisp.info/pitmanual/funnies.html#parrying_programs"}
{"by":"wooby","descendants":0,"id":1052150,"parent_chain":[],"root_id":1052150,"score":1,"text":"","time":1263453680,"title":"Lazy sequences in Javascript","type":"story","url":"http://alan.dipert.org/post/333763676/lazy-functions-lazy-sequences-in-javascript"}
{"by":"wooby","descendants":0,"id":1049773,"parent_chain":[],"root_id":1049773,"score":20,"text":"","time":1263372679,"title":"Multics Emacs: The History, Design and Implementation","type":"story","url":"http://www.multicians.org/mepap.html"}
{"by":"wooby","id":1030997,"parent":1030732,"parent_chain":[1030732],"root_id":1030732,"text":"If we're all supposed to vote the same way, what's the point of voting at all?","time":1262633328,"type":"comment"}
{"by":"wooby","id":1023022,"parent":1022904,"parent_chain":[1022904],"root_id":1022904,"text":"I thought this headline was about some esoteric higher order function","time":1262200726,"type":"comment"}
{"by":"wooby","id":1017808,"parent":1017740,"parent_chain":[1017740],"root_id":1017740,"text":"If you're into brainfuck and compilers, here's one that compiles BASIC into brainfuck and is written in java: <a href=\"http://esolangs.org/wiki/BFBASIC\" rel=\"nofollow\">http://esolangs.org/wiki/BFBASIC</a><p>It's advanced enough to compile things like text adventures.<p>I haven't been in #esolangs on freenode for a long time, but a few years ago there was talk of a brainfuck to C compiler floating around that was being actively developed. It as called bf2c.","time":1261957566,"type":"comment"}
{"by":"wooby","id":1013526,"parent":1012960,"parent_chain":[1012960,1012609],"root_id":1012609,"text":"Your point is interesting, and made me think about the way people primarily look for classical music - by composer.<p>If this whole scheme is to be based on some notion of \"creator,\" then the the way this would be organized seems to be pretty dependent on some standard definition of creation, and maybe even of art.<p>Seems like it could get pretty hairy.","time":1261637705,"type":"comment"}
{"by":"wooby","descendants":0,"id":1000461,"parent_chain":[],"root_id":1000461,"score":1,"text":"","time":1261026869,"title":"Nanowire lithium-ion batteries last 10x longer, are 1000x stronger","type":"story","url":"http://www.news.colostate.edu/Release/4951"}
{"by":"wooby","id":976697,"kids":[976797,976972],"parent":976515,"parent_chain":[976515],"root_id":976515,"text":"For slime-like editing with vim for Clojure, check out VimClojure. It's really great.","time":1259946624,"type":"comment"}
{"by":"wooby","descendants":0,"id":973805,"parent_chain":[],"root_id":973805,"score":1,"text":"","time":1259819173,"title":"Knowledge work productivity","type":"story","url":"http://en.wikipedia.org/wiki/Knowledge_work_productivity"}
{"by":"wooby","id":967371,"kids":[968173],"parent":967234,"parent_chain":[967234,966986],"root_id":966986,"text":"Thank you for your input, I really like the idea of \"turning things around.\"","time":1259557380,"type":"comment"}
{"by":"wooby","id":967370,"parent":967298,"parent_chain":[967298,966986],"root_id":966986,"text":"Yes, it's on December 11th, and will be recorded and available here: <a href=\"http://www.vimeo.com/user1295234\" rel=\"nofollow\">http://www.vimeo.com/user1295234</a> sometime in mid-December. Thanks for your interest! I'm looking forward to it.","time":1259557285,"type":"comment"}
{"by":"wooby","descendants":62,"id":966986,"kids":[967083,967025,967099,967072,967033,967150,967106,967092,967201,967161,967016,967230,967095,967077,969239,967234,967145,967509,967671,967023,967100,967034,967300,967179,967110,967480,967013,967298],"parent_chain":[],"root_id":966986,"score":44,"text":"A friend and I will be giving a talk to a group of computer science students in a few weeks. We're both students ourselves, but are a bit older and have more working experience than the average attendee will probably have.<p>Here are some of the ideas we've had so far:<p>- Present on \"using and knowing the tools\" from OS to editor to libraries.<p>- Something interactive, like working as a group through one of the problems from the New Turing Omnibus.<p>- Talk about the social aspects of coding, like group dynamic and collaboration tools, and maybe introduce pair programming.<p>The audience will be mostly undergraduate CS students. My friend and I are 25, and have worked freelance and at startups/medium sized companies on mostly Rails, PHP, and Java web apps for 5+ years. We have a lot to learn ourselves, and see this speaking opportunity as a way to better ourselves as presenters and learn more about the topic we pick.<p>So, what's a good topic? What's something every CS grad wishes they had learned or heard about? Thanks in advance for your suggestions!","time":1259535289,"title":"Ask HN: Things you wish you'd learned about programming in college?","type":"story"}
{"by":"wooby","id":943772,"parent":943747,"parent_chain":[943747,943616],"root_id":943616,"text":"<a href=\"http://280atlas.com/\" rel=\"nofollow\">http://280atlas.com/</a>","time":1258337018,"type":"comment"}
{"by":"wooby","descendants":38,"id":943616,"kids":[943805,943747,944054,943654,943643,943872],"parent_chain":[],"root_id":943616,"score":46,"time":1258331098,"title":"Atlas Beta Program Launched","type":"story","url":"https://atlas-beta.heroku.com/users/new"}
{"by":"wooby","id":933711,"kids":[933782],"parent":933673,"parent_chain":[933673,933290],"root_id":933290,"text":"I agree - this TDD-koan stuff really turns me off. What's preventing the author from just writing fibonacci as an infinite series of tests, and an infinitely long switch statement?<p>What the article doesn't mention is that full coverage on a function taking all positive integers is impossible unless you're comfortable making some assumptions about the behavior of your program.<p>The 'leap of faith' here is induction and the transition from simple testability to recursive implementation is huge, and left basically unexplained.<p>I personally think TDD is a great tool and an awesome way to write code. But it doesn't have to be this mysterious; I just think a function like fib is not a good way to show the benefits.","time":1257880573,"type":"comment"}
{"by":"wooby","descendants":0,"id":931633,"parent_chain":[],"root_id":931633,"score":1,"text":"","time":1257797329,"title":"The Robot and the Baby","type":"story","url":"http://www-formal.stanford.edu/jmc/robotandbaby/robotandbaby.html "}
{"by":"wooby","descendants":2,"id":928452,"kids":[928524],"parent_chain":[],"root_id":928452,"score":8,"text":"","time":1257635642,"title":"Shunting-yard Algorithm","type":"story","url":"http://en.wikipedia.org/wiki/Shunting-yard_algorithm"}
{"by":"wooby","id":911560,"kids":[911701],"parent":911445,"parent_chain":[911445],"root_id":911445,"text":"It's a great read, I'm glad we were able to salvage it from Geocities.<p>This quote from yosefk.com sums up the article more or less:<p>One of the key traits of good code is the ease at which it can be modified. One of the key traits of bad code is the high cost of modifying it. So good code is likely to deteriorate until it’s bad enough to become hard to change, and bad code is likely to stay bad. In short, code has a strong tendency to end up bad.","time":1256879123,"type":"comment"}
{"by":"wooby","id":911473,"parent":911470,"parent_chain":[911470],"root_id":911470,"text":"We meet at RIT and this will be our third meeting. There will be a presentation on GPU programming with CUDA, and pizza! (as long as it lasts ;)<p>I made an announcement a few months ago, but school wasn't in session yet. So, if you're in school in the area come on by! If you need a ride to RIT drop a note to either me or on the Meetup page and we'll figure something out.","time":1256873155,"type":"comment"}
{"by":"wooby","descendants":1,"id":911470,"kids":[911473],"parent_chain":[],"root_id":911470,"score":2,"text":"","time":1256872993,"title":"Tell HN: Rochester, NY Meetup","type":"story","url":"http://www.meetup.com/Rochester-Hackers/calendar/11365915/"}
{"by":"wooby","descendants":30,"id":908226,"kids":[908913,908474,908408,909606,908369,908480,909378],"parent_chain":[],"root_id":908226,"score":76,"text":"","time":1256749413,"title":"Java directly on Xen","type":"story","url":"http://research.sun.com/projects/dashboard.php?id=185"}
{"by":"wooby","id":896183,"parent":896077,"parent_chain":[896077],"root_id":896077,"text":"I started on a Lisp interpreter in Scala but only got as far as a prefix notation/sexp parser: <a href=\"http://gist.github.com/215712\" rel=\"nofollow\">http://gist.github.com/215712</a><p>You can load it into the REPL with scala -i PNCalc.scala and try an expression with PNCalc.test:<p><pre><code> scala> PNCalc.test(\"(+ (/ 3 1) (- 10 5))\")\n Tree: ESum(List(EDiv(List(EValue(3.0), EValue(1.0))), ESubtract(List(EValue(10.0), EValue(5.0)))))\n Eval: 8.0\n</code></pre>\nThe Scala parsing stuff is really nice.","time":1256183122,"type":"comment"}
{"by":"wooby","id":895841,"kids":[895907,895870],"parent":895535,"parent_chain":[895535],"root_id":895535,"text":"My favorite computer of all time was the Powerbook G4 12\". Sturdy build, full size keys, and internal DVD. Were it not for Apple's switch to Intel, I'd still be using it.<p>Was that a netbook? Not quite, but I really wish Apple would bring it back.","time":1256166272,"type":"comment"}
{"by":"wooby","id":881414,"parent":880474,"parent_chain":[880474,880251,880140],"root_id":880140,"text":"Very awesome, thank you for the link!","time":1255532413,"type":"comment"}
{"by":"wooby","id":880251,"kids":[880474],"parent":880140,"parent_chain":[880140],"root_id":880140,"text":"Anyone have an idea as to how hackable this thing is? A friend of mine and I are looking for a good platform upon which to build a programmable and pocket-sized RPN calculator.","time":1255473217,"type":"comment"}
{"by":"wooby","id":876559,"parent":876436,"parent_chain":[876436],"root_id":876436,"text":"New hires were \"...told to play Lemmings for a couple of weeks to get the idea\"<p>So awesome. That was a great game.","time":1255349958,"type":"comment"}
{"by":"wooby","id":874799,"kids":[874871,874877,875338],"parent":874342,"parent_chain":[874342,874243,874030],"root_id":874030,"text":"Won't every interface end up obsolete? Seems like the only interfaces with real staying power are serial and mini phonoplug.","time":1255275910,"type":"comment"}
{"by":"wooby","id":872043,"kids":[872121],"parent":871606,"parent_chain":[871606,871348],"root_id":871348,"text":"Apparently you can also use this as a video output for routers with USB ports running OpenWRT: <a href=\"http://sven.killig.de/openwrt/slugterm_dl.html\" rel=\"nofollow\">http://sven.killig.de/openwrt/slugterm_dl.html</a><p>Pretty awesome.","time":1255110867,"type":"comment"}
{"by":"wooby","id":867519,"kids":[867604,867566,867527],"parent":867452,"parent_chain":[867452],"root_id":867452,"text":"The alternative to preforking is select(2), which lets you get away with a single-process server and avoid IPC in certain scenarios: <a href=\"http://www.lowtek.com/sockets/select.html\" rel=\"nofollow\">http://www.lowtek.com/sockets/select.html</a><p>I think Boa and thttpd use select instead of forking for clients.","time":1254945739,"type":"comment"}
{"by":"wooby","descendants":0,"id":866296,"parent_chain":[],"root_id":866296,"score":4,"text":"","time":1254902210,"title":"Tiny Clojure web server","type":"story","url":"http://alan.xen.prgmr.com/"}
{"by":"wooby","id":859799,"parent":859762,"parent_chain":[859762,859755],"root_id":859755,"text":"I know it's possible, because I did it a few years ago. As I recall, I installed a plugin.<p>Unfortunately, that's all I remember - I haven't used Eclipse in several years.","time":1254641002,"type":"comment"}
{"by":"wooby","id":850533,"kids":[850583],"parent":850303,"parent_chain":[850303,850251],"root_id":850251,"text":"Seriously - \"show me the code.\" I like to listen to people when they're brilliant, even if they don't have great speaking skills.","time":1254237389,"type":"comment"}
{"by":"wooby","id":847986,"parent":847979,"parent_chain":[847979,847953],"root_id":847953,"text":"Yeah, The Abyss.","time":1254122180,"type":"comment"}
{"by":"wooby","descendants":1,"id":845251,"kids":[845561],"parent_chain":[],"root_id":845251,"score":4,"text":"","time":1253952154,"title":"Jsawk - like awk, but for JSON","type":"story","url":"http://github.com/micha/jsawk"}
{"by":"wooby","id":844754,"kids":[844973],"parent":843951,"parent_chain":[843951,843732],"root_id":843732,"text":"You can always open files as tabs at startup too with -p, like this: vim -p foo.c foo.h","time":1253924116,"type":"comment"}
{"by":"wooby","id":844751,"parent":844050,"parent_chain":[844050,843732],"root_id":843732,"text":"You can always get vim keys in any readline-enabled terminal program (like bash) by creating ~/.inputrc and putting this in it:<p>set editing-mode vi\nset keymap vi<p><a href=\"http://vim.wikia.com/wiki/Use_vi_shortcuts_in_terminal\" rel=\"nofollow\">http://vim.wikia.com/wiki/Use_vi_shortcuts_in_terminal</a>","time":1253923982,"type":"comment"}
{"deleted":true,"id":837861,"parent":836951,"parent_chain":[836951,836852,836722],"root_id":836722,"time":1253651338,"type":"comment"}
{"by":"wooby","id":837531,"parent":837503,"parent_chain":[837503,837124],"root_id":837124,"text":"The best resource I've found was \"The Unix Programming Environment,\" which goes beyond the C language and into using common libraries and organizing C projects with make and other tools.<p>Other than that, some food for thought on use of C in the real world is this article by Rob Pike, \"Notes on Programming in C:\"<p><a href=\"http://www.lysator.liu.se/c/pikestyle.html\" rel=\"nofollow\">http://www.lysator.liu.se/c/pikestyle.html</a>","time":1253642049,"type":"comment"}
{"by":"wooby","id":825425,"parent":823805,"parent_chain":[823805,823614,823399,823347],"root_id":823347,"text":"Is this a preference? I've tried in the past to dig up research actually proving the \"most visible combination\" through experimentation. I've always assumed that road signs are the combination of colors they are because some empirical research proves it. Never found anything though.","time":1253084930,"type":"comment"}
{"by":"wooby","id":814700,"kids":[814704],"parent":814685,"parent_chain":[814685],"root_id":814685,"text":"I like it. Although I think you were going for \"affects.\"","time":1252559806,"type":"comment"}
{"by":"wooby","descendants":0,"id":811198,"parent_chain":[],"root_id":811198,"score":1,"text":"","time":1252424007,"title":"Division Tricks","type":"story","url":"http://mathforum.org/k12/mathtips/division.tips.html"}
{"by":"wooby","id":810768,"kids":[815444],"parent":810652,"parent_chain":[810652,810518],"root_id":810518,"text":"Me too. Find also has -delete, so you don't have to type -exec rm -rf '{}' ';'","time":1252412613,"type":"comment"}
{"by":"wooby","descendants":0,"id":797901,"parent_chain":[],"root_id":797901,"score":3,"text":"","time":1251809152,"title":"The Machine That Changed the World: The Thinking Machine","type":"story","url":"http://waxy.org/2008/06/the_machine_that_changed_the_world_the_thinking_machine/"}
{"by":"wooby","id":795606,"parent":795310,"parent_chain":[795310,795291,795025,794592],"root_id":794592,"text":"I think a verifiable history of open source contributions (or an active github repo) show the same sort of passion.","time":1251707265,"type":"comment"}
{"by":"wooby","id":789931,"parent":789642,"parent_chain":[789642,789396,789378,789120],"root_id":789120,"text":"Dot itself is also a command line tool, so it's easy to make documents and presentations with TeX that have text-format diagrams in the dot language. You can also do things like generate call graphs for programs, or parse log files into sequence diagrams by parsing input somehow and generating dot files.","time":1251403894,"type":"comment"}
{"by":"wooby","id":788964,"parent":788922,"parent_chain":[788922,788899],"root_id":788899,"text":"I don't know. I ran across the article after watching ridiculous late-night news commentary on \"sexting\" with the headline of \"How should teens be punished for sexting?\"","time":1251368868,"type":"comment"}
{"by":"wooby","descendants":2,"id":788899,"kids":[788922],"parent_chain":[],"root_id":788899,"score":1,"text":"","time":1251363336,"title":"Deviancy amplification spiral","type":"story","url":"http://en.wikipedia.org/wiki/Deviancy_amplification_spiral"}
{"by":"wooby","id":788884,"kids":[788969],"parent":788413,"parent_chain":[788413],"root_id":788413,"text":"Hi, looks like it was a fun project. While you save yourself from checking the DB for a duplicate hash with your hex id strategy, a side effect of this technique is that every URL created with your service is effectively public. For instance, I could start at <a href=\"http://briancray.com/tests/shorturl/0\" rel=\"nofollow\">http://briancray.com/tests/shorturl/0</a> and work my way up through every URL ever shortened by incrementing the id in hex. Whether this is a vulnerability or undocumented feature is up to you to decide :)<p>I bring it up because I ran across the same issue with my own site, droplink.me. It was a more serious problem for me, because user uploaded files are supposed to be private. I went with randomly generated URLs.","time":1251362529,"type":"comment"}
{"by":"wooby","id":787487,"parent":787420,"parent_chain":[787420,787404,787334],"root_id":787334,"text":"If there's anything good about PHP that I can tell, its that development is heavily community driven and has been since the early days. However, I think PHP got so popular, and so quickly, that in many cases the community's desire for features has led to an inconsistent, and in your view, 'broken' system. The need for backwards compatibility from almost the very beginning has taken its toll, I think. Is it really 'broken' though? Of course, similar concepts have been implemented in other languages much more elegantly. But PHP is not about elegance - it's about backwards compatibility, and responding to community feature requests.<p>I'm not a part of the community, and I'm no longer a PHP developer (if I can help it) but I can't think of any other reason the global functions would still have inconsistent argument orders almost 14 years on. So, if the 'correctness' of their implementation bothers you, do what I did: move on. Because it will never get any better.<p>Incidentally, I wrote an anti-PHP rant last year called \"Why PHP Won\" that made its rounds here. It's pretty easy to get fed up with PHP, especially when you know there's better stuff out there. Once you're at that point though, you're done. It's anything-else time.","time":1251304318,"type":"comment"}
{"by":"wooby","descendants":0,"id":783906,"parent_chain":[],"root_id":783906,"score":1,"text":"","time":1251164758,"title":"Translating Java bytecode to X86 assembly code","type":"story","url":"http://www.cis.nctu.edu.tw/~wuuyang/papers/bytecode2X86.BRIEF.pdf"}
{"by":"wooby","id":783302,"parent":783297,"parent_chain":[783297,782997],"root_id":782997,"text":"Hey, I'm using 2.7.5 and it worked for me. There's a tidbit of 2.8 specific code in there, but it's noted. I'm also the dude that wrote it, so if you have any problems or questions drop a line. Scala, for me, has been worth learning.","time":1251146603,"type":"comment"}
{"by":"wooby","descendants":2,"id":782997,"kids":[783297],"parent_chain":[],"root_id":782997,"score":2,"text":"","time":1251141334,"title":"Tiny Scala Primer","type":"story","url":"http://people.rit.edu/~awd4182/scala_handout.pdf"}
{"by":"wooby","id":780612,"parent":780568,"parent_chain":[780568],"root_id":780568,"text":"Here's one my friend wrote, we're using it for in-place editing of html files stored on S3: <a href=\"http://github.com/micha/jquery-eip/tree/master\" rel=\"nofollow\">http://github.com/micha/jquery-eip/tree/master</a>","time":1251044693,"type":"comment"}
{"by":"wooby","id":775305,"parent":775257,"parent_chain":[775257],"root_id":775257,"text":"Has anyone managed to get this running on OS X? A few weeks ago I played with some header files but didn't have any luck.","time":1250783579,"type":"comment"}
{"by":"wooby","id":763119,"parent":762859,"parent_chain":[762859],"root_id":762859,"text":"Strikes me as dated and pointless; reads like a high school \"compare and contrast\" essay and the guy is hell bent on flaming Lisp. Apples and Oranges dude.","time":1250261969,"type":"comment"}
{"by":"wooby","id":763079,"parent":762939,"parent_chain":[762939,762895,762858],"root_id":762858,"text":"The way I see it, programming for the web is, for simple apps, the easiest way to build anything in any language that provides an interface and does something useful. It's also, in my opinion, the most difficult platform to develop more complex software for.<p>The statelessness of HTTP, and the long list of requisite skills (JS/HTML/CSS/SQL) needed to build something application-like are pretty serious. And that's before you even get into messaging, caching, and optimization. In the blog post the buffoon spends a paragraph decreeing the nightmares of web development, and the next calling those who want to develop for it \"dumb.\" I'd say the opposite is true.<p>Alas, there is somewhere in the middle of the spectrum where it's pretty boring for someone who enjoys programming. But I think any technology can get boring when the job becomes more a task of memorizing an API and using it the way you're supposed to than actually hacking. While C is \"hard core,\" doing something in C with X11 is an exercise in rote and memorization.<p>He goes on about his IDEs and debuggers. What's with the debuggers guy, too dumb to not make mistakes? What's he working with that he's so happy using, Squeak?<p>So yes - this guy is an idiot. If you're result oriented, the web is a great place to build an app because there are fantastic frameworks to create things quickly that anyone with a browser can use. And if you're hacking oriented, you can write your own framework.","time":1250261131,"type":"comment"}
{"by":"wooby","id":762410,"parent":762369,"parent_chain":[762369,762266],"root_id":762266,"text":"Swing by, it will be worth the drive :)","time":1250226252,"type":"comment"}
{"by":"wooby","id":762385,"parent":762376,"parent_chain":[762376,762355,762351,762271,762266],"root_id":762266,"text":"Yeah, I saw that... I think I met a handful of members at the most recent RIT Barcamp. Awesome guys, but I wanted to test the waters for interest in a group that's language and platform agnostic and has the entrepreneur/startup angle.","time":1250225111,"type":"comment"}
{"by":"wooby","id":762355,"kids":[762376],"parent":762351,"parent_chain":[762351,762271,762266],"root_id":762266,"text":"Cool, you should join the group anyways and then you'll get notified when the next meetup goes down. Thanks for checking it out!","time":1250223943,"type":"comment"}
{"by":"wooby","id":762271,"kids":[762351,762400],"parent":762266,"parent_chain":[762266],"root_id":762266,"text":"Hi everyone, I was cruising around looking for a hacker oriented club or group in Rochester, NY or Western NY and didn't find anything... so I made a meetup group. We'll be tentatively meeting on either the RIT campus (if I can swing it) or the Penfield Panera (Panorama Plaza). I've got a Scala presentation/workshop planned, but I'm more than open to anything else anyone would want to share. Thanks for getting the word out.","time":1250219469,"type":"comment"}
{"by":"wooby","descendants":10,"id":762266,"kids":[762271,762477,762369,762795],"parent_chain":[],"root_id":762266,"score":26,"text":"","time":1250219317,"title":"Tell HN: Rochester, NY Hackers - Unite!","type":"story","url":"http://www.meetup.com/Rochester-Hackers/"}
{"by":"wooby","descendants":0,"id":757391,"parent_chain":[],"root_id":757391,"score":2,"text":"","time":1250056061,"title":"Situation calculus","type":"story","url":"http://en.wikipedia.org/wiki/Situation_calculus"}
{"by":"wooby","id":757362,"parent":756869,"parent_chain":[756869,756828,756732,756686,756653],"root_id":756653,"text":"Me too - using Gmail + Gears w/ Safari 4 Fluid app, and a dock badge 'inbox count' userscript. Google will tell you you can't install gears with safari 4 - but it works.","time":1250054938,"type":"comment"}
{"by":"wooby","id":752866,"parent":752843,"parent_chain":[752843,752823,752706,752398],"root_id":752398,"text":"I'm not sure this kind of entrenchment is endemic of COBOL programmers specifically. I knew plenty of people in college who, once they knew Java, were perfectly content with their ability to program, and will probably be happily employed for the foreseeable future. I think it just boils down to the difference between the 9am-5pm'ers and the 5pm-9am'ers.","time":1249912027,"type":"comment"}
{"by":"wooby","id":751802,"parent":750854,"parent_chain":[750854],"root_id":750854,"text":"Handy; a task better suited for a Greasemonkey script though?","time":1249872955,"type":"comment"}
{"by":"wooby","id":751347,"parent":751307,"parent_chain":[751307],"root_id":751307,"text":"Write tests before you code, and spend more time planning software with pen and paper before you actually write it. If you're having doubts about your abilities or solutions and work as part of a team, ping team members or friends.","time":1249854247,"type":"comment"}
{"by":"wooby","id":747243,"parent":746939,"parent_chain":[746939,746708],"root_id":746708,"text":"Me too. And absolutely it counts; VB programmers are still programmers aren't they?","time":1249631768,"type":"comment"}
{"by":"wooby","id":747239,"parent":747086,"parent_chain":[747086],"root_id":747086,"text":"Awesome - reminiscent of HotRuby, except cooler/faster/parses and executes all by itself. It would be nice if there was a JS Parrot VM.","time":1249631533,"type":"comment"}
{"by":"wooby","id":744211,"parent":744195,"parent_chain":[744195,744109,744040],"root_id":744040,"text":"I feel the same way. Why not just save everyone some hassle, admit to ourselves we never click on ads, and employ an extension or userscript.","time":1249504819,"type":"comment"}
{"by":"wooby","id":743105,"parent":742062,"parent_chain":[742062,741518],"root_id":741518,"text":"There have existed, and do exist, cultures which value human lives lost in combat the same way we will view robots lost in combat. In a sense, our enemy already thinks this way. Each Jihadist's death, to them, is a victory in itself, and but one of many to come; a mark of progress in what is certainly the most glorious and successful guerilla campaign of all time.<p>I thought the author's arguments were heavily culturally-bound, and I don't think the use of robots in combat will change anything about the nature of war. Killing can be automated; war, and winning wars, cannot. There will always be repercussions the belligerent's society will be able to understand as \"loss.\" Our current definition is lost troops. Our future enemies will figure it out if it changes, and make it as clear to us as possible in terms we can understand why we will not win. Nowadays, their tools are insurgency and domestic terrorism. Who knows what they will be in the future.<p>Preventing the start of future wars doesn't have anything, in my view, to do with stopping the Pentagon from further automating killing. As long as we as a country feel the need to maintain a military, we must continue innovating with the tools and techniques of war.<p>A larger and scarier problem with our country, in my view, is our society's perspectives - on itself, on the world, on the meaning of life and death in general. It is this perspective, and collective awareness, that will guide the way we use both our military and its robots in the future to solve problems and protect ourselves. The average American has never served in the military, seen directly or even heard second-hand the nature of war or the military. The average American hasn't even ever left the country, nor spoken another language. How can our leaders, products of such a society, be expected to make decisions about the application of war?<p>It's a question that saddens me because I don't think there's an answer, and this post has turned into a rant. Forgive me, back to coding!","time":1249465337,"type":"comment"}
{"by":"wooby","id":743062,"parent":743053,"parent_chain":[743053],"root_id":743053,"text":"I wish! Another progressive computing project I'm aware of in the same vein was Japan's \"Fifth Generation Computer\" initiative, which bore, among other things, a concurrent dialect of Prolog called KL0. <a href=\"http://en.wikipedia.org/wiki/Fifth_generation_computer\" rel=\"nofollow\">http://en.wikipedia.org/wiki/Fifth_generation_computer</a>","time":1249462115,"type":"comment"}
{"by":"wooby","id":742408,"parent":741257,"parent_chain":[741257],"root_id":741257,"text":"<p><pre><code> Python Ruby\n map collect,map\n lambda block\n filter select\n ? reject\n reduce (functools) inject (native)\n</code></pre>\nGuido van Rossum on inclusion of 'reduce' in Python 3.0, in 2005:<p>\"This is actually the one I've always hated most, because, apart from a few examples involving + or *, almost every time I see a reduce() call with a non-trivial function argument, I need to grab pen and paper to diagram what's actually being fed into that function before I understand what the reduce() is supposed to do. So in my mind, the applicability of reduce() is pretty much limited to associative operators, and in all other cases it's better to write out the accumulation loop explicitly\" (<a href=\"http://www.artima.com/weblogs/viewpost.jsp?thread=98196\" rel=\"nofollow\">http://www.artima.com/weblogs/viewpost.jsp?thread=98196</a>)<p>Ruby lets you do it however you want to. I don't see myself learning Python any time soon.","time":1249427379,"type":"comment"}
{"by":"wooby","id":738929,"parent":738856,"parent_chain":[738856,738839,738812],"root_id":738812,"text":"I have very fond memories of Radio Shack also. It's where my dad bought the first family computer, a Tandy 486, when I was in elementary school. The guy who sold it to us was friendly and knowledgeable. I remember asking him how I might program the computer myself. He said \"Try QuickBASIC, and make an effort to learn how to touch type. It will pay off.\" It was some of the best programming advice I've ever gotten.<p>It seems like the \"hacker\" side of Radio Shack has fallen victim to the age of comparison shopping and online communication. For me growing up in a small town, Radio Shack was the place to go for technical advice from very smart people. And really, it was; Radio Shack was one of the few places where tech-savvy people could make money at a 9-5 with their skills and knowledge in just about every town in America. It was an ubiquitous bastion of DIY and technological enlightenment.<p>The few times I've been to a store since childhood I've been less than impressed with both the salespeople and products. It seemed like each time I was there, another drawer had disappeared from the electronic component rack.<p>So, whether they're changing the name or not, the real Radio Shack was gone a long time ago.","time":1249294591,"type":"comment"}
{"by":"wooby","descendants":1,"id":737190,"kids":[737195],"parent_chain":[],"root_id":737190,"score":3,"text":"","time":1249199154,"title":"Functional (kinda) PHP with Phunctional","type":"story","url":"http://alan.dipert.org/post/154093030/functional-kinda-php-with-phunctional"}
{"by":"wooby","descendants":0,"id":736612,"parent_chain":[],"root_id":736612,"score":1,"text":"","time":1249157468,"title":"Functionally-inspired array tools for PHP","type":"story","url":"http://github.com/alandipert/phunctional/tree/master"}
{"by":"wooby","descendants":0,"id":726840,"parent_chain":[],"root_id":726840,"score":3,"text":"","time":1248731544,"title":"Formal Language Processing in Scala","type":"story","url":"http://szeiger.de/blog/2008/07/27/formal-language-processing-in-scala-part-1/"}
{"by":"wooby","id":719037,"parent":718762,"parent_chain":[718762,718342,718283,718147],"root_id":718147,"text":"That makes sense, I might test it sometime.","time":1248321458,"type":"comment"}
{"deleted":true,"id":718805,"parent":718774,"parent_chain":[718774],"root_id":718774,"time":1248307796,"type":"comment"}
{"by":"wooby","id":718794,"parent":718736,"parent_chain":[718736,718425,718399,718147],"root_id":718147,"text":"Uhoh - I missed decimal place. 3 billion/sec would mean about 3000 of the cheapest Rackspace cloud machines, which could have been operated for 18 hours for about $810. I'm not sure Rackspace lets you have that many though.","time":1248307295,"type":"comment"}
{"by":"wooby","id":718425,"kids":[718941,718736],"parent":718399,"parent_chain":[718399,718147],"root_id":718147,"text":"If I was using just my own machine, or spent a few grand to put together my own CUDA farm, CUDA would have been great.<p>I think using cloud resources was the way to go though, because it's easy to search for keys concurrently, and you can summon an effectively unlimited amount of computing power pretty cheaply. You can add as many cloud servers as you want to your cluster without worrying about locking or divvying up work, and the number of keys your cluster is able to check per second increases linearly with the number of machines.<p>The winning team, awesome guys with a cluster of 8 very powerful computers and a CUDA program, were able to check just over 400 million keys per second. If I would have used 400 Rackspace cloud servers, it would have cost me about $100 to run them for the duration of the contest and I would have been achieving similar speeds.","time":1248292675,"type":"comment"}
{"by":"wooby","id":718342,"kids":[718762],"parent":718283,"parent_chain":[718283,718147],"root_id":718147,"text":"Thanks for the tips. gcc builtins are definitely the next level for me.<p>I'm curious about your scanf point though. I'm using scanf/strdup before the check loop to load the words into memory. Are subsequent memcpy calls on an implicitly loaded *char dict[] array faster on non-malloc'd memory for some reason?","time":1248290320,"type":"comment"}
{"by":"wooby","descendants":10,"id":718147,"kids":[718283,718399,719365],"parent_chain":[],"root_id":718147,"score":21,"text":"","time":1248281710,"title":"My Engineyard Contest Odyssey","type":"story","url":"http://alan.dipert.org/post/146555473/my-engineyard-contest-odyssey"}
{"by":"wooby","id":704930,"parent":704738,"parent_chain":[704738],"root_id":704738,"text":"In Nielsen's \"Designing Web Usability\" I remember him frowning on the use of \"here\" and \"click here\" as links. Since around 2000, when I first read the book, I heeded his advice.<p><pre><code> For more information: click here\n To sign up, go here\n</code></pre>\nwere cardinal no-nos, if I remember correctly.<p>But it looks like everybody else uses this technique, and the average web surfer is more likely to click give the redundant area to click on.<p>Maybe people are just more comfortable with \"click here\" when the links lead to an undefined word, like Twitter. Would it be true to say that most people on the web don't know what Twitter is? Do most of Curtis's visitors know what it is? If most of his visitors don't know, are they clicking on \"here\" because it's a more comfortable link given Twitter is undefined? While each of his test cases vary in wording, the first 3 are all alike in that twitter is the only word hyperlinked.<p>My theory is that people are less likely to click on hyperlinks if the hyperlinked text or word is something they don't know about. If you're talking about a brand name, service, or anything not general knowledge than you're better off with \"click here.\"","time":1247620237,"type":"comment"}
{"by":"wooby","id":703148,"kids":[703275],"parent":702952,"parent_chain":[702952,702926,702921,702918,702914],"root_id":702914,"text":"How much they've made so far, with scala:<p><pre><code> scala> def income(n_users:Int) = (1 to n_users) map(i => (i-1)*.001) reduceLeft(_+_)\n income: (Int)Double\n\n scala> income(2901)\n res0: Double = 4206.45</code></pre>","time":1247549000,"type":"comment"}
{"by":"wooby","id":702566,"kids":[702614],"parent":702476,"parent_chain":[702476,702243,702086],"root_id":702086,"text":"Hi, I've been there, and seen more than one up close.<p>You're right - there are a number of triggering methods in use, to include IR, GPRS/\"family band\" radio, and cell. More sophisticated devices use a combination, like cell arming and IR/pressure plate/trip cord detonation. Simple command-wire detonation begat command-wire with a stand-off cell phone arming unit. This was so we couldn't follow wires to the bomber. For a time fake command wires were set up and boobytrapped. When we stopped following wires, they'd do it again. Or use something really simple like a washing machine timer for a regularly scheduled convoy.<p>In Afghanistan (at least 5 years ago), \"long range cordless\" was a popular option in remote areas without cell grids. These are Chinese-made cordless phones operating in the 20-40mhz frequencies with ranges of 10 miles or more. These are also popular in areas of Iraq without cell infrastructure.<p>It is a cat and mouse game of trigger mechanisms versus detection/deterrent. New detonation methods would show up all the time, with various techniques being popular in different regions at any given time (in both Iraq and Afghanistan). New methods are analyzed, equipment is designed to counter, companies bid on devices, and the countermeasures are pushed into the warzone as quickly as possible. Unfortunately, in my experience, these devices are always behind the curve.<p>It wouldn't be a good idea for me to go into detail about what these detection and deterrence methods do specifically. Sufficed to say I browsed this article's responses and didn't run into any suggestions or techniques that I hadn't personally used or seen implemented.<p>There's a wide variety of communications equipment insurgents have access to, because there aren't Iraqi or Afghan equivalents of the FCC. There is access to consumer radios and devices of all frequencies and outputs in these countries. The entire spectrum is game. I don't think there's a magic deterrent or detection method here.<p>Our best bet was always to schedule movements and map routes as erratically and randomly as possible. If we could, we would mix vehicle movements with foot and air movement. Keeping a good relationship with locals and randomizing movement as much as possible proved much more valuable than using the hottest new gizmo. Pulling over and buying a soda from a street vendor and chatting with the local police generally yielded better information about the road ahead than sitting sealed in an armored vehicle staring at computer displays.","time":1247521752,"type":"comment"}
{"by":"wooby","id":696549,"parent":696347,"parent_chain":[696347,695796,695708],"root_id":695708,"text":"It would be cool to have HTTP proxy software that did this. So you set it as 'ie6' and it looks at your CSS and HTML and translates it into the \"ie6 view\" with problems annotated.","time":1247169165,"type":"comment"}
{"by":"wooby","id":691115,"kids":[691678],"parent":691089,"parent_chain":[691089,690943],"root_id":690943,"text":"Slackware is pretty BSD-like also; I know it's pretty straightforward to use NetBSD's pkgsrc (a fork of FreeBSD's ports mentioned in the link) on Slack. Like Arch, Slackware uses the BSD init system.","time":1246953350,"type":"comment"}
{"by":"wooby","id":690364,"kids":[690393,690369],"parent":690351,"parent_chain":[690351,690347,690227],"root_id":690227,"text":"Sometimes even when I define what done means before I start a project, I embarrass myself with my underestimates of complexity. Software is just plain fickle. Proof of concept on most any web app? Weekend. Something that satisfies anyone but me? At least two weekends :)","time":1246911153,"type":"comment"}
{"by":"wooby","id":689553,"kids":[689762],"parent":689513,"parent_chain":[689513,689508,689496],"root_id":689496,"text":"I agree 100%. Despite Scala's hype and functional influences, it's most exciting to me simply as another option for the JVM, and another \"tool in the toolbox.\"<p>Assuming you consider something JVM-based an eligible tool for a job, you have a wide variety of programming languages on a common platform to pick from. While it's probably not a good idea to apply them all in a project, it's nice to know that in the future the probability of you being able to reuse code in disparate languages increases.","time":1246884914,"type":"comment"}
{"by":"wooby","id":686620,"parent":686443,"parent_chain":[686443],"root_id":686443,"text":"You can, sort of - create \"mindmap\", \"django\", and \"project31\" directories and in each of them put a symbolic link to your file. Tagging, the unix way. A script or GUI for doing that might be useful, maybe.","time":1246655439,"type":"comment"}
{"by":"wooby","id":679808,"parent":679625,"parent_chain":[679625,679300],"root_id":679300,"text":"Still very cool though, thanks for the link.","time":1246314158,"type":"comment"}
{"by":"wooby","id":673054,"parent":672796,"parent_chain":[672796,672727,672481],"root_id":672481,"text":"The definition of \"everyone\" is even more difficult than \"opposite,\" I think. If the definition of \"everyone\" is \"most people on the planet,\" then developing Web apps is as close to the opposite of subsisting in a developing country I can think of.<p>This post is a pretty useless generalization, notable only because the guy who wrote it is wildly successful. And somehow, we're supposed to learn something from it -- \"Thanks.\"","time":1245896898,"type":"comment"}
{"by":"wooby","id":666163,"parent":666123,"parent_chain":[666123],"root_id":666123,"text":"Were you \"pestering him with irrational questions\" just to test his limits? If so, then the question in your post can probably be answered by people who know you.","time":1245475096,"type":"comment"}
{"by":"wooby","id":656730,"parent":656641,"parent_chain":[656641],"root_id":656641,"text":"I ran into a paper called \"The Next 700 Languages\" while doing Scala research. The paper, written in 1966, is lengthy but awesome. Its conclusion reminded me a lot of PGs paper, which I hadn't read:<p>The languages people use to communicate with computers differ in their intended aptitudes, towards either a particular application area, or a particular phase of computer use (high level programming, program assembly, job scheduling, etc). They also differ in physical appearance, and more important, in logical structure. The question arises, do the idiosyncracies reflect basic logical properties of the situations that are being catered for? Or are they accidents of history and personal background that may be obscuring fruitful developments? This question is clearly important if we are trying to predict or influence language evolution.<p>To answer it we must think in terms, not of languages, but of families of languages. That is to say we must systematize their design so that a new language is a point chosen from a well-mapped space, rather than a laboriously devised construction.<p>PDF: <a href=\"http://ttic.uchicago.edu/~blume/classes/aut2008/proglang/papers/Landin-next-700.pdf\" rel=\"nofollow\">http://ttic.uchicago.edu/~blume/classes/aut2008/proglang/pap...</a>","time":1244946044,"type":"comment"}
{"by":"wooby","id":656009,"parent":655975,"parent_chain":[655975,655711],"root_id":655711,"text":"That's a really, really awesome idea. It's like combining the best of twitter with the best of social news.","time":1244886763,"type":"comment"}
{"by":"wooby","id":655927,"parent":655895,"parent_chain":[655895,655774,655765,655711],"root_id":655711,"text":"I enjoy the engineering tunnel vision that good days on HN provide me. On the bad days, HN, for me, is sort of only the culture and pieces of society that those who don't know much about either are interested in. To learn about people, places, and things I don't know anything about that aren't hacking related - I go outside.","time":1244876697,"type":"comment"}
{"by":"wooby","id":650820,"kids":[650825],"parent":650803,"parent_chain":[650803,650794,650787,650761],"root_id":650761,"text":"Have you checked out <a href=\"http://prgmr.com/xen/\" rel=\"nofollow\">http://prgmr.com/xen/</a>? With their cheapest yearly plan and something like <a href=\"https://www.backblaze.com/\" rel=\"nofollow\">https://www.backblaze.com/</a>, you can get a VPS and off-site backups for about $10 a month.<p>I'm not on prgmr yet but I've heard good things. And Backblaze is awesome.","time":1244632783,"type":"comment"}
{"by":"wooby","id":650794,"kids":[650913,650805,650803],"parent":650787,"parent_chain":[650787,650761],"root_id":650761,"text":"GitHub Firewall Install is a turnkey, local GitHub. I'm not into hosting commercial software in private repos on GitHub though. It's periodically down, and that stuff needs to work. And GitHub FI looks pricey.<p>I think I'm better off with a VPS, gitosis, and local backups. It's cheap, it works, and it doesn't matter that I don't have all the cool social networking aspects of GitHub.","time":1244630509,"type":"comment"}
{"by":"wooby","id":650397,"parent":650350,"parent_chain":[650350,650139],"root_id":650139,"text":"There's a checkbox in the preferences to 'send updates to google.' Here's for hoping unchecking it works - this is pretty cool.","time":1244599266,"type":"comment"}
{"by":"wooby","id":649856,"parent":649804,"parent_chain":[649804,649507],"root_id":649507,"text":"It's not negative in that, people can program using whatever language they want using whatever language constructs they want.<p>But for PHP, which is mostly for web development, I would think using exceptions is a much peer-friendlier way of handling what you'd probably be using goto for in a web app.<p>If you're writing state machines or parsers, PHP probably isn't the way to go anyway. But hey - whatever floats your boat.","time":1244577821,"type":"comment"}
{"by":"wooby","id":649326,"kids":[650510],"parent":649229,"parent_chain":[649229],"root_id":649229,"text":"In the example where he shows that the PayPal logo requires a bit of microcopy to explain you don't need a PayPal account to purchase, might it be cleaner to just feature the PayPal logo alongside the other credit card icons? The other example, where he specifies the billing address - well, I can't really think of a better way.<p>While I use it from time to time myself, my gut feeling is that if you find yourself needing microcopy, you might be missing something.<p>I refer back to this Nielsen Alertbox from 2005 <a href=\"http://www.useit.com/alertbox/forms.html\" rel=\"nofollow\">http://www.useit.com/alertbox/forms.html</a> from time to time. Basically, Nielsen thinks that \"help\" items are fine, as long as they're on the same page, in the same context, and your form is as short as possible.","time":1244564826,"type":"comment"}
{"by":"wooby","id":647885,"kids":[648263],"parent":647557,"parent_chain":[647557,647540,647502],"root_id":647502,"text":"The government should fund code development? How would individual programmers pitch their projects to the government? Not all code that's created, even if it's free, is ever useful to anybody. Figuring out how to \"turn code into consumer value\" is a very hard problem, as I'm sure any entrepreneur would tell you. And it's sort of a backwards way of looking at how software, and the people that make it, can benefit themselves and society best. First, there needs to a problem. Then, you solve it.<p>Anyways, I think the kind of thing you're talking about already exists in a more general way - government contracts. The government decides they have a problem, comes up with a list of specifications, and bidding on the proposed solution is open. The most qualified company that solves the problem for the least amount of money or in the shortest amount of time wins. (At least, that's how it's supposed to work.)<p>Many contractors that develop for the government, and bid on these contracts, already use FOSS because it gives them a competitive edge when bidding. For instance, some versions of the FBCB2, a communications system for humvees and other military vehicles, run on Red Hat: <a href=\"http://en.wikipedia.org/wiki/FBCB2\" rel=\"nofollow\">http://en.wikipedia.org/wiki/FBCB2</a> and <a href=\"http://74.125.95.132/search?q=cache:LLwHBOS8JmYJ:www.cjmtk.com/EventRegistration/CjmtkConf07/04_FBCB2_CJMTK_Migration.PDF\" rel=\"nofollow\">http://74.125.95.132/search?q=cache:LLwHBOS8JmYJ:www.cjmtk.c...</a><p>I think that academia and savvy businesses are really where it's at with open source. As bad as academic bureaucracy can be, government bureaucracy is in my experience much, much worse.<p>So, all things considered, I'd think that even if the government had a direct interest in improving open source software, the best way to do it is through more funding for education - get more people to school, and get more people programming.","time":1244491453,"type":"comment"}
{"by":"wooby","id":646520,"parent":646092,"parent_chain":[646092],"root_id":646092,"text":"lynx -dump <a href=\"http://www.google.com\" rel=\"nofollow\">http://www.google.com</a> | figlet","time":1244417055,"type":"comment"}
{"by":"wooby","id":641084,"parent":641079,"parent_chain":[641079,640932],"root_id":640932,"text":"It's a C compiler that targets (generates code written in) higher level languages.<p>Usually, C compilers target machine code for a particular processor architecture. gcc, for instance, can 'generate code written in' x86 machine code.","time":1244101103,"type":"comment"}
{"by":"wooby","id":641068,"parent":640932,"parent_chain":[640932],"root_id":640932,"text":"epic shave","time":1244099053,"type":"comment"}
{"by":"wooby","id":638867,"parent":638482,"parent_chain":[638482,638198],"root_id":638198,"text":"I worked briefly on a C FastCGI that matched routes to function pointers, sort of like Sinatra.<p>I think the \"real\" way to do it is with Apache Axis2/C, though.","time":1243984849,"type":"comment"}
{"by":"wooby","id":637714,"parent":637676,"parent_chain":[637676],"root_id":637676,"text":"I wrote the upload and download handlers for droplink.me in C as FastCGIs, anticipating performance problems. I built it; but they never really came. It was a fun exercise, but if I wasn't interested in having fun with C, I would have written it in a dynamic language.<p>I think the reason there isn't a \"C web development community\" is that programmers are more than willing to trade time for performance. Safe, readable code can be written in high level languages in a snap. You can see your ideas happen very quickly. If you run into performance problems (which I think is safe to say is a fairly rare occurrence for the average web developer who produces decent code, in any language), you can a) refactor or streamline what you already have or b) start fresh, lessons learned, in something lower level.<p>An aside: the site <a href=\"http://halfbakery.com\" rel=\"nofollow\">http://halfbakery.com</a> is implemented entirely as an Apache module.","time":1243947112,"type":"comment"}
{"by":"wooby","id":634992,"parent":634937,"parent_chain":[634937,634736,634576],"root_id":634576,"text":"For sure. I'm just using XML literals in the example because it looks cool. But I'm also using this for a client job, and it's producing JSON.<p>It's not nearly as powerful as the real Sinatra, but it saves me the shenanigans of warbling Sinatra apps for servlet deployment.","time":1243798435,"type":"comment"}
{"by":"wooby","id":634682,"parent":634679,"parent_chain":[634679,634576],"root_id":634576,"text":"I haven't used maven (the first version of this thing used ant+ivy), but it was pretty messy compared to what I have going now. I'd say if you have the luxury of working with a Scala-only project, sbt is definitely the way to go.","time":1243777782,"type":"comment"}
{"by":"wooby","id":634611,"kids":[634647,634734],"parent":634607,"parent_chain":[634607,634576],"root_id":634576,"text":"Yeah it's pretty small. With Scala you basically get free HTML templating because of XML literal support. It's missing a lot of Sinatra stuff though: 'splat' and regex URI pattern matching, file uploads, sessions...","time":1243766943,"type":"comment"}
{"by":"wooby","descendants":12,"id":634576,"kids":[634607,635411,634702,634679,634736],"parent_chain":[],"root_id":634576,"score":31,"text":"","time":1243762439,"title":"Sinatra clone in Scala","type":"story","url":"http://github.com/alandipert/step/tree/master"}
{"by":"wooby","descendants":50,"id":629572,"kids":[629592,629637,629619,629610,629603,629723,629589,629785,629838,629799,629661,630107,629626,631304,629600,629727,631786,629957,629590,629837,629905,629691,629635,629932,629886,629744,629725,629721,629728,629757,630042,630053,629748,629734,629699,629620,629704,629638,629992,629787],"parent_chain":[],"root_id":629572,"score":61,"text":"I find myself writing comments, looking them over, and then not submitting them pretty often. A friend of mine is the same way.<p>I'm just curious how common this is.","time":1243476209,"title":"Ask HN: Do you write comments, and then not submit them?","type":"story","url":""}
{"by":"wooby","id":625684,"parent":625498,"parent_chain":[625498],"root_id":625498,"text":"It's nice when traveling to have electronics that all runs from AAs.<p>AAs can be found all over the world. And, if all your stuff runs the same battery, you can swap them between devices in a pinch. This computer looks awesome.","time":1243274374,"type":"comment"}
{"by":"wooby","id":624988,"parent":624671,"parent_chain":[624671],"root_id":624671,"text":"Javascript Lint is a nice Spidermonkey-based syntax checker you can integrate into your IDE. I installed it with macports, but it's here: <a href=\"http://www.javascriptlint.com/index.htm\" rel=\"nofollow\">http://www.javascriptlint.com/index.htm</a><p>In vim, I do:\n:set makeprg=jsl\\ -process\\ % which binds :make to a syntax check of the current file. It's a cool thing to put in an ftplugin.","time":1243222182,"type":"comment"}
{"by":"wooby","id":624068,"parent":623934,"parent_chain":[623934],"root_id":623934,"text":"Similar setup for PHP: <a href=\"http://gravitonic.com/files/talks/php-quebec-2009/vim-for-php-programmers.pdf\" rel=\"nofollow\">http://gravitonic.com/files/talks/php-quebec-2009/vim-for-ph...</a>","time":1243135674,"type":"comment"}
{"by":"wooby","dead":true,"descendants":-1,"id":621621,"parent_chain":[],"root_id":621621,"score":3,"text":"","time":1242968656,"title":"Richard Stallman Eats Something From His Foot","type":"story","url":"http://www.youtube.com/watch?v=I25UeVXrEHQ"}
{"by":"wooby","descendants":4,"id":614120,"kids":[614796,614600],"parent_chain":[],"root_id":614120,"score":44,"text":"","time":1242606526,"title":"Resty - a bash REST client","type":"story","url":"http://github.com/micha/resty/tree/master"}
{"by":"wooby","id":601533,"kids":[601626],"parent":601446,"parent_chain":[601446,601408],"root_id":601408,"text":"He's the dude who made all the builtin scripts on FreeBSD that are also in OS X, duh!<p>file /usr/bin/* | grep Bourne | cat `cut -d: -f1` | grep cperciva","time":1241909207,"type":"comment"}
{"by":"wooby","id":597531,"parent":597530,"parent_chain":[597530],"root_id":597530,"text":"Flame PHP.","time":1241676307,"type":"comment"}
{"by":"wooby","id":592633,"parent":592155,"parent_chain":[592155],"root_id":592155,"text":"I think it's a good start, and I like the layout.<p>The easiest thing for you to blog about will be your current problems and interests as they're related to software.<p>If you post things like that, without worrying too much about whether the posts are \"interesting,\" at the very least your blog will stand as a personal journal of your progress that you can refer back to it yourself.<p>I have a blog, and I refer back to it all the time. Do I have a large readership? No.<p>In your other post an HNer suggested you blog in your native language, which I take it is Arabic. If you're interested in increasing readership, this isn't a bad idea - there are many fewer Arabic language development blogs than there are English. By choosing English, you're \"competing\" with the thousands of English blogs out there.<p>So maybe, blog in both languages? It can't hurt. Good luck!","time":1241455774,"type":"comment"}
{"by":"wooby","id":586437,"parent":586411,"parent_chain":[586411,586387,586313],"root_id":586313,"text":"Usually bootlegging - many 'clone' phones use a re-themed and modified Windows Mobile 6.<p>What's interesting is that with Google Android, the phone OS is now an open game. However, Android requires significant CPU horsepower generally not found in Chinese phones.<p>This didn't stop the manufacturers of the 'Dream G2,' a phone designed to look like Android. But (unfortunately) it's not: <a href=\"http://www.engadget.com/2009/01/15/dream-g2-doesnt-get-the-irony-of-ripping-off-an-open-source-os/\" rel=\"nofollow\">http://www.engadget.com/2009/01/15/dream-g2-doesnt-get-the-i...</a>","time":1241068666,"type":"comment"}
{"by":"wooby","id":580428,"parent":580332,"parent_chain":[580332],"root_id":580332,"text":"1. K&R - an absolute essential. I found myself in your shoes about two years ago, picked this up, and worked through it.<p>2. \"The Unix Programming Environment\" (<a href=\"http://www.amazon.com/Unix-Programming-Environment-Prentice-Hall-Software/dp/013937681X\" rel=\"nofollow\">http://www.amazon.com/Unix-Programming-Environment-Prentice-...</a>) This is a recent find, but covers more application. It's almost a Part 2 of K&R and covers building problems and the Unix signal and file APIs. The examples are in an ancient syntax, but part of the fun is coding them and getting them to compile.<p>3. \"The C Puzzle Book\" (<a href=\"http://www.amazon.com/Puzzle-Book-Alan-R-Feuer/dp/0201604612\" rel=\"nofollow\">http://www.amazon.com/Puzzle-Book-Alan-R-Feuer/dp/0201604612</a>) I found this one day at Fry's, and it's fucking awesome. You can effectively learn C using it without a compiler.<p>Good luck!","time":1240779439,"type":"comment"}
{"by":"wooby","id":579173,"kids":[579191,579608,579287],"parent":578887,"parent_chain":[578887],"root_id":578887,"text":"Autonomous, buoyancy-powered subs: <a href=\"http://spray.ucsd.edu/\" rel=\"nofollow\">http://spray.ucsd.edu/</a><p>A fleet of them - the future of drug trafficking?","time":1240685234,"type":"comment"}
{"by":"wooby","id":579158,"kids":[579238,579167],"parent":578996,"parent_chain":[578996],"root_id":578996,"text":"If you're comfortable with Linux, an option for you is running a Linode or Slicehost ($20/month) and hosting your clients on it. This will give you total control of the hosting environment, and a residual income. You'll have plenty of horsepower for Rails or whatever else you want to use, and as you grow, you can buy more nodes.<p>Beware, though: when you put on a system administration hat you're taking on a lot of new responsibilities, including backups and security. It's also a good idea to bring your friends in on it, so if something goes wrong they can look into it for your client if you're away.<p>So, it really depends on your level of comfort with sys admin stuff, and the kind of relationship you have with your clients. Good luck!","time":1240684375,"type":"comment"}
{"by":"wooby","id":578956,"parent":578873,"parent_chain":[578873],"root_id":578873,"text":"I like reading little personal accounts like this by programmers. Have a problem, try a hack, fail. Sleep. Bring in some good friends. Things improve. Happen on some software or third party lib or blog post that opens your eyes. Succeed.","time":1240673116,"type":"comment"}
{"by":"wooby","id":577048,"parent":576056,"parent_chain":[576056,575858,575472],"root_id":575472,"text":"As far as I understand this page, it's actually possible to implement continuations in C:<p><a href=\"http://homepage.mac.com/sigfpe/Computing/continuations.html\" rel=\"nofollow\">http://homepage.mac.com/sigfpe/Computing/continuations.html</a>","time":1240552647,"type":"comment"}
{"by":"wooby","id":575858,"kids":[575934,576056,576213],"parent":575472,"parent_chain":[575472],"root_id":575472,"text":"\"Support for continuations. A compiler plugin will support continuations as an optional feature of Scala, using a type-directed continuation passing transform. Continuations are useful to implement advanced control constructs, for instance for asynchronous I/O, user interface event handling, or dataflow concurrency.\"<p>I didn't think continuations were possible on the JVM. Any idea how they're doing this?","time":1240502088,"type":"comment"}
{"by":"wooby","id":533091,"parent":532786,"parent_chain":[532786,532452],"root_id":532452,"text":"Hm, yes - it would be interesting to turn crontabs directly into .ics files for export into Google Calendar or iCal.","time":1238046964,"type":"comment"}
{"by":"wooby","descendants":4,"id":532452,"kids":[532775,532786,532732],"parent_chain":[],"root_id":532452,"score":12,"text":"","time":1238016013,"title":"GCalCron Automates Your Linux System with Google Calendar","type":"story","url":"http://lifehacker.com/5179566/gcalcron-automates-your-linux-system-with-google-calendar"}
{"by":"wooby","descendants":0,"id":531540,"parent_chain":[],"root_id":531540,"score":1,"text":"","time":1237962390,"title":"The Hoc programming language","type":"story","url":"http://en.wikipedia.org/wiki/Hoc_%28programming_language%29"}
{"by":"wooby","id":520923,"kids":[521212],"parent":520597,"parent_chain":[520597,520566,520189],"root_id":520189,"text":"<a href=\"http://stainlessapp.com/\" rel=\"nofollow\">http://stainlessapp.com/</a> - at version .5, an interesting Mac alternative.","time":1237338072,"type":"comment"}
{"by":"wooby","descendants":0,"id":517628,"parent_chain":[],"root_id":517628,"score":1,"text":"","time":1237169594,"title":"A Scala Tutorial for Java Programmers [pdf]","type":"story","url":"http://www.scala-lang.org/docu/files/ScalaTutorial.pdf"}
{"by":"wooby","id":512785,"kids":[513936],"parent":511908,"parent_chain":[511908],"root_id":511908,"text":"Use Kismac to collect MAC addresses with significant packets in/out, clone a MAC, ssh -D9091 to my remote server, tunnel everything through my local SOCKS5 port 9091. Works well enough for me.","time":1236812432,"type":"comment"}
{"by":"wooby","descendants":0,"id":507975,"parent_chain":[],"root_id":507975,"score":2,"text":"","time":1236577853,"title":"Sketchpad, by Dr. Ivan Sutherland with comments by Alan Kay","type":"story","url":"http://www.youtube.com/watch?v=495nCzxM9PI"}
{"by":"wooby","id":507848,"parent":485480,"parent_chain":[485480,485423],"root_id":485423,"text":"That rocks dude.","time":1236565997,"type":"comment"}
{"by":"wooby","id":507846,"parent":485423,"parent_chain":[485423],"root_id":485423,"text":"Or, using C with /dev/urandom: <a href=\"http://alan.dipert.org/post/84526522/random-strings-with-c\" rel=\"nofollow\">http://alan.dipert.org/post/84526522/random-strings-with-c</a>","time":1236565926,"type":"comment"}
{"by":"wooby","id":507538,"parent":507212,"parent_chain":[507212],"root_id":507212,"text":"I really like this. I love programming but I hate photoshopping, and I'll probably use this all the time. It would be nice if I could upload my own font. Response time was quick and I like the history saving.","time":1236547009,"type":"comment"}
{"by":"wooby","id":504946,"parent":502614,"parent_chain":[502614,502542,502478,502464,502451,502236],"root_id":502236,"text":"I really appreciate your insights here, you bring up some really good points. I went ahead and wired in as much data collection / monitoring as I can so through the beta I can see how the service is actually used before I get too concerned with abuse prevention.","time":1236296834,"type":"comment"}
{"by":"wooby","id":502542,"kids":[502614],"parent":502478,"parent_chain":[502478,502464,502451,502236],"root_id":502236,"text":"It's a question of markets, I think, and it's something we haven't really decided on. 1 hour covers IM, mostly. 8-24 probably covers most e-mail use (maybe?) What we don't want this to become is something like Rapidshare, and limiting file lifetimes is our attempt at not letting that happen. The service is designed primarily to share files with people you know personally, within a finite time period. But we'll see how it gets used, and maybe change our policy.","time":1236141209,"type":"comment"}
{"by":"wooby","id":502464,"kids":[502478],"parent":502451,"parent_chain":[502451,502236],"root_id":502236,"text":"100mb max uploads, files last for 24 hours","time":1236135790,"type":"comment"}
{"by":"wooby","id":502414,"parent":502300,"parent_chain":[502300,502236],"root_id":502236,"text":"I just made some tweaks, and now, files last for 24 hours.","time":1236132483,"type":"comment"}
{"by":"wooby","id":502377,"parent":502335,"parent_chain":[502335,502236],"root_id":502236,"text":"This is fixed in the latest version, which can be downloaded here: <a href=\"http://droplink.me/Droplink.zip\" rel=\"nofollow\">http://droplink.me/Droplink.zip</a><p>Thanks for the feedback, and enjoy the software!<p>Alan","time":1236130359,"type":"comment"}
{"by":"wooby","id":502376,"parent":502363,"parent_chain":[502363,502357,502316,502300,502236],"root_id":502236,"text":"The latest version just pastes URLS. It can be found here:\n<a href=\"http://droplink.me/Droplink.zip\" rel=\"nofollow\">http://droplink.me/Droplink.zip</a><p>You can use the registration code from the signup e-mail. Cheers!<p>For help using or installing, please check here:\n<a href=\"http://blog.droplink.me/post/83016847/installing-and-using-droplink\" rel=\"nofollow\">http://blog.droplink.me/post/83016847/installing-and-using-d...</a>","time":1236130290,"type":"comment"}
{"by":"wooby","id":502305,"parent":502290,"parent_chain":[502290,502236],"root_id":502236,"text":"Hi, thanks for trying it. And yes; I can see how it's not exhibiting the expected behavior. I started by adding a Growl note to the \"no files dropped\" case post-registration. There's also a simple help document here, which I'll start sending with registration emails:<p><a href=\"http://blog.droplink.me/post/83016847/using-droplink\" rel=\"nofollow\">http://blog.droplink.me/post/83016847/using-droplink</a><p>Re DMG: Yes - a DMG is something it needs. Workin' on it.\nRe Downloads: Your Downloads icon is the same as Droplink's because the Droplink application is probably the last thing you downloaded. You can move it to your Applications directory, and then drag it back down to the dock.<p>Thanks again for testing, you guys are coming up with really good feedback :)","time":1236126626,"type":"comment"}
{"by":"wooby","id":502301,"parent":502297,"parent_chain":[502297,502294,502252,502243,502236],"root_id":502236,"text":"Sorry, yes - after registration, clicking on the icon will do nothing. It only does stuff if you drag-and-drop a file on the icon.<p>Please see this blog post for installation/usage help:\n<a href=\"http://blog.droplink.me/post/83016847/using-droplink\" rel=\"nofollow\">http://blog.droplink.me/post/83016847/using-droplink</a>","time":1236126382,"type":"comment"}
{"by":"wooby","id":502252,"kids":[502294],"parent":502243,"parent_chain":[502243,502236],"root_id":502236,"text":"Thanks for giving it a look, I'll try and see whats up with it.","time":1236124463,"type":"comment"}
{"by":"wooby","descendants":34,"id":502236,"kids":[502300,502335,502290,502399,502314,502451,502804,502342,502243,502339,502293,502950],"parent_chain":[],"root_id":502236,"score":27,"text":"","time":1236123600,"title":"Ask HN: Review my startup, Droplink for OS X","type":"story","url":"http://droplink.me/"}
{"by":"wooby","descendants":3,"id":488089,"kids":[488233],"parent_chain":[],"root_id":488089,"score":37,"time":1235089288,"title":"How Samba was written","type":"story","url":"http://samba.org/ftp/tridge/misc/french_cafe.txt"}
{"by":"wooby","descendants":0,"id":476082,"parent_chain":[],"root_id":476082,"score":1,"text":"","time":1234303715,"title":"MySQL general purpose routine library","type":"story","url":"http://datacharmer.blogspot.com/2005/11/mysql-5-general-purpose-routine_28.html"}
{"by":"wooby","id":464081,"parent":463234,"parent_chain":[463234],"root_id":463234,"text":"A related argument against table-based layouts, which I don't see any discussion about yet, is that \"it's important to maintain a high ratio of content to markup for SEO purposes.\"<p>In my view, a complicated div-based layout is just about as markup-heavy as a table layout, given separate CSS files in both cases. So I would think the point is moot. And my suspicion is it's just SEO firms blowing smoke in an effort to figure out things to sell.<p>So, is this at all a substantiative claim?","time":1233674454,"type":"comment"}
{"by":"wooby","id":437482,"kids":[437571],"parent":437443,"parent_chain":[437443,437315],"root_id":437315,"text":"You're right. By \"current job,\" I meant the job I was supposed to be doing as I wrote that post. I was pissed off when I connected finger to key.<p>And there are more than a few discrepancies in what I wrote. The \"community\" I bill as PHP's greatest asset also ironically produced the fellow whose code I'm maintaining. And, me. So it goes.<p>The underlying reason for my frustration, and the reason I wrote what I did, go far beyond the scope of PHP.","time":1232149170,"type":"comment"}
{"by":"wooby","descendants":45,"id":437315,"kids":[437443,437360,437700,437415,437410,437649,438899,437468,437355,437813,437714],"parent_chain":[],"root_id":437315,"score":77,"text":"","time":1232141506,"title":"Why PHP really won","type":"story","url":"http://alan.dipert.org/post/70990749/why-php-really-won"}
{"by":"wooby","id":437261,"parent":436870,"parent_chain":[436870],"root_id":436870,"text":"In the late 90s, when I began making webpages, there was a mysterious folder in my shared hosting FTP account called \"cgi-bin.\" What is \"Bin.\" I was on Windows. What is \"CGI.\" A friend told me it had something to do with Perl. I didn't know anything about Perl, and everything I found on the web about it was difficult to understand.<p>After some experimenting with FrontPage extensions, I began to experiment more. I found a site called Matt's script archive that had Perl CGIs that I could actually understand. It was slow, slow going. I was coming from QBasic. I scoured the Web, mixing and matching bits of example code I'd found to make things like random quotation generators. Then a friend showed me something called PHP.<p>PHP, to me at the time, wasn't just a language - it was an ecosystem of developers, example code, and practices that was flourishing. There was consolidated documentation. There were global functions for any string operation I could conceive. But most importantly to me at the time, there was an active community who was interested in more than showing off their most arcane, clever, and obfuscated programs. Very early on, the PHP community could be characterized as \"welcoming.\"<p>I would argue that PHP \"won\" not because of any innate technical superiority over any of the other languages available for web programming in the mid to late 90s. It won because it had the right kind of community for a new breed of developer - the \"web programmer.\" It didn't have the stigma of snootiness that came with trying to figure out Perl. PHP was not for geniuses or academics; PHP was for people who wanted to make dynamic websites and not have to catch attitude from some asshole in IRC about not knowing what tail recursion is.<p>I don't use PHP anymore. I don't like PHP any more. I got into Java, JavaScript, C, even Prolog; and now, I'm into whatever will save me time, and scale. Language agnostic. I'm into parallelization and web services; why would I use PHP for anything more than toy projects? Yes - PHP is \"easy.\" But at my current (thankfully temporary) job, I'm in charge of adding features and debugging a massive functionally-written PHP codebase. It is horrifying.<p>I think PHP is a great language for anyone to learn how to program with. I think there's a lot of shitty PHP code out there and it's easy to make a living by billing yourself as a PHP developer. It introduced me to \"C-like\" syntax of brackets and semicolons. It's an easy way to learn how to do neat things with SQL. Beyond that, it really just sucks, and no matter how much more crap they add on to it, I think it always will.<p>So what is the lesson here? PHP won because it had an excellent community. The Ruby/Rails uprising of the past few years reminds me a lot of the early PHP days. PHP made it easy for independent, inexperienced programmers to create dynamic web applications. Which was great. But having grown up and seen the world, I've rarely seen or worked with small teams of professionals, fluent in several languages, who have decided that PHP is the best way to implement a website. But hey - whatever floats your boat.","time":1232139716,"type":"comment"}
{"by":"wooby","id":432887,"parent":432782,"parent_chain":[432782,432743],"root_id":432743,"text":"webkit people can paste this into the address bar:<p>javascript:document.getElementById(\"sideposts\").style.setProperty(\"display\", \"none\");","time":1231887787,"type":"comment"}
{"by":"wooby","descendants":0,"id":406784,"parent_chain":[],"root_id":406784,"score":7,"text":"","time":1229975099,"title":"A web-focused Git workflow","type":"story","url":"http://joemaller.com/2008/11/25/a-web-focused-git-workflow/"}
{"by":"wooby","descendants":0,"id":398945,"parent_chain":[],"root_id":398945,"score":2,"text":"","time":1229381041,"title":"Cross-domain POST with jsonptunnel.cgi","type":"story","url":"http://ubergibson.com/~alan/calc/"}
{"by":"wooby","descendants":0,"id":398273,"parent_chain":[],"root_id":398273,"score":6,"text":"","time":1229344242,"title":"Completely homebuilt computer running Minix","type":"story","url":"http://www.homebrewcpu.com/"}
{"by":"wooby","id":397091,"parent":396796,"parent_chain":[396796],"root_id":396796,"text":"Lenat's been working on this since the 80s: <a href=\"http://en.wikipedia.org/wiki/Cyc\" rel=\"nofollow\">http://en.wikipedia.org/wiki/Cyc</a>","time":1229213435,"type":"comment"}
{"by":"wooby","descendants":0,"id":394470,"parent_chain":[],"root_id":394470,"score":1,"text":"","time":1229015455,"title":"List of manufacturers reportedly developing Android phones","type":"story","url":"http://clonedroidphone.com/post/63923821/clonedroidphone-com-roundup"}
{"by":"wooby","descendants":0,"id":393508,"parent_chain":[],"root_id":393508,"score":2,"text":"","time":1228944871,"title":"PHP","type":"story","url":"http://www.myninjaplease.com/wp-content/uploads/2008/03/swiss1.jpg"}
{"by":"wooby","id":391627,"parent":391408,"parent_chain":[391408],"root_id":391408,"text":"Big fan of this: <a href=\"http://developer.apple.com/documentation/OpenSource/Conceptual/ShellScripting/ShellScripting.pdf\" rel=\"nofollow\">http://developer.apple.com/documentation/OpenSource/Conceptu...</a>","time":1228850775,"type":"comment"}
{"by":"wooby","descendants":0,"id":380474,"parent_chain":[],"root_id":380474,"score":1,"text":"","time":1228003300,"title":"What's your Mondrian number?","type":"story","url":"http://mondrian.ubergibson.com/"}
{"by":"wooby","descendants":31,"id":377301,"kids":[377302,377325,377674,377317,377689,377353,377357,377360,377643,377351,377369,377342,377464,377778],"parent_chain":[],"root_id":377301,"score":28,"text":"Godaddy used to be the best but is now a mess of hot garbage. What's the cheapest, simplest registrar?","time":1227676303,"title":"Ask YC: Where do you buy domain names?","type":"story","url":""}
{"by":"wooby","descendants":0,"id":368997,"parent_chain":[],"root_id":368997,"score":1,"text":"","time":1227058036,"title":"Bryan Cantrill Rules","type":"story","url":"http://cryptnet.net/mirrors/texts/kissedagirl.html"}
{"by":"wooby","descendants":0,"id":345701,"parent_chain":[],"root_id":345701,"score":3,"text":"","time":1225146281,"title":"Crazy JavaScript Web Framework","type":"story","url":"http://golfscript.org/"}
{"by":"wooby","descendants":0,"id":338392,"parent_chain":[],"root_id":338392,"score":1,"text":"","time":1224541504,"title":"Clonedroid - Google Android running on Chinese iPhone clones","type":"story","url":"http://clonedroid.ubergibson.com/"}