A Million Thoughts - <AUTHOR> http://www.amillionthoughts.com "A Million Thoughts" is what the name implies. The goal is to collect and publish 1,000,000 thoughts. These thoughts can be about anything. The catch is that a single thought can be no more than 15 words long, and each thought costs $1.00 US to publish. Thoughts are published in the order that they are received. <comment><USER2> Actually, more like 5.</comment>


One with Vim - <AUTHOR> http://invisibletheory.com/2011/01/27/one-with-vim/

<comment><USER2> I'm aware I may be too pedantic, but it bothers me when people seem to completely conflate vim with vi. For example, -vi- was released in 1976, and vim not until 1991, despite what the article claims. In the meantime, I'll keep happily using nvi, and keeping the kids off my lawn.

edit: links...

<http://en.wikipedia.org/wiki/Nvi>

<http://en.wikipedia.org/wiki/Vi>

<http://en.wikipedia.org/wiki/Vim_%28text_editor%29>

<comment><USER3> I think you're going to have to lot further than that to be too pedantic for a discussion of programming editors.

As a relative latecomer to vim, I think your distinction is worthy remembering. If you didn't start with vi, it's easy to assume that all the power and cool stuff is the result of improvements and not realize how much just plain old vi could/can do.

<comment><USER2> About being pedantic, "going a lot further" -- being a pedant is all a cultural construct, though, isn't it? We're in a time where the lack of distinction between vim/vi is displayed _so_ often that it's not hard to imagine a group of people looking at my original comment and saying "to hell with you, you -are- pedantic, old-school, and vim -is- vi. But better."

I'm really happy there are enough people who apparently appreciate (if not fully agree with) my comment to upvote it, though. I don't care about the karma, but happy to see signs of kindred spirits :)

</comment></comment></comment><comment><USER4> The Command-T plugin [1] was a big help in switching from TextMate to vim. I have no idea how anyone can be productive in vim without it (assuming you're working on a multi-file project).

1\. <https://wincent.com/products/command-t>

<comment><USER5> :e .

or

:NERDTree

<comment><USER6> I use NERDTree and it's not even remotely close to Command-T (or PeepOpen, which is pretty much the same thing).

NERDTree is great for browsing your project and _managing_ your files, but for opening files (when you know their names) you really can't beat the speed of Command-T/PeepOpen. They're in another league.

I don't know how people work without it.

<comment><USER7> I use vim project. I load all my files in the side pane, and I search with / the file I want to open.

<http://www.vim.org/scripts/script.php?script_id=69>

</comment></comment></comment></comment><comment><USER8> Vim is my primary editor but I think the only _really_ good part of vim is the keyboard navigation. The rest could be much better.

For example, to this day I haven't figured out an easy, built-in way to copy from one vim window to another. I'd love to have some features of other editors have but the key bindings always hold me back.

<comment><USER9> you can copy and paste from the system clipboard as the + register - use "+y to yank to the system clipboard and "+p to paste from it (depending on OS, you may need to use * instead of +). This allows cutting and pasting between vim and other applications (including other instances of vim).

For editing multiple docs with vim, I find it's easier to use multiple buffers in the same window. Use :b <start of file name> to jump back and forth.

<comment><USER10> I never really liked using :b ... for quickly switching back and forth between files, so I bound ^hjkl to move among buffers. Perhaps the best part of my vim experience.

        " Use ctrl + movement keys to move around windows
        map <C-H> <C-W>h<C-W>_
        map <C-J> <C-W>j<C-W>_
        map <C-K> <C-W>k<C-W>_
        map <C-L> <C-W>l<C-W>_

<comment><USER11> 1 ctrl-^ go to buffer 1

2 ctrl-^ go to buffer 2

3 ctrl-^ go to buffer 3

ctrl-^ toggle this buffer with the last one, quickly switching back and forth.

[Of course, ctrl-^ is actually just ctrl-6, you don't need to use the shift key.]

If you have used a tiling window manager before, this is very natural.

</comment></comment></comment></comment><comment><USER12> One of the features that really got me into Vim was the macros feature. I actually ran into in accidentally several times when I was first learning the basics (and couldn't get out of recording mode). But macros, and especially the temporary nature of macros, have saved me (collectively) many hours:

q <macrokey> <do some stuff>; then q to stop recording. Then @<macrokey> to kick off the macro. Splendid.

<comment><USER13> As a new vim user, I'm still trying to figure out what to do with them.

What do you find yourself macroing, generally?

<comment><USER14> For me the most important thing was learning to add a 'j' at the end of each macro and running it multiple times. So lets say you want to crack open an array that looks like this:

        $address = array(
         'name'  => '',
         'line1' => '',
         'line2' => '',
         'state' => '',
         'country' => '',
         'postcode' => '',
        );

That's a lot of commas and quotes etc. Nowadays I usually punch this into vim:

        name
        line1
        line2
        state
        country
        postcode

Then I start on the first line and record a macro that wraps that word in quotes, then appends hashrocket, quotes, comma, and then moves to the next line. Run the macro 5 times with 5@<register> and the you get your array.

<comment><USER15> If you're a heavy macro user, you might find `:noremap <Space> @q` to be handy. Just stick your temporary macro in q (the easiest one to stick it in :), then press the spacebar to run it whenever you want.

</comment></comment></comment></comment><comment><USER9> "been around since 1991"?! while that's probably correct for vim proper, that ignores the much longer history of vi...

<comment><AUTHOR> you are absolutely right - fixing this now. Vi has been around since the 70s, but I used the date for vim on the post - which was dumb of me.

<comment><USER16> Please consider bch's comment [1]. Unless you want to write quite a bit more, I believe you should actually go back to '1991' in your text. While most think that vim is indeed 'vi improved', there is a fair consensus that vim is not vi.

[1] <http://news.ycombinator.com/item?id=2149367>

</comment></comment></comment><comment><USER17> I've used Vim successfully on Windows/Mac/Linux and you can customized it as you wish.

Interesting post so 1+.

As a side note the font used for the article does not render well on my Chrome browser. What are you using ? :)

<comment><AUTHOR> really? Damn, it should. It's Meta Pro served by Typekit. Are you on a Mac?

<comment><USER17> I've read your post on Windows, on Mac it looks OK.

</comment></comment></comment><comment><USER18> Vim is easier on the hands, but Emacs (with ido-mode) still feels better for working with multiple files:

      (length (remove-if (lambda (b) (not (buffer-file-name b))) (buffer-list)))
      42

<comment><USER19> There are multiple similar plugins for vim.

<comment><USER20> FuzzyFinder is great. It's no ido-mode though

</comment></comment></comment><comment><USER21> I've tried to use vim for a while but I've given up pretty quickly. Yes I'm aware that the learning curve for any new editor is steep but that's not why I've given up on vim. I do all my source code editing in a Windows environment and my choice of editor is Source Insight[1]. I haven't found any editor that allows me to navigate the source three so elegant and fast. I only do embedded development so I can't speak for it's abilities outside C.

[1] <http://www.sourceinsight.com>

</comment><comment><USER22> Why does every article about Vim just recently seem to promote it on the Mac to be used via MacVim? Vim does work in the terminal, and apart from tabs I can't see what MacVim is bringing to the party?

<comment><USER23> Native integration, mostly. I.e. clipboard stuff and a shiny interface. Also, colors.

Me, I compiled vim over ports and use it via rxvt-unicode or as gvim in an XQuartz session. That, and I run XMonad in that same session.

This way, my iMac at work almost feels like a Linux machine, and I can at least get work done here (if I'm not browsing HN.)

</comment></comment><comment><USER24> Let me share what I stumbled upon yesterday: <https://github.com/carlhuda/janus>

</comment><comment><USER25> selfish question here: Does anybody know how to setup vim so that :! recognises aliases?

something like...

      set shellcmdflag=-O\ expand_aliases\ -c

<comment><USER11> I always start vim from within xterm (bashrc has already run and aliases are already set up). It just works. I can use :!ll (or ctrl-z and 'll' in the sub- shell) and it just works.

Not sure why it wouldn't for you.

<comment><USER26> ctrl-z doesn't start a sub-shell, it backgrouns vim and returns you to the parent shell.

And maybe he's running gvim or from a login shell that hasn't sourced his bashrc.

</comment></comment></comment><comment><USER27> What is the closest you can get to emacs ido mode in vim?

</comment><comment><USER28> I am waiting for the retro-fashion to go back to ed (<http://www.gnu.org/fun/jokes/ed.msg.html>).

</comment><comment><USER29> Am I foolish for not believing the vi/vim hype? I understand that it's been around for as long as rocks, and that it's quite handy since it's available everywhere. I use it daily, in fact, but rarely for more than basic editing.

I'll just come out and say it: my favorite editor is Visual Studio. Sure, it's slow to load and rather fat now, but I'm talking solely about the editing functionality.

With vim, I have to climb an amazing learning curve, regularly practicing all sorts of commands to achieve basic productivity. With VS, any command I don't recall is readily available through the menus. As I access it in the menus, I'm reminded of the keyboard shortcut, so it seems like a much more natural leaning experience to me.

<comment><USER30> _I'll just come out and say it: my favorite editor is Visual Studio_

Not to be overly pedantic, but your favorite _IDE_ is Visual Studio, and you just happen to use whatever crappy editor component comes bundled with it.

If we could have full-blown Vim embedded inside IDEs instead of good-but- incomplete plugins which merely give you some of the key mappings, I'd be elated and couldn't see why anyone would stick with the Notepad-style editor which is the default.

<comment><USER31> I never tried to make it work, but the vim distribution for Windows used to include a COM object which could be used as your Visual Studio editor.

<comment><USER32> It works, in a no-frills sort of way. I would much like it if I could get true embedding though.

<comment><USER33> Have you tried viemu? It's not real vim in that it doesn't have the plugins etc. but I haven't missed a single one of them.</comment></comment></comment></comment></comment>


Deciphering Windows 7 Upgrades: The Official Chart - <AUTHOR> http://mossblog.allthingsd.com/20090804/deciphering-windows-7-upgrades-the-official-chart/ <comment><USER2> I continue to wonder why the 2-box model ("single old version of Windows" -> "single new version of Windows") is so unpalatable to Microsoft.

If they think they need so many different versions of Windows, aren't they _really_ saying that the OS has too much packed into it? Make one OS for $100, and then by all means create 3 or 4 add-on software bundles for whatever price...much less confusing than this grid.</comment>


IE8, Safari 4, Firefox 3, iPhone fall on day 1 of Pwn2Own - <AUTHOR> http://arstechnica.com/security/news/2010/03/ie8-safari4-firefox3-iphone-fall-on-day-1-of-pwn2own.ars <comment><USER3> FYI, here's a write up on the IE8 exploit: [http://vreugdenhilresearch.nl/Pwn2Own-2010-Windows7-Internet...](http://vreugdenhilresearch.nl/Pwn2Own-2010-Windows7-InternetExplorer8.pdf)

</comment><comment><USER4> It has been a very long time since I have seen a news article on the browser vs. browser security wars. That is a good thing. Competitions like this do the world a service by demonstrating that there is not, and in all probability never will be any such thing as a browser that is truly secure. Well - <USER2> "telnet {$addr} 80".

<comment><USER5> _maybe "telnet {$addr} 80"._

 _Summary: The Telnet service in Microsoft Windows 2000 SP4, XP SP2 and SP3, Server 2003 SP2, Vista Gold, SP1, and SP2, and Server 2008 Gold and SP2 allows remote Telnet servers to execute arbitrary code on a client machine by replaying the NTLM credentials of a client user, aka "Telnet Credential Reflection Vulnerability," a related issue to CVE-2000-0834. Published: 08/12/2009_

or maybe not ;-)

<comment><USER6> I'm pretty sure "The Telnet service" refers to the telnet server, not the telnet command (client). It does seem feasible that you could overflow a buffer or affect the terminal window by causing telnet to output special control characters, etc. of course.

</comment></comment></comment><comment><USER7> Too bad no one went after Chrome. Perhaps prize money should be in proportion to difficulty of compromise from previous years. Otherwise, it seems like everyone is grabbing the low hanging fruits-- relatively speaking of course. (None of these exploits are "low hanging" in the traditional sense of exploits)

<comment><USER8> If chrome uses webkit, I would expect vulnerabilities there to affect chrome as well.

<comment><USER9> WebKit browsers do not necessarily share vulnerabilities. Chrome utilizes a unique tabs-and-plugins-as-processes model that makes exploitation and security in Chrome a whole different ball game.

WebKit is a library for rendering the web. There is more to a modern browser than that. One of Chrome's major features is its independent process model, and it does a lot to mitigate attacks. All of the browsers will have to switch to something like it eventually.

</comment></comment></comment><comment><USER10> Why are there no attempts on a current release of FireFox? Its not like Fx 3.6 is brand new. Plus, where's Opera?

<comment><USER11> According to the organizers, the latest versions of all browsers are used. <http://dvlabs.tippingpoint.com/blog/2010/02/15/pwn2own-2010>

</comment></comment><comment><USER12> I hope I'm wrong about this, but surely this media circus just prompts security researchers to keep quiet about flaws they find? Why are we rewarding them with fawning coverage when they've put us all at risk by not disclosing these issues to the browser vendors?

<comment><USER13> Second paragraph FTA: "So far, little is known about the successful exploits. Until vendors have been informed of the flaws and those flaws have been patched, details will not be made public."

<comment><USER12> Yes, but how long have the researchers themselves known about these flaws? All that time an actual villain could have discovered the same flaw and exploited it. But instead weeks or months have gone by and for what benefit?

</comment></comment></comment><comment><USER14> Notably absent from this list . . .</comment>


Tide Protocol – "Splintering" passwords for greater security - <AUTHOR> https://www.computerweekly.com/news/252470197/Tide-Foundation-aims-to-boost-password-security <comment><USER2> Similar gains might be realized by proper use of "pepper", something I hadn't hear of until a month ago. TL;DR: You add another secret, never stored in the database, string to the password before hashing. The benefit is that a database dump does not contain the information needed to crack the passwords.

Example: bcrypt.hashpw(hashlib.sha512(password + pepper).digest(), bcrypt.gensalt(10))

[https://en.wikipedia.org/wiki/Pepper_(cryptography)](https://en.wikipedia.org/wiki/Pepper_\(cryptography\))

Alternately, Dropbox uses AES256 using the pepper as the key as the last step. The benefit there is that you can easily change the pepper if it has been compromised.

[https://blogs.dropbox.com/tech/2016/09/how-dropbox- securely-...](https://blogs.dropbox.com/tech/2016/09/how-dropbox-securely- stores-your-passwords/)

</comment><comment><AUTHOR> tldr; The Tide Foundation, a non-profit organisation, has developed a mechanism that it says makes passwords exponentially more difficult to crack.</comment>


Login with Whatsapp demonstration - <AUTHOR> http://login-with-whatsapp.batuhan.org <comment><AUTHOR> Hello, I built a tool which uses Whatsapp's qr authentication, you must try it. It's awesome :P

It's working the same way with Whatsapp Web, you should open your Whatsapp app and click Whatsapp Web and scan qr. And boom, you are in :)

ps: you should open this page with your computer

</comment><comment><USER2> Since you can get complete access to someones WhatsApp account using this QR- Code, I would not recommend to try this.

<comment><AUTHOR> Yep you are totally right. If you try you will see I'm instantly logging out after getting phone number</comment></comment>


Net Neutrality – What You Can Do - <AUTHOR> https://medium.com/@suavesav/net-neutrality-what-you-can-do-734722b59c83 <comment><USER2> is there any other home network provider rather than those big players?</comment>


(Delete this thread) - <AUTHOR> A temporary Ask HN was posted here but no longer remains. For privacy reasons, I've now redacted my own posting. <comment><USER2> Your contract has this weakness: "an affirmative vote of the Members holding a majority of the issued Units". Instead of a majority, it should have been "100% of the issued Units". In your set up, any group holding 51% of Units can change whatever they want.

This is why you need a special contract, with special voting rights for your shares to prevent collusion esp when you are the key person.

</comment><comment><USER3> The only answer here is to consult an attorney, and I would be highly skeptical of any specific legal advice given to you with so little information being presented.

Founder disputes, especially this early on, can be nasty. I'm very sorry that you're going through this.

</comment><comment><USER4> What do they other team members do? Did they actually build any of it? Did you sign an IP agreement?</comment>


Go In Action - <AUTHOR> http://www.goinactionbook.com/ <comment><USER2> "What if we made a web page which appears to have large sections with no content, but then when the user scrolls down so that the entire screen is empty, we fill the screen with content, some of which is already above the top of the screen? That would be great."

<comment><USER3> I'm going to be blunter than you : what a shitty user experience !

But being interested by this book I'm still going to bear with this bad UX ...

Maybe it shows that all these talks about UX are a bit overrated ...

<comment><USER4> For me that wasn't even the worst part. What is the contrast ratio here? Looks light light-grey on off-white or something. I mean, ok, "they" say: 'Don't use _black_ text on _white_ background'. But "they" also say: 'Being able to actually _see_ the text helps readability'.

And are those chapters available as single-page links -- or just in that cramped div/iframe with scrollbars?

I know this is harsh, but after seeing quite a few designs on the front page of hn, this has the prize for detracting from the user experience.

<comment><USER5> Trying to scroll through the sample chapters is almost impossible on my iPad. Clearly the site has not been optimized for mobile devices.

<comment><USER6> Scrolling the samples on my desktop is painfully slow as well (at least with Chrome and Safari). With Firefox it has proper scroll behavior.

</comment></comment></comment></comment></comment><comment><USER7> Whenever I see a "In Action" title, I read it "Inaction" and feel like it's a title that much closer reflects the realty of programming on a daily basis. :-)

</comment><comment><USER8> Could someone speak to the various credentials of the authors here?

I think this landing page would be substantially improved if there was further detail about the professional history of each of the authors. Perhaps a few words about any notable Go related projects that they've been a part of.

<comment><USER9> They're all cofounders/involved in Gophercon, here are linkedin profiles:

[https://www.linkedin.com/in/brianketelsen](https://www.linkedin.com/in/brianketelsen)

[http://www.linkedin.com/in/erikstmartin](http://www.linkedin.com/in/erikstmartin)

Can't find for William Kennedy, so here's his blog: [http://www.goinggo.net/](http://www.goinggo.net/)

<comment><USER10> nice detective work. LinkedIn probably covers most of what you need to know. We're also behind projects like Skynet and SkyDNS. I've been using Go in high volume production applications since 2010.

<comment><USER10> Some of our other work: [http://www.gopheracademy.com](http://www.gopheracademy.com) [http://blog.gopheracademy.com](http://blog.gopheracademy.com) [http://www.gophercon.com](http://www.gophercon.com)

</comment></comment></comment></comment><comment><USER11> First ever physical copy of a programming book I've bought, lets's hope it's worthwhile.

<comment><USER12> I wouldn't admit to that publicly, if I was you.

<comment><USER13> Why? There are so many great resources online these days, it wouldn't surprise that many programmers have never bought a programming book.

Also, libraries. I read a lot of technical books when I was a kid, but I certainly couldn't have afforded to shell out the $80-100 for each of them.

</comment></comment></comment><comment><AUTHOR> 50% discount code: mlketelsen

<comment><USER14> Any idea who pays (or loses) that 50%?

<comment><USER15> That's a great point. I'd happily pay full price for a technical book if it meant the authors received more. Technical authors hardly receive fair compensation for the hours they put in already.

<comment><USER16> That's correct. Technical authors definitely don't do it for any financial gain.

</comment></comment></comment></comment><comment><USER17> I know this might seem like a stupid question, but how does he keep count of his Redbull consumption? Just good 'ol fashioned counting?

Shopify have a beer tap which I'm guessing they use to update their 'Pints of beers consumed' counter and a sensor on their pinball machine which they update on their website [1].

[1]: [http://www.shopify.com/careers](http://www.shopify.com/careers)

<comment><USER16> It's a rough estimation based on the average number of Red Bulls we consume per day :)

<comment> FLUX-YOU Try these. Multiple flavors too. They're surely near the Redbulls: [http://www.starbucks.com/menu/drinks/bottled-drinks/mocha- do...](http://www.starbucks.com/menu/drinks/bottled-drinks/mocha-doubleshot- with-energy)

They taste so much better and have a nice kick.

<comment><USER16> I'm also a big fan of Xtreme Shock. Tons of great flavors and have a huge kick.

</comment></comment></comment></comment><comment><USER18> Glad to see this book is being brought back to life. It was originally supposed to be written by Evan Shaw, who I believe work(ed/s) for Iron.io, but it became abandonware. Demand for the book was quite high so I'm glad Manning has found authors that want to actually finish it.

<comment><USER6> The last comment from Evan[0] on this topic is a little unclear what the cause of the cancelation was. He also never posted the retrospective he said he would.

[0] [https://groups.google.com/d/msg/golang- nuts/7R4lN2P2EY4/2oS8...](https://groups.google.com/d/msg/golang- nuts/7R4lN2P2EY4/2oS8WBP2bigJ)

</comment></comment><comment><USER19> No table of contents? Anything meaty in the book? I've got some web scraping that I need to do this week, for example. Was going to use Python and BeautifulSoup but since it's throw away code, I could possibly use Go. I don't want to reinvent the wheel though.

<comment><USER20> TOC is here (you must click a link on the submitted link to see it): [http://www.manning.com/ketelsen/](http://www.manning.com/ketelsen/)

I don't think you'd be doing yourself any favors using go for a throwaway scraper.

</comment></comment><comment><USER21> While I have been impressed by several of the books from this outfit there certainly is nothing at that web page that would interest me in buying the book. They should take it down until it actually provides some information. It might be great, but who knows.

</comment><comment><USER22> The two sample pages are essentially useless. For a technical book, I'm not interested in seeing how well the author writes chapter intros. I want to see some actual technical content.

</comment><comment><USER3> 489 Redbulls consumed ?! Let's hope they manage to finish the book before collapsing from a heart attack ...

</comment><comment><USER23> > Learn Go from seasoned Go developers

It was invented in 2007! There aren't any seasoned developers yet!

<comment><USER24> If they already were seasoned developers in _other_ languages who made the jump to Go early on, they can arguably become experts in such a short time- span.

</comment></comment><comment><USER25> Read the first chapter and bought the eBook.

</comment><comment><USER26> Am I the only person who initially left the site when I saw the mobile-esque navigation bar? Why make me go through another step, just to see the menu?

</comment><comment><USER27> Website is horrible.

<comment><USER28> +1 for the preview.

</comment></comment><comment><USER29> All I can say is that the cover looks fabulous.

</comment><comment><USER30> $30 for an e-book? Seriously?

<comment><USER26> Try writing a book sometime. You'll quickly learn that $30 is a bargain.</comment></comment>


Chaos Order – Randomizing Queries to Uncover Order-Dependency - <AUTHOR> https://www.simplethread.com/chaos-order-randomizing-queries-uncover-order-dependency/ <comment><USER2> One of those things you just don't think about until it bites you.</comment>


Quantum Experiment Shows How Time 'Emerges' from Entanglement - <AUTHOR> https://medium.com/the-physics-arxiv-blog/d5d3dc850933

<comment><USER2> I admit I haven't learned the subject and there is a lot I don't know, but the few things I have learned about quantum physics _terrify_ me.</comment>


No normal food for 2 months - <AUTHOR> http://socketubs.net/2013/08/10/2-Months-of-Soylent/

<comment><USER2> Within reason, people should be able to live however they choose – but frankly I do feel that this kind of 'hacker' mentality in relation to food is unhealthy until we have a far greater understanding of the potential long-term effects.

There is so much that we simply _do not_ understand about the human body; it is an incomprehensibly complex organic machine. Ask any medical specialist: the fact remains that many functions of the body with regard to diet are still not understood, and two months is not an adequate time-frame on which to base any conclusions. The thing about an unhealthy diet is that it may not have immediately evident negative effects, but over long periods of time (i.e. 10 years, not 2 months) it can cause major damage to your health – this is what makes this so insidious.

 _" I never feel as good as today."_

When you live primarily off simple carbohydrates – as the author stated they had in the past – anyone will feel ten-fold better by improving their macro/micro-nutrient consumption through eating more proteins, healthy fats, et cetera. And no organized person spends 30-40% of their time on buying, preparing and eating food. No way. Today, you can have groceries delivered at the click of a button – and you can learn to cook quick, simple, healthy meals with a Google search.

Mark my words, until we understand far more about the way that the body processes food, this is not sustainable nor healthy in the long-term.</comment>


Japanese Grammar in EBNF notation - <AUTHOR> https://learnjapanese.best/2020/01/04/japanese-grammar-in-ebnf-notation/ <comment><USER2> Their grammar lacks the crucial component that is the recursive structure of natural languages, which was originally pointed by Chomsky, et al.

Here's how I (Japanese native) would do it:

      SENTENCE = S 。
      S = BUN* verb | BUN* NP be-verb
      BUN = NP pp | adv  (pp = postposition, or 助詞)
      NP = noun | adj NP | S NP

Warning: this is a highly simplistic version. But this way, things like "今日 築地 で 寿司 を 食った 。 (Today Tsukiji [place-mark] sushi [object-mark] ate .)" could be parsed as follows:

      (S (BUN (adv 今日))
         (BUN (NP (noun 築地)) (pp で))
         (BUN (NP (noun 寿司)) (pp を))
         (verb 食った)) 。

Then, this can be further extended to a compound sentence: "築地 で 食った 寿司 は うまい 寿司 だった 。 (Tsukiji [place-mark] ate sushi [subject-mark] good sushi was .)"

      (S (BUN (NP (S (BUN (NP (noun 築地)) (pp で))
                     (verb 食った))
                  (NP (noun 寿司))) (pp は))
         (NP (adj うまい)
             (NP (noun 寿司)))
         (be-verb だった)) 。

p.s. Yoda has nothing to do with this grammar.

<comment><USER3> My (non-native) criticism :-)

The be-verb is optional in S. "S = NP" is completely valid grammatically. Also "adj = BUN* verb | B* NP be-verb" if you allow "i-adjectives" to be classed as verb phrases (as they were historically) and "na-adjectives" to be "noun- phrase ni aru". So you would actually get:

      SENTENCE = VP | NP
      VP = BUN* verb | BUN* NP be-verb
      BUN = NP pp | adv
      NP = VP? noun

I'm also not sure about the fact that "adv NP be-verb" is allowed by this grammar...

Edit: spelling

<comment><USER4> Yes, that's my criticism as well: a single adj category has no meaning because there is two of adjectives in Japanese, one with verbal trait, the other acting more like nouns. The difference can and needs to be addressed in a grammar.

The grandparent point about recursive rule(s) is valid however and their easiness is one of my favorite things in Japanese grammar.

Anyway, the problem seems easy at first but it's totally possible to vaste hours perfecting a grammar that still doesn't capture frequently occurring construction (been there done that).

<comment><USER5> The original article mentions something that I wish I had known when I began learning Japanese ~20 years ago: there aren't really adjectives in Japanese, just nouns and verbs which have a few different inflection rules. Generally, any noun or verb (phrase) can modify another so there's no need to create a separate category called adjective.

<comment><USER6> This is substantially true of English as well; we can construct a grammatically valid phrase such as "the sleepy gorillaesque lamppost".

With, of course, some exceptions. I'm confident there are exceptions in Japanese as well, being as exceptions are the rule in natural languages.

</comment></comment></comment></comment></comment><comment><USER7> My algorithm ( [https://ichi.moe/](https://ichi.moe/) ) assumes almost nothing about the grammar and simply divides the sentences into the most valuable chunks (based on the word's length and how common it is), and then some sequences get bonus scores (for example noun followed by a particle). It performs surprisingly well in real life cases (where strict grammar is unlikely to be followed). I think it's the best algorithm that's currently available.

Example text from the blog post:

[https://ichi.moe/cl/qr/?q=%E3%81%B2%E3%81%A8%E3%81%8C%E3%81%...](https://ichi.moe/cl/qr/?q=%E3%81%B2%E3%81%A8%E3%81%8C%E3%81%99%E3%81%94%E3%81%84%E3%80%82%E3%81%92%E3%82%93%E3%81%8D%E3%81%AA%E3%81%B2%E3%81%A8%E3%81%8C%E3%81%84%E3%82%8B%E3%80%82%E3%83%A2%E3%83%B3%E3%82%BF%E3%83%8A%E3%81%8C%E3%81%86%E3%81%A4%E3%81%8F%E3%81%97%E3%81%84%E3%80%82%E3%81%92%E3%82%93%E3%81%8D%E3%81%AA%E3%81%B2%E3%81%A8%E3%81%8C%E3%81%86%E3%81%A4%E3%81%8F%E3%81%97%E3%81%84%E3%83%A2%E3%83%B3%E3%82%BF%E3%83%8A%E3%81%AB%E3%81%84%E3%82%8B%E3%80%82%E3%81%84%E3%82%8B%E3%81%AE%E3%81%8C%E3%81%86%E3%81%A4%E3%81%8F%E3%81%97%E3%81%84%E3%83%A2%E3%83%B3%E3%82%BF%E3%83%8A%E3%81%A0%E3%80%82&r=htr)

<comment><USER8> What you are doing is essentially different: you are doing word sequencing and possibly part-of-speech tagging from a character stream. What is being done in this post, is parsing, which imposes a tree-like structure on the input sequence. These two techniques complement each other, and it might be beneficial to first do the word sequencing (the Viterbi algorithm is a good choice) and parsing after that.

</comment></comment><comment><USER9> _...However, for real Japanese from the wild there would need to be many many rules, and any slight deviations from the rules would not result in a full parse._

Much like the rest of biological systems, natural language "laws" and formalisms are more or less guaranteed to have a "except when..." clause after them.

I tried to think of a recursive "except when" to the above, but couldn't come up with anything appropriately witty.

<comment><USER10> ... Except when the formalism is so powerful as to be consistent with anything.

<comment><USER9> I have a small town in italy with a barber problem i'd like to tell you all about...

</comment></comment></comment><comment><USER10> Context-free grammar was originally invented by linguistics to describe sentence structure. Ultimately the field moved away from them, but they are still the first model of sentence structure taught in introductory linguistics classes (at least the one I took).

<comment><USER11> We know theoretically that language in general is non-context-free. However, proven examples of non-context-free-ness are rare. The field has not really moved away from CFGs as the basis for formalisms (otherwise we can't really parse anything), but the complexity of attributes that need to be passed around to account for even basic phenomena (agreement, question or relative- clause formation, etc.) is such that CFG trees become very complex. Instead people (HPSG and CCG people, for instance) now prefer to use lexicalist models with everything stuffed inside lexical units with complex bottom-up derivation/unification rules.

</comment></comment><comment><USER12> Imagine wanting to learn Japanese and learning compiler theory just to learn Japanese easier.

<comment><USER13> A bit off-topic, but you mean parser. Compiler is so much more than parser that I consider equating them harmful.

</comment></comment><comment><USER14> I wonder if [https://en.wikipedia.org/wiki/Buffalo_buffalo_Buffalo_buffal...](https://en.wikipedia.org/wiki/Buffalo_buffalo_Buffalo_buffalo_buffalo_buffalo_Buffalo_buffalo) has a Japanese equivalent, or perhaps just 100% hirigana will easily confuse this, thus making context-dependency a necessity.

The content is good, but unfortunately if I came across this domain name in a search engine result page I would think it was yet more SEO spam --- over two decades of Internet use has made me weary of domains containing words like "best" in them. (For similar examples, think of domains like best- antivirus-2020.online --- sounds like a fake AV scam.) IMHO the proliferation of such TLDs has only made things easier for phishing and such.

<comment><USER15> > I wonder if > [https://en.wikipedia.org/wiki/Buffalo_buffalo_Buffalo_buffal...](https://en.wikipedia.org/wiki/Buffalo_buffalo_Buffalo_buffal..). > has a Japanese equivalent, or perhaps just 100% hirigana will easily confuse > this, thus making context-dependency a necessity.

I'm not aware of Japanese equivalents (probably due to my lack of Japanese knowledge), but the Gyeongsang dialect of Korean language allows a sentence that only contains a single syllable 가 (ga) and thus can only be distinguished by intonation. "가가 가가가" is a commonly cited example and pronounced (here denoted using X-SAMPA) and analyzed as follows:

        가  ka:     The kid (short for "그 아", itself short for "그 아이")
        가  ga      [topic marker]

        가  ka      The family name "Ga"
        가  <R>ga   A suffix for family (collective, unlike "씨" for individuals; e.g. "김가" for Kims)
        가  <F>ga   Coupla, weak question

<comment><USER16> The dialect in Toyama, Japan has the famous "かか、かーかーかかーか" which decomposes/translates to:

      かか、 mother (お母さん in standard Japanese)
      かー this (これ)
      かー this way (こう)
      かかー write (書く)
      か ? (か)

In proper English, that would be "Mom, is it spelled this way?"

<comment><USER17> For repetitive sounds, there used to be a fun English example on Wikipedia:

> Ted and Ed edited it.

I'm vaguely aware of two meant for Japanese, though since I know no Japanese, there are almost certainly errors in my report here:

> "Let's cover Eastern Europe", to-o-o-o-o-o-o-o-o-o.

> "Two chickens in the front yard and two in the back yard", > niwaniwaniwaniwaniwaniwatori.

<comment><USER18> I don't know if this is a widely used description, but there is a subreddit for this kind of thing, called "word avalanches". Some are purer than others.

[https://www.reddit.com/r/WordAvalanches/](https://www.reddit.com/r/WordAvalanches/)

</comment></comment></comment></comment></comment><comment><USER3> This is awesome! I've always wanted to try this. The only real complaint I have is that "da" is not actually a copula in the strictest sense. It's a contraction of "de aru". Similarly "na" is not a modifier. It's a contraction of "ni aru". "aru" is the verb which is the closest you get to a copula in Japanese - it means "it exists" for non-animate noun-phrases.

So if you say "sakana da", it does mean "It is fish", but so does just "sakana". The copula is implied. The "da" is completely optional and is actually only added for emphasis -- the literal translation is kind of like "That it is fish exists". In literary Japanese you would say "sakana de aru", "de" being the particle that links a verb the the means with which the verb is executed. For example "basu de iku" means "will go by bus" \-- bus is the means by which we will go. In "sakana de aru" or "sakana da" we are basically saying that "fish" is the means of its existence.

The "na" modifier is also interesting. It is really "ni aru" where "ni" is essentially the "direction" in which something exists. "Something like a fish" would be "sakana no you". If you want to say "It is a fragrance something like a fish" you could say "sakana no you na kaori". Although I'm not aware of any modern Japanese that would express it like this, this is equivalent to "sakana no you ni aru kaori" \-- "It is a fragrance that exists in the direction like a fish". Hopefully you can understand.

The interesting part of this is that adding "ni aru" to the end of a noun phrase just turns it into a verb phrase. And the even more interesting bit is that the only thing that can modify a noun phrase is a verb phrase.

But, you may have heard of "i-adjectives" \-- these are adjectives that end in i. In actuality, these are not adjectives! They are verb phrases! So the word "cute" is "kawaii". However, the actual word is "kawai" and the _inflection_ is "i". That's why when you want to say "not cute" it becomes "kawaiku nai" \-- the "i" turns into "ku" because you are inflecting a verb.

This in turn is why you modify nouns directly with "i-adjectives". "kawai sakana", or "cute fish". Other adjectives are actually noun phrases in Japanese. "yumei na sakana" or "famous fish". This is, again, exactly the same as "yumei ni aru sakana" \-- "The fish exists in the direction of fame".

So the rules are even simpler than presented in this blog post.

By the way, for anyone trying to learn Japanese and who wants to go beyond phrase-book level: learn plain form first and polite form later (if ever). Japanese makes absolutely no sense if you learn polite form first. It's incredibly logical (even the polite form extensions) if you start with plain form.

<comment><USER19> Another one of your posts I remember learning a lot from: [https://news.ycombinator.com/item?id=13906535](https://news.ycombinator.com/item?id=13906535)

Do you have any recommendations for material that teaches Japanese in this manner? I've found few resources that actually go into etymology like you have shown.

<comment><USER3> Although not taught in this manner, I learned all of my basic grammar from [http://www.guidetojapanese.org/learn/grammar](http://www.guidetojapanese.org/learn/grammar) (Tae Kim's Guide to Japanese Grammar). I've seen a lot of text books, but for me this was by far the best. There is a famouse Japanese grammar book that's written in Japanese and starts out writing with simple grammar to kind of bootstrap you, but I can't remember what it's called.

However,most of the stuff like the above that I learned actually comes from an NHK programme, "Kotoba man". It went into the history of vocabulary and grammar and after I watched as many episodes as I could find, the structure of the language really started to make sense to me.

I think part of the problem is that most prescriptive grammars for language are subtly incorrect. For example, what part of language is blue in "I am blue"? What part of the language is it when in "Blue is my favorite colour"? If they are different parts of language, what is the difference in meaning between the two? What if you said, "I am painting"? Or if you said "Painting is my favourite hobby"? What is the difference in meaning between the 2 uses (if any)? Is there a difference in the meaning of "am" between "I am blue" and "I am painting"? I think if you follow the prescriptive grammar of English, it will force you to answer the questions in different ways than your intuitive (internal) ideas. Or at least it did for me. Studying that sort of sentence in English helped me to study similar sentences in Japanese and puzzle out similar insights (or at least as imagined by me). YMMV ;-)

<comment><USER19> >Kotoba man

My google-fu isn't turning up anything with this title. Do you happen to have a link to the page?

<comment><USER3> Sorry. It's an old NHK TV programme (I should have been more clear). It was 5 or 10 minutes long and explored obscure Japanese vocabulary and grammar that even most Japanese people don't know.

<comment><USER16> BTW, the NHK web site has some interesting Japanese language resources. [https://www.nhk.or.jp/bunken/research/kotoba/index.html](https://www.nhk.or.jp/bunken/research/kotoba/index.html)

</comment></comment></comment></comment></comment></comment><comment><USER20> Interesting. Wish it is more complete at lest have some negative. But do not want to pay up.

</comment><comment><USER21> Japanese _is_ quite structured, in the sense that it doesn't form a very hairy AST data structure. But, as someone who knows both Japanese and a variety of programming languages, I've always seen the "seams" of Japanese a bit differently. I've always thought of Japanese as a stack-based language, like Forth.

A refresher on Forth: in Forth, you run a lexer over text input to get a stream of tokens; but you don't run a parser (or at least not much of one) over the tokens to get an AST. Instead, each lexeme—each "word" in Forth—self- describes as either a literal or a symbol representing a function call. All words the lexer encounters are immediately "run" using the runtime. Structured programming (like defining functions and then later calling them) is enabled by having the runtime itself be a finite-state machine, that can be put in different states by the execution of certain words, such that all words that are executed in the new state are executed to different effect (e.g. the word `[` will make all words up to a matching `]` have the execution semantics of pushing their symbolic representation onto the stack, sort of like a Lisp quote; the `]` itself then captures what's on the stack and builds a function, sort of like the `defmodule` macro does in Elixir.)

Analogously, in Japanese, most words are literals, that just push themselves onto the stack; while there are two types of "active" words: grammatical particles and verbs. Each particle is a construction function, which attempts to match and consume a certain shape of existing words on the stack, pushing back a tagged structure in its place; and then verbs consume a particular set of tagged structures from the stack (varying by verb), in any order, leaving on the stack anything they didn't expect, and pushing back a representation of the structured meaning of the sentence-as-a-whole up to that point.

I think this is well-represented by showing how Japanese does quotation:

上司は「私は彼が好きじゃない!」と言った。

To transliterate and rewrite this in a Forth-like grammar, with grammatical particles as lower-case keyword symbols, verbs as upper-case bare symbols, and everything else as quoted literal words:

"Boss" :subject [ "I" :subject "him" :referent DISLIKE NEGATION ] :cons SAID.

Note that, in this particular case, the brackets are sugar here: the sentence would have the same semantics without them. (They're helpful to visually disambiguate where you should mentally backtrack to, but it's clear by the fact that there's two :subject-particles that the inner verb DISLIKE is only going to capture the last-pushed one, leaving the previously-pushed one on the stack for SAID to later consume.)

One could also describe this as what a shift-reduce parser does internally, but with the reduction edges triggered as explicit command-words in the input lexeme stream, rather than being triggered implicitly by non-conflicting pattern-matches.

And this is _also_ , as it happens, the core of any pure-functional abstract- machine bytecode ISA (e.g. Erlang's BEAM bytecode ISA.) You've got ops that push literals; ops that take patterns of stuff off the stack and push back new product-types containing those same things; and ops for calls to (maybe-built- in) functions named by a pushed symbol term.

<comment><USER16> Nice analogy, I think.

I'll just point out two things odd with your sentence example though:

\- はvs.が is a difficult topic, but I think 上司が would be more appropriate

\- you're supposed to use keigo when talking about a superior, not only when talking to them. So it should be 仰った(おっしゃった) rather than 言った.</comment></comment>


Windows 7: "The Linux Killer" - <AUTHOR> http://www.computerworld.com/action/article.do?command=printArticleBasic&taxonomyName=Operating+Systems&articleId=330846&taxonomyId=89 <comment> old-gregg Windows job is to occupy about 128MB of RAM sitting in an invisible VMWare window, assisting Linux and OSX users at launching Microsoft Word to prepare that stupid TPS report every Friday.

</comment><comment><USER2> _"Windows Senior Vice President Steve Sinofsky showed off Windows 7 on his Lenovo S10 and said it used less than half of the netbook's 1GB of RAM."_

o rly? Only half the system's resources to sit and do nothing?

<comment><USER3> _Windows Senior Vice President Steve Sinofsky..._

What do you expect from a guys with a title four words long? _snicker_

<comment><USER4> This guy is 4 times smarter than you. You should definitely check out his resume and his work. And perhaps if you're lucky, have a conversation with him to actually know how smart he is.

<comment><USER5> _This guy is 4 times smarter than you._

I'm sure he'd be awesome if it was ever actually necessary to move Mt. Fuji. The fact remains, he works for Microsoft in this day and age. How smart can he be?

(Maybe he just really likes their corporate culture?)

<comment><USER6> Whether you'd like to believe it or not, there are a bunch of smart guys who still work for Microsoft. Some really smart computer scientists actually prefer a steady, high salary in a company that's treated them well for a decade over the chance to make it big or go bust trying.

I've never worked for Microsoft and I doubt I ever will, but I have interacted with some really smart folks who do.

All I'm really getting at is the fact that you dislike the business tactics, operating systems, office applications, or corporate culture of Microsoft doesn't mean you should assume they don't have anyone smart working for them.

<comment><USER7> Some techies consider the possibility shipping thier software to millions of people "the chance to make it big". Microsoft offers that.

</comment></comment></comment></comment></comment></comment><comment><USER8> I'd rather be running something not Linux on a laptop... and I do. I use it on the desktop, but its shite on the laptop. Awful wireless and less than stellar performance as far as battery life goes compared to Vista (and likely Win 7).

Meh. All the OS's suck, its just a matter of choosing one that sucks the least for your use case.

<comment><USER9> The point that _Linux enthusiasts_ become _Linux realists_ is when they realize they are afraid to put their laptop to sleep by closing the lid.

<comment><USER10> Bingo! That is why for the past few years every laptop I have bought has OS X on it. The hardware works, in particular sleep suspend. Close the lid and it goes to sleep, open the lid and it wakes up in moments, not thirty seconds. On the desktop I run Linux, but for a laptop it is all OS X. Everything I do is c/c++, unix, or web related so working in OS X doesn't matter.

<comment><USER11> My Eee Pc 901 works fine with suspend/resume, both take just a couple of seconds. The only thing that sometimes fail is audio, but that is easily recovered.

EDIT: With Ubuntu 8.10

<comment><USER12> "Easily recovered" translates to "minor pain in the ass"

Lot of build up for the pain body, bro.

</comment></comment></comment></comment></comment><comment><USER13> So the argument here is that Windows 7 is a Linux "killer" because it's got high yield possibilities for netbooks. Is that what we're supposed to believe?

<comment><USER14> Maybe it should have been "Linux for the masses killer." I don't think there is anyone who thinks it will be kicked from the server realm any time soon.

<comment><USER15> But if the article was named that, I doubt it would be front page on HN right now.

<comment><USER14> Which is a rather bad sign.

<comment><USER15> Very true.

</comment></comment></comment></comment></comment><comment><USER16> I am so tired of the "X killer" meme, it really is the time to put it to rest. Has it ever proved true? _Ever_?

What does it even me? Taking over market dominance? Completely eradicating from existence?

<comment><USER17> It means X is really strong.

I feel good about Linux right now.

<comment><USER12> Oh man, this is great.

</comment></comment></comment><comment><USER18> It seems like the Windows tax would have an even greater effect on the netbook market. People will pay a lot more attention to the difference between a $350 and $400 netbook than they will between a $1950 and $2000 laptop. Why spend 12.5% more when you can get Linux for free and still do everything you want?

<comment><USER19> I also think that netbooks appeal to a different buyer too. Windows still has strong appeal to hardcore gamers, but no serious gamer is going to use a netbook for gaming. Firefox on Linux looks and feels like Firefox on Windows, so if all you want is web browsing, why not Linux? Why pay the Microsoft tax just to get IE instead? I'm sure Windows 7 will find willing buyers on netbooks, but a "Linux killer"? I don't see that. Netbook buyers are more utilitarian and value-concious, so Linux will continue to grow in that market.

</comment></comment><comment><USER19> I have a dual-boot home-built P4 machine at home with a Logitech wireless multi-media keyboard. Under XP, the device functions as a standard 102-key keyboard. None of the extra buttons work (mute, volume adjust, etc.) Under Ubuntu, most of the keys work as designed (and this was autodetected during installation. I have not done any post-install customisation of the keyboard). I can mute volume, adjust it up/down, scroll windows with the little scroll wheel, etc. Nearly all of the extra keys work under Ubuntu that XP ignores. I could install the special software Logitech shipped with it to make those keys work, but it's slow enough already under XP without adding extra software to run. The machine is limited by motherboard design to a max of 2 GB RAM (which it has). Under Ubuntu, I very rarely see any page file swapping going on, but XP swaps frequently even with no applications open. Windows 7 better have superior memory and process management if they want to run in a low-RAM environment.

</comment><comment><USER20> _The threat to Windows comes entirely from "netbooks"_

I stopped reading here.

</comment><comment><USER21> I'm not the type to say that Linux isn't good. I use it on a daily basis. However, if you're in a large enough non-tech firm, you know that there are people who really don't get tech. Any difference (even difference for the better) is bad. That will prevent Linux adoption.

While I don't work in tech support, I'm the next office over from the ones who do and they'll face problems as silly as people thinking that their printer didn't need to be plugged in (to the wall) to print things or that you can un- send email. For many people you just can't change things without a lot of retraining even if it should be obvious.

<comment><USER22> "...they'll face problems as silly as people thinking that their printer didn't need to be plugged in (to the wall) to print things or that you can un- send email..."

They're wrong, but there's no law of nature that says they must be wrong, and in fact I would contend that they are perfectly reasonable assumptions, not "silly." There's nothing that should be obvious about either of those examples.

<comment><USER23> Exactly. Iff you understand tech, it it obvious what to do in those cases. If you don't it is much like magic. You don't have a sensible baseline of how things should behave. So you make assumptions, and are occasionally wrong.

</comment></comment></comment><comment><USER24> If the issue is really the resource consumption of the OS, I'll believe it when I see it -- thus far every iteration of Windows has been more bloated than the last.

Is XP still shipping on most low-power notebooks though? Not from what I've seen... From what I've seen, most "email, word and internet explorer" users are using vista and getting along OK.

</comment><comment><USER7> So Microsoft is planning to make software that's targeted at popular hardware? And then promote it?

Is that supposed to be surprising?

</comment><comment><USER25> "The threat to Windows comes entirely from 'netbooks'"

Do I really need to read any more of this reasoned argument?

<comment><USER17> Article already pointed out this is the biggest growth area in computing. But I gather you didn't read that.</comment></comment>


Are Algorithms Conceptual Art's Next Frontier? - <AUTHOR> https://www.artsy.net/article/nicholas-obrien-are-algorithms-conceptual-arts-next-frontier

<comment><USER2> I'm tempted to say that algorithms are perfect for art collectors. Most conceptual art is inscrutable to its viewers (and requires some kind of exegesis to understand what the artist was trying to do), and presumably most code will be too. Maybe galleries can post version control logs to provide insight into the process...

ps - I love Kernighan's handwritten Hello World, I'd hang that on my wall, if I could afford it.</comment>


Marissa Mayer: Totally Kidding About That 'Don't Be Evil' Stuff - <AUTHOR> http://blog.wired.com/business/2008/04/marissa-mayer-t.html

<comment><USER2> _But then again, when Google first wrote up its corporate philosophy, it said that the company "does not do horoscopes, financial advice or chat."_

For "horoscopes", they linked to a Google module by a non-Google developer (californiapsychic.com).

</comment><comment><USER3> Gah another article about this?

Don't be evil simply isn't a mission statement. You can't define a purpose by simply stating a behavior to avoid, especially something as vague as 'evil.'

</comment><comment><USER4> In the end all companies that grow to a certain size turn into the equivalent of psychopaths. There's nothing you can do about it.

<comment><USER5> Nothing? Sandra Bullock could _hack_ them.

<comment><USER5> <http://www.imdb.com/title/tt0113957/>

</comment></comment></comment><comment><USER6> One reason more to create a startup that sweeps away the colossus ;-)</comment>


Is Google another step closer to being unblocked in China? - <AUTHOR> http://www.scmp.com/news/china/policies-politics/article/2078173/google-another-step-closer-being-unblocked-china <comment><AUTHOR> Interesting nugget about what China wants most:

> Google Scholar, a search engine for scholarly literature, was among the > services on Beijing's priority list for re-entry, according to Liu, who was > speaking to the Sunday Morning Post on the sidelines of the China's annual > plenary sessions in Beijing on Friday.</comment>


Ask HN: A Better HN ? - <AUTHOR>

If you could change HN what would you change ? <comment><USER2> I would remove the leaderboard, I wouldn't let people see points on comments, I'd start to fade out comments after -1 points rather than 0. Essentially, I'd remove everything that encourages a bullshit competition in place of productivity.

I'd also consider letting users with high karma define a block list for sites. TechCrunch I'm often fine with, but I'm astonished people still submit stories from Copyblogger here.

</comment><comment><USER3> I would like to contribute my own snippets of code to news.yc that can be vetted for by other members and conditionally included, like Gmail Labs. Stuff like changing usernames 'hnuser (real name,employer@location)' or providing custom feeds (current usernames+karma, all posts, etc)

</comment><comment><USER4> I would put my phone #, email, etc. into my profile, but conditional on the reader having, say, 100 karma.

<comment><AUTHOR> that's a good one!

Maybe even set a karma price on the reveal of your contact info :) (so, you can get my contact info but it will cost you)

</comment></comment><comment><USER5> User definable time based filter - e.g. show me just the stories posted yesterday.

</comment><comment><USER6> I'd like to see a link to just see the Ask HN type posts

<comment><USER7> SearchYC has exactly that: <http://ask.searchyc.com/>

<comment><USER6> Awesome thanks!

</comment></comment></comment><comment><USER8> perhaps the dead links on the new page should go completly away to leave more room for the news (currently over 5 of the spots are dead)...

<comment><USER7> In your profile you can set showdead to no which should hide all of those dead links.

</comment></comment><comment><USER9> A Karma bartering system for virtual (and real) goods.

</comment><comment> onreact-com I wouldn't change it a bit. Especially feature creep is deadly for a community. Simplicity is key to the current success of HN.

I've been on Mixx before and they really messed up the site in the course of a few months of perpetual changes and adding new stuff all over the place. In the end you have a myriad of features nobody uses and the most important things Mixx was designed for initially got buried below those.

HN has a clean straightforward, no frills and timeless kind of design and functionality.

The only thing I'm missing is to be able to display my submissions in a row without the pages I voted for.

<comment><AUTHOR> like this ?

<http://news.ycombinator.com/submitted?id=onreact-com>

<comment> onreact-com Yes. Why is this option hidden by default when I'm logged in?

<comment><AUTHOR> it's at the bottom of your profile page, the 'submissions' link.

glad to be of service :)

<comment> onreact-com Thanks, the evil toolbars have hidden it below the scroll...</comment></comment></comment></comment></comment>


The Best Programming Books of September 2015 - <AUTHOR> http://codepancake.com/the-best-programming-books-of-september-2015/ <comment><USER2> I'm questioning many of the books in this list. "The C Programming Language"? How is that timely? And the description for that book is lifted from the Amazon page. Oh, and the links are affiliate links too. Suspicious I am.</comment>


Language-integrated provenance in Haskell - <AUTHOR> http://programming-journal.org/2018/2/11/ <comment><USER2> What does "provenance" mean? Is is about adding quotations to code? into databases?

<comment><USER3> It says it right there in the abstract. "Provenance" means "where it came from". This is about tracking where any given piece of data comes from.

<comment><USER2> I knew that. And it didn't explain anything. That's why I asked. As I said, the abstract sounds to me like an attempt to replace Integers with a tuple of a Interger and a DOI.

</comment></comment></comment><comment><USER4> This work was based on [https://hackage.haskell.org/package/DSH](https://hackage.haskell.org/package/DSH)

Seems really cool to be able to integrate a database coprocessor with little impedance mismatch.</comment>


Data Science: Performance of Python vs. Pandas vs. Numpy - <AUTHOR> http://machinelearningexp.com/data-science-performance-of-python-vs-pandas-vs-numpy/ <comment><USER2> I left the following comment at the blog:

For this example, idiomatic Pandas would look like this:

      def gen_stats_pandas2(dataset_pandas):
          grouped = dataset_pandas.groupby('product_id')
          stats = grouped.aggregate(['count', 'sum', 'mean'])
          return stats[[('product_order_num','count'), ('quantity','sum'), ('price','mean')]]

which is simpler and about 500x faster than gen_stats_pandas() in the example:

      %%time
      res1 = gen_stats_pandas(dataset_pandas)

      CPU times: user 8.48 s, sys: 32 ms, total: 8.51 s
      Wall time: 8.58 s

      %%time
      res2 = gen_stats_pandas2(dataset_pandas)

      CPU times: user 16 ms, sys: 4 ms, total: 20 ms
      Wall time: 17.6 ms

<comment><USER3> Sometimes I wonder whether actual optimization (as a craft, if you like) has been poisoned by scripting languages (Python etc.) and frameworks.

For one thing they completely changed how the speed of computers is perceived, e.g. it is _actually considered fast_ when a web app spends "only" 20 server CPU milliseconds on a request.

And because most things are so inefficient, it is relatively easy to get integer speed-ups. When looking at applications written in C++, written by actual engineers, then often just getting 5 or 10 % on some functionality is appreciated, and achieving more can be seriously difficult. With software in scripting languages improvements below a few hundred percent don't raise an eye brow.

However, actually optimizing code in a scripting language (and not changing the way a native library is used) can be seriously difficult and annoying, because most simply don't have efficient tools — obviously, if a scripting language (like Python) had something substantially faster than, say, attribute access, then that something would simply be used to power attribute access in the general case. So in C++ (or other native languages) you can actually make good use of the processor's and memory system's resources, but you just _can 't_ writing in a scripting language.

It is also surprising that most tooling available for e.g. Python is rather immature, insufficient and cumbersome to use compared to the tooling (especially commercial) available for native code (or Java). This likely has something to do with people a) not caring about performance at all and/or b) since it is basically not possible to write fast Python code, as soon as something becomes important for performance, it is written in another language and used from Python, and for analyzing the performance of that code, which is now an external library, you don't need tools for Python.

<comment><USER4> This comment contains some fairly pejorative language

I can assure you that there are real-world high performance python systems with per-event budgets of far less than 1ms being used for critical systems in large organisations. Sometimes with the help of compiled components, but made understandable by being coordinated in python.

Of course these systems are atypical, but the idea that 'actual' engineers always use c/Java, while python is just a scripting language is just ignorant

<comment><USER3> That's not what I wrote.

</comment></comment></comment></comment><comment><USER5> There are a couple of things wrong with this article.

The first problem, as pointed out by apl and em500, is the non-idiomatic pandas code. Pandas is fast not when you rewrite your algorithms using one for one with pandas functions, but when you use functions provided uniquely by pandas, then you start thinking with pandas. My rewrite[0] with groupby is _47 times faster_ than pure python; it would be _1848 times faster_ if I didn't convert the result to list of lists from DataFrame as in the other cases.

Secondly, if your analysis is taking too long on your MacBook Air, you should switch up to faster hardware before investing your time in time consuming optimizations. Presumably this is work done for an employer and for them the data scientists time is much more expensive than a powerful AWS instance. Of course if you made big Big O mistakes, no amount of hardware is going to fix that.

[0] [https://github.com/aleyan/machinelearningexp/blob/master/Dat...](https://github.com/aleyan/machinelearningexp/blob/master/DataScience_Performance_Python_Pandas_Numpy.ipynb)

</comment><comment><USER6> I only skimmed the notebook, but the code looks fairly inadequate. The pandas portion, for instance, treats the data frame as a dumb array and critically ignores grouping functionality which should offer a tremendous speedup. Moreover, for the exact same task pandas should never be slower than NumPy.

Benchmarks are hard to get right but this one falls way short of saying anything at all about performance penalties incurred by various libraries and abstractions.

</comment><comment><USER7> No comment on the poor implementations (why quadratic complexity, in all three cases?), but some general notes:

For reporting benchmarks, you probably want the _minimum_ , rather than average. While keeping an eye on the distribution/variation of the individual timings as well (to mitigate caching effects). Check out Python's _timeit_ module or the _%timeit_ magic command in IPython.

With more numeric-heavy workflows, the gap between Python/C grows even larger. The more you can push to native-compiled-land, away from Python loops, the better. As another data point, when optimizing the word2vec algorithm, the numbers came out something like [0]:

1x (pure Python) - ~120x (NumPy) - ~2880x (C/Cython)

[0] [https://rare-technologies.com/word2vec-in-python-part-two- op...](https://rare-technologies.com/word2vec-in-python-part-two-optimizing/)

</comment><comment><USER8> The data consists of 50k records. The fastest code in the post takes 3 seconds.

Have many programmers completely lost the ability to know roughly how fast code "should" be?

<comment><USER9> We use stupid, simple maths problems (like project Euler 1-30) when hiring for junior positions.

We are not looking for someone to do the maths tricks that lets you solve most of the problems with pen and paper, but for someone that recognizes a 100x speed increase using memoization.

You'd think people with some programming experience would be able to reason about how to speed up a simple brute force approach, but those parts of the hiring process usually weed out 75%, and I don't expect someone to give me a perfect solution. Heck, not even a working piece of code. Just being able to say "hmm, we could maybe cut half of the computation by just using the relevant parts of the alphabet" is all I want.

Then we have people like my colleague that just wrote print(103) which was the correct answer. (He could also give several fast approaches to solving the problem, one which we hadn't thought about before).

</comment></comment><comment><USER10> While we're on the subject, I'd like to see what this community has to offer on the efficiency of the pandas groupby-apply operations, which I believe is an idiomatic pandas way. The question [0] on SO is a demonstration where the groupby-apply falls to complete iteration of the dataset(also using some pandas, not sure if that's idiomatic pandas though)

Thanks!

[0] [https://stackoverflow.com/questions/45012503/conditionally-p...](https://stackoverflow.com/questions/45012503/conditionally- populating-elements-in-a-pandas-groupby-object-a-vectorized-solu)

</comment><comment><USER11> I usually do all my feature engineering and data exploration in pandas, and then I change my data from pandas to numpy just before i throw it to the classifiers / regressors

<comment><USER12> have you looked at PyTorch ? can be seen as a GPU acceleratd numpy

see [https://vwrideout.github.io/QR- Blog/index.html](https://vwrideout.github.io/QR-Blog/index.html)

</comment></comment><comment><USER13> This post is rather naive. Pandas performance improves when one uses in built functions. Also the performance of pandas is better over numpy for larger sizes [1].

[1] [http://gouthamanbalaraman.com/blog/numpy-vs-pandas- compariso...](http://gouthamanbalaraman.com/blog/numpy-vs-pandas- comparison.html)

</comment><comment><AUTHOR> There is a lot of great Python and Pandas code snippets, but I am not sure anynone posted a Numpy based solution. Below is mine. It gives 100x speed up over the base (quadratic Python) solution. Still, suggested Pure Python solutions and idiomatic Numpy solutions are much faster. I suspect Numpy has more power than that.

def gen_stats_numpy_l(dataset_numpy): start = time.time() unique_products,unique_indices = np.unique(dataset_numpy[:,0],return_index = True) product_stats = [] split = np.split(dataset_numpy,unique_indices)[1:] for item in split: length = len(item) product_stats.append([int(item[0,0]),int(length),int(np.sum(item[:,2])),float(np.round(np.sum(item[:,3])/length,2))]) end = time.time() working_time = end-start return product_stats,working_time

</comment><comment><USER14> This comparison isn't so great because of the following:

        for product_id in unique_products:
            product_items = [x for x in dataset_python if x[0]==product_id ]

This is O(unique_products * observations), and it looks like O(unique_products) = O(observations). Thus we have a quadratic scan when a linear one would suffice. You'll get the best performance using whichever solution lets you code this to linear the fastest. E.g. pure python, make a dict from product_id to observations and iterate over that, or for pandas, use groupby.

</comment><comment><USER15> As other comments point out, performance mostly depends on correct implementation.

Once the scripting overhead is under control, you're now measuring the performance of your blas library.

A much more useful comparison, although 2.5 years old:

[http://blog.nguyenvq.com/blog/2014/11/10/optimized-r-and- pyt...](http://blog.nguyenvq.com/blog/2014/11/10/optimized-r-and-python- standard-blas-vs-atlas-vs-openblas-vs-mkl/)

</comment><comment><USER16> Maybe someone can tell me the benefit but why use Pandas rather then a real database? Pandas seems like a non-standard, in memory, python specific database system that has no indexing, caching, or persistence layer aside from dumping to flat files. It's an RDBMS without the Relational bit.

<comment><USER17> I don't think you have looked at Pandas that closely. For example, Pandas has multiple ways to persist besides a flat file, including to SQLite and HDF5. - [http://pandas.pydata.org/pandas- docs/stable/io.html](http://pandas.pydata.org/pandas-docs/stable/io.html)

It's also aware of the relational data model. The 10 minute intro at [http://pandas.pydata.org/pandas- docs/stable/10min.html?highl...](http://pandas.pydata.org/pandas- docs/stable/10min.html?highlight=relational) says:

"pandas provides various facilities for easily combining together Series, DataFrame, and Panel objects with various kinds of set logic for the indexes and _relational algebra_ functionality in the case of join / merge-type operations."

and [http://pandas.pydata.org/pandas- docs/stable/comparison_with_...](http://pandas.pydata.org/pandas- docs/stable/comparison_with_sql.html) gives a mapping of basic SQL operations to Pandas.

There is also some caching. The documentation mentions things like "A large range of dates for various offsets are pre-computed and cached under the hood in order to make generating subsequent date ranges very fast (just have to grab a slice)" and "Bug in Series update where the parent frame is not updating its cache based on changes".

Perhaps you can think of it as an in-memory relational database without SQL or a declarative language but instead has an imperative API for Python, containing a large number of helper functions not in most RDMSes but which are important in data analysis. Think of it as a database engine where the user has control over the internal memory layout so C extension and other code (a "cartridge" or "datablade", if you will) can work with it directly.

Supposed you want to read a CSV into a data frame, compute the difference between column "X" and "Y", and show those differences as a histogram. That's one line of Pandas. How do you do that in a RDBMS?

</comment></comment><comment><USER18> Much of pandas is actually built on numpy...</comment>


Ape study suggests that the urge to dance is prehuman - <AUTHOR> https://www.theguardian.com/science/2019/dec/23/cha-cha-chimp-ape-study-suggests-urge-to-dance-is-prehuman <comment><USER2> Guardian articles including this one are paywalled in the UK but not elsewhere it seems.</comment>


Show HN: httpinvoke – js HTTP client - easy progress events, binary files, etc. - <AUTHOR> https://github.com/jakutis/httpinvoke

<comment><AUTHOR> Existing libraries - like jquery, reqwest and superagent - had no easy support for promises, binary files and progress events, did not support a wide range of browser versions, did not nicely treat HTTP status codes. So I made this.

</comment><comment><USER2> What happens if you use this with a different promise library (e.g. bluebird)? I'm rather confused - if everything implements it's own promises, does it "just work" or do we have to worry about it all getting rather messy?

<comment><AUTHOR> Hi, thanks for the questions, sorry for the late reply..

httpinvoke fully implements Promises/A+ specification. The spec is very short and easily implementable. The implementation in httpinvoke takes only 568bytes when minified (check it out!).

So the answer is, if you use httpinvoke with a different promise library, it will work, unless the library really is at odds with Promises/A+ specification. Which is unlikely, because all the major promises libraries support it, even if they do not indicate that in their documentation.

httpinvoke only contact with the external promise (which it can only get when onFulfill or onReject returns one) is the .then method here [1].

[1] [https://github.com/jakutis/httpinvoke/blob/master/src/common...](https://github.com/jakutis/httpinvoke/blob/master/src/common/closures.js#L55)

<comment><USER2> Say, hypothetically (I haven't done any tests or anything) that Bluebird was faster than the included promise specification, is there some sort of dependency injection to replace it, seeing as it's a spec?

<comment><AUTHOR> Without a doubt Bluebird, When.js, Q, then/promise and others are faster. The implementation in httpinvoke is optimized for code size.

The other reason for current solution is that the specification for creating and resolving promises [1] is not yet published.

Having a Promise object in global scope, as exported by Q, Bluebird and then/promise, is not enough. There is no uniform way to hack into these implementations and use their promises resolver.

But when resolvers-spec is available, httpinvoke will definitely check for already loaded promises library and reuse it.

[1] [https://github.com/promises-aplus/resolvers- spec](https://github.com/promises-aplus/resolvers-spec)

</comment></comment></comment></comment><comment><USER3> Simple question - how to send "application/x-www-form-urlencoded" with inputs? Why documentation miss basic things like this?

<comment><AUTHOR> Sorry about that. Now it's fixed. [https://github.com/jakutis/httpinvoke#examples](https://github.com/jakutis/httpinvoke#examples)

<comment><USER3> Wow, so quick. Thank you. Awesome.

</comment></comment></comment><comment><USER4> Are there any plans to support gzip in GET the way http-get does?

<comment><AUTHOR> Thank you! Just implemented gzip support and released 1.0.4.

</comment></comment><comment><USER5> How does this compare with superagent?

<comment><AUTHOR> httpinvoke and superagent differences:

* superagent has a "fluent" API, httpinvoke is a plain function, with an options object and with Node.js callbacks and/or promises.

* superagent is not easy to use with binary uploads/downloads

* superagent does not give you an abstraction over progress events

* httpinvoke does not build query strings

* httpinvoke gives you raw multipart/form-data responses, does not parse them

Other aspects are comparable (file size, Node.js and browser support, etc).</comment></comment>


Lunar Programming Language - <AUTHOR> http://users.rcn.com/david-moon/Lunar/index.html <comment><USER2> Subtitle: "All programming languages are wrong."

This is fascinating. I was planning to post it myself, but I'm glad someone beat me to it.

Context: This is the latest project from David A Moon, ex-Apple, co-founder of Symbolics, co-inventor of Emacs, co-inventor of Dylan, inventor of ephemeral garbage collection, inventor of PLOT.

This is one of the original Lisp and Lisp Machine gurus. Few living programmers have a more distinguished pedigree in developing massive innovations in software and programming language design.</comment>


Next-Gen Devs - <AUTHOR> https://why.degree/next-gen-devs/ <comment><AUTHOR> I actually had a Raspberry Pi 3 Model B laying around for months until I decided to finally do something with it. I guess I was never into hardware that much and I could not think of an interesting software project that I could pick up.</comment>


Mobile is a dud? - <AUTHOR> http://elusiveconsumer.wordpress.com/2006/10/18/mobile-is-dud/ <comment><USER2> This article is spot-on! As an angel investor, I routinely hear pitches about different mobile apps. My answer is always a big NO and I try everything to persuade small startups that have not spent any money yet on the idea, not to pursue it. If you have an idea for mobile handset market, read about "walled gardens" (google for more links): <http://en.wikipedia.org/wiki/Walled_garden_(media)>

Unless you have some extremely strong connections (i.e. you have an ex telco exec on the board or as a CEO), stay clear of ALL closed platforms. (Incidentally, and that also includes Windows/MSOffice/Exchange etc).Startups need to be agile and startups have a higher chance of becoming successful if there are less barriers that you need to jump over, not more. This is why Internet is a perfect platform for startups... there are virtually no barriers (unless net-neutrality is defeated)!

</comment><comment><USER3> [time_machine] There's no point in creating Internet-based software. Think about it! Unless you've already know somebody at AOL or Compuserve you'll never get anywhere. What you think you can start your own BBS and compete with the big guys? It'll never work, there's no way... [/time_machine]

See what I'm getting at?

The trend is clear -- the walled gardens are crumbling. Consumers in the future will get more freedom. Mobile data services are getting cheaper and faster. Phones are getting more capable.

The mobile services market is terribly immature (it's still the wild west, actually), but a dud? I think not.

My guess: Some day carriers will just be in charge of data pipe--and that's it. They probably won't even handle customer support on their own. Carriers are pretty good and making voice and data connections work, but not much else. And, much to their chagrin, there's no reason should be a part of the mobile services revenue stream any more than my ISP deserves a cut of iTunes revenue.

<comment><USER4> Could'nt have said it better myself. Question is "when" will the carriers be just in charge of data pipes?

</comment></comment><comment><USER5> This reminds me of a similar situation mentioned in "Founders at Work" about PayPal's original plan to develop applications on the Palm Pilot.

In their own words, "..the move of the enterprise to handheld devices was actually not forthcoming...Any minute now (we thought), there'll be millions of people begging for security on their handheld devices. It just wasn't happening. We were correct to change our strategy, since it still hasn't happened."

Has anyone considered the possibility that the cellphone might not be the glorious next step forward? Most tech evangelists, including myself, expect mobile devices to eventually diminish our reliance on the desktop. What if that actually never happens at the expected grandeur scale?

A friend of mine recently bought a Nokia 8800. It's an expensive phone, so I asked him what he used it for. His answer, "for phone calls and sms". It seems to me that mobile startups are pushing supply ahead of demand.

</comment><comment><USER3> "I used to say that the web browser was the most hostile programming environment ever devised, but that was before I found out about Mobile." -Douglas Crockford

</comment><comment><USER6> Reminds me of PG writing about how much persistence it took and pain it was for Loopt to make any headway with the carriers.

Steve Jobs has battled both the recording industry and the phone carriers and in both cases even _he_ has had to compromise a lot. Those massive entities seem about as geared towards innovation as banks.

</comment><comment><USER4> [Prediction: Until there is widespread WiFi and 3G access to the Internet via mobile phones (in other words, mobile-based business can reach consumers by going around network operators portals) there will be limited opportunities to establish profitable mobile-based businesses. Established companies should steer clear until then.]

Aren't we seeing this trend already? Considering this article was written last year. Nokia has already included the SIP stack in their series 60 phones. Motorola is also working on a SIP stack for their line up of phones as well. Doesn't this say anything? Hell the Motorola A910 has Wi-Fi connectivity therefore making the possibility of IP based communications a reality.

</comment><comment><USER7> I could imagine why many startups have chosen to focus on mobile, especially when it's a space that's attracted significant investment from carriers and media conglomerates alike.

However, many startups underestimate the true intentions for these investments. For carriers, mobile media is an opportunity to get their foot in the door of content distribution. For media firms, it's a chance to amortize IP development costs and maximize returns by putting their franchise content on as many screens as possible.

For users, it generally means taking it up the backside.

<comment><USER4> Eeek I can see your points. Although there must be a way to work around this. Any thoughts?

</comment></comment><comment><USER8> Don't do mobile wireless. Even if you have a good idea. Especially if you have a good idea.

Trust me. It's just not worth it.

<comment><USER4> Why would it not be worth it then? Cuz if I was presented with some compelling evidence at to why I should not pursue mobile wireless. I will be more than willing to change the direction of my start up.

<comment><USER8> 1) There are hundreds of different cellphone models. You need to alter your product to work on each one. Even the cellphone companies aren't able to do this. Nokia tried to make a software program that would let you find your friends, and they could only make it work on seven or eight of their OWN phones. Yahoo has search software that works on many models of phones, but they also have 100 hackers employed to work full time on just that. You won't have 100 people.

2) The cell phone carriers turn off parts of the bluetooth spectrum to prevent people from downloading their own ringtones. This also prevents people from using your software if it needs bluetooth.

3) Cell phone carriers will never partner with you. At least not on terms that allow you to make a profit.

4) Even if one cell phone carrier partners with you, the rest won't.

5) Any software that takes advantage of the phone feature will drain the battery very fast. If you need to ping the cell tower ever five minutes, that means you have to recharge the phone every two hours. Which essentially means the phone is now worthless for making calls.

6) Most people don't know how to load software onto their cellphone, even if they were willing to pay for it.

7) Even if you can get some people using your software on their phone, to everyone else it will just look like they are sending text messages. If no one can see others using your software then it isn't viral and it won't spread.

8) Cell phones don't fit into the pockets of girls pants. (This is actually a serious problems)

9) There have been hundreds of entrepreneurs who have gone into mobile, and they have all failed. I can name two dozen companies that have tried to do social networking over cell phones. It's clearly something people want, but none have been able to release a decent product for the reasons above.

10) The next generation of WiFi will make probably make your product obsolete in two years anyway.

<comment><USER4> And yet YCombinator is funding Loopt. Care to explain this? Does this mean you think Loopt will fail as well?

<comment><USER8> I don't know if Loopt will fail or not because I don't know how close they are to partnering with other carriers. I do know that if they can't expand beyond Boost then they have zero chance of succeeding, and publicly we haven't seen much evidence of progress in nearly a year. I also know that their CEO said if he had to do it again, he wouldn't do a business that relied on partnering with the carriers.

As for YCombinator, PG described it as being a difficult problem to solve, but noted that the job of a startup is to solve difficult problems. Certainly you can get rich solving a problem that's too hard for everyone else. But there are a lot of other problems with fairly easy answers, it's just that no one else has figured out that answer yet.

I'm not saying definitely don't do it, but certainly be aware of the issues. If your business manages to avoid these central issues, then maybe it's feasible. But if you're going to try to pull a Ulysses S. Grant style meat- grinder approach, then, well, good luck because you'll need it.

<comment><USER4> Hmmm something to think about indeed, anyways good points on the issues it actually gave me a "Don't do-avoid" list for future plans and ideas.

</comment></comment></comment></comment></comment></comment><comment><USER9> And yet, ycombinator is funding a mobile-platform company, Tsumobi...

<comment><USER9> Care to explain why this was voted this down? It's true, as far as I can tell from this article:

<http://www.techcrunch.com/2007/03/09/demo-day-y-combinators-spring-chicks/>

So I'm a bit curious that Paul posted something about mobile being a dud. Perhaps he thinks Tsumobi has a good answer to part of the problems with mobile?

I'm curious because I'm pretty interested in the mobile space, and, indeed, wrote something very similar to Tsumobi (Hecl), and was thrilled to see that ycombinator thought enough of the idea to fund it. (Ok, yeah, would be nice if someone funded _me_ , but I never really pursued Hecl as a startup idea, but more as an open source platform).

<comment><USER10> Well the two problems are operators and handsets. Tsumobi tries to make it easier to make apps for phones, helping solve the handset part of the problem.</comment></comment></comment>


Clean up Reddit with Greasemonkey - <AUTHOR> http://userscripts.org/scripts/show/39742

<comment><AUTHOR> I imagine a fair number of people came here from Reddit, as I did, and I think this might interest some people. I came across this Greasemonkey script after months of frustration at the increasing clutter of Reddit. It makes the site a lot cleaner, visually, and easier to bear, as well.</comment>


The 10x Engineer and Delegated Responsibility - <AUTHOR> http://ianlotinsky.wordpress.com/2014/02/14/the-10x-engineer-and-delegated-responsibility/ <comment><USER2> "They take ownership..."

Reminder: Unless you have an actual stake in the company, you do not own anything you produce for the company. Keep that in mind the next time code you worked on causes a 2am production server crash or is responsible for increasing revenue x10. It is not your code that caused the events but the owner's of the company.

<comment><USER3> I think that was a knee-jerk reaction to the word "ownership". That is not the sense used here. There is no contradiction in being given ownership of some task while having no ownership stake in the company; it's two quite different senses of the term.

<comment><USER4> I disagree - the distinction is still significant in that it's important not to let the _responsibilities_ of ownership land on your plate when you're not getting any of the _benefits._

<comment><USER3> You're not. It's two different meanings of the word. You aren't "responsible" for the running of the business because you've "taken ownership" of the autocomplete widget on the search page. You're getting paid for your ownership of the autocomplete widget, you're not getting paid for your ownership of the corporate direction.

If you're getting paid, you do need to be getting paid because of _some_ responsibility you're discharging, after all.

You can tell it's two different "ownerships" by what happens if you quit. One you retain, the other is simply redistributed to some other developer. They're not the same thing.

<comment><USER5> I agree with both of you, and I wish there was a better word than "ownership". That term has implications that are inappropriate for a single feature. You don't own the autocomplete widget -- you're responsible for it but you don't own it, the company owns it.

<comment><USER3> You both own(1) the widget and do not own(2) the widget.

This is English. Multiple definitions for a word are common. Cases where only some definitions apply and not others are common. They happen in almost every sentence. Try to avoid letting that pollute your thought. (It is a challenge. No sarcasm.)

</comment></comment></comment></comment></comment></comment><comment><USER6> This 10x rhetoric sincerely needs to stop, now. Recently, I have seen it creep into instruction manuals for program managers who have never written a line of code in their lives. "How to incentivize people to become 10x Developers" and suchlike.

Promote this meme much further, and essentially you will all be expected to do 10 times the amount of work you do because some mythical construct apparently does.

[Note: this does not mean that there aren't some people who contribute substantially more than others -- they definitely do exist. Just a prediction that putting the number 10 on it is going to lead the beancounters into massive numerical fallacies about the productivity advantages of such people.]

<comment><USER7> "How to incentivize people to become brilliant musicians"

"How to incentivize people to become world-renown artists"

"How to incentivize people to become best-selling authors"

"How to incentivize people to become Nobel laureates"

Yeah, none of those work. Why would program managers expect it to work for software developers?

On the other hand, there's probably a lot of money to be made in writing a series of books with those titles. They'd be utter garbage, but I'd bet they'd sell well.

<comment><USER8> Very few people manage musicians, artists, authors, and scientits.

Lots and lots of people manage programmers.

</comment></comment></comment><comment><USER9> a quote comes to mind: """ If you want to build a ship, don't drum up people to collect wood and don't assign them tasks and work, but rather teach them to long for the endless immensity of the sea. """ Antoine de Saint-Exupery

<comment><USER10> I am now incredibly sad that I have not come across that before and incredibly happy that I have now. Thank you!

</comment></comment><comment><USER11> i've been more and more inclined to write about engineering management myself.

if you think about this post, it's is essentially how big open source software projects work.

some open source projects have the responsibility to read commit logs once you gain commit access. that way the more you get involved into the project the more your responsibility to review your peers grows.

other projects like linux have people that are responsible for certain subsystems. oftentimes a BDFL can veto commits if he chooses to, but seldom does this ever happen, because he didn't like someone.

the thing strikes me as so interesting, because here you have hundreds, sometimes thousands of people working on high quality software together in a completely distributed, but not independent fashion, sometimes with people that can't even stand one another.

what you're describing here is very similar to this.

on the other hand we have big organizations explaining their hiring techniques, some only want people with a positive attitude, only a certain development methodology, and whatnot.

<comment><USER12> You are forgetting that open source projects don't have deadlines, pissed customers that might go elsewhere, people that get fired by not fulfilling the quarter targets, ...

<comment><USER11> i'm not so sure that's true. if you fail to deliver in time your open source project will become vaporware and people including developers will go elsewhere for satisfaction

<comment><USER12> Partly true, as usually there are no monetary consequences.

</comment></comment></comment></comment><comment><USER13> Right, so you gave "cowboy coding" a different name, then.

"Not surprisingly, others understand their code. It integrates well with the code base."

Actually, that IS surprising. You are literally saying that if sic some engineer on a problem and tell them to think really hard before they commit anything, they'll get it right.

Maybe you got lucky and that's working out with the hires you have so far, or maybe your scale is still small enough that new features can be developed in isolation without becoming incomprehensible. But I wouldn't pretend this is a successful _process_.

<comment><USER14> The article also stated that all of the code is peer reviewed and QA'd. So it's not really cowboy coding.

</comment></comment><comment><USER15> "The team is expected to churn through a backlog of dozens of insignificantly small bits of larger features, which often lack foresight into the constraints that will be discovered and the interdepencies between smaller bits that result in developer deadlock."

Yep. This is where a crappy product manager can turn "incremental" into "myopic and inflexible" under the banner of Agile. Just trust your engineers a bit already.

</comment><comment><USER16> In other words, he doesn't micromanage engineers. Not that big a deal... most managers know not to do this.

</comment><comment><USER17> It's a question of granularity. Can your developers deal with high level requirements and fill in the details, do they require every detail to be spec'd out? It's also a question of does the management trust the developers to fill in the detail without an agreed on spec or will management freak out if the developer decided to get creative? Ideally both developers and management are mature enough to trust developers to interpret needs and create solutions rather than grinding away at one small task at time.

</comment><comment><USER18> > practices and processes that shift responsibility onto a team of replaceable > cogs.

This.

So much of 'agile' in the business world, I see having become an effort to make developers into replaceable cogs or 'commodity' employees. It's not good for job satisfaction and pride, but I don't think it's good for the product either.

It's ironic, because I think most of the originators of the 'agile development' idea had almost an opposite intend, 'software craftsmanship' and all.

</comment><comment><USER19> Very good article. This hinges on being able to screen for both technical ability (easy) and the intangible combination of initiative and drive (hard). It also requires that developers keep in synch with each other. I think it works well up to a certain size organization.

</comment><comment><USER20> I've been looking for the term to use that has managed me for the past few years, and I have since passed on to my small teams.

Establish trust and delegate. If you can't trust the person to solve/implement the problem/solution you're going to have a bad time.

</comment><comment><USER21> _We are a Ruby on Rails shop, so extensive experience developing in or hosting Rails applications is required._

Really? They wouldn't be interested in e.g. a talented django expert? Seems a rather closed-minded approach to recruiting.

</comment><comment><USER22> We're following a similar approach with a distributed team @ NakedApartments.com. So far, it's worked really well for us, especially with keeping moral high. Glad to hear we're not alone.</comment>


The Future of Reading - 'Reading Workshop' Approach Lets Students Pick the Books - <AUTHOR> http://www.nytimes.com/2009/08/30/books/30reading.html?_r=1&hp

<comment><USER2> Very nice read</comment>


My very first cloud - <AUTHOR> All this cloudy talks brough back some of my memories. Here is one story from 90s. I was called to save the fate of newborn TELCO who could not produce bills to customers in time and were running out of money. The company they hired to do it tried to generate that enormous print file that had to be sent to a printhouse using some scripts on Oracle (there was a lot of heavy calculations involved there). So basically they were doomed to fail. The end result is that their scripts would run for a day or two and then crash. So I took a notice that on their main floor where they had operators there were like hundreds of client care PC stations. So I wrote a little orchestrator and the processing server app that was placed on every workstation. No scripts, all native executables. The orchestrator would pull list of current accounts from a database split it equally by the number of available server apps and submit those partial lists to servers. Servers would then extract needed data from database into RAM  do all the calculations, generate partial print file and send it back to the orchestrator. The orchestrator will merge those partials and generate complete print file. The whole thing took like an hour or so, do not remember exactly. Everyone was happy except one tech manager who did not like that it was implemented in language X instead of language Y. Obviously he was told to shut up and get lost. Getting 22 million dollars was way more important. <comment><USER2> the first map / reduce?

<comment><AUTHOR> LOL. I would just call it common sense. ;) I am curious how modern architects would approach the situation</comment></comment>