Ask YC: What's Your Favorite Startup Resource? - <AUTHOR> http://howtosplitanatom.com/startup-resources/

<comment><USER2> My customers/users. They give me specific advice on how to make my product better, AND they sometimes give me money (without taking an equity stake).

<comment><USER3> Sounds like customers are the main thing a company needs!

</comment></comment><comment><AUTHOR> Hopefully this is helpful to some of you. I took some time to compile a list of startup resources ranging from Marketing to Hiring. This list is by no means exhaustive,but it isn't bad.

To make it better, I need your help.

Are there any sites/templates/blogs that you would recommend to young entrepreneurs? If so, what are they?

I want to include as many of your suggestions as I can.

(P.S. - offline "resources" are also welcome)

<comment><USER4> Why not just make it a wiki? I'm experimenting with a wiki for developers and testers about which libraries and services actually work (<http://www.devdiligence.com>). It is pretty hard to get people to update a wiki page with what they know -- I imagine it will be even harder to get people outside of this community to send you info.

</comment></comment><comment><USER5> I made something similar to this a while back for my friends:

<http://www.squidoo.com/startup>

</comment><comment><USER6> <http://safari.oreilly.com/>

for ~$500 a year (per person not sure on bulk licenses) access to all the IT books you could possibly want/need. (well almost all)

<comment><USER7> Sweet, was just studying at my school library and it's prepaid.

<comment><USER6> libraries another favorite resource :D

</comment></comment></comment><comment><USER8> "Startup" is a pretty broad category, but for funding advice, <http://www.venturehacks.com> is hard to beat.

<comment><AUTHOR> Good point, added.

</comment></comment><comment><USER6> HN/YC/PG

seems like the right answer. Do I pass?

<comment><AUTHOR> They're already on there. ;)

<comment><USER6> actually the feed for paul grahams essays aren't it should be under blogs to read (even though technically it isn't a blog).

<comment><AUTHOR> Ack. I'll take care of that. Thanks for the heads up.</comment></comment></comment></comment>


Changing emotions with a word: The subtleties of semiotics - <AUTHOR> https://www.economist.com/news/science-and-technology/21741543-science-looks-subtleties-semiotics-how-change-emotions-word <comment><USER2> The HBO film "Conspiracy" ( [https://en.wikipedia.org/wiki/Conspiracy_(2001_film)](https://en.wikipedia.org/wiki/Conspiracy_\(2001_film\)) ) is a great example of (domestic) diplomacy, diplomatic language, persuasion vs force, using language to steer actions that will have terrible consequences. There is no "action" ... it revolves around the preparation and execution of an elaborate meal and conference at a Third Reich mansion ... and yet it's one of the most gripping movies I've ever seen.

</comment><comment><USER3> There's a wonderful novel by Javier Marías, A Heart So White, where the opening focuses on a simultaneous translator at a meeting between a thinly disguised José María Aznar and Margaret Thatcher. He starts to take small liberties with the translation of what "Aznar" is saying, watching reaction of "Thatcher"'s female translator, each time taking slightly bigger liberties because she doesn't say what's happening. It's a lovely portrait of a risky, silent conspiracy, all in the name of testing boundaries rather than ulterior political motives.

</comment><comment><USER4> I recommend this essay by Eric Weinstein on Russell Conjugations: [https://www.edge.org/response-detail/27181](https://www.edge.org/response- detail/27181)

<comment><USER5> thanks, very enlightening

</comment></comment><comment><USER6> "...they suspected that employing nouns ("I am in favour of the removal of settlers"), rather than verbs ("I am in favour of removing settlers"), to convey support for policy positions would have a calming effect."

This article is pretty frustrating. Another reason for this effect, and one I've always thought true, is that using nouns in English is often more circuitous, using more "fillers" like prepositions to convey the same idea, thus softening or obfuscating the harshness of the meaning communicated.

In other words, they don't seem to prove that nouns cause this effect, but that English's use of nouns causes this effect.

<comment><USER7> Anecdotally, I know a lot of programmers who use hedge words to soften their code reviews. So I think you might be on to something here.

</comment></comment><comment><USER8> To have a political discussion without getting people too self-defensive, it's good to pose opinions in the third person:

"I support Trump because he's tough on immigration."

vs.

"People support Trump because he's tough on immigration."

Others are less likely to get combative when it seems like you are making an observation about a third party rather than planting a flag on a core belief.

<comment><USER9> That's always annoyed me with US politics. In the US politicians have a habit of saying "The American people..." Which immediately triggers my thought: "I'm an American person and I don't think that way".

The speaker seems immediately out of touch with me when they use the third person. However, when they use the first person and take responsibility for their own unique views, I can understand them better even if I don't agree.

<comment><USER10> I agree with your point but I suspect the problem with statements like the one you identified is that they claim too much.

In other words, if I say "The American people want X", there are surely some Americans who don't want X and I just alienated them. If, however, I say "many Americans want X", I'm making a weaker claim that is easier to defend.

In general, I prefer that people err on the side of making a weaker claim. It's less frustrating to communicate with people willing to do so (for me, at least).

The one downside of criticizing "weasel words" is that more people start making overly broad claims that you and I do not care for.

<comment><USER11> My favorite hedge is "The American people have spoken" whenever 350 or so adults with landlines answer a loaded question by saying they "somewhat agree."

</comment></comment></comment></comment><comment><USER8> Bypass paywall: [https://archive.fo/lqb1Z](https://archive.fo/lqb1Z)

<comment><USER12> Browsing incognito works, too.

</comment></comment><comment><USER13> Surely this is language dependent! Different languages apply different emphasis to the use of verbs vs nouns/gerunds. There's plenty of good work in that area. I presume the students were all Hebrew speakers?

<comment><USER14> I only have moderate experience in other languages, but I would suspect that there are other ways of achieving the same effect. My aunt is a professor of Spanish, and in her words English is adjective-heavy, while Spanish is verb- heavy which reduces the need for very specific adjectives. So in English you might have to add color to a boring verb to add emotion, but in Spanish you would just pick a better verb.

</comment></comment><comment><USER15> Maybe this is a naive reaction, but it is genuinely horrifying to me that these basic tricks could influence professional diplomats, who are negotiating treaties and policies influencing the lives of millions of people.

Sure, I understand that a random person on the street might be more supportive of "I support the division of Jerusalem" over "I support dividing Jerusalem".

But someone who's entire skillset, career, and purpose is to deal with this question? SURELY, even in this post-truth age of Trump, the facts have to matter for SOMETHING?

<comment><USER16> I doubt it's as effective in diplomatic contexts. Dipolmats (in the broadest sense, including politicians) do not walk into a room, get faced with a single question and then vote yes or no. They work in teams, they discuss issues over many years, they engage in numerous debates and conduct studies and theoretical scenarios. No one phrase on a topic is going to decide their objectives, policies or strategy.

What this sort of thing can do his promote trust or at least tolerance of individuals prepared to talk in this way. That's not necessarily a bad thing, someone who puts in the effort to use diplomatic language, is more likely to be someone who considers their words and actions more carefully, so this could be a useful and actually relevant social signal.

</comment></comment><comment><USER17> The sample size was pretty small and the difference in average was small too. I do not know if this warranted an article on the Economist.

This reminds me of some of the points that Nassim Taleb makes in his books "Skin in the Game" and "Fooled by Randomness". In "Skin in the Game" warns against scientists studying humans in controlled environments and how its not relevant to how humans behave when they have skin in the game. Sort of like, you reveal to me your believes by what stocks you buy or what actions you take. And in "Fooled by Randomness" he talks about how we make out patterns of out randomness.

</comment><comment><USER18> Doesn't this change the meaning of the sentence, though? I learned this in school as the 'active voice' and the 'passive voice'. My understanding is that when you change nouns to verbs and vice versa you are also changing the meaning of the sentence.

How can this research be done, then? Since the two sentences mean entirely different things, obviously people will react differently to them - they are _not_ interchangeable, they have specific and different meanings!

"I support the division..."

and

"I support dividing..."

mean entirely different things. The first one is passive and indicates that the speaker/author is outside of the decision to divide\ and possible outside of the area itself.

The second one is active and implies that the speaker is going to be involved in the dividing activity itself.

Obviously the words will get different reactions from people because they mean different things. Without additional tests to query what the population _understood_ the sentence to mean, along with how they feel about it, would make sense.

But as it is, this is like finding out that people react differently to "let's use fire" vs "lets use a blanket". They are totally different things.

<comment><USER19> That is definitely not what active voice and passive voice mean, they are relatively precise terms in linguistics, see for example _Fear and Loathing of the English Passive_ by Geoffrey Pullum ([http://www.lel.ed.ac.uk/~gpullum/passive_loathing.pdf](http://www.lel.ed.ac.uk/~gpullum/passive_loathing.pdf)). Both _I support the division..._ and _I support dividing..._ are in active voice.

<comment><USER20> "The division is supported by me" would be an actual passive.

<comment><USER19> That doesn't sound grammatical to me, it doesn't sound like the sort of thing anybody would even try to say. I think it violates the rule that Pullum discusses in 2.4.2 p.8 (new-information condition) in that link.</comment></comment></comment></comment>


Build your very own UAV drone spy plane - <AUTHOR> http://bordelon.net/ezstar.html

<comment><USER2> I believe this system was constructed in 2008/2009, which is impressive given the nascent state of open-source drones at the time.

However, today, ArduPilot and Paparazzi are both fairly full-featured in terms of supporting ground stations, waypoints/missions, and autoland, MultiWii/PARIS is very cheap and stable for multirotors (albeit with a more limited feature set), and OpenPilot is developing rapidly. All are open-source and they all use real sensor fusion and stabilization code rather than some sort of Kalman-filter free special sauce like this guy.

It's truly amazing how far we've come in just a few years - ten years ago a small quadcopter would have been hard to imagine (due to a lack of decent micro-sized IMUs as well as a lack of easily-obtainable large high-density LiPos), five years ago a project for only the brave, talented, and well- backed, and now we can buy them as toys!

<comment> excuse-me Pah - we had a guy doing this 70years ago with just a gyro compass and a prop shaft counter.

And he managed to hit London most of the time.

<comment><USER3> This is kind of in poor taste.

<comment><USER4> But amusing and to an extent true.

</comment></comment></comment></comment><comment><USER5> If you are interested in this, I strongly encourage you to watch Andrew Tridgell's talk from linux.conf.au 2012: <https://www.youtube.com/watch?v=ML__e_ZcWiQ>. It was close to my favourite talk at that conference.

From the youtube video: "This talk is all about the technology and techniques that we have developed for building an Unmanned Aerial Vehicle (UAV) that can search for and find a lost bushwalker in outback Australia"

Tridge is a great speaker, and discusses the nuances of this topic really well.

</comment><comment><USER6> > Instead of the usual Kalman filtering, I've devised my own IMU sensor fusion > algorithm which is super easy to visualize and doesn't require a PHD in > mathematics. Further, it works as well as the complex filters you'd find in > the conventional approach.

I wonder what evidence he has for that. It sounds awfully suspect.

<comment><USER7> I'd love to see his code and compare it side by side. Sadly, it appears he's considering it proprietary.

<comment><USER6> Which worsens its image further--"I've got an amazing new method better than the scientists could come up with, but it's secret!" smells of incompetence at best.

<comment><USER8> Lay off the guy. The fact is that the Kalman filter applies to a very small (arguably non-existent in the real world) set of estimation problems, and the solutions that even the PhDs come up with are typically ad hoc and suboptimal.

That being said, there's really not much to his solution - he's relying on gravity (from accelerometer) and magnetometer data to provide most of the orientation information. The IMU really isn't doing much, and I can't see how this works well during maneuvers.

EDIT: Note that's the _actual_ Kalman filter. Most of the time when people say KF, they really mean Extended Kalman Filter, which is an approximation to the real thing. Optimality goes out the window when you approximate.

</comment></comment></comment></comment><comment><USER9> If you're interested in UAVs and looking for other resources, I'd suggest <http://diydrones.com/>.

</comment><comment><USER10> Can anybody explain to me how he can legally use amateur radio bands to communicate with this drone? He is a licensed ham, but the device is neither a beacon nor a repeater (and both would need a callsign, at least where I live).

<comment><USER2> FCC 97.215 [0] makes it legal for a ham to transmit up to 1W in any band they're licensed for for the purpose of model aircraft control, without any callsign identification being necessary.

0: <http://www.arrl.org/part-97-amateur-radio>

</comment></comment><comment><USER11> I reckon legislation will soon fall which makes these illegal unless you are law enforcement or military. If it makes either party potentially more accountable then it's going to cause problems.

Great piece of kit though!

</comment><comment><USER12> I'd love to see el-wire glowing drone "night birds" flying around at night @ Burning Man</comment>


Why not JSON? - <AUTHOR> http://aaronparecki.com/articles/2015/01/22/1/why-not-json

<comment><USER2> You can't make decisions today about what will be the standard in 10 years. Computers will be exponentially faster and used for different things. It's just pointless.

JSON is widely accepted now, and BSON overcomes its only real shortcoming (lack of binary support).

There's nearly 0% chance any of your software (or any of ours) will still be used/maintained in 10 years, so make a decision about what's available now.

<comment><AUTHOR> You can't make decisions about what will be standard in 10 years, however don't disregard the chance your software will be around in 10 years time.

I had a number of packages, written in 1998-1999 maintained in debian stable between 2000 and 2010, they were eventually dropped because they didn't work anymore after a big revisions in the parent project.

<comment><USER2> In this particular case, he's also talking about a simple storage format.

In popular languages, switching between simple formats like JSON/YAML should be a two-line change (the line where you serialize and the line where you unserialize). XML may be more tricky, but XML sucks and no one should be using it anyway.

<comment><USER3> He's talking about specs (indieauth and micropub) rather than a storage format, so it will not be trivial to change from one format to another in the future.

</comment></comment></comment></comment><comment><USER4> I am a bit confused as to why one would need regex literals, doesn't that get fairly nicely represented in just strings? (sans the fun with escapes)</comment>


New Skate-Sharpening Method Takes Hockey by Storm - <AUTHOR> http://www.nytimes.com/2009/11/02/sports/hockey/02skate.html

<comment><USER2> The submarine has surfaced.

<http://www.paulgraham.com/submarine.html>

This article was written by the publicist for "BlackStone Sports, the Ontario manufacturer of skate maintenance equipment that developed the flat-bottom V method..."

<comment><USER3> Why do you think that? Besides fitting in with pg's general thesis.

<comment><USER2> [http://smilinlikeabutchersdog.blogspot.com/2009/11/flat- bott...](http://smilinlikeabutchersdog.blogspot.com/2009/11/flat-bottom-v- next-step.html) "A NEW METHOD, the Flat Bottom V, is beginning to TAKE HOCKEY BY STORM."

<http://noicingsports.com/fbv.html> "Folks, this type of sharpening has hit the market LIKE A STORM."

These are either the results of plagiarism or a publicist hiring some bloggers.

To me, the original NYT article reads like it's straight out of a press release and therefore has 0 credibility.

</comment></comment></comment><comment><USER4> In case anybody is curious about how this is actually accomplished, do a web search for "diamond roller dresser."

Also, there's a huuuuge thread about "flat-bottom V" skate sharpening over at Mod Squad Hockey (a popular hockey-player forum): [http://www.modsquadhockey.com/forums/index.php?showtopic=423...](http://www.modsquadhockey.com/forums/index.php?showtopic=42307)

</comment><comment><USER5> The pros won't be wrong about this, but I'm glad they've tried it out before I do.

The graphic actually makes me fearful of not being able to control the rate of stopping, as though I'd somehow lose the ability to modulate the depth of edge applied to/into the ice.

I am also worried about how long a sharpening like this would last (something the pros won't care about). I can go half a no-hit season with a traditional sharpening and higher end blades, so long as there is no blade-to-blade contact to flatten an edge.

With the new process, I bet any grit on the bench is going to nick up blades quickly.

<comment><USER6> I bet. If it makes a significant difference but requires more waiting at the pro shop, I won't complain too much. I've never decided on a hollow I like (5/8 is just a little too slippery), so the ability to customize a little more is very appealing.

I really like stories of competitive-edge entrepreneurs in professional sports. Products that provide a demonstrable advantage, whether in technology or salary analysis or ticket pricing, seem to become a hot commodity on their own merits.

</comment></comment><comment><USER7> This sentence is strangely amusing:

 _It's a little more efficient, so you glide better — you're not working quite as hard," Martin said before he sustained a fractured arm that will sideline him for up to six weeks._

</comment><comment><USER8> goes to show that even the simplest things (that usually make people yawn) are the ones where innovation can be most disruptive.

Anyone else remember that Rbk just recently fought (and won) a battle simply to provide a different, "more efficient" material and cut to the jerseys?

</comment><comment><USER9> If it's better everyone will do it, and they're right back where they started.

<comment> daniel-cussen That's sports for you.

</comment></comment><comment><USER10> Pictures? Or it never happened ;-)

<comment><USER11> [http://www.nytimes.com/imagepages/2009/11/02/sports/hockey/0...](http://www.nytimes.com/imagepages/2009/11/02/sports/hockey/02skategr.html)</comment></comment>


Ask HN: What life lessons do you wish you learned earlier? - <AUTHOR> <comment><USER2> You have to pay yourself first: both in savings and it allocating time.

Pay yourself first (savings): take N% of your take home, put it aside before you allocate it to something else. Easier said than done, esp. when strapped.

Pay yourself first (time): budget time for health, hobbies, and family, and strive to make work bend around that. You don't get time back.

</comment><comment><AUTHOR> Everything starts with inner psychology – and for the most part, I can predict whether I'll succeed in something or how I'll feel by looking at my psychology. Any improvements there have the highest leverage.

</comment><comment><USER3> You define and control your future self and you can be anything you want. It's a cliche but if you truly believe it will change your life.

</comment><comment><USER4> I wish I learn how to draw earlier so that I can help my friends to draw...

</comment><comment><USER5> put a maximum time box around every activity.

go to the gym, even if you don't like it

opting out of controversy holds your community back from learning

</comment><comment> grayed-down Persistence</comment>


Puny GUI – A tiny cross platform GUI Kit in Janet - <AUTHOR> https://ahungry.com/blog/2020-04-24-Puny-GUI-Puppy-Finder.html <comment><USER2> GUI frameworks are big because they do a lot. These minimalist things usually only work until you reach the limits of what they can do and then you have to rewrite in something like Qt anyway, or sacrifice what your users want in a GUI for your own code aesthetics.

<comment><USER3> It's be helpful to have some concrete examples of where one might run into limits with the minimalist frameworks and why a larger framework is required to overcome those limits.

<comment><USER2> file open/save dialogs, i18n, drag and drop, image formats, web views, any sort of accessibility, themability that actually fits into native platforms, sometimes the ability to open new windows, many common controls that we just take for granted now that you have to implement yourself, sometimes limited amount of events you can reasonably handle based on the design of the api (IM gui's for instance).

I wouldn't say never use an minimalist framework. It can be handy for embedded debugging tools or for toy projects. But I wouldn't use one of these things for an application that I thought might have a few thousand users and some sort of life span.

<comment><USER3> Thanks for the list. I'll keep these in mind for my next GUI project. I've used Qt a few times for hobby projects, but was thinking about trying something else for my next GUI project.

</comment></comment></comment></comment><comment><USER4> I disagree with the author, it's really easy to test the examples of Nuklear.

I made applications with Nuklear that runs on Android, iOS, macOS, Windows and share the same main C code. For me, it's a dream come true if you create a cross-platform application that needs a simple GUI.

Dear ImGui is also fantastic and more complete than Nuklear.

What I like a lot with Nukear and Dear Imgui is that you have a GUI that is GPU accelerated and so can be updated at 60 FPS without burning resources.

<comment><USER5> You're still going to be updating at 60 FPS which will absolutely murder your battery on a mobile device.

These are meant for use in games that already do this. They are not suitable for building regular apps.

<comment><USER6> They are perfectly suitable for regular app. You don't need to update them at 60fps, you have the entire control of the rendering state, so you could decide to update the gui whenever it is needed and not at a constant fps.

</comment></comment></comment><comment><USER7> " _The solution (hint: there wasn 't one until now)..._" That's quite the bold statement. I actually thought of IUP/Lua when I saw this line, and it turns out you precisely used IUP for the UI portion of your framework! Except you didn't use the Lua binding, instead you created a Janet binding.

Using something like luastatic[1], with whatever Lua libraries you want (including IUP), you can get something pretty similar to this system, except of course you'd be using Lua instead of Janet. Janet is really interesting and that alone justifies this framework very well.

[1]: [https://github.com/ers35/luastatic](https://github.com/ers35/luastatic)

<comment><AUTHOR> Yea, sometimes when I get to rambling I can be a little bit overly opinionated/bold in some statements. Python tktinkter is also in a similar vein - what I am putting out is more of an aggregation of other's hard work (cross platform packaging?) more so than anything I've directly innovated.

However, even in the python sample, I couldn't find anything that was just "Download, Unzip, Modify" to start creating (all seem to have cumbersome install steps or hoops to jump through - I basically wanted something that was 0 configuration/installation, for fast iteration and development).

<comment><USER8> Speaking of aggregation, what motivated the license choice? It appears that only one dependency (Mongooos is GPL), and the choice of GPL will seriously inhibit any adoption of a toolkit like this.

<comment><AUTHOR> I may replace mongoose and change license when done to MIT (pending completion of work on my own much smaller server implementation)

</comment></comment></comment></comment><comment><USER9> Seems to be based on iup that supports both Windows and Linux? [http://webserver2.tecgraf.puc-rio.br/iup/](http://webserver2.tecgraf.puc- rio.br/iup/)

The new crop of immediate mode cross platform GUI libraries are more interesting (such as nuklear and Dear Imgui). I also did some experimentation with these libs a few days ago: [https://liuliu.me/eyes/write-cross-platform- gui-in-swift-lik...](https://liuliu.me/eyes/write-cross-platform-gui-in-swift- like-it-is-1998/)

<comment><USER10> > The new crop of immediate mode cross platform GUI libraries are more > interesting (such as nuklear and Dear Imgui).

They're also completely inaccessible to blind people (using screen readers) and probably some people with other disabilities as well. IUP is at least partially based on platform controls. I'll take usable over interesting.

<comment><USER11> This wouldn't be a problem if the underlying operating system APIs wouldn't treat accessibility as an opaque "feature" baked into their UI frameworks.

There should/could be open accessibility APIs in each OS which sit between (e.g.) screenreader software and custom UI frameworks.

<comment><USER10> Some platforms do have APIs like that. For example, on Windows, UI Automation is not tied to any particular UI framework; the UIA tree just needs to be associated with an HWND (Win32 window handle). But implementing these APIs is a lot of work. And I imagine it would be especially challenging for an immediate-mode toolkit, because an API like UI Automation is based on a retained tree of objects that the screen reader or other assistive technology can query on demand. So I figure applications are more likely to be accessible if I warn developers away from such toolkits altogether.

</comment></comment></comment></comment><comment><USER12> For anyone needing a simple and fast cross-platform toolkit for C++, FLTK is really good. It is easy to build and statically link only the parts you need, and the API/widget selection is pretty good. It looks a little old school/non/native, but it has been useful for me.

<comment><USER13> FLTK is just very spartan compared to e.g. Qt; from my point of view it is only useful for very simple GUIs; I hardly have any applications anymore that do not need item views or rich text.

<comment><USER14> If you want a halfway house, there's the FOX Toolkit. [http://fox- toolkit.org/](http://fox-toolkit.org/)

It's not so active these days, admittedly.

<comment><USER13> Well, there is also Tcl/Tk and some others, but they are all at most half as powerful as Qt. An interesting alternative could be Flutter; however, you have to write (at least) the GUI in Dart, which is not everyone's cup of tea.

<comment><USER14> TCL is interpreted, so presumably it's not as lightweight as FLTK and FOX. I don't imagine Flutter is nearly as lightweight either.

<comment><USER13> Tk is just a shared library accessible by any compiled language; there are many C/C++ cross-platform applications using it; it was actually also the first GUI toolkit used by Python; it's true that it includes Tcl which is a scripting language, but that doesn't matter much. It's nearly as lightweight as FLTK and Fox toolkit.

Applications AOT compiled with the Flutter SKD are surprisingly lean (i.e. compared to Node/Electron) and not much larger than Qt applications.

</comment></comment></comment></comment></comment></comment><comment><USER15> Cool. I fell in love with Janet during last advent of code, so I'll definitely give it a try

</comment><comment><USER16> With opengl, libuv, and libcurl, and Dear Imgui, I can write a C program resulting in a binary that's about 400kB unstripped, to put 5MB in perspective. And for a simple program like what you wrote, I don't even bother trying to free the memory myself sometimes, I just let the OS free it when I exit. With that design choice in mind, the end code is like <1000 lines, and a decent bit is reused snippets.

In the end, this feels like a an appraisal of IUP and Janet more than a demo of anything new. If that's the case, then familiarity with your stack is more important for this kind of productivity than anything else, so trying something new is less appealing to me.

But I was curious about Janet, so seeing some examples was nice.

<comment><AUTHOR> Dear imgui looks very cool (I had missed that one), and like nuklear, a strong candidate for very customized look and feel - but I think it glosses over things much like nuklear does, by showing what seems to be small/simple samples, and prefixing it with a statement such as "after it's set up" (and it doesn't bother to show the other 1000 lines said setup required).

But you are spot-on that this is more showcasing the joining of various other things out there, rather than anything innovative (although I do plan to add more and extend the existing convenience wrappers, such as wrapping the IUP calls in a hiccup-like DSL using Janet macros).

<comment><USER17> Those "1000 lines of boilerplate" is why imgui and nuklear are so popular. If you're on a commonly used platform, say SDL and OpenGl, you can just copy all or most of it. But the magic here is that imgui and nuklear will integrate into any engine or rendering api you can imagine.

To simplify a little, you pass these libraries the events from the windowing system and it gives you a list of triangles back. Then you feed the triangles to the GPU and you're done. All the logic (and nothing but the logic) is done by the GUI library.

This is why dear imgui is perhaps the most popular GUI library in the world. It's used in a lot of game development tools, etc.

If anyone is interested in the topic, I am writing a lightweight flexbox-based retained mode GUI layout rendering library that integrates like imgui/nuklear. Give me a shout if you want to know more.

<comment><USER18> I'm interested!

<comment><USER17> I haven't shared the code in public but if you give your GitHub username, I can share it to you (and others who are interested) and you can reach out via email (address in commit log).

I got inspired by Raph Levien's talk on Rust and GUI layout [0] and realized that a simple flexbox layout algorithm can be implemented really efficiently.

So I started making a prototype in C (also a small proto in Rust), using a densely packed array to implement a DOM-like tree. The tree nodes have short strings, boxes (with border, padding, etc), images (texture coordinates in an atlas), layout constraints, containers, etc. Flexbox layout is applied to the tree in linear time (and constant memory!) and then the tree is traversed to output an ordered list of axis aligned rectangles.

The output list can be fed to the GPU, where a special (but simple) shader draws clipped triangles that get applied with textures, msdf font, etc. The whole GUI gets rendered with a single draw call.

This all can be done with very fast performance (sub-millisecond for layout and rendering, excluding GPU latency). There are other implementation details that make it efficient for cache (sizeof(node) == cache line), no recursion, no memory allocation, no unbounded loops, no system calls, etc.

I'm fairly convinced that this approach should be enough to cover 80% of modern GUI paradigms. However I don't have the time or the interest to build a complete widget set GUI library.

Right now I'm sporadically working on the project with a goal to make a game UI with clickable, scrollable and scalable text and images with a modern layout. Right now all I have to show is some ugly text and rectangles (but with a _very_ nice layout), but it's a start for a project with potential.

[0] [https://youtu.be/4YTfxresvS8](https://youtu.be/4YTfxresvS8)

<comment><USER18> I'd love to take a look, thank you! Github: [edit removed]

<comment><USER17> Invite sent

</comment></comment></comment></comment></comment></comment></comment><comment><USER19> Interesting pitch for Janet. Here [1] is a quick rewrite in Red language, which lives up to the author's requirements: 10 LOC, native support for all 3 major platforms, can be shipped as a single binary, and all that's required is a 1MB toolchain.

[1] [https://gist.github.com/9214/dfa15d37342065dbf368eae35abcdc3...](https://gist.github.com/9214/dfa15d37342065dbf368eae35abcdc37)

</comment><comment><USER20> _However, the elephant in the room (which I also like to ignore as a Clojure enthusiast) is that the start up time of a Java based GUI app is too slow (this is exacerbated even moreso when Clojure is involved)_

I'm expecting a GraalVM rejoinder from someone. For anyone who's used GraalVM (particularly with Clojure) - what are the downsides and limitations?

<comment><USER21> A JavaFX hello world app starts in around 1 second on a modern computer. Here's a small demo of a self-updating JavaFX app where you can see it being started, then built again, then re-launched with the new version: [https://github.com/renatoathaydes/keepup/blob/master/docs/im...](https://github.com/renatoathaydes/keepup/blob/master/docs/images/keepup- demo.gif)

If the author's app takes 10 seconds to boot, I am afraid they need to blame either Clojure or their own code for that.

<comment><USER22> I'm building a TornadoFX app with Kotlin now and it also starts in about a second. Also there is FXLauncher ( [https://github.com/edvin/fxlauncher](https://github.com/edvin/fxlauncher) ) which provides a native package and an auto updater for macOS, Windows and Linux.

<comment><USER14> How's TornadoFX in terms of 'lightweightness'? Presumably worse than Qt but still much lighter than Electron?

</comment></comment></comment></comment><comment><USER23> What about macOS? So far Racket seems like the easiest solution for a lisp with easy cross-platform GUI support (Linux, Mac, Windows). It would be nice to have more easy choices, but also nice if all 3 major platforms were supported.

<comment><USER5> In reality, if you want to actually make a serious, usable and comfortable GUI, there is no cross-platform solution. There are many attempts, but none will let you create a GUI that actually fulfils all those requirements.

If you are making something serious, you will have to implement at least the GUI layer separately for all platforms.

<comment><USER24> Why do I keep seeing people say this? People have been doing this for 30 years.

Fltk will let you do it in 700KB with no dependencies. (100KB if you're crafty). Juce, Qt, pyQt, opengl+imgui, opengl+nanogui all work well. There is also gtk, Tk, wxWindows ...

Where are you getting this idea from?

<comment><USER25> The idea isn't that you can't have some windows with text and buttons displayed with the same code on all platforms but that these windows, text and buttons wont look and behave like they are supposed to and expected by the users of each platform.

Now, outside of macOS this might not be much of a problem since Windows users were beaten into submission to accept any arbitrary look and behavior and Linux users never had a choice anyway.

<comment><USER24> I've never seen this actually be a problem other than people complaining about buttons looking different.

If you are worried about the shading on your buttons then you must have had all your problems solved already.

<comment><USER25> "People complaining about buttons looking different" is a problem.

But it isn't just "buttons looking different", it is also "buttons behaving different". As an example (that i often find annoying in programs with long lists), under Windows Qt scrollbars do not behave like native Windows scrollbars: shift click in Windows should cause the scrollbar to scroll at the point you clicked (like middle click on most X toolkits) but Qt ignores that.

Also it is "buttons not integrating properly". On macOS it is very common for example to have system-wide addons (services i think they are called) that add additional functionality to text fields, like "search with google", "text to speech", "show definition", etc. This doesn't work when a toolkit does its own text field controls. You can also see a similar thing on Windows: GTK+ applications (e.g. GIMP) ignore the emoji panel in their text fields that appear with Windows+; but native text fields work fine with it.

Now note that i'm not saying this is something that matters for all sorts of applications or is always a deal breaker (especially nowadays that, as i wrote above, most users outside of macOS have been conditioned to accept these), but it isn't something that you can handwave away as "having a different shade" either.

<comment><USER10> > Now note that i'm not saying this is something that matters for all sorts of > applications or is always a deal breaker

The more serious issue that nobody here has yet mentioned is lack of accessibility, e.g. for blind users with screen readers, in many toolkits. I say that _is_ a deal-breaker if you're developing any kind of application that someone is going to use in their job, education, or other important tasks, unless the task is already inherently visual in nature. Qt has passable accessibility on Windows, Mac,and desktop Linux. GTK is accessible as part of GNOME. Electron, for all its faults, is as accessible as Chrome (pretty good these days). FLTK, FOX, Nuklear, TK, and a thousand other toolkits have zero accessibility. I've grown weary of bringing this up, and some of you may be tired of seeing it, but I feel compelled to do everything I can to make sure nobody overlooks this point, lest someone develops an inaccessible application that prevents someone else from doing a job, taking a course, etc.

Edit: I realize that was a rant. What rubbed me the wrong way about your comment was the suggestion that the problems with cross-platform toolkits are mainly cosmetic things or extra functionality that only spoiled Mac users care about.

<comment><USER25> Uh, i think you need to read again what i wrote as i explicitly write that there are more issues than just cosmetic things and accessibility is one of these - i just brought simple examples that anyone can test by themselves right now.

But also yes, not every program has to care about these, including accessibility. An image editor or a level editor for some game or some internal and/or throwaway tool that has a very explicit "audience" has no reason to bother about these.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER26> Subtracting all the delusional fluff about small sizes, this article is about a Janet binding to Gtk3.

ldd app.bin|rg -o '/usr/lib[^ ]+'|xargs stat -L -c %s|perl -lne'$s += $_; END {print $s}'

38120904

<comment><USER10> Actually it's about a Janet binding to IUP. The key difference is that on Windows, IUP uses native controls, whereas GTK does not.

</comment></comment><comment><USER27> Tcl/Tk dabs on your gui frameworks from the unreachable pinnacle of the heavens.

</comment><comment><USER28> I love new programming languages, I'll have to give Janet a go and see how I like it

<comment><USER29> Any language that has really impressed or surprised you?

<comment><USER28> I've really enjoyed J so far. Pointless has been fun. Brat was an interesting one to work with. Pony and Nim are both pleasant. Hy was a fun way to do Numpy lisp.

I'm digging in to Chaos and then Janet after that.

<comment><USER28> I blog about fun, lesser known, languages on my site.

</comment></comment></comment></comment><comment><USER30> Neat. Are there screenshots?

</comment><comment><USER31> How about English? This is just programed as:

> Puppy is an app

OK, you run 'Puppy'. It doesn't do anything.

> RandomHost is > '[https://dog.ceo/api/breeds/image/random'](https://dog.ceo/api/breeds/image/random')

OK, 'RandomHost' is a constant, looks like a URL

> Get an image from RandomHost

OK, I think you meant Set Message to Read RandomHost retreiving UUENCODE.

> No. Get an image using json

Not the previous thing. I think you meant Set Message to Read RandomHost retrieving JSON, field Message.

> Get Image at Message

OK. I think you meant Read the URL Message and retrieve an image file

> Show the Image

OK. Displaying the Image on the screen

> Add Repeat Button

OK. Displaying a button named 'Repeat'

> App is While on Repeat, do the Display.

OK. App is set. Do display, Wait for Repeat button, Loop

> Puppy?

Puppy is an application:

        Repeat

            RandomHost = 'https://dog.ceo/api/breeds/image/random'

            Message = fetch(RandomHost, JSON)."message"

            anImage = fetch(Message, DATA).ensure(IMAGE_TYPE)

            Display.reset(Items [
                      Image:  An Image,
                      Button: Repeat text "Repeat"
                      ])

            ClientSideWait Repeat.onPress

         Forever

> Problems?

Your app can run.

You have eight error conditions to discuss. Use 'Talk about errors' to decide how to handle them. Right now, the answer is 'ignore first, or just explode'.

>Push

Pushing transcript to GitLab.... Building App.... Pushing Build to GitLab.

> Move button above image.</comment>


Could "disordered rock salts" bring order to next-gen lithium batteries? - <AUTHOR> https://arstechnica.com/science/2020/09/could-disordered-rock-salts-bring-order-to-next-gen-lithium-batteries/ <comment><AUTHOR> >A disordered rock salt anode for fast-charging lithium-ion batteries

[https://www.nature.com/articles/s41586-020-2637-6](https://www.nature.com/articles/s41586-020-2637-6)</comment>


New Coronavirus Gets an Official Name from the World Health Organization - <AUTHOR> https://www.npr.org/sections/goatsandsoda/2020/02/11/802352351/new-coronavirus-gets-an-official-name-from-the-world-health-organization <comment><AUTHOR> They may have given it a new name but I'll still call it "Wuhan Fever" regardless of wether thats politically correct.

I do wonder if sales of Corona beer took a hit from this disease though.

<comment><USER2> COVID-19 is certainly not catchy. But I find there's been a lot of casual discrimination towards east Asians living in western society. A case I noticed last week that was local to me where a Taiwanese market trader was confronted by other traders and told to leave [1]. There's a lot of ignorance around it, people have given themselves a bit of leeway to presume they are infectious. Recent cases in Brighton, UK won't bare the same cautious response towards residents there.

1\. [https://www.bbc.co.uk/news/uk- wales-51358502](https://www.bbc.co.uk/news/uk-wales-51358502)</comment></comment>


A false midnight - <AUTHOR> http://lwn.net/SubscriberLink/590299/bf73fe823974acea/ <comment><USER2> First, I can see some benefits to a false midnight. The case of truncated timestamps discussed on the Python list is actually useful.

However, the problem with the Python truth value of a date here goes way deeper than what folks have generally discussed and make the behavior here unsafe for any use.

When designing a module, contracts are important. You don't want to ever have to break a contract if you can avoid it. Sometimes it will be unavoidable, but you hope not. What this means is that your contracts need to be clear, precise, and meaningful, and the code needs to implement the contract.

I good contract would have read something like:

 _A time value is false if it represents a midnight, either when unqualified by timezone or when midnight GMT._

This gives you a specification. It gives you something you can use and count on. Maybe it is a killer feature for someone. However the implementation instead was:

 _A time value is false if and only if it evaluates to zero after subtracting the timezone offset if it has one._

Think about what this means when you have a negative vs a positive offset. It means that negative timezone offsets allow a date to always be true, but positive ones allow it to be false at UTC midnight. The real takeaway from this really should be the fact that API documentation should be declarative in nature and not procedural. Don't tell me how you get an answer. Tell me what the answer means. if you do the latter, then nothing can ever be fixed but probably cannot be safely used either.

The problem then is first and foremost a problem of API design and a design which is fundamentally flawed. This is why absent where the algorithm is critical to the contract it should not be mentioned. Explain what is expected and what it means, not how you get at the answer.

<comment><USER3> _...negative timezone offsets allow a date to always be true, but positive ones allow it to be false at UTC midnight._

I haven't had my tea yet, but is this true? ISTM that if a positive offset can be false in the AM, a negative one might be false in the PM.

<comment><USER4> The actual check is for if time_in_minutes == tz_offset_in_minutes. The problem is that times are always positive, so this check doesn't work if the offset is negative. The correct implementation would be time_in_minutes == (tz_offset_in_minutes + minutes_in_day) % minutes_in_day.

<comment><USER3> Thanks for the info. I've confirmed this for myself now:

        class Offset(tzinfo):
           def __init__(self, offset):
               self.offset = offset
           def utcoffset(self, dt):
               return self.offset

        >>> bool(time(1, 0, tzinfo=Offset(timedelta(hours=1))))
        False
        >>> bool(time(23, 0, tzinfo=Offset(timedelta(hours=-1))))
        True

Although this is kind of funny, because for _time.hour_ , 23 and -1 should be the same thing:

        >>> bool(time(23, 0, tzinfo=Offset(timedelta(hours=23))))
        False

I'm convinced: legacy behavior is wrong and should be changed.

</comment></comment></comment></comment><comment><USER5> I've become a advocate for the idea that the only values which should evaluate in boolean context are actual booleans. If you need to test for the number zero or a null value, you explicitly write 'value == 0' or 'value is null'. Is it more verbose? Yes. But it avoids any ambiguity about what you intend to evaluate. Typing speed should not be a determinant in the language you use.

<comment><USER6> In Haskell, you can have your cake and eat it too. Normally, the language follows your comments philosophy, but it's really easy to add arbitrary truthiness and falsiness definitions:

        class ToBool a where
            toBool :: a -> Bool

        if' :: ToBool a => a -> b -> b -> b
        if' cond th el = if toBool cond then th else el

And add instances like these:

        instance ToBool Int where
            toBool 0 = False
            ToBool _ = True
        instance ToBool String where
            toBool "" = False
            toBool _ = True

Or even:

        instance ToBool TimeStamp where
            toBool = not . isMidnight

Lisp, of course, can do similar things via Macros.

<comment><USER7> On the other hand, any attempt at writing something like this in production code warrants the firing squad.

<comment><USER6> Why? It seems unnecessary, but not overly hard to read.

Some re-education should be enough.

<comment><USER8> It's bad because it beckons bad behavior. Instead of doing the simple thing and changing your if-statement which puts the idiosyncrasy in the relevant piece of code, you are tucking away the behavior out of sight when something like this almost definitely belongs directly in front of your eye-balls.

This is a bit of a strawman, but being able to do

class Foo(object): def __bool__(self): return random.random() > 0.5

shows how crazy you could be. If you really want something weird, put it in the if-statement

<comment><USER6> I do agree with you.

That particular bit of craziness wouldn't be possible in Haskell. (Since that would require declared side-effects, and my interface above didn't have any declared.)

</comment></comment></comment></comment></comment></comment><comment><USER8> I firmly think languages like Ruby and Clojure get it right, nil and false are falsy, everything else is true, end of story.

This is one of my biggest pet-peeves with some languages. PHP is horrifically bad, there is a huge chart to consult if things get even remotely weird.

<comment><USER9> I firmly think that C# has it right - only booleans are true or false, everything else has to be explicitly compared.

<comment><USER10> This has saved me some bugs, quite a few times.

And the fix is always obvious, and makes sense.

Too many languages try to "help" you with features that, in the longer run, turn out to be painful in subtle ways.

</comment></comment></comment><comment><USER11> This clearly violates rule of least astonishment, however as Linus says: "we do not break userspace".

<comment><USER2> What would happen if an API turned out to be based on a clearly incorrect and useless reading of a POSIX standard? I would think that even Linus might fix something in that case.

<comment><USER12> Right, Linus's actual guideline seems to be "If no-one notices we broke backwards-compatibility, we didn't break backwards compatibility", along the lines of the tree-falls-in-the-forest saw.

</comment></comment></comment><comment><USER13> Guido's got the right idea. "just do it already"

<comment><USER3> I agree not changing it until 3.6 is misguided, although ISTM this isn't a good candidate for backporting. I _guess_ deprecation makes sense, but I don't see why adding a _DeprecationWarning_ is some giant change that couldn't have gone into 3.4 at the last minute, or for that matter into 3.4.1 whenever that comes.

</comment></comment><comment><USER14> This is interesting because possibly no one has ever used it in code logic, for anything, ever. (Except to work around the faulty falsy definition.)

The way this would be apparent is to simply look through a statistical sampling of uses. If 80% of the time the code is used in a boolean context, the code is actually broken, meanwhile the falsiness is used, correctly, in 0.0% of the code, then you can silently fix 80% of errors without breaking anything. Moreover, if falsiness is not explicitly relied on, but just caught kind of as an exception, then removing the false sentinel value may only cause errors by creating "exception-handling" that never runs. If this is the only "cost", while you can subtlely fix 80% of code that uses the false value (wrongly), then do it.

It would be interesting to know if anyone was using the sentinel value (correctly) and relying on it.

<comment><USER15> Tons of people use 'is None' correctly as a sentinel value

<comment><USER14> That wasn't what I was discussing.

</comment></comment></comment><comment><USER16> How does time exist without date?

And how does time have a timezone without a date?

It's the small things in Python that surprise me.

I understand the desire to have truthiness to determine whether it's been set, but a minimum value is a better test than a zero value.

Testing for a "seconds since 1970" would be less bad, and perhaps if you're going to detach time from a concept of date any negative value could be considered the unset/falsey value (which is probably what people testing the value think they're testing).

<comment><USER17> > How does time exist without date?

How does an alarm clock app store the idea that it is supposed to go off at 6 am every day?

<comment><USER18> 6 am where? Where the app (and presumably you) are, or where you were when you set the alarm? Or better yet, if the alarm is set on a server somewhere: did you mean 6 am where your phone is, where the server is, or where you where when you set the alarm (possibly on a different machine with a different locale).

Arguably "in N hours from now" is an unambiguous "time". Possibly so is "in N hours from now, and then every 24 hours" is too, but most places that'll be wrong come daylight saving.

An alarm clock app (vs a regular, physical alarm clock) is possibly a bad example for "simple time". Because most apps are connected to a clock that automagically updates somehow, and will then need to "decide" if 6 am is 6 am or some other time. Maybe you just crossed one timezone and don't want to change the (subjective) time you get up, but still need to be able to tell the local time without having to calculate what the local time actually is...

</comment></comment></comment><comment><USER19> So, when is this smart? The only remotely meaningful use-case for midnight being false I can think about is if you need way to check if a time is midnight? But it still seems easier to just check if time == 0.0

</comment><comment><USER20> > Interpreted, "duck typing" languages often have some idiosyncrasies in their > definitions of "truth"

As do most other, non-duck-typing languages.

</comment><comment><USER21> I'm going to kind of echo Paul Moore's argument here, and say this entire discussion is missing the forest for the trees.

Duck typing exists so you can code freely and with expression, but the obvious converse of that is it allows you to shoot yourself in the foot. From my POV it seems like people here are complaining that when they point the gun at their foot it seems to randomly go off when testing date values, and the simple answer to that would be "Well, then don't point the gun at your foot!"

IM(not so)HO the Zen of Python operates as an excellent counterbalance to the kind of pitfalls Python can lead you to, the "false midnight" being a wonderful example of said pitfalls that is completely removed when following PEP 20.

>> "Explicit is better than implicit."

Dates IRL cannot be false, so checking for falsiness is ambiguous. Perhaps you meant to check if it was "not None". And look! The wonderful expressiveness of Python allows such a thing! `if timeobj:` is a snippet that has some heavy assumptions behind it, and if I'm reading your code this is very much _not_ explicit to me what you're trying to do.

>> "Simple is better than complex."

Dealing with dates/time will always be nasty business. Let's not add to that, and make things as simple as possible. If you are explicitly checking for midnight, perhaps a constant value set to `datetime.time(0,0,0)` would be useful for a conditional.

>> "There should be one-- and preferably only one --obvious way to do it."

There are Pythonic ways to check for `None` and there are ways to compare date time objects. The key word for me here is "obvious", since, again, the idea of a date having a boolean value is entirely foreign to the real world, and more or less a shortcut found only in computing. Don't create an edge case that you don't have to.

Now granted, the stated behavior can definitely be seen to also violate PEP 20, but simply avoiding this entire issue renders that point moot.

tl;dr: People complaining about unexpected results when writing bad Python code are barking up the wrong tree. Perhaps you should try a different language, or learn to code in a more Pythonic style? Both of these avenues would be much more profitable not only in the short term, but also the long term.

<comment><USER22> I agree that maybe you should write in a different, more strongly typed, language but saying that people encountering this bug are not writing code in a Pythonic style is too much like victim blaming, IMO. Its a bit like those times when people say that if only you were a good programmer following "proper" C++ idioms you will never ever encounter memory leaks or segmentation faults.

The default behaviour for objects in Python is being truthy and testing their existence with `if x` instead of `if x is not None` is definitely encouraged by the language (otherwise, why would it even let you use objects in a boolean context?). Having something that behaves like the default except once in a blue moon is just a trap and its unfair to blame it on the programmer.

</comment></comment><comment><USER23> Duck typing is borderline psychotic. Is it a number? Is it not a number? What's the logarithm of an hour?

<comment><USER24> It is not duck typing that is psychotic, but automatic conversion between different types.

</comment></comment><comment><USER25> This problem is iterated over and over. It's mentioned in every discussion about why python is bad. Even here on HN I've read it a few times, most recently about two weeks ago I think. I don't know if it's annoying or is it good that more people know about this behavior.

<comment><USER26> >This problem is iterated over and over. It's mentioned in every discussion about why python is bad.

What? It's quite a stretch to say "Python is bad" because objects have implicit truthiness and that in this one rare occasion it's implemented poorly in the standard library.

<comment><USER25> Yes it is. One could say that the fact this silly problem is brought up every time proves that python is not that bad.</comment></comment></comment>


Experts baffled as robots sent to clean up Fukushima nuclear site keep dying - <AUTHOR> http://www.independent.co.uk/news/world/robots-fukushima-nuclear-disaster-dying-probe-clean-up-tepco-toshiba-reactor-nuclear-radiation-a7612396.html <comment><USER2> The author doesn't seem very good at units and things

>the radiation level inside the reactor was recently recorded at 530 sieverts.

That should be 530 sieverts per hour. If the robot was supposed to take 73 sieverts then you'd only expect it to last eight minutes. It takes 2 to 8 sieverts to kill a human.

Better article: [http://www.sciencealert.com/radiation-levels-in-the- fukushim...](http://www.sciencealert.com/radiation-levels-in-the-fukushima- reactor-have-started-unexpectedly-climbing)

</comment><comment><USER3> I wouldn't be shocked if something fundamental is being wrecked at the atomic level as a result of fast neutrons. Sputtering is a stone cold bitch.

</comment><comment> kyle-rb >The scarred landscape inside the exclusion zone close to the Fukushima nuclear reactor in Spain

Huh?

</comment><comment><USER4> Clearly the robots are too weak. Time to dust off that Jaeger design.</comment>


We are taking new steps against broadening threats to democracy - <AUTHOR> https://blogs.microsoft.com/on-the-issues/2018/08/20/we-are-taking-new-steps-against-broadening-threats-to-democracy/ <comment><USER2> "...It's clear that democracies around the world are under attack..." Yup, and it's very clear which country is responsible for performing most of those attacks. Is Microsoft offering any solutions to protect the rest of the world too?: "...the country intervening in most foreign elections is the United States with 81 interventions, followed by Russia (including the former Soviet Union) with 36 interventions from 1946 to 2000 - an average of once in every nine competitive elections..." [https://en.wikipedia.org/wiki/Foreign_electoral_intervention](https://en.wikipedia.org/wiki/Foreign_electoral_intervention)

<comment><USER3> Really? Going to hold actions taken over 70 years ago against the US of today?

<comment><USER2> The research results quoted contain election interferences between 1945 and 2000. Since then it has only become far worse. So no, it's not been 70 years ago since the last election interference conducted by the US and yes I am holding this kind of action against the United States and so should you: [https://www.globalresearch.ca/us-interfered-in-elections- of-...](https://www.globalresearch.ca/us-interfered-in-elections-of-at- least-85-countries-worldwide-since-1945/5601481)

<comment><USER4> Your link provides the following to support your claim: "That's just till 2000! The US has gone nuts since then."

Do you really accept that as proof?

<comment><USER2> It also contains "...Since 2000, the U.S. has attempted to sway elections in Ukraine, Kenya, Lebanon, and Afghanistan, among others..." \- Ukraine: [https://www.theguardian.com/world/2013/dec/15/john-mccain- uk...](https://www.theguardian.com/world/2013/dec/15/john-mccain-ukraine- protests-support-just-cause) \- Kenia: [https://www.globalresearch.ca/foreign- interference-in-kenyas...](https://www.globalresearch.ca/foreign-interference- in-kenyas-elections/5326282) \- Lebanon: [https://wikileaks.org/plusd/cables/09STATE35241_a.html](https://wikileaks.org/plusd/cables/09STATE35241_a.html)

More links with detailed information: [https://www.forbes.com/sites/dougbandow/2017/08/01/interferi...](https://www.forbes.com/sites/dougbandow/2017/08/01/interfering- in-democratic-elections-russia-against-the-u-s-but-u-s-against-the- world/#e96e626644cd)

[https://www.cato.org/blog/hypocrisy-election- interference](https://www.cato.org/blog/hypocrisy-election-interference) "...More recently there have been Macedonia, Serbia, Albania, Bosnia, Ukraine, Russia (especially Yeltsin's 1995-96 campaign), Algeria, Lebanon, Palestine, Cyprus, Iraq, Pakistan, Afghanistan, Kyrgyzstan, Tajikistan, Yemen, Vietnam, Indonesia, Japan, South Korea, Philippines, Congo and several other countries in Africa, and, in Latin America, every country multiple times including within the last fifteen years Haiti, Dominican Republic, Honduras, Panama, Nicaragua, Venezuela, Columbia, Paraguay, Peru, Ecuador, Bolivia, Brazil, and Argentina. Brenner's list is an ongoing project. It does not include Canada, and just possibly there are some Canadians who might find that omission to be unjustified..."

Extensive source of information on US election interferences: [https://books.google.nl/books/about/Diplomatic_Interference_...](https://books.google.nl/books/about/Diplomatic_Interference_and_the_Law.html?hl=nl&id=MlS3CwAAQBAJ&redir_esc=y)

[https://consortiumnews.com/tag/american- exceptionalism](https://consortiumnews.com/tag/american-exceptionalism)

[https://zodml.org/sites/default/files/%5BJoseph_Smith%5D_The...](https://zodml.org/sites/default/files/%5BJoseph_Smith%5D_The_United_States_and_Latin_America.pdf)

</comment></comment></comment></comment></comment><comment><USER5> This is nothing more than a thinly veiled Office 365 marketing ploy.

If their 2FA is anything like what they've done with Azure I wouldn't be holding my breath. Microsoft is barely out on parole in my eyes from their horrid security and privacy track record, and has shown many signs of recividism to be engaging in this charade.

<comment><USER6> They're session security is hilarious.. a session token is still valid for at least 6 hours after logging out.. even after their humorous advice to close all browser tabs (which as expected doesn't do anything server side)

</comment></comment><comment><USER7> "Last week, Microsoft's Digital Crimes Unit (DCU) successfully executed a court order to disrupt and transfer control of six internet domains..."

What does this mean? Was the domains hosted on Microsoft DNS servers? Or did Microsoft get a court order to go after domains hosted by other companies? I'm probably missing something, but isn't that the job of the police?

<comment><USER4> The article says what it means and lists the six domain names. The domain names look like domain names owned by Microsoft and its customers, so Microsoft can take them down for impersonation.

<comment><USER7> Not all of them where impersonating Microsoft domains. Still can't understand how Microsoft managed to take these domains down if they weren't hosted by Microsoft in the first place.

</comment></comment></comment><comment><USER8> You have to hand it to Microsoft's PR machinery. While companies have been offering similar services, not many wouldn't have tried to link it to "broadening threats to democracy".

<comment><USER9> I like how they talk about democracy and at the same time are probably the most cooperative large tech company when it comes to releasing customer info to authoritarian governments.

</comment></comment><comment><USER10> Fascinating. As of this moment, this page seems to have far more virulent anti-Microsoft sentiment than I can recall seeing in any HN posting recently. It's almost as if people are blaming the messenger for some reason.

<comment><USER11> I think HN has had its eternal September over the summer. A significant portion of comments on a lot of threads are becoming ever more political.

Which is a little annoying as HN was one of the few places that hadn't been infected by American politics. I'm Scandinavian, I don't much care about the war between red and blue.

</comment></comment><comment><USER12> By subverting privacy Microsoft is a threat to democracy itself.

<comment><USER4> This is a non sequitur. It is not clear that privacy (specifically privacy of data on Microsoft systems from court order, if that's what you mean) is necessary for democracy. On the other hand, the ability to unmask people who are subverting elections is useful for democracy.

<comment><USER13> > It is not clear that privacy (specifically privacy of data on Microsoft > systems from court order, if that's what you mean) is necessary for > democracy.

How would democracy ever work if people had no privacy?

<comment><USER4> How would democracy ever work if people had absolute privacy? It wouldn't, but that isn't what we were discussing either.

The claim under discussion is that the privacy loss that is affected by Microsoft's privacy policy is detrimental to democracy. That claim was presented without any support.

</comment></comment></comment></comment><comment><USER14> It's seems this is quite an acceptable plan to move forward. MS doesn't seem to plan to intervene in local politics, merely shield against foreign politics intervening in local politics. Especially when you offer those services in foreign countries, the other players seem to fail spectacularly.

<comment><USER13> Microsoft gets involved in domestic politics all the time.

</comment></comment><comment><USER15> This is great, but I'd like to know if it extends in the other direction; one of the great ironies of the Trump Administration has been the wrecking of the State Department, who along with the CIA have had a habit of getting involved in the elections of other countries. Up to and including replacing democratically-elected socialists with military dictatorships.

<comment><USER16> I think another proof that the U.S. is not about spreading democracy but only seeking it's economical interested is illustrated by Tunisia. The tiny nation is the only democracy in North Africa and is struggling economically. If the U.S. were adamant about supporting democracy, the obvious thing to do is to ensure that Tunisia succeeds in becoming a full democracy.

[https://en.m.wikipedia.org/wiki/Democracy_Index#/media/File%...](https://en.m.wikipedia.org/wiki/Democracy_Index#/media/File%3ADemocracy_Index_2017.svg)

</comment></comment><comment><USER17> Microsoft has a Digital Crimes Unit? Is that like a police/vigilante enforcing function? Curious to learn more - seems unique, or is this common with big companies?

<comment><USER18> Every big company has a forensics / investigations team. This team will interface with law enforcement as necessary.

This is common.

</comment></comment><comment><USER19> Because who better than Microsoft to save our democracy?

I can't think of anyone ... oh wait ... I can! What about Apple and Google? Yes. Please. Apple, Microsoft and Google - together - save our democracies! You are the only ones who can.

Thank you.

\-- the little people

<comment><USER20> You forgot about FakeBook. In my country, FaceBook bans users if their posts mention certain politic (Henadii Moskal). For the sake of democracy, of course.

</comment></comment><comment><USER21> "It's clear that democracies around the world are under attack. Foreign entities are launching cyber strikes to disrupt elections and sow discord. Unfortunately, the internet has become an avenue for some governments to steal and leak information, spread disinformation, and probe and potentially attempt to tamper with voting systems. We saw this during the United States general election in 2016, last May during the French presidential election, and now in a broadening way as Americans are preparing for the November midterm elections."

Now that is a strong first paragraph. Microsoft is essentially saying that Russia did indeed influence the 2016 election (presumably in collaboration with Trump). I know the facts are public, but I did not expect such a big company to take such a political position.

<comment><USER4> It's not a political position. It's a statement of fact (excluding your presumption, which wasn't implied in the article) supported by both national political parties and the sitting president. [https://www.nytimes.com/2018/07/17/us/politics/trump- putin-r...](https://www.nytimes.com/2018/07/17/us/politics/trump-putin- russia.html)

<comment><USER22> > It's not a political position.

It is indeed a political position.

> It's a statement of fact

Sure, but it's still in the domain of politics.

</comment></comment></comment><comment><USER23> There is a lot of broadening going on

</comment><comment><USER24> Microsoft, the self-appointed unelected guardians of democracy who will privately decide what is and what is not a threat.

</comment><comment><USER25> I thought this was about the censorship of Gab posts that occurred a few days ago which they ordered.

</comment><comment><USER26> Please Microsoft, I accept thee as my lord and savior. Please guide me what to think! /s

</comment><comment><USER27> I like most of Brad Smith's initiatives, but I hope the end-goal here isn't to just put more Windows on voting machines. Because the last voting machines that got Windows are some of the least secure devices around, many of them still unpatched for many years.

I know that's not _all_ Microsoft's fault, but if that's their "solution" or others similar to it, then we'd be better off without them in the long term.

And that's without even mentioning the whole issue around proprietary software being used in the voting process (even if it's just for _counting votes_ , because nobody ever checks or audits those after the fact anyways, and the numbers are always taken at face value).

<comment><USER4> This has nothing to do with voting machines. It's the public announcement of Microsoft's equivalent to [https://landing.google.com/advancedprotection/](https://landing.google.com/advancedprotection/)

</comment></comment><comment><USER28> I find it peculiar that this announcement comes out following the establishment of a link between Soros funded orgs and the facebook/twitter/et. al censorship. Seems fairly coincidental.

I an not fond of the idea of tech companies electing themselves guardians of democracy. In fact I think there should be a total ban on corporations involvement in politics.</comment>


Show HN: StartupGuild Hackethon - Yammer API + Gmaps API - Member Locator - <AUTHOR> http://sg.mbrochh.com/

<comment><USER2> Martin here. That is true. Polling the yammer API for retrieving all members is quite slow, also polling Googles geolocation API for getting lat/lng coordinates from address strings is slow and the rate limit would be exceeded in no time if I did it in real-time.

Therefore I scheduled a cronjob to update the database every hour. The yammer API gives 50 users per request, with our 500 members (and still growing rapidly) I need 10 requests already, each taking around a second or two. Polling the Google geolocation API is even slower, but since I save all results and since everyone seems to live in New York (*g), I rarely have to poll it any more.

Oh. This is my first post on HN. Being a daily reader since about 2 years I think. Awesome site with awesome content! Definetly changed my life :)

<comment><USER3> Chances are we can help you. Mind posting what you need from the API to the Yammer Developer Network or opening a support ticket?

<comment><USER2> Opened a feature request ticket... tried to get into the Yammer Developer Network a week ago but it seems as if my application does not get approved...

</comment></comment></comment><comment><USER4> I think it should be mentioned that the map shows the locations of the members of the StartupGuild, based on the location field in their profile. Members who have not supplied a location (or entered something like "Down at the beach"), obviously don't appear on the map. According to Martin, who created the map, the data is updated (via a cronjob) once per hour.

</comment><comment><USER5> I'm apparently the only one from Seattle.</comment>


Segway boss Jimi Heselden dies in scooter cliff fall - <AUTHOR> http://www.bbc.co.uk/news/uk-england-leeds-11416654 <comment><USER2> It might be worth pointing out that the person who died is not the inventor of the Segway, that would be Dean Kamen.

I'm not saying that anyone claimed it was, but just pointing it out to avoid confusion.

<comment><USER3> For what it's worth, he did invent (or entrepreneured, it isn't clear) the hesco bastion, which according to the former marine sitting next to me was something the troops really liked.

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

<comment><USER4> Apparently, they even have a version that can be rapidly deployed.

Pretty impressive.

See video. <http://www.hesco.com/raid/>

<comment><USER5> That video is seriously cool.

<comment><USER4> Indeed, it's one of those videos that make you go "Damn, why didn't I think of that?"

</comment></comment></comment></comment></comment><comment><USER6> Impressive bio:

 _Mr Heselden grew up in the Halton Moor area of Leeds, leaving school at 15 and working down local pits.

He worked as a miner before losing his job in a wave of redundancies in the 1980s.

His engineering business went from strength-to-strength and he had a fortune reported to be £166m, making him one of the top 400 richest people on the UK._

<comment><USER7> Wow, that really brings it home to me, as I live just a few streets away from Halton Moor...

</comment></comment><comment><USER8> I took a Segway tour in Chicago this summer. Part of the tour takes you by the water. I asked out guide if a segwayer had ever fallen in - the answer was yes, sort of. They did lose a Segway in the lake, but the user jumped off before going in herself. The worse accident they had ever had was when a guy went over the front, smashing his face, after using it incorrectly and accidentally enabled an auto-stop mechanism, where the Segway basically shuts off.

You have to lean forward to move forward, which makes me think this guy either passed out or hit some rough terrain and the machine just slid off the cliff.

<comment><USER9> In 2008 I had just founded a textbook-selling website, and one of the first schools we went to was University of Illinois- Urbana/Champaigne. We had a genius marketing idea: rent a Segway and ride it around campus handing out fake dollar bills that had our information on it You can see the example here: <http://dl.dropbox.com/u/4971801/Illinois%20Heads1.jpg> ). Not only could we move around campus faster, but we would stand out!

After arriving in Chicago, I went to the Segway store you mentioned. They didn't rent Segways out. Two hours later, I emerged with a $500 bill and a Segway for 7 days.

I went to Kinkos and printed out a thick cardboard front with "BrunoBooks.com" on it and taped it to the front of the Segway. I gotta say, riding those things is a LOT of fun.

Unfortunately, I underestimated how _bleeping_ cold it is in Illinois in early January, and therefore failed to realize the implications of what I'd done. For the next week, I rode around in sub-zero temperatures handing out fliers. I'd had the choice between University of Texas and Illinois, and I'd made an unforgettable mistake.

Follow-ups to this story:

1) It didn't really work. Of 40k students, ~500 visited our site. After conversions, this was terrible for business.

2) Everything is negotiable. For the right price, you can rent anything. In a larger sense, don't take no for an answer.

3) Don't be an asshole to people handing out fliers. Usually they're just doing their job, but even if it was their idea there's no need to be a dick about it.

4) Don't ride a Segway around U of I in January.

<comment><USER10> > 4) Don't ride a Segway around U of I in January.

I'm so very sorry for you! Didn't it ring a bell for anyone where you work that outdoors + Chicago area + January = frostbite? No wonder the place rented you a Segway! You don't see a lot of Segway tours in January (or people outdoors if they don't have to be).

<comment><USER9> It was my idea to go there and Segway it up. We chose the U of I for reasons other than the weather, and being from the south it just didn't occur to me that cold + Segway riding = really really cold.

</comment></comment></comment></comment><comment><USER11> I don't want to overshadow the fact that somebody died, but I wonder how / if this will negatively affect Segway's PR.

</comment><comment><USER12> Very sad to read, especially with those huge donations to charity he gave.

</comment><comment><USER13> Probably more importantly isn't the segway but hesco bastion <http://www.youtube.com/watch?v=Up-ozEcAX8k> Saved lots of lives.

</comment><comment><USER14> So awesome that his contributions to charity play such a prominent part in the article announcing his death. A life well spent.

</comment><comment><USER15> Reading this reminded me of "I, Robot", although as unwind correctly noted, Mr. Heselden did not invent the Segway.

Terrible thing to happen, rest in peace.

</comment><comment><USER16> Can a Segway be remotely controled? Could there be foul play in this case?

<comment><USER17> I think one of the Roger Moore Bond movies starts with the villian trying to kill him in remote controlled helicopter so there is definitely a precedent.

<comment><USER18> <http://en.wikipedia.org/wiki/For_Your_Eyes_Only_(film)>

</comment></comment></comment><comment><USER19> It's what I've always said--cliffs don't kill people, people driving Segways off cliffs kill people.

</comment><comment><USER20> At least it probably landed right side up....

:(

</comment><comment><USER21> Tragically ironic.

<comment><USER22> Neither tragic nor ironic, IMO:

[http://raganwald.posterous.com/the-tragic-and-ironic- death-o...](http://raganwald.posterous.com/the-tragic-and-ironic-death-of-mr- heselden)

<comment><USER23> The common use of _tragic_ is more general than the literary term, and any premature death of an admired or innocent person is reasonably _tragic_.

This situation is arguably ironic, with a few reasonable assumptions: the Heselden believed and promoted the Segway as safe, that one motivation for his fatal final excursion was to be ready with personal experience and stories about its safe and exciting use, and so forth. "I have so much confidence in this product, I bought the company!" And now, he's also bought the farm.

<comment><USER22> I'm familiar with the common use, and even there I demur. He was a mature man who was using and adventure model segway to travel off-road. Death by misadventure may be statistically unlikely, but it is not unexpected. Furthermore, in his life he was able to accomplish a great deal, and while he may have gone on to accomplish even more, I trust that we can look at his life without a massive sense of what-might-have-been.

Compare and contrast to the "tragic" death of Jimmy Blanton, Duke Ellington's bassist for just two years. Blanton is credited (or blamed if you prefer) with inventing the Bass Solo, but at age 23 he died of tuberculosis. Thus, the world was deprived of the bulk of his career and looking at his short life one wonders what Jazz might have been like had he played for five decades like Ray Brown, a man he inspired.

The tragedy of Blanton's death was that it was significantly premature. Naturally the bereaved think that Mr. Heselden's death was also premature, but we must draw a line somewhere, otherwise _every_ death is tragic and the word means nothing at all.

So Blaton's death was tragic in comparison because of how premature it was and how much of his productive genius was lost. That being said, the cause of Jimmy Blanton's death was not extraordinary given the health issues affecting many from his social class at the time.

This is different than Scott LaFaro, another pioneering Jazz Bassist who died "tragically," however Scott's death was in an automobile accident, an unexpected incident. Scott's career was cut short and it was cut short in an unexpected fashion, another mark of a "tragedy" in the sense you promote. Mr. Heselden's death was anything but unexpected. If a man sets out to seek adventure in wild places, he and everyone around him must accept the risk that he will not survive.

If I am to die while Scuba diving, could we really call that a tragedy? What caprice of fate can we blame for a man who is killed when he deliberately immerses himself in an environment hostile to air-breathing life?

This watered-down use of the word "tragic" no longer carries much meaning, if any. I get that it's the style (especially in America) to say that since English is a "living language," it is defined by whatever meaning the vox populi care to give it. But while I respect your point that there's more than one way to use the word, I feel that even this lesser meaning does not apply to a mature, accomplished businessman who died while knowingly engaging in a risky activity.

</comment></comment></comment></comment><comment><USER24> Interesting article. I wonder if the guy who invented the bicycle ever had an accident. Was it newsworthy?

</comment><comment><USER25> Sounds intentional to me. If you were on a runaway scooter about to go off the cliff, you could just _jump off the scooter_ back onto the ground. Sure, you'd eat some dust, but you wouldn't die in a river.

It seems like it'd be pretty hard _not_ to do this even if you were trying not to do it. Something is definitely fishy here.

<comment><USER26> You can't infer anything "intentional" here. I imagine he was close to the edge and he let it get away from him for whatever reason. Maybe he slipped in some loose gravel or mud, or his dog blocked one of the wheels, or he simply wasn't paying attention. Those machines are deceptively easy to operate, but they are still machines and you pay dearly for your complacency. I have 5000+ miles experience on mine, and I still planted a facer last month (my own fault, not the seg's). All I can say is that it's a good damn thing _I_ don't live on a cliff.

<comment><USER27> I have a Segway. I actually got it for my son and he rode it to school his senior year in high school and had a great time with it (he even got in the Wall Street Journal because of it).

After he got a girlfriend he was more interested in a car so I took the Segway to work and we had a lot of fun ridding it around the office.

After about a month or so, after the novelty had worn off, our CTO was riding it around when he had an accident. He was getting off it but left one foot on the platform and accidentally twisted the handle bar to one side. The Segway took off in a circle throwing him to the ground, nearly throwing him through a plate glass window and running over him.

Your reaction if you get off the thing wrong and it keeps going is to grab it by the handle and try to stop it. But it's heavy, the handlebar is the controller, and it has _a lot_ of torque.

I don't think it's more dangerous than anything else (like a bicycle), but it works in a way that's different than anything else and after a while you get complacent only to get bitten by it.

<comment><USER28> > got it for my son and he rode it to school his senior year in high school

So, what was his weekly wedgie average?

<comment><USER27> None, oddly enough. He managed to get a lot of girls interested in him, though.

High school must be different nowadays...</comment></comment></comment></comment></comment>