A dynamic window manager for X11 written with Node.js - <AUTHOR> http://mixu.net/nwm/ <comment><USER2> For some reason (Bad marketing? Bad documentation?) this fact doesn't get much attention, but Gnome's desktop environment is written in JavaScript and styled with CSS.

[https://wiki.gnome.org/Projects/GnomeShell/Development](https://wiki.gnome.org/Projects/GnomeShell/Development)

<comment><USER3> Probably because it's only partially written in JavaScript and CSS. The link you posted is for GNOME Shell, which is primarily the menu bar and user interface components, which arguably make sense being written in CSS.

The actual window manager (which is what is implemented in this project) is separate. It's called Mutter and is written in C, like many other window managers.

<comment><USER4> I would _love_ to use Mutter for writing a window manager. The compositing features it exposes is fantastic. My main problem is how many hooks (claws) it has in GNOME. I haven't looked at it for a long time, but does anyone know how realistic it would be to try to fork Mutter to work without GNOME (and all the associated systemd, etc stuff)?

<comment><USER2> I think the Linux Mint developers forked Mutter and used it as the base for Cinnamon.

<comment><USER4> Unfortunately, they simply forked GNOME. It still uses forks for gnome- settings-daemon, gnome-menus, etc, etc, etc. If I'm really serious about it, I should probably just look at the code in mutter and reimplement it without gnome.

</comment></comment></comment></comment></comment><comment><USER5> Interesting . But for me so far nothing gets even close to the beauty and symplicity of dwm ([http://dwm.suckless.org](http://dwm.suckless.org) )

<comment><USER6> I switched to xmonad ([http://xmonad.org/](http://xmonad.org/)), since you can change the layout per workspace and it doesn't include a bar. (Sure, you can turn it off in dwm, but where's the minimalism in that?)

<comment><USER7> And Xmonad is the only one that gets workspaces right in a multidisplay environment.

<comment><USER8> Not used Xmonad, but I've been saying for years Enlightenment (e17 and up) is the only window manager that lets use multiple virtual desktops (workspaces?) and physical monitors in a sane way; namely I can swap workspaces on one monitor without it effecting the other.

Gnome, KDE, LXDE, Mate, Cinnamon (and windows 10) all seem to assume that I'd only every be doing the same thing on both monitors which just seems inherently wrong.

<comment><USER7> There are three philosophies to deal with multiple workspaces and multiple monitors:

* one pool of WSs for all monitors (gnome,mate,win10)

* one _shared_ pool of WSs for each monitor (xmonad)

* one pool of WSs for each monitor (awesome,dwm,e17)

So what xmonad has is one set of workspaces and each monitor can pick one from the shared pool! It's so great to have a WS dedicated for WWW on a side monitor and when something important comes up, I can bring that WS to the main monitor. Not easily done with the last idea.

<comment><USER8> Oh, very clever; I didn't realise there were 3 distinct behaviours. Options two and three seem to make sense; I find it hard to believe anyone actually wants type 1. I'll definitely have to have a play with xmonad now :)

</comment></comment></comment></comment></comment></comment><comment><USER9> The "Why?" section seems to answer the question "What?".

Would have expected either "Why you should use this", or "Why I/we wrote this".

</comment><comment><USER10> There sure is a shitload of C in this node.js program.

</comment><comment><USER11> Keep in mind that this is pretty old, and no longer compiles against recent Node.

<comment><USER12> Last commit 11 months ago. Node is certainly a moving target. Running in fact.

</comment></comment><comment><USER13> cwm[1] is by far the cleanest wm I've used. It reeducated me on what a wm should be. Focus by hover, no bars of any kind, move and resize with shortcuts instead of searching for the clickable area, extremely lightweight, good straightforward configuration (opposite of openbox).

[1] [https://www.google.com/search?q=cwm+window+manager](https://www.google.com/search?q=cwm+window+manager)

</comment><comment><USER14> for me "Javascript" \+ "Window manager" will always mean pyro ([http://web.archive.org/web/20100626182331/http://pyrodesktop...](http://web.archive.org/web/20100626182331/http://pyrodesktop.org/Main_Page)). so much wasted potential there :(

</comment><comment><USER15> So how long until somebody makes a kernel in Node?

<comment><USER16> The day 60GB of RAM is the norm. Just wait till embedded development shifts to node.

<comment><USER17> For the "bigger" embedded platforms (rpi and similar), node is pretty serviceable... There have been other efforts to get JS based engines working well too. It depends on how you define embedded.

<comment><USER16> I was a little angry with my browser so that was meant to be an insult.

JS (not node) is usable for embedded coding. An example would be [http://www.espruino.com/](http://www.espruino.com/). Newer boards that come on Kickstarter typically support JS since it's a great intro language for coding especially for kids.

<comment><USER17> It's funny, but I like JS a lot, still think that Python is probably a better learning language... there's enough sharp edges in JS, that I don't think it's great for starting with, other than it's accessible, and combined with a browser, close to instant gratification.

<comment><USER18> Teaching JS to kids? Let's hook Dijkstra up to a dynamo, he'll be spinning in his grave fast enough!

<comment><USER16> I think it's great in the sense that you can easily make apps, games etc. which is good for getting kids interested quickly. Once their hooked, we can push them to some of the "better" languages.

</comment></comment></comment></comment></comment></comment></comment><comment><USER19> OT, but does anyone have any suggestions as to a tiling window manager which can effectively use the mouse?

<comment><USER20> Windows 10 is pretty good IMO.

<comment><USER19> That's what I'm using now, but the limitation of 4 grid cells is somewhat inconvenient. Ideally I would like something just a bit more powerful.</comment></comment></comment>


Fast NSDictionary traversal in Objective-C - <AUTHOR> http://appventure.me/2011/12/fast-nsdictionary-traversal-in-objective-c.html

<comment><USER2> Another approach:

        @interface NSDictionary (objectForKeyList)
        - (id)objectForKeyList:(id)key, ...;
        @end

        @implementation NSDictionary (objectForKeyList)

        - (id)objectForKeyList:(id)key, ...
        {
            id object = self;
            va_list ap;
            va_start(ap, key);
            for ( ; key; key = va_arg(ap, id))
                object = [object objectForKey:key];
            va_end(ap);
            return object;
        }

        @end

<comment><AUTHOR> Also a good idea, thanks for sharing. This could even be expanded to check whether list items are integers and call objectAtIndex: instead in order to traverse Array/Dictionary mixups.

</comment></comment><comment><USER3> Eh. Not really seeing it.

I think the category approach is much better (cleaner, easier documented, conventional) and there really isn't a speed increase in using the preprocessor (anything that looks like a difference in time is due to either caching or CPU load at the time).</comment>


Ask HN: Looking for new career? - <AUTHOR>

Little back story: I started professionally programming when I started a hosting company. With that I created small projects that used different API's and displayed the data differently or nicer.
Now I work for a financial institute and I slowly got asked and gained the skill to write reports for the company. I quickly learned I loved data more and displaying it in beautiful ways.
I want to change career to something that is related to data. I really don't know what is the title that goes along with what I want to do. All I know playing with data seeing how things relate and such is fun to me.
Question is: What is the title that describes a person who deals with data and displays it? <comment><USER2> "Data Scientist" is a fashionable job title today that covers having some bundle of skills including statistics, visualization, programming, presentation skills, business analysis, etc.

</comment><comment><USER3> Not sure, but this might be your bible: [http://www.edwardtufte.com/tufte/books_vdqi](http://www.edwardtufte.com/tufte/books_vdqi)</comment>


Pathfinding for Tower Defense - <AUTHOR> https://www.redblobgames.com/pathfinding/tower-defense/ <comment><USER2> Just an FYI: The Dijkstra map algorithms mentioned in the article can be used for a lot more than just pathfinding.

I've used them in a hobby game I've been developing with a lot of insight from [http://www.roguebasin.com/index.php?title=Dijkstra_Maps_Visu...](http://www.roguebasin.com/index.php?title=Dijkstra_Maps_Visualized) To implement things like determining if resources are connected to an in game road network. I've also used them extensively for the game's AI for all sorts of different purposes.

Truly a handy tool to have in a game maker's belt.

<comment><USER3> This kind of thing gets me eager to play around with game systems but the art gets in my way. I need to find a kit of generic assets that I can use to experiment with game systems development. Maybe that's why roguelikes are so attractive for this kind of thing?

<comment><USER4> Try Unity3D! The Asset store has more art than you will ever need, especially if graphical consistency is no priority

<comment><USER5> agreed

I've been to several game jams where I see amazing prototypes come up in 24-48 hours where people use free or really cheap $5-$40 asset store assets

[https://www.google.com/search?q=unity+assets+for+prototyping](https://www.google.com/search?q=unity+assets+for+prototyping)

It's arguably one reason why there are a glut of games. Not only do engines like Unity and Unreal make it easy to get started but their asset stores have starter kits for almost any type of game. FPS, 3rd person platformer, racing, tower defense game, 2D platformer, etc there's a kit that you download and just start skinning.

[https://assetstore.unity.com/search?q=category%3A90&sc=templ...](https://assetstore.unity.com/search?q=category%3A90&sc=templates/packs)

</comment></comment></comment></comment><comment><USER6> I've always wanted to find a blog post somewhere about SC2-style swarm pathfinding. Dijkstra part is simple and there are many resources about it, whats hard is avoidance - units shouldn't walk through each other. Achieving that smooth and correct wave-like motion of zerglings isn't easy - I've tried but the results were ugly.

<comment><USER7> [https://www.gamedev.net/forums/topic/597457-pathfinding- in-a...](https://www.gamedev.net/forums/topic/597457-pathfinding-in-a-space- based-rts-game/) discusses some of the stuff StarCraft 2 uses, [http://www.gameaipro.com/](http://www.gameaipro.com/) has some stuff including for the other SC2, Supreme Commander 2 ( [http://www.gameaipro.com/GameAIPro/GameAIPro_Chapter23_Crowd...](http://www.gameaipro.com/GameAIPro/GameAIPro_Chapter23_Crowd_Pathfinding_and_Steering_Using_Flow_Field_Tiles.pdf) ) that solves similar issues.

</comment></comment><comment><USER8> I don't know why I love tower-defense games so much, but I think it might be because playing feels like programming. Nearly every TD game I've played is deterministic; in fact, I think random gameplay elements would ruin the appeal. That means the challenge of the game is not being lucky or twitchy, but rather figuring out the rules and how to optimally apply them. That's also what I like about programming.

<comment><USER9> Kind of depends on at what level your thinking about though.

In most games some towers can have a random aspects in deciding where/ what to attack. This can lead to variation of outcomes when replaying a given wave but amortized over an entire game the results are more-or-less static on a percentage basis.

Which is amusingly similar to probabilistic algorithms, so maybe that just reinforces your point.

</comment></comment><comment><USER10> A common tactic in the build-your-own-path TD genre is yo-yoing; that is, blocking a path to force the creeps to go the long way, then sell the created block and immediately block the long way, forcing them to go _back_ the long way. Rinse and repeat.

It always feels like cheating the system, although harder game difficulties are typically balanced around that mechanic.

<comment><USER11> Most tds I play don't allow changing your maze during rounds

</comment></comment><comment><USER12> This reminds me of the documentation for how the game Liquid War did their pathfinding. The interesting relevance is that it does not use a uniform grid when calculating the gradients, but instead coalesces squares into power-of- two squares to "cheat"

[https://ufoot.org/liquidwar/v5/techinfo/algorithm](https://ufoot.org/liquidwar/v5/techinfo/algorithm)

<comment><USER13> Oh man, Liquid War. That brings back memories. I'll have to give Liquid War 6 a try. Thanks for the nostalgia.

<comment><USER14> I looked that game up Liquid Wars 6 is a GNU game. Who knew.

[https://www.gnu.org/software/liquidwar6/manual/liquidwar6.ht...](https://www.gnu.org/software/liquidwar6/manual/liquidwar6.html#In- a-nutshell)

It is funny... the manual tells you a lot about the game ... just not how to actually play. Sigh.

<comment><USER15> > It is funny... the manual tells you a lot about the game ... just not how to > actually play.

That feels fitting for a GNU project. Copious amounts of information, little of it immediately useful for your current question.

</comment></comment></comment></comment><comment><USER16> I love tower defense games but I could never find one that is either complete or not filled with ads/paytowin

<comment><USER17> Honestly the best tower defense games are still Warcraft 3 custom maps, which is getting a refresh with Reforged. I'd recommend YouTD personally.

<comment><USER18> There are custom game modes for Dota 2 and some of those are pretty good tower defense games.

<comment><USER19> How can I find these?

<comment><USER20> Install free dota2 and goto arcade on the menu.

</comment></comment></comment></comment></comment><comment><USER21> I do like how the enemy swarms move in Dungeon Warfare, some randomness is present so that all of the minions don't follow the same beeline, rather moves organically like a crowd moving through a corridor.

<comment><USER22> Dungeon Warfare is a really refreshing take on Tower Defense. I can highly recommend it. Works good on mobile as well.

</comment></comment><comment><USER23> Upvoting before I even read the article, and if you browse the other articles on the site you'll see why. Red Blob Games is a fantastic resource, check it out.

</comment><comment><USER24> The article is from 2014. We should put that year in the title.

<comment><USER25> Why does the year matter? Its not time-sensitive news or information.

<comment><USER26> It's just an HN custom

</comment></comment></comment><comment><USER27> This would've been a handy article to have read before/during Advent of Code 2018. There were multiple path finding problems I struggled through.

<comment><USER28> Oh man, day 15 is almost a party pooper to me, not because of the algorithm, but the edge cases. Took me ages to debug. It gives me perspectives to game development.

<comment><USER29> I don't know that it's quite similar though: advent's day 15 is about replicating exactly the algorithm used by the system designer, except using a somewhat hand-wavy description. Because of the testing methodology/system, it adds a lot of complexity to the task of aggro/pathfinding.

<comment><USER28> Yeah, you are right, it just happens to remind me day 15. The description is surely not the best, but I don't think it's hand wavy, it went great length to explain what happens which I appreciate. What frustrates me is it does not help me to discover certain edge cases. But it reflects reality, there are bugs you can never imagine until you run into.

</comment></comment></comment></comment><comment><USER30> It's crazy how often this website gets posted on HN for it's pathfinding tutorials.

</comment><comment><USER31> Woah very cool post. I've been planning to learn enough graph theory and the astar algorithm for pathfinding to make the non-player agents in my game have enough intelligence to find a target, whether that is a point on the map or the player itself.

Here is a link to a blog post about my game.

[https://russell.ballestrini.net/yuletide-trains-and- homegrow...](https://russell.ballestrini.net/yuletide-trains-and-homegrown- video-games/)

<comment><USER32> A* is very simple.

</comment></comment><comment> Const-me I did the same a decade ago: [http://const.me/articles/robocalypse- pathfinding/](http://const.me/articles/robocalypse-pathfinding/)

Source code is available but I'm not sure it'll work with modern compilers. Unlike that article, I did not use dynamic memory while updating the vector field.

</comment><comment><USER33> If this interests you, check out [https://www.pathery.com/](https://www.pathery.com/), a long standing project where the goal is to use a limited number of blocks to make the longest path possible.

</comment><comment><USER34> Given the maze on the website, what is the highest number you can get on a square when creating a maze?

This is a fun puzzle, I got up to 124:

[https://imgur.com/a/L3OcJpA](https://imgur.com/a/L3OcJpA)

<comment><USER34> Ah, just now noticed this: [https://news.ycombinator.com/item?id=18802763](https://news.ycombinator.com/item?id=18802763)</comment></comment>


My attempt to Mobilize WordPress - <AUTHOR> http://wordpress.org/extend/plugins/wp-mobile-detector/

<comment><AUTHOR> About a month ago I tried to find a wordpress plugin that would mobilize my blog.

I was shocked to find out that the vast majority of plugins only detect smart phones, which is but a fraction of the mobile market.

Over the past two weeks I decided to build my own plugin that would detect as many mobile phones as possible.

Currently I calculated that my plugin can detect over 5,000 devices.

It is my goal over the next 6 months to optimize the mobile detection through community feedback.

Through this WordPress plugin, I hope to create a class that I can open source to help all websites detect mobile users and provide them with a better user experience.

</comment><comment><USER2> Might want to look at integrating this somehow.

<http://www.tera-wurfl.com/wiki/index.php/Main_Page></comment>


Flights of fancy - why airborne automobiles will never take off - <AUTHOR> http://www.economist.com/sciencetechnology/displaystory.cfm?story_id=13974188 <comment><USER2> My wild hypothesis is that as you go from 2D to 3D navigation, the cognitive load increases to a level which is much more than a normal human can handle. (Similar to 2D matching being polynomial time and 3D matching being NP- Complete). It will be interesting to see some vision research which shows that human navigation (vision) uses some kind of matching (<http://en.wikipedia.org/wiki/Matching>).

<comment><AUTHOR> I doubt flying cars would be allowed to have human control, if they get made, it'd all be done on automatic.

</comment></comment><comment><USER3> Comments also at: <http://news.ycombinator.com/item?id=687770></comment>


Programming with Nothing (2011) [video] - <AUTHOR> http://rubymanor.org/3/videos/programming_with_nothing/

<comment><USER2> Previously: [https://news.ycombinator.com/item?id=3343205](https://news.ycombinator.com/item?id=3343205)

This talk is old now, but I'm happy to answer any questions.

Someone recently did some really nice sketchnotes: [https://twitter.com/deejaygraham/status/528220110331596800](https://twitter.com/deejaygraham/status/528220110331596800)

<comment><USER3> Thanks for sharing those notes, it's awesome! The style of the notes remind me to the Feynman learning technique. I tried it once and still remember everything. For me it was a surprisingly fruitful way of learning.

</comment></comment><comment><USER4> Reminds me to this implementation on js: [http://stevelosh.com/blog/2013/03/list-out-of- lambda/](http://stevelosh.com/blog/2013/03/list-out-of-lambda/)

Lambda is pretty cool.

</comment><comment><USER5> This is the detailed text version [http://codon.com/programming-with- nothing](http://codon.com/programming-with-nothing)

</comment><comment><USER6> A nice demonstration of lambda calculus using Church Encoding in Ruby, without saying that that's what he's doing.

I guess at the end of the video, he will probably reveal what the thing he's been doing is called.

</comment><comment><USER7> I saw Tom give this talk at Ruby Manor. It melted my brain, but it was completely worth it, and challenged lots of assumptions I had about programming but never realised I had. Highly recommended!</comment>


50 Things I Learned from over 600 Hours of Business Podcasts - <AUTHOR> http://www.erichstauffer.com/entrepreneurship/600-hours-of-business-podcasts

<comment><USER2> > Success takes 9 months (to 5 years). There are no overnight successes.

From what starting point? The decision to try to be successful, when you come up with an idea, or when you start implementing it?

<comment><AUTHOR> Every person's starting point is really the culmination of everything in their past so every starting point is different, but this statement is born from two trends I noticed while listening:

1\. "The Baby Effect" \- a term coined by John Lee Dumas of Entrepreneur on Fire, a 7-day a week business podcast that interviews entrepreneurs, which evolved from John Lee noticing that successful launches tended to take 9 months from first action to the point of sustainability. He called it that because it usually coincided with the founder finding out they had a baby coming, but it also worked that way for BeardBrand, for example.

2\. Most of the "successful" interviewees on podcasts state they started back in 2009, so 5 years later is now (2014). 5 years seems to be the point at which entrepreneurs have been steady long enough that they start to either a) look for the next thing or b) start sharing with other people what they know. It's also a sign that the 'wave' that they were currently riding (their business model) may have crested and they are in search of the next thing, hoping for a second win(d).</comment></comment>


Corporate CEOs have failed to engage with startups - <AUTHOR> https://venturebeat.com/2017/04/30/corporate-ceos-have-failed-to-engage-with-startups/#article-masthead <comment><USER2> "First, we know that tech, innovation, and R&D departments themselves do not have enough exposure to the top team. In fact, only 34 percent of CIOs report directly to the CEO, according to the latest survey from Harvey Nash/KPMG."

I think this is the key problem. In many corporates, from my experience, the CEO doesn't have any facetime at all with the technology and innovation team. It's hard for them, then, to speak credibly to startups.

How do we fix this? More CEO appointments from the CTO ranks?</comment>


Breach exposes profile data for 235M TikTok, Instagram, and YouTube users - <AUTHOR> https://9to5mac.com/2020/08/20/database-breach-exposes-profile-data-for-235m-tiktok-instagram-and-youtube-accounts/ <comment><USER2> A web scraped data dump of information available to general public was left without any access controls. Neither the act of scraping , storing or sharing that data is illegal. Violations of t&c's of YouTube or Insta for sure. But , would they be doing anything to pursue a case against those who scrape their sites or prevent anyone from doing so ? Platforms like these rely on having profile data made public around number of followers , location etc., it is in the platforms best interest to improve engagement with public data. Such data would be a gold mine for marketing professionals and agencies. Do agencies do this today, yes. Do they make that data available to public , No.</comment>


Idea: An OTC Pill That Stops Mosquito Bites - <AUTHOR> http://sirdg.com/2011/01/idea-an-otc-pill-that-stops-mosquito-bites/

<comment><USER2> What's the medication she's taking? I've never heard of any chemical blocking mosquitos before.</comment>


Ask HN: Did Google protest by crawling (a lot less) yesterday? - <AUTHOR>

One of our sites is routinely crawled by Google (Bot) at an average of 300k+ pages daily.
Within the last 24 hours, it crawled less than 30k pages. (It has never crawled less than 200k pages/day in last many months.) Makes me wonder if this was a way of protesting against SOPA/PIPA?
Any others here with similar observations? Please share. <comment><USER2> Not a protest, no.

[https://plus.google.com/u/0/115984868678744352358/posts/iUN5...](https://plus.google.com/u/0/115984868678744352358/posts/iUN5MGJxEh9)

<comment><AUTHOR> Great. That was real quick :) Thanks.</comment></comment>


Difficulties in backing up live git repositories - <AUTHOR> http://joeyh.name/blog/entry/difficulties_in_backing_up_live_git_repositories/

<comment><USER2> Just pull the repository to a secret staging repository and then back up the staging repository.</comment>


In a War of Attrition, Microsoft Will Beat Apple - <AUTHOR> http://www.forbes.com/sites/moneybuilder/2012/10/30/in-a-war-of-attrition-microsoft-will-beat-apple/

<comment><USER2> In a post-PC world Microsoft will turn into what IBM was in the 90s: A profitable well run company that's no longer in the zeitgeist of what's going on. It's starting to feel like Microsoft isn't even in the same business as Google or Apple, and I suspect they can turn that into an advantage. To me Surface and the Xbox proves that Microsoft can make hardware, so the next DEC will be a company like Dell or HP if they don't don't exit the PC business.</comment>


Adobe Tries New Business Model For Products - <AUTHOR> http://www.thetechscoop.net/2011/04/11/adobe-tries-new-business-model-for-products/#axzz1JBcXNYwz <comment><USER2> How much more convoluted can Adobe make their product line? The idea of a suite of Adobe products begging to be updated every minute like acrobat would be enough to drive me to tears...</comment>


Ask HN: Why is the title bar sometimes much darker/redder? - <AUTHOR> http://news.ycombinator.com/?title_bar_color=ff6600 #ff6600 <comment><USER2> It's #ff6600 so it's an orange that gets affected quite a bit depending on your device settings.

On my Mac, it's neon orange. On most PCs, it's not as neon.

If you have an NVIDIA graphics card, it's commonly referred to as "Digital Vibrance".

<comment><AUTHOR> Yeah but the person next to me has #f6f6ef which I get some other times.</comment></comment>


Building a secure password reset feature - <AUTHOR> http://www.troyhunt.com/2012/05/everything-you-ever-wanted-to-know.html

<comment><USER2> It's an old post, but I really like it because it highlights a problem with almost all online accounts: Confirming the existence of email addresses and usernames in the database.

<comment><USER3> That's the one thing that's not really a problem, at least not properly dealt with. Take the website that has awesomely not disclosed whether a user account already exists with that email address or not.

Now go to that websites 'Register'-page. Enter the same email address and continue. I bet you half a dogecoin you will get an error message if an account already exists with that email address.

Of course, this is sort of solveable by following the same tactic. Just saying "An email has been sent to email@example.com with furhter instructions", which in case of an already existing account could say "Someone tried to register with this email address, but an account already existed."

Something to be aware of.</comment></comment>


Artificial intelligence bot beats humans at reading in a first for machines - <AUTHOR> http://www.scmp.com/tech/china-tech/article/2128243/alibabas-artificial-intelligence-bot-beats-humans-reading-first <comment><USER2> I wonder how much of this is due to advances in artificial intelligence and how much is due to a decline in the reading comprehension of the average human. I'd wager that its a hefty dose of both.

</comment><comment><USER3> is this paper available to public?</comment>


Becoming formidable - <AUTHOR> http://blog.42floors.com/becoming-formidable/

<comment><USER3> This is a very good read - being a startup CEO who's raised a seed round after a number of delays, a lot of the points raised ring very true.

It is amazing the difference a term sheet / money in the bank makes - <USER2> with hindsight, but difficult to see when you're wrapped up in pitches and negotiations.

Edit: And just to reiterate a point from the article - traction makes you seem formidable like nothing else (until you have a term sheet / money)</comment>


Barack Obama on why travel matters - <AUTHOR> http://www.bbc.com/travel/story/20190425-barack-obama-on-why-travel-matters <comment><USER2> I wish I could travel with the same energy that I had in the first 6 months. Every corner there was something new to experience, and every stone you turned had a wonderful meaning to it.

Of course, a lot of that magic is still there. But the more you travel and grow as a person, the more you realise the similarities and monotony of life.

Damn, I know I sound pessimistic, and I probably am. Travel has been a wonderful way to escape, but it also makes you value things like a permanent home and stability.

My favorite places in no particular order: Nepal, Cambodia, Indonesia, Mauritius, Norway, and I would like to say India, but I have only been up North there.</comment>


Ask HN: NSA mass surveillance - What exit do you suggest? - <AUTHOR>

It is obvious that we are all outraged by the recent revelations, and we will be even more outraged in the weeks or months to come.
But nothing substantial will be achieved by the feeling itself and by only expressing it over and over again. That's why it's time to understand that the discussion must now center on the next step in this process, meaning:
What are the possible scenarios on how to exit this situation properly?
What do you envision? <comment><AUTHOR> I'm curious about why a discussion about this question does not seem to be possible. Because everybody seems to be fairly exited about and interested in the revelations themselves.

\- Is the above question not relevant to you?

\- Is it not worth being discussed on HN?

\- Is the entertainment value too low?

\- Do you think there are no insights to be gained?

\- Is this what you would call a "political post" and therefor to be ignored?

\- Would you say that it's not your job to think about this question?

\- Do you simply see no solutions?</comment>


Ask HN: How to choose a UPS / calculate power for a home office?  - <AUTHOR>

I have this little cheap UPS that doesn't seem to work, probably too much of a load on it.
I need to be able to survive surges, lightning strikes, all that stuff that a surge protect doesn't protect against and able to power my devices for up to 15 minutes. I have a big problem at home, when somebody plugs in a vacuum cleaner or something on the same circuit it shuts off... Always while I'm in the middle of working too.
Equipment:
Dell Optiplex GX 620 with HD video card Macbook White USB hub w/ Extrenal hard drive 2 Acer 22" LCD's 10 watt LED Lamp
Small 5port network hub
Please help! I'm not sure how to select the correct UPS for my needs. <comment><USER2> Go to APCs website. They have a tool for this.

Or, find the wattage draw of all your equipment you want to ups, add it up and add 20-25% and find a unit with that VA rating, or the next highest.

Note that VA has nothing to do with runtime, VA ratings are just the wattage loads the UPS can handle for usually about 15-20 minutes.</comment>


The Web Is Wrong - <AUTHOR> http://evincarofautumn.blogspot.com/2011/12/web-is-wrong.html

<comment><USER2> "Programmers may be surprised to note that the vast majority of users do not ever view the sources of a web page."

I can't imagine anyone being surprised by that. Programmers, on the other hand, look at source _all the time_. Being able to view the source when you wonder "how did they do that?" is a big factor behind the rapid evolution of the web.

"The source of the desktop applications you use isn't typically human-readable unless the source is open and you seek it out."

Which, I would argue, is one reason why most innovation is now occurring on the web rather than the desktop.

"Beginners need consistency, and the majority of developers are always going to be beginners, so we have no choice but to help them."

By concealing the way things are done from them and eliminating the terabytes of publicly viewable example code?

Sorry, that doesn't seem very helpful to me.

<comment><USER3> I agree completely. My first thought after reading this article was that while 99% of users may not view the source of a page, the 1% (web devs) that actually create additional pages find View Source, Firebug, etc. extremely useful. When I'm helping any new web developer out one of my first steps is to have them use and understand Firebug. Preaching to the choir here, but it cannot be understated how important access to and readability of source code was to me when I first began.

Compiling and delivering in an unreadable format is possibly the worst solution to this problem. Who ends up benefiting from this? The end user who saves a minuscule amount of time loading the page? Is hampering innovation and progress really worth that amount of time?

Below, the author makes a point that viewing the actual source is unreadable anyways. Very true, but tools like Firebug and Chrome Developer Tools help combat that problem to an extent by nicely formatting HTML, CSS, JS, etc. And while many large sites (Gmail, etc.) have compact and utterly horrendous source, I would argue that novice developers are not looking there first for help, instead they look at less complex sites that are not minified (because they don't need to increase page loading speed).

<comment><USER4> I would argue a lot of what was called "mash-ups" a few years ago, came about because people could view the underpinnings. Long before companies started documenting official API's developers where pulling apart their code and adding and mixing and matching features from various web app providers. I think there is a culture of openness on the web and part of that I believe is due to the readability of the underpinnings.

That being said, the web has felt like technology soup for some time now, shortly after getting away from CGI, it just felt like we where doing it wrong (at least the apps part). The newer JavaScript / CSS / HTML front-ends communicating to a REST back end feels a little more right to me over all the proprietary server pages mess (ASP, JSP, PHP) that we contorted the document language with, to make pages, apps. But it does still feel like there should be a better way to deliver apps. I think this is why IOS apps are doing so well, the use a common REST back end with the web, yet make development of the UI a lot less complex. I think the web could learn a lot from Apple's successes on the mobile platform, but there is just so much inertia behind web technologies that a radical departure is just not in the cards.

</comment></comment></comment><comment><USER5> FTA: "At the very least, we should stop serving HTML, CSS, and JavaScript to users. Let's instead serve things in concise, binary format—compiled documents, compiled stylesheets, and bytecode-compiled JavaScript that runs in a standard-issue stack-based virtual machine."

I'm right there with him in wishing there were a chance in hell web browsers would move to a (language neutral as possible) VM for client-side code, but as for those other things, they basically _are_ served in "binary compiled" versions most of the time, in the form of gzipped versions of the documents.

Using a different custom binary format for the same data would save very little over a gzipped html/css file and would add an immense amount of complexity, thus really isn't worth it, IMO.

<comment><AUTHOR> Well, if you say I made one good point, then at least I made one good point. A standard VM is the most obvious thing we need. But I think there is definitely something to the notion of web applications as real applications, which can be queried in a structured way and composed (think pipes) with one another and with desktop applications.

<comment><USER6> If you haven't checked them out, you might find web intents interesting: <http://webintents.org/>

<comment><AUTHOR> I hadn't, but it seems to be a very good solution within the current model of things. Thanks for putting me on to this.

</comment></comment></comment></comment><comment><USER7> _Let's instead serve things in concise, binary format_

We tried this already in the 19[89]0s, it was called client-server.

</comment><comment> guard-of-terra What problem does it solve for the end-user?

If it doesn't, we should skip it. Programmers love large-scale infrastructure refactorings and they always get those wrong. Both in axiomatics and in implementation.

For example, I would argue that if unified web bytecode was adopted in 2002, its performance would be inferior today than leading JS engines provide. Optimizing high-level code is actually simplier than optimizing low-level kludge built upon wrong assumptions. And they would not get it right in 2002. I argue they wouldn't today,

</comment><comment><USER8> Apparently people are having trouble with this: just because it's binary doesn't mean you can't read it. It just means you can't read it with the tools you already have on your computer. We would have to build the editing tools to read and modify whatever data format comes out of this, but _we can do that_ and it won't be that hard.

I think we should do it anyway. I dream of a composable, computable data format that can represent anything and be sent anywhere. We could build web apps with it. We could make desktop data formats with it. I know it's ambitious, but I don't think it's impossible. I'm not expressing it terribly well because it's late. But I think this is a good idea.

</comment><comment><USER9> Text format allows various forms of security analysis and on-the-fly modifications of HTML/Javascript in personal firewalls, browser plugins etc (for the purpose of blocking malicious scripts, advertisements, flash, images from other domains with http 401 and other stuff).

Compiled binary executable blob with fixed address references will be non- modificable. You either run it or not, but you can't cut a part of it off while passing through firewall.

So, proposed change is a step backward from the security perspective.

</comment><comment><USER10> The Web is wrong as a software platform -- because it was never supposed to be a software platform: [http://berislav.lopac.net/post/4726275775/of-course-web- deve...](http://berislav.lopac.net/post/4726275775/of-course-web-development- is-broken)

While the Web model was good enough for a time with slow and expensive Internet connections, in the era of ubiquitous broadband it becomes more and more of a bottleneck.

In my opinion, the future lies in a more equal interconnection of Internet devices, which would not be divided to servers as clients as we have on the Web, but more on a peer-to-peer level. BitTorrent is a primitive example of one aspect (storage) of what I have in mind, but it would expand into processing and all other kinds of data exchange. One can easily imagine a networked TV being used as a display device for any other networked appliance, from mobiles to microwaves.

Whoever defines the best standard for that to be build upon will hold the keys to the future. And you may call this SkyNet if you like. ;)

</comment><comment><USER11> I like to imagine a flipped scenario, where the content, style and interaction are even further separated; allowing better inter-app sharing of each aspect. For example, if the content of your blog just came through in JSON, I could very simply quote your post on my blog, with my layout & style. It seems that compiling it all to binary would make sharing harder instead.

<comment><AUTHOR> But if all web applications were to serve content as meaningful objects, then the underlying format could be anything, so long as it were standardised. VMs could transmit everything as JSON if they so chose, but they might as well use a binary format because no human need ever see it.

If all applications are communicating using the same abstractions, then it doesn't even matter what language they're written in. My site can be written in Haskell and it'll serve blog entries just as well to Haskell on the Firefox VM on Windows as to Ruby on the Chrome VM on a Linux toaster. And we never need to agree on an interchange format, because that's the VM's job.

</comment></comment><comment> guard-of-terra What problem does it solve for the end-user?

If it doesn't, we should skip it. Programmers love large-scale infrastructure refactorings and they always get those wrong. Both in axiomatics and in implementation.

For example, I would argue that if unified web bytecode was adopted in 2002, its performance would be inferior today than

</comment><comment><USER12> Is it just me or does it sound like this guy REALLY wants everyone to move from html/css/js back to Flash apps?!?

<comment><AUTHOR> You mean a proprietary platform that offers little to no interoperability, accessibility, composability, or searchability? No, that's precisely the opposite of what I want.

</comment></comment><comment><USER13> Welcome to the world of backwards compability.

<comment><USER8> Backwards compatibility only goes so far. It has to break someday. We need to make sure it's worth the pain when it happens.</comment></comment>


Google Cripples Chromecast Third Party Replay - <AUTHOR> http://www.theregister.co.uk/2013/08/26/google_cripples_chromecast_third_party_replay/

<comment><AUTHOR> If this is as straightforward as reported, its a real issue. I was actually considering getting ChromeCast for a couple of the TVs in the house but killing off third party streaming? Really? Would love to here that these app writers just missed a developer's note that they needed to change to a different API.

<comment><USER2> Yeah - I was just checking in on progress for Chromecast coming to the UK, and came across this news. Bummer - think I'll stick with my (jail broken) Apple TV for now.</comment></comment>


Ask HN: How would you find software work for making interactive art? - <AUTHOR> As someone who majored in art, in particular with classes that involve programming as a tool to "execute your vision" (rather than learning programming for the sake of fundamentals) I definitely see myself taking jobs for interactive art software. For example creating software that generate music based on how you are playing chess, or "mirrors" made out of stone or wood tiles that take feedback from video, and rotate the tiles to catch the right amount of light in order to duplicate what is in front of it.<p>Companies like this one are suited for what I want: https://limbicmedia.ca/ But I live in the US, not Canada, and I don't know what interactive art companies exist where I live (metro Midwest area). <comment><USER2> Just make stuff. Make stuff and get it out into some places. Talk to places you know, and see if you can do a little something here and there. A store window is a great place to make eye catching stuff for an unsuspecting audience. Do this a bit and build your network. Also, ad agencies are sometimes looking for "experiences" so that's another avenue to network.

</comment><comment><USER3> What you are currently describing sounds like it would be seen in an art installation somewhere at a museum or sponsored-expo. So to navigate those channels you would have to be good at networking in the art/non-profit scene to find paid work.

I don't think there are many companies that just wake up and say "we want to hire someone full time that makes (things like what you described)".

If there are, then search the web for such companies and see if you can send them a portfolio and resume, or if they have open positions posted already.

If you are hitting lots of roadblocks, then the next step would be to make this art on your own, market it on youtube, and monetize the projects through sales of art, ad revenue, individual donations, and so on. Then you can file taxes as a 1099 sole proprietor and you can start deducting the cost of expenses, and you've effectively "made your own job".

Good luck and enjoy!!</comment>


Formal Methods in Practice: Using TLA+ at ESpark - <AUTHOR> https://medium.com/espark-engineering-blog/formal-methods-in-practice-8f20d72bce4f <comment><USER2> I just gotta say, it's _incredibly_ surreal seeing one of the people who inspired me to start studying formal methods link an article I wrote on formal methods.

<comment><USER3> Hi Hillel, Not sure if you can help but I am interested in TLA and was following your tla intro website, particularly this part: [https://learntla.com/pluscal/toolbox/](https://learntla.com/pluscal/toolbox/). I installed TLA+ Toolbox, added the example spec, translated and then tried to "run the model" however nothing happens. No output, the start and end time are still blank, no statistics etc. It is as if I never hit the run button. I don't see any errors in the console and I'm not exactly sure what I am doing so I may have missed something. FWIW the Model Overview view looks identical to the screenshot in the webpage.

<comment><USER2> Would you mind emailing me the screenshots at h@learntla? My immediate guess would be that "temporal properties" is unchecked, but I'd have to take a look.

</comment></comment></comment><comment><USER4> Is TLA+ similar to Alloy[1]?

1\. [http://alloy.mit.edu/alloy/](http://alloy.mit.edu/alloy/)

<comment><USER5> In that they're both modeling languages, yes. Alloy is more geared toward algorithms, while TLA+ is more geared toward concurrent systems. This paper has a good comparison: [https://arxiv.org/abs/1603.03599](https://arxiv.org/abs/1603.03599)

<comment><USER6> TLA+ is not a model checker. It is a specification and proof language. However, it has verification tools that include a model checker (TLC) and a mechanical proof system (TLAPS), both support a large and useful subset of the language. There are also other TLA+ model checkers under development or already available with some effort. In many ways it is more similar to Coq and Isabelle than to Alloy. For one, it has proof of relative completeness: anything that can be proven about a system, can be proven in TLA+.

But because a model-checker makes a _huge_ difference in productivity (it is usually the difference between worth it and not worth it), it TLA+ is similar to Alloy in terms of the effort required. Also, while it is harder to learn than Alloy, it is _much_ easier to learn than Coq or Isabelle; partly due to design and partly due to the fact you can use it without learning how to be effective at writing formal, mechanically-chcekable proofs. It takes about two weeks to learn TLA+ well enough to start getting real work done.

OTOH, while TLA+ can in principle be used to prove general mathematical theorems, it was designed with a focus on discrete systems (i.e., software and hardware) and targeted at engineers, not mathematicians/logicians, so if you want to do general formal math, Isabelle or Coq would be a better choice.

<comment><USER5> Yes I misspoke, but, for the purposes of the article, the GP's question, and the use to which most readers here will put TLA+, it's tied at the hip to TLC and is used primarily for model checking.

</comment></comment></comment></comment><comment><USER7> The problem:

 _The apps, while critical to the effectiveness of the product, are also the most complicated component. Each student needs a different set of apps, which change as they complete lessons. We have to be able to track and adjust them in near-real time, so that students aren't left without a next lesson. In extreme cases a student might need six apps in the morning and six completely different apps in the afternoon. We also have to be mindful of school budgets, so we have a limited number of the paid apps and shuttle them between students. Finally, since we need to do this at scale, the entire system has to run automatically with no teacher or admin intervention._

This seems to be re-inventing the Web, but with more DRM. It's a lot like running a corporate intranet. Ten years ago, this could all have been done easily with Java applets or Flash programs. The actual apps look like Flash projects.[1] Most of this could probably be done with some toolkit for generating browser games in HTML.

Does this thing really need to be this complicated? Or has it been overdesigned?

Mandatory XKCD: [2]

[1] [https://www.youtube.com/watch?v=p6deAYxzlCc](https://www.youtube.com/watch?v=p6deAYxzlCc) [2] [https://xkcd.com/1367/](https://xkcd.com/1367/)

<comment><USER2> These are third party iOS apps; we don't make them, just curate them. We've at times looked into replacing all of the native apps with web apps but there just isn't enough quality stuff out there to make the switch possible.

</comment></comment><comment><USER8> What are the prerequisites for getting to a productive level at using formal methods (with or without TLA+) in a non-trivial way?

And what are some suggested resources for filling those prerequisites?

<comment><USER9> This question is difficult to answer in general, because TLA+ is a very particular kind of formal verification tool (it's a model checker designed more around concurrent hardware/software than e.g. pure mathematics or general proving, or equivalence checking, etc). There are a lot of verification tools out there, many of them substantially different in scope, intent, and design. It's a bit like asking "What prerequisites do I need to drive a (boat or a motorcycle)?" They're very different beasts, and it's a very big field.

On this note, "non-trivial" formal verification can often be _very, very_ non- trivial, depending on how you approach it. And I mean that in the sense that actually _writing the specifications and proving them_ can be extremely hard, depending on the tools -- even if the problem itself may 'seem' easy. Think "I have a 1000 line program that needs 10,000 lines of proofs". (1-2 orders of magnitude is probably a good ballpark estimate, if you're doing things with tools like Coq.)

Luckily, TLA+ in particular is pretty easy to learn and you can get productive in a few weeks I think, and it's geared more towards engineers than e.g. general mathematicians or whatever. This introduction is pretty good:

      - https://learntla.com/introduction/

If you want a more general background... Go pick up some books on logic and computability. The things you learn here will apply deeply to nearly every approach to formal verification you can think of. Start with simple propositional logic, and you can move up to first-order logic, higher-order logics or type theory later on. This will help you understand logical systems, how to prove propositions, their relations, what can be decided etc, which will be deeply useful, forever.

If you want _the_ book on this stuff, I strongly recommend the following one. It is dense but it is, in short, the bible of automated computer-based theorem proving, as far as I'm concerned, and has substantial code to back it up. (The author does formal verification of FPUs at Intel):

[https://www.amazon.com/Handbook-Practical-Logic-Automated- Re...](https://www.amazon.com/Handbook-Practical-Logic-Automated- Reasoning/dp/0521899575)

<comment><USER6> I agree with almost everything you say, but I have a few comments.

First, TLA+ is not a model checker. It is a specification and proof language that _also_ has tools in the form of a model checker (more than one, actually) and a mechanical proof system.

Second, it is absolutely true that TLA+'s focus is not general mathematical theorem proving, and its intended audience are engineers, but it is not so much designed around _concurrent_ hardware/software but that it is designed for _algorithms_ in general. This means that it is _also_ very appropriate for reasoning about concurrent or _interactive_ (which is just a form of concurrency), whereas general mathematical tools that are often designed to reason about constructive functions rather than algorithms, and so can naturally reason about sequential algorithms, but need extra effort to reason about interaction or concurrency.

Finally, a strong focus of TLA+ is that it can serve as a refinement calculus, namely reason about the same system/algorithm at different abstraction levels, and explore the precise relationship between the different levels.

I agree that TLA+'s most practical advantage is that for its power, it is exceptionally easy to learn and apply in practice (much of this is due to the availability of a model checker). I also agree that ultimately, the specification, reasoning, and proof work in pretty much all formal tools is much more similar than different.

</comment></comment></comment><comment><USER10> Man it looks really cool to use this in an enterprise. It seems like you'd need a lot of support to introduce it into an Enterprise environment. Ramp-up time for learning and it looks like it runs really slow, so you'd need buy-in for the runtime too.

Any advice for those of us who'd like to introduce this to a team rather than play with it on our own?

<comment><USER5> Learn it on your own first _before_ trying to foist it on others. I'm on the cusp of seriously introducing use of TLA+/PlusCal at the startup I'm at, and having worked through (and had success with) modeling a couple real-word concurrent systems I have designed here, I have a very different perspective how to use TLA and explain it to co-workers than when I first started using it.

(For example: it's tempting to think of variables as some sort of communication channel – they're not. And fairness can be hard to conceptualize until it's put to a real-world use.)

Definitely use PlusCal. It's a little more to learn, and a little more restrictive, than straight TLA+, but most TLA+ specs you write will end up looking like the output of PlusCal anyway, and the PlusCal version will be much more compact and easy-to-follow. Just remember that PlusCal is _not_ like any other programming language; especially the "await" statement can throw newcomers off (it's _not_ like "await" in other languages).</comment></comment>


An easier way to use Python's cProfile - <AUTHOR> https://github.com/ymichael/cprofilev <comment><USER2> I found that writing cProfile's profiling data to a file and analysing that with either RunSnakeRun's[1] or KCacheGrind's[2] GUI gave me much more insight than just the tabular display from cProfile. It gives you a really good visual overview of where your code spends its time and has a really good interface for drilling down into subroutines to pinpoint the exact location of the slow code.

[1] [http://www.vrplumber.com/programming/runsnakerun/](http://www.vrplumber.com/programming/runsnakerun/) [2] [http://kcachegrind.sourceforge.net/html/Home.html](http://kcachegrind.sourceforge.net/html/Home.html)

<comment><USER3> Still not exactly great. I'd like to get a flamegraph view of the profile[0] or a chrome-style time series as it provides a much clearer high-level picture, but I'm not sure cProfile records enough information to do so (or that it stores threading informations in the profile, which would be necessary for time series)

[0] [http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html](http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html)

<comment><USER4> I added flamegraph to plop, if you're interested:

[https://github.com/andreasf/plop/tree/flamegraph_support](https://github.com/andreasf/plop/tree/flamegraph_support)

Here's an example: [http://zentrale1.com/~an/nachher5.svg](http://zentrale1.com/~an/nachher5.svg)

<comment><USER5> This thread changed my life.

<comment><USER4> Few more tips for successful Python profiling:

* By default, the ITIMER signals used by the profiler interrupt syscalls. Disable that by adding the following in plop.Collector.__init__() _after_ the call to signal.signal():

      signal.siginterrupt(sig, False)

* Try all ITIMER modes, e.g. by changing the default in plop.Collector.__init__()

</comment></comment></comment></comment></comment><comment><USER6> This looks like it could help make it much easier to profile my django web apps during development.

</comment><comment><USER7> Ooh, this will help me a lot!

<comment><AUTHOR> Thanks!</comment></comment>


New, much faster version of News.YC - <AUTHOR> http://ycombinator.com/newsnews.html#11apr07 <comment><USER2> Thanks Robert Morris & PG!

When will ARC be available (It's looking pretty exciting)? What problems are you solving that take it beyond CL?

<comment><USER3> I am as big an Arc fan as the next guy, but I can't say it _looks_ any more exciting than PHP. I am highly interested in it being released, however. It seems to me that if you're at the point where you're rewriting internals for speed, you're at the point where it works well enough to be released. If you just release it without any guarantees or claims about its goodness, sure you might get bashed all over the internet, but also a lot of people would use it and modify it for themselves, and maybe some of said improvements might be useful to you. The YC admissions cycle is over, so maybe you have time to do this now.

<comment><USER4> If Arc ends up looking like PHP then I think it's fair to say that Paul's going to get bashed pretty badly indeed.

<comment><USER3> I know Arc is way better than PHP and was even before it existed (IMO a language that doesn't exist is better than PHP). My point in the first sentence was that all we can _see_ of Arc is this web page, a replica of which could be created in PHP with little or no change in the user experience.

Anyway, the bashing part would presumably be because some of it isn't finished, or because people don't understand some of his decisions that he didn't explain, not because the language is bad. I theorize based on what's been written about it that Arc is a quite nice language to use, particularly for Lispers.

<comment><USER4> Did you hear that the Inkling guys are rewriting their entire site in it? It must be ok.

<comment><USER5> Uhmm... that was an April Fool's joke. Not sure if you intended for there to be sarcasm in your post.

<comment><USER4> A little too dry I guess today. It was a good April Fool's joke though.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> Is arc self-hosting, a bunch of Common Lisp macros, or implemented in some other language? How long until arc is self-hosting? :)

<comment><USER3> It's written in mzscheme. I don't know exactly what self-hosting means, but PG did write his own web server, and he said he very much wouldn't want to deal with Reddit-sized traffic, so I expect he runs everything on his own computers.

<comment><USER7> Self hosting = interpreter/compiler for the language written in the language itself.

</comment></comment></comment><comment><USER8> I'm curious, does a 2-3x increase in speed very perceptibly better the user experience? I can understand a 15 second to 5 second reduction. What about a 2 second to 0.6 second reduction? What about balancing by faster hardware?

(asking because it's directly relevant to me)

<comment><USER2> Before the upgrade, if you were to load a page with alot of comments, there was a noticeable delay. That is no longer the case.

</comment></comment><comment><USER9> The extra speed would have been nice yesterday, while the emails were going out. I doubt I was the only one who noticed the site slow down as we all refreshed compulsively. :-)

</comment><comment><USER10> Would it be good experience to learn Mz. Scheme as a primer before ARC is released?

<comment><USER11> Definitely learn a Lisp, but I doubt the release version of Arc will still use mz.</comment></comment>


How did MS-DOS decide on two seconds to keep the floppy disk cache valid? - <AUTHOR> https://devblogs.microsoft.com/oldnewthing/20190924-00/?p=102915 <comment><USER2> Brings back great memories of Sierra's King's Quest and swapping out floppies as you reach different parts of the game. 2 seconds was definitely the minimum time I would imagine being able to put in a new floppy and not risk crushing it, but doesn't that not take into account the ability of the hardware to find the sectors on the disk that need to be calibrated when you insert it?

<comment><USER3> There is no calibration in floppies (and very old hard drives), track location is hardcoded in hardware and selected with stepper motor.

<comment><USER4> Hard-sectored 8" and 5.25" floppies did exist.

</comment></comment></comment><comment><USER5> Two seconds is the time it takes in Formula 1 for mechanics to lift a car, change four tires, and put the car back in movement. It is difficult to believe that you cannot swap flop drives in less than that time.

<comment><USER6> Doing it F1 style, you'd have one person take out the first floppy _while_ a second person inserts the second floppy.

<comment><USER7> You need a third person to push the button that ejects the floppy.

<comment><USER8> And you'd need a fourth person to push the floppy in.</comment></comment></comment></comment>


The Idiomatic Way to Merge Dictionaries in Python - <AUTHOR> https://treyhunner.com/2016/02/how-to-merge-dictionaries-in-python/ <comment><USER2> Seriously?! Just use solution 2, god forbid you have two lines of code to be clear and accurate:

        >>> context = defaults.copy()
        >>> context.update(user)

</comment><comment><USER3> This page is reasonable evidence that "one (obvious) way to do it" has gone out the window, and that nowadays Python takes the kitchen sink approach like many other languages, particularly those which have an "old" and a "new" way of doing things. Examples are:

* Javascript (ECMAScript4, ECMAScript5 and ECMAScript6 all have different ways of iterating a collection! Not the mention the many utility libraries which implement quite basic things in different ways)

* PHP (Old school no-OO built-ins, <?php templating vs Java style OO PHP5+ and the SPL, )

* C++ ("C with classes" vs varying degrees of template magic, STL and Boost)

I'm beginning to feel quite sceptical about whether these types of changes are actually worth it. % on strings was a little bit quirky but fine - I don't see why .format() is better -- people are still going to encounter the first so the damage is already done. Using either of the first two with .update() was fine.

<comment><USER4> The first (or second) seem pretty obvious to me.

</comment></comment><comment><USER5> I don't mean to be too critical because there was clearly a lot of effort in this write-up, but as a serious question: what value does the post add that's not already found at the huge and very popular Stack Overflow page [0] (that this post even links to) about this subject?

Particularly, the answer by StackOverflow user `Aaron Hall` upvoted around 680 times [1], also deconstructs and provides eerily similar content as what this post gives (for example, the poorness of the

        dict(x, **y)

solution and some performance comparisons).

I guess this post does mention itertools.chain and ChainMap ... though I would almost never recommend using those if your goal is to merge two regular dicts. Probably anyone reading the code is going to be baffled unless there was a special reason why generators or ChainMap were needed -- these really don't belong in the discussion; they're very different.

As someone who has used Python almost daily for the past 8 years, I also can't help but feel let down when I read more stuff about being so-called "pythonic." I especially hate it when I see discouraging criticisms on Stack Overflow that seem to scare away newcomers because they didn't know you could do a dict comprehension or something. The whole "pythonic" thing is waaayyyy overrated. Just write code that is clean, and if you use a couple of extra lines, or you loop over a range instead of a for-statement treating something as an Iterator, so what, it really, really doesn't matter in most cases, and you can always profile and fix the few cases where it does. It _certainly_ doesn't matter because of some subjective debates about what is more "readable", like whether a dict-comprehension is "less readable" than a two- line copy-and-update approach.

[0] [http://stackoverflow.com/q/38987/567620](http://stackoverflow.com/q/38987/567620)

[1] [http://stackoverflow.com/a/26853961/567620](http://stackoverflow.com/a/26853961/567620)

<comment><AUTHOR> Thanks for the critique. I'm not sure I added much to that analysis on Stack Overflow outside of headers, a few more opinions, and a little bit more explanation. I mostly wrote to have something to link my students to because this question has come up before and I didn't find any of the more comprehensive SO answers to be easily digestible/skim-able.

The python-ideas thread from last year about using + on dictionaries was also an inspiration. I don't recommend reading it in full (there's some painful debating) but there were some really interesting concerns brought up on there in regards to this particular problem.

In regards to newcomers being scared away by criticism on Stack Overflow: I completely sympathize with this point of view. New Python programmers and new programmers especially should not worry about what is "pythonic" until they've become comfortable with their own Python programming abilities. Working and readable code is most important, idiomatic code is simply icing on the cake.

I do however value discussions of what is "pythonic". I often discuss "pythonic" in my classes to instill the idea that community norms change from language to language and even between frameworks and projects.

I really hope the wording of this post didn't come off as elitist. If so, I will certainly need to reconsider my wording for the next one.

<comment><USER5> You do not come off as elitist in any way. Having your write-up available for your students makes perfect sense, though I don't know that posting it to Hacker News will result in much (but it doesn't seem like your target audience anyway).

I think "pythonic" is a slippery slope. Many people take it too far and begin to develop militant ideas of what "readability" means, or they do silly things. For instance, I once heard a tale about someone needing to create their own toolkit for handling paths in a certain project. It was just going to a wrapper around the usual os.path tools, but would factor out a lot of the team's repetitive code.

That person actually implemented __abs__ so that "abs(p)" resulted in the absolute path for the path object p. Ugh!

The justification was that this is supposed to be more "pythonic" than just writing a simple helper function. And of course, if you say that the documentation about Python idioms or accepted understandings of what is "pythonic" don't have anything to do with the choice to implement something as a special method, the other person's response is just "yes it does" \-- their interpretation is that this is what pythonic means. It's like having an interpretation debate about the Bible or something. It means something different to everyone, which makes it pretty useless as a centralized standard.

If you apply good Haskell style, or good C style, or good Java style, to writing Python, your code will be absolutely fine and perfectly readable even in large enterprise codebases (perhaps more so depending on who else reads it).

I think Google's C++ guide has the right idea. You should follow the _local_ conventions of the piece of code you're editing.

If you're working in a Python module where someone puts every function argument on a new line (even if you're not near the 80 char limit) like this

        def foo(arg1,
                arg2,
                ...):
            # ...

then you should just also do that, and not waste time about whether this is more Pythonic

        def foo(arg1, arg2,
                arg3, ...):

I think if the Python community trumps up this idea of pythonic, it just alienates other people whose natural style (or the guides to their own main languages) tell them differently.

Over time, Python developers will learn when it's better to use map than a comprehension, how to style things, how avoid doing needlessly complicated things like the __abs__ example above. You don't have to drill "pythonic" stuff into them for that sort of clean code common sense to emerge, and you certainly don't need to make it a major point of community pride or identity.

</comment></comment></comment><comment><USER6> I got a bad feeling when the simplest, most obvious, clearest solution that solved the problem was rejected. Isn't that what Python is all about?

</comment><comment><USER7> U may also want to mention that #5 is pretty much violated in all of these if say a nested dict (or really any other object that is by reference) is in default or user.

      >>> x = {'a': {}}
      >>> y = x.copy()
      >>> y['a']['b'] = 'c'
      >>> x
      {'a': {'b': 'c'}}

<comment><USER8> This is exactly what copy.deepcopy() is for. Although if you're headed down this road, you're generally in for a bad time.</comment></comment>


Most Dangerous Software Errors - <AUTHOR> https://cwe.mitre.org/top25/archive/2019/2019_cwe_top25.html <comment><USER2> [1], [5], and [12] are array bounds overflows, and sum up to a score of 113.17.

In contrast, [14] Null Pointer Dereference only has a score of 9.74.

This is why I disagree that null pointers were the billion dollar mistake - buffer overflows are.

C's Biggest Mistake: [https://www.digitalmars.com/articles/b44.html](https://www.digitalmars.com/articles/b44.html)

<comment><USER3> The billion dollar mistake refers to Hoare's statement, not the fact that it might have been a more or less costly error. And errors in terms of security are not all that matter: a simple crash can cost money too.

[https://en.wikipedia.org/wiki/Tony_Hoare#Apologies_and_retra...](https://en.wikipedia.org/wiki/Tony_Hoare#Apologies_and_retractions)

</comment></comment><comment><USER4> I find the OWASP cheatsheets to be a good start at identifying, understanding and fixing issues like these.

[https://cheatsheetseries.owasp.org/cheatsheets/IndexASVS.htm...](https://cheatsheetseries.owasp.org/cheatsheets/IndexASVS.html)

</comment><comment><USER5> Number 6 will surprise you!

</comment><comment><USER6> Dealing with the general public is hard.</comment>


Ask HN: Advise me about my "startup" – pdfcv.com - <AUTHOR>

pdfcv does one thing and does it well, it helps you create a CV (or a Resume for you folks across the pond). I first built it a few years ago scratching my own itch: creating a nice CV with a word processor is hard, changing the style of it is even harder. So I hacked together an application which imports your LinkedIn profile (optional), allows you to edit it and renders a CV to one of the templates. It literally takes 2 minutes if you have a somewhat complete LinkedIn profile.
A few weeks later I landed a job with a CV built with pdfcv. A few of my friends came back to me with success stories too. After a year or so I noticed a traffic increase from organic search and finally had the guts to start charging for it. I designed the charging scheme to minimise the amount of support I'd have to do: you get a preview of your CV for free and you can upgrade to remove the watermarks if you like it. It seems to work well and generates enough passive income to pay for my lunch.
However I do not know what to do next. The job market seems to be lively nowadays and there are things happening around it, but I don't know how much potential does a CV/Resume builder have. Should I try to actively advertise with google adwords or look to partner up with companies who might need a similar tool? Or should I just forget everything and enjoy my free lunch with almost no extra effort?
Any feedback on the UI or the workflow is very welcome too. <comment><USER2> The screenshot on your homepage is blank. It should be filled in to allow users to imagine their own resume in its place. Showing users the placement of unknown elements certainly won't get them to sign up. You show it off under templates, but most won't get that far.

Spend the next year iterating the product into something with a clear value proposition, and you might have a business. Everything you do from this point on will be of your own doing. Bringing on other people, trying to build partnerships, etc. with a product that isn't completely fleshed out is a waste of time. It's just a creative form of procrastination.

<comment><AUTHOR> Thanks for taking the time to review pdfcv. The "empty screenshot" is supposed to be an abstracted text on a resume. I had samples of actual, filled resumes in an older version of the homepage and it looked visually heavy. I'll ask around to see what other people think it is. Also, the current bounce rate is 35-40% which is not too bad.

I have some ideas of how to make the workflow very simple, I hope that then the value proposition will be obvious.</comment></comment>


Emacs 24.5 released - <AUTHOR> http://thread.gmane.org/gmane.emacs.devel/185268

<comment><USER2> The NEWS link on gnu.org leads to a 404 so here are the changes copied from Savannah.

        * Changes in Emacs 24.5

        ** This is mainly a bug-fix release, but there are some other changes.

        ** The default value of `history-length' has increased to 100.

        ** The variable `redisplay-dont-pause' is obsolete.

        * Changes in Specialized Modes and Packages in Emacs 24.5

        ** `call-process-shell-command' and `process-file-shell-command' no longer
        take "&rest args".

        ** The option `browse-url-firefox-startup-arguments' no longer has an effect.

        ** ERC

        *** New option `erc-rename-buffers'.

        *** New faces `erc-my-nick-prefix-face' and `erc-nick-prefix-face'.

        *** `erc-format-@nick' displays all user modes instead of only op and voice.

        *** The display of irc commands in the current buffer has been disabled.

        *** `erc-version' now follows the Emacs version.

        ** Obsolete packages

        *** cc-compat.el

        *** crisp.el (moved to elpa.gnu.org)

        *** tpu-edt.el, ws-mode.el
        These emulations of old editors are believed to be no longer relevant
        - contact firstname.lastname@example.com if you disagree.

        *** vi.el, vip.el (try M-x viper instead)

\---

...and here's what we're looking forward to in 25.1 (corrected): [http://git.savannah.gnu.org/cgit/emacs.git/plain/etc/NEWS](http://git.savannah.gnu.org/cgit/emacs.git/plain/etc/NEWS)

Package.el will attempt to download asynchronously by default. `package- selected-packages` tracks user-installed packages vs. dependencies of other packages. `package-autoremove` will remove packages that were installed as dependencies but no longer used. New minor mode enabled by default, `global- eldoc-mode`. Eww can render HTML with variable-width fonts. Good stuff. :)

<comment><USER3> I think that link is for the bleeding edge dev version. It says 25.1 rather than 24.5. Looks like its going to be a good release tho. :)

<comment><USER2> Whoops, you're right (for the stuff I posted under the paste)! Fixed.

</comment></comment></comment><comment><USER4> Emacs is currently my preferred operating system, and I wish I could use it for everything. One problem is the Web. A modern browser is also an operating system of it's own, and while it is possible to embed a full-featured browser into Emacs, it can't be fully integrated. We need an Emacs-based alternative to the Web, something decentralized, maybe Xanadu-like! Just dreaming.

<comment><USER5> It's a nice dream. Emacs Xanadu-land is a place I'd like to visit.

The web is ready for replacement. We need an alternative. A new place for all the cool kids to hang out.

</comment></comment><comment><USER6> It's downloadable now at [http://emacsformacosx.com/](http://emacsformacosx.com/)

</comment><comment><USER7> Can anyone comment on why they are tag-averse? In my mental model, applying the git tag is just a standard (and arguably _the first_ ) step in making a release.

This link is 404 as of this comment:

[http://git.savannah.gnu.org/cgit/emacs.git/tag/?id=emacs-24....](http://git.savannah.gnu.org/cgit/emacs.git/tag/?id=emacs-24.5)

<comment><USER8> They just switched to git from bazarre recently, it's possible they are using it idiosyncratically at the moment

<comment><USER9> It's more than just possible, it's likely. They have recently had long flame wars because old timers don't want to, and think they shouldn't have to, learn about the git's "index" and think git should be changed to push on commit like cvs. Give them time.

<comment><USER10> This reminds me that with git sometimes you don't have anything to push to.

Example 1: a repository is local by definition and if you work alone you can back it up to your USB disk and never push it to any remote.

Example 2: there are many ways to send diffs to other developers. Push is one of them but you can also use git-format-patch and git-send-email together to mail them to your team.

[http://git-scm.com/docs/git-format-patch](http://git-scm.com/docs/git-format- patch) [http://git-scm.com/docs/git-send-email](http://git-scm.com/docs/git- send-email)

</comment></comment></comment></comment><comment><USER11> How long does it usually take before the latest version is available for Windows?

<comment><USER12> I have seen it vary from a few days to a week or more. In case you just want to try the latest features, I can recommend unofficial emacs-w64 builds ([http://sourceforge.net/projects/emacsbinw64/](http://sourceforge.net/projects/emacsbinw64/)). Been using a build from here for months and found it to be fairly stable.

<comment><USER13> Does anyone know what the obstacles are to an official 64-bit Windows build? There are multiple unofficial builds in the wild and at least one (linked in the parent comment) builds without patches.

<comment><USER14> I've done some emacs building on Windows before, and I think it's more to do with all the dependencies.

There are so many of precompiled dependencies available for 32-bit, but last time I checked, it's not the case for 64-bit, so you have to resort to compiling those dependencies as well. Though this situation may now be better, but that was major issues when I looked into 64-bit before.

</comment></comment></comment></comment><comment><USER15> How does it compare to Aquamacs?

<comment><USER16> Aquamacs is a heavily customized emacs based on GNU Emacs. I'm not sure how or if Aquamacs resynchronizes with GNU Emacs, but in principle, a new release of Aquamacs might start with this release of GNU Emacs as a base.

In general, I've found the platform integrations of Aquamacs to not be worth the trouble and package incompatibilities that they appear to introduce. I'm not using OS X these days, but up until a couple of months ago, I tended to use either the "Emacs for OSX" distribution, or compile my own via Homebrew.

I think it's pretty common for people to recommend using one of the more "vanilla" versions of GNU Emacs over Aquamacs these days.</comment></comment>


We Mailed 100K Stickers Around the World, Made a Million Mistakes Along the Way - <AUTHOR> https://dev.to/thepracticaldev/sending-100-thousand-stickers <comment><USER2> I still don't know why companies insist on only accepting a specific address format. As they said, every country has its own format: some with the house number in front of the street, other afterwards; some with a province, others not; etc.

A simple text box is so much simpler (enforce things like max width, max lines) and relies on the customer inputting their info corresponding to their local postal delivery. In an international context this is the right way.

Edit: the only thing that must be localized in the sender's locale is the recipient's country (Spain instead of España when sending from an English speaking country). Every thing else must be in the recipient's locale.

<comment><USER3> At [https://hackclub.com](https://hackclub.com) we send stickers to tons of students all around the world to help them promote their clubs.

One of the big problems we run into is that people often don't know how to properly write their address. They'll forget to give us their zip code. Or their state. Sometimes even their city. Does the state go before or after the zip code? How do you write the apartment number? It only gets more complex when they're in another country and we're sending from the US.

We probably run into these issues more often than most because we work with high schoolers that usually aren't regular users of physical mail, but we also run into these same problems more often than you'd expect when sending stickers to adults that donate.

Having form fields to prompt for everything needed fixes this problem.

<comment><USER4> _One of the big problems we run into is that people often don 't know how to properly write their address_

OK, I think there is a limit to babysitting. If someone is a developer /runs a coding club and __does not know how to write his address __we run into basic darwinian natural selection.

<comment><USER3> How often did you send letters in high school?

I know that I thought zip code came before state until I started sending lots of mail.

<comment><USER4> Everyone knew his address when 10 yo. Not only you have to write it down a few times a year but it may have even been taught at school (France).

One of the reasons may be that we use addresses a lot, in other countries it may be that they are used only with actual shipping (?).

<comment><USER3> Everyone knows their street address, just not how to write their full address on an envelope for postal service.

<comment><USER4> I meant the full address, the way it should be written on a letter.

</comment></comment></comment></comment></comment></comment></comment><comment><USER5> "Initially we assumed this endeavor could be housed by a single Excel file...."

What?! Are you sure dev.to is a community of developers?

I can understand the part about character encoding (it has happen to all of us...) but seems like a lot of the issues they had could have been avoided by applying some software development skills...

Still, it is very nice that you decided to give away stickers for free, being on the recipient side is a nice feeling, I remember from the time Canonical shipped free Ubuntu disks!

<comment><USER6> Founder here. Here are a couple comics that describe why it might have been the right choice to not try and software develop our way out of this one in the first place. [https://xkcd.com/974/](https://xkcd.com/974/) [https://xkcd.com/1319/](https://xkcd.com/1319/)

</comment></comment><comment><USER7> I still don't know what dev.to does, only that they fail at sending out free stickers.

<comment><USER6> Founder here. [https://dev.to](https://dev.to) a platform for the software dev community to talk about what they're hacking on and teach one another. It's a lot clearer on the home page. This post is just a story about stickers. :)

<comment><USER8> Not to say that every blog post needs to make you look great, but there were a LOT of code issues with this process. You should invest in a grumpy QA team.

<comment><USER6> Duly noted. I'm pretty proud of our team in general though. At the time there were two devs working on the whole app and I think we got a lot of good work done.

</comment></comment></comment></comment><comment><USER9> Some of those mistakes really shouldn't have happened, particularly because it was a community of developers and not just some big, old-school corporation. It's nice to see 95% of people eventually received their items but that could've been achieved with a lot less hassle!

On a side note, I hope the addressing experience was insightful and will be thought of better in future applications. It irks me to see so many web forms with the very American form of "City, State, ZIP" that are not designed to handle any exceptions to that rule, not because the company policy doesn't cater to an international audience, but because the developers didn't realise that addressing is very different across the world - and those people all get their mail just fine.

<comment><USER10> In a very small way, it always bothers me as a Brit (now living in the US) to see address information ask for (and even require) a ZIP code for int'l customers for two reasons:

1\. ZIP is a US-only term. Sure, it's easy to figure out, but it's postal code everywhere else in the world. If an address form has a country field, the form should at least change the label accordingly. If not, even just writing "ZIP/postal code" makes at least some attempt to avoid US-centric terminology.

2\. Some countries don't use a postal code system at all. I've seen services make this a required field, regardless of country.

<comment><USER6> Our form said Zip Number/Postal Code and State/Province and neither were required fields.

<comment><USER10> Sorry, this was not aimed at/related to dev.to - just an observation of address fields in general. Glad you were displaying geographically appropriate address info :)

</comment></comment></comment></comment><comment><USER11> I read the article, and discovered that they did not literally make 10 mistakes per sticker.

More like about 10 mistakes overall that resulted in a 5% failure rate for sticker delivery.

</comment><comment><USER12> > So when we got inputs like Después de hogares crea, segunda entrada mano > derecha, última casa verde (something about the last green house on the > right according to Google Translate), we figured we had to validate these > addresses.

Weird as it might seem, that's how addresses work in some places, if you make it invalid, you are excluding those users.

</comment><comment><USER13> Thank you for sharing this. I think a lot of people here forget that there is no such thing as common sense, only hard earned experience. I thought you acted in true start-up fashion, learned a lot, and made your customers happy.

</comment><comment><USER14> Not sure why you're getting so many negative comments in this thread but the Dev.to team is AMAZING.

Thank you for the stickers!

I took some for myself and gave a few to some friends in my coworking space at Galvanize and Green Desk in NYC.

</comment><comment><USER15> Some of those things I don't understand how you can make when there are so many libraries out there, and are common things to look out for.

Other than that, cool idea and cool project

<comment><USER16> Because 20-something devs actually do suck at their jobs, and experience matters!

</comment></comment><comment><USER17> Slightly OT, but has anybody a recommendation on supplier of such printed stickers? I was thinking about sending some to my customers as well. Either US or Europe.

<comment><USER18> The supplier that dev.to used according to the OP is Sticker Mule.

[https://www.stickermule.com/](https://www.stickermule.com/)

</comment></comment><comment><USER19> I was really hoping they were going to mention kerning, because despite the letters appearing perfectly spaced, all I see is "DE V."</comment>


Productivity in Indian Startups - <AUTHOR> India is the third largest startup hub in the world.
A good metric to measure productivity is the size of the team that it takes to build the company around, and the revenue per employee as a metric.
Skype had a team of 27 when they got acquired. Instagram had 13. Whatsapp had 32 Engineers and 55 employees when they were acquired by Facebook and had a whopping 900mn people using the service (and was doing approx $30mn in revenue). Gmail for eg, is still managed by a team of 100 (engineers).
Salesforce a 6.6$bn revenue company has 19,000 people working for it. Zoho has revenues of approx $300mn and Freshdesk has a revenue of about $60mn.
If we do a Revenue per employee extrapolation, Freshdesk would have approx 90,000 people when it does the revenue that SalesForce does. Zoho will have 100,000 people.
On the Pureplay product front, Hike for eg, has 250+ employees (and aims to double it this year), while its counterpart Whatsapp still has the original approximately 55 strong team. Snapchat is however a 1000+ member team and posts 400mn in revenues (and plan to reach 1bn+ this year). Reports suggest that Hike posted a revenue of 100K USD last year.
Most startups have a target of a million dollars of revenue per employee. The same number in India looks abysmally low - even though the salaries are more or less starting to look the same (with adjustments to PPP).
Q: Is there even a difference between Indian Startups and the Outsourced Servicesof the past era?
Cognizant (which does services) has approx 266,000 employees and posts revenues of 13.49billion - approximately double that of salesforce. Our Indian "product" startups would have approximately the same size of workforce of services companies to attain that revenue numbers.
Bottomline : Something has to change.
PS : We have started a premium newsletter to talk abt and share insights like these on the Indian Startup Ecosystem - http://bit.ly/2pndTdq <comment><USER2> Per your Question,Yes there is a difference.Ownership and Control of direction are controlled by the startup and not a service providers "client".

Here is a better metric( which you hinted at ) compare number of users per employee and proximity to the employee.

something does have to change, we need to build AOL,PAYPAL and Nokia ( there are analogues with Reliance,eztap,Micromax )

I would say let the top line solve topline problems, we need better bottom line solutions if we are to do any country by country comp

</comment><comment><USER3> I just don't get the idea of using the word "productivity" in technology and innovation. Tech and innovation are about solving problems and creating a sustainable business model around those solutions and it is not like a factory where you are following a predefined procedure to produce stuff, like TV, cars etc.</comment>


Microsoft confirms Kinect hackers to get official developer kit - <AUTHOR> http://www.pocket-lint.com/news/38701/microsoft-kinect-sdk-officially-confirmed <comment><USER2> I think this is a great step for Microsoft. I believe they've learned a lot from the good PR that Android has received due in part to Androids large and outspoken developer community. I'm sure Microsoft has also noticed a lot of the negativity surrounding Motorola and their decision to lock down boot loaders (effectively removing any developers chance to mess with the phone). That and the mess that Sony has created by suing the people who hacked the PS3.

So, kudos to Microsoft.

<comment><USER3> It's ironic, but Microsoft almost always supported products that reverse engineered their software. One of our products was based on internals research and we received a proposal from their QA team to test our product in Windows 7.

If I remember well, the Samba team had issues in the past with this practice, and also the activesync protocol is jealously protected (and licensed to Google).

<comment><USER4> Microsoft started to help the Samba team because of a lawsuit, not because they felt like being nice to OSS:

[http://www.informationweek.com/news/software/enterprise_apps...](http://www.informationweek.com/news/software/enterprise_apps/showArticle.jhtml?articleID=205101451)

</comment></comment></comment><comment><USER5> This is a great move by Microsoft. Not only will they get free development on their platform, this will cement the Kinect as the next major gaming device. If only Sony could see the benefits of allowing an open SDK on their platform.

</comment><comment><USER6> Related: Adafruit just pointed out that Johnny Lee was behind the original Kinect bounty-

[http://www.adafruit.com/blog/2011/02/21/johhny-lee-was- behin...](http://www.adafruit.com/blog/2011/02/21/johhny-lee-was-behind-the- kinect-bounty-contest-with-a-little-help-from-us/)

</comment><comment><USER7> Very happy about this. Was thinking of picking up a Kinect when the original hackers made a USB driver and started an SDK. Decided to wait and I'm so glad Microsoft is actually pushing it like this. Would love to see it all tied in to Visual Studio and/or XNA.

</comment><comment><USER8> I wonder how their motion tracking compares with PrimeSense's OpenNI and NITE. Does anybody know if this SDK provides full access to player tracking and gesture information, or is it basically like libfreenect, allowing access to the raw data?

<comment><USER9> I am guessing it will be more like the OpenNI drivers, since PrimeSense is already a MSFT partner.

<comment><USER8> It was my understanding that Microsoft doesn't use PrimeSense's gesture and motion tracking software, but instead wrote their own. Unfortunately, I can't remember where I read that.

<comment><USER9> I googled a bit, but wasn't able to find any corroborating evidence. Please post it here when/if you find it. In any case, it will be interesting to compare the APIs when MS releases theirs.

<comment><USER10> I remember Ilan Spillinger (<http://www.xbox.com/en-US/Press/Corporate/ilan- spillinger>) saying something like that at a talk he gave recently- Microsoft Research played a huge role in the development, iirc.

/edit: This talk has some info about it <http://research.microsoft.com/apps/video/dl.aspx?id=139295> (MSR guy starts around 1h00m)

</comment></comment></comment></comment></comment><comment><USER11> Microsoft Research post on the matter: [http://research.microsoft.com/en- us/news/features/kinectforw...](http://research.microsoft.com/en- us/news/features/kinectforwindowssdk-022111.aspx)

</comment><comment><USER12> This is great news! Would there be interest from hackers to participate in a competition to spur open-sourced innovation for the Kinect when the SDK comes out?

<comment><USER9> There's already a $20,000 prize for a natural interaction based browser: <http://www.openni.org/developerschallenge>

There are probably more.

<comment><USER13> The competition closed today :-(

</comment></comment></comment><comment><USER14> More 'coolness' from Microsoft. While I never 'hated' them, this is really feeling odd. Hope they'll stay that way and can make Windows Phone attractive as well.

Hell, if they keep on like this, maybe even Windows will be 'cool' one day. So confusing!

</comment><comment><USER15> As an app developer this is great news... can't wait to see some of the innovative uses that come out of this. The demo video released earlier this week of kinect/windows phone 7 integration was a great first step.

</comment><comment><USER16> Great to hear news like this from microsoft, I think real kudos is deserved for moves like this.

No matter what sort of benefit they get from it.

Probably too much to ask that they release the SDK cross platform :)

</comment><comment><USER17> This is essentially free R&D for Microsoft. No brainer.

</comment><comment><USER18> The kinect and MS is going to play an interesting role in NUI. The surface 2 is also still on the way. It's exciting to see that MS still innovates.

</comment><comment><USER19> No word on licensing. I wonder if it will allow code to be ported to non- Windows platforms.

And prevent Microsoft from suing whoever tries that.

</comment><comment><USER20> This is cool! I have some equipment at work that I'd love to take kinect images of and broadcast :>

</comment><comment><USER9> This is awesome. I've been playing with the openkinect and OpenNI drivers, and it gets pretty painful.

</comment><comment><USER21> Apps for the living room. WHEE !

</comment><comment><USER22> This act of coolness on the part of Microsoft makes my head hurt. I can't correlate "Microsoft" with "smart decision" anymore. I need an advil.

On a serious note: this is a really good way to stick it to Sony too, since they're going after GeoHot and making themselves look like assholes doing it.

<comment><USER23> Nah - they'll just change the rules later and try to take 30%...

Good move, Microsoft. Apple, are you seeing this? This is how you get people to use your stuff.

<comment><USER24> I dislike Apple as much as anyone, but I don't think they really need advice on getting people to use their products.

<comment><USER23> I love Apple - I have tons of their crap. But the genius they have historically shown at attracting developers has been lacking of late. And of all the competitors to pick up that mantle, Microsoft?

Competition is great.

<comment><USER24> The HN crowd might be turned off, but they have six or seven digits of apps in the app store.</comment></comment></comment></comment></comment>