Netflix Plunges on Guarded Outlook for New 2012 Signups - <AUTHOR> http://www.businessweek.com/news/2012-07-25/netflix-plunges-on-guarded-outlook-for-new-2012-signups

<comment><USER2> They just sent me an email begging me to sign up again. I quit the streaming service because I ran out of interesting things to watch.

(Of course the email is a "no reply" - we want to talk at you, not hear from you - and gives no indication that there is any new worthwhile content.)

<comment><USER3> I might suggest that either you have already watched _a lot_ of movies or your definition of interesting is rather narrow. I have hundreds of films in my instant queue. The number of critically acclaimed TV shows is pretty large, too. Have you seen all of Mad Men? Battlestar Galactica? Breaking Bad? Arrested Development or Louie? It would take a while just to get through those. There are, of course, many more. Lots of documentaries and smaller films you might not yet have heard of, but that you might like a lot.

It's hard for me to understand why anybody would think there's nothing interesting to see there.

<comment><USER2> I have 400 laserdiscs and 700 DVD cases (some are TV shows with multiple discs or films and their sequels). I stopped buying DVDs many years ago, but then again Netflix hasn't been acquiring recent films either - one example article [http://www.forbes.com/sites/frederickallen/2011/02/02/netfli...](http://www.forbes.com/sites/frederickallen/2011/02/02/netflixs- lousy-selection-of-movies/)

I also haven't had TV service since 2003 and don't torrent or similar - all my viewing has been by buying DVDs, seeing things at the cinema/on planes etc or on Hulu.

And once I did sign up for Netflix I did catch up TV shows (eg the new series of Futurama). Out of your examples I already own BSG on DVD. The others don't really interest me as I'm not a particular big fan of them. (I'm British and have lived in the US for over a decade, but my tastes don't really go for the things you list.)

To be clear there is a heck of a lot of stuff I did want to watch. When I first signed up for Netflix I spent several weeks typing things into their search engine only to get responses along the lines of available for mail order only, or doesn't exist. Following recommendations etc did mean I ended up with a queue, but it is mediocre stuff. So I gave up and read more books instead.

Two random content examples for you. Try to find "Northern Exposure" (TV series) or marvel at how Netflix thinks Keanu Reeves has only ever done 6 films.

</comment></comment></comment><comment><USER4> At the end of the day, it all boils down to content. We're going through an age of amazing television, especially with AMC and HBO. Netflix needs to either provide GREAT content that they create, or they have to get HBO and AMC on board (which is pretty difficult). I'm sure sports broadcasting rights are really ratcheted down, but It would be cool if they broke into the live streaming side of things. I'm sure they have the capacity to handle a football game or hockey game.

<comment><USER5> AMC _is_ on board, at least with past seasons of Breaking Bad, Mad Men, and Walking Dead

</comment></comment><comment><USER6> Not surprising. Netflix lost their connection with their core business and stopped listening and responding to feedback. Ultimately, this will be what destroys them.

A few names come to mind: Polaroid, Kodak, RIM (ok, not quite yet but soon enough). Any others?

<comment><USER7> I think this is what really bothered me about them, its almost like that cliched part in a breakup where you get to go "you've changed".

Years ago, I was a netflix evangelist, getting into heated online arguments with my friends about how awesome netflix was and how it was going to decimate blockbuster (Can you imagine how chuffed I was when that actually happened and my friends had to issue mea culpas, one by one?)

I really thought people were being hyper reactive when netflix first announced their pricing changes and Qwikster, I was actually going to buy a ton of the stock when it was at $64.

But I witnessed their newfound intransigence first hand, they wouldn't let me use the ipad app unless I had signed up for streaming (even though I was a paying customer with an actual DVD queue that I wanted to manage), they removed the ability to put an account on hold, forcing me to cancel my account after almost 6 years as a loyal customer, and the kicker was when I actually went and got an AppleTV and realized that for the way I watch movies, netflix was just a waste of money.

Oddly enough, I was such a fanboi that I would have continued to support them anyway, but there was just this corporate ugliness that I saw in their new direction that made me sever my ties with them.

Netflix never really built on the lead that they got in the movie rental space, they should have built a box that they'd have sold to users as a loss leader to let people watch movies directly from them ... but they never did, now they're dependent on the studios, and hardware makers (Sony, Samsung, Apple etc) to actually deliver movies to people which is not a good place to be. It almost reminds me of how Microsoft surrendered it mobile and tablet lead to Apple ... only Microsoft had strengths in other areas that let it absorb such a massive screwup.

I don't know that Netflix can do the same thing, especially in the face of _vicious_ competition.

I really do wish them the best of luck though, because (just like most real life relationships) even though we've broken up, I still think of them very fondly from time to time.

<comment><USER8> > they should have built a box that they'd have sold to users as a loss leader > to let people watch movies directly from them ... but they never did, now > they're dependent on the studios

There is Roku, an app for Android tablets (used it on ASUS transformer, works great), an app on my Vizio TV (also works great), my LG blue ray player also has Netflix support (also works great). I wouldn't want another box in my house or around me like Roku even it was free just to handle Netflix.

What I want is a better selection of streaming movies. And unless Netflix starts producing their own movies, I don't see what you mean by them not being dependent on studios.

Content owners, it seems, think they can and should run their own streaming and distribution and they see Netflix eating their lunch. I bet each one of them think they are the shit and their content is so awesome, customers will trip over themselves to pay extra or buy specific hardware just for them for a premium just to watch that content.

And I would guess every contents owner thinks that. Except I really don't see myself having 10 different apps for each of the studio and picking based on owners what to watch (For ex. I wouldn't say, hmm, I wonder what wonderful movies Sony Studio App has today).

</comment></comment></comment><comment><USER9> After finding yet one more set of episodes removed from streaming -- in addition to however many movies I'd previously queued up -- I'm about done with Netflix. I'd hung in there because I liked the service and their early attitude.

But now, even if this is not Netflix' fault, I think I'm done sending any of my money -- even via the Netflix indermediaries -- to content owners who jerk me around this way.

There was a fellow -- in France, IIRC -- who wrote a fairly well-worded if polemic argument for no longer enabling these content owner abusers through one's financial contributions.

While I've never been a content pirate (not that I don't endorse some of the associated goals and principles), I'm ready to retreat further into my books and works and do my 2 cents to help "big media" starve -- perhaps, hopefully, at least enough to get hungry enough to try harder to find a better distribution model. Or to help the real content producers (in all their various roles) do an end run around these self-serving, rapacious middlemen.</comment>


Google will scan ancient Italian books in Rome and Florence - <AUTHOR> http://online.wsj.com/article/SB10001424052748704541304575099943467728882.html <comment><USER2> This is the sort of thing that keeps me a big fan of Google. Who else would undertake to digitize 15th century Italian manuals? Google have redrawn the traditional lines separating commercial activity, academic research, and public service.

Speaking of Google books, our local university library has many books available online, especially up-to-date research literature that is hard to get in print form. You can only read this stuff if you're sitting at a workstation in the library, or if you have a student/faculty account. That's reasonable. But they use proprietary e-book software that is so awful and clunky that it's unusable. I keep thinking about that crappy software company that was good at nothing but selling to university executives, and wishing the library could just cut a deal to use Google Books instead.

</comment><comment><USER3> Great news for would-be symbologists: You no longer have to brace the dangers of Vatican intrigue to investigate ancient mysteries; just use your browser (perky and beautiful European sidekick not included).</comment>


10 000 concurrent real-time connections to Django - <AUTHOR> https://github.com/aaugustin/django-c10k-demo <comment><USER2> I dabbled in realtime connections for a while now, and this is certainly a sexy option to avoid the fragmentation happening in the Python async world.

<comment><USER3> Well, I think that was Guido's goal in creating Tulip.

</comment></comment><comment><USER4> why do people persist in mangling django into doing websocket persitent concurrency when there are better py or otherwise well suited tools to such tasks...

<comment><USER5> Because it's a popular, well-written framework with a huge volume of existing code, and integrating WebSockets into Django means you don't have to maintain two codebases if you want to have a realtime Django app.

Also, it's fun.

<comment><USER4> how much of that existing code has any application in a websocket context.. if it uses the orm layer throw it out.. if it uses the template layer.. optionally throw it out for efficiency (jinja and friends).. what are you really left with... routing.. trivial.. a familiar api with the guts out.. overrated and a hobgoblin of consistency.

<comment><AUTHOR> This system doesn't replace Django; it complements it.

You could build 95% of an application with the traditional request-response model and add the 5% of real-time featurs with a system similar to my demo.

(Of course, given your opinions on Django, I don't recommend you build anything with it.)

<comment><USER6> Well said =) It's incredibly frustrating to so easily build the entire app with a "traditional" django stack and then be faced with solving for a whole new stack just to avoid wasteful XHR-polling for some simple server-side event driven UI updates.

We've implemented some SSE based solutions lately with gevent & nginx in front of django, and it's been great to keep it all in the django family.

Maybe switching to py3k has some value after all... =)

<comment><USER7> I concur.

</comment></comment></comment></comment></comment></comment><comment><USER8> For Python2.X, I think gevent.wsgi.WSGIServer could handle C10k or more, no?

<comment><USER3> In my experience -- yes. I've pushed it further than that.

In practice, debugging is an unpleasant experience. If you're doing anything slightly out of the ordinary, you should take care.

</comment></comment><comment><USER9> Very cool, well done.

</comment><comment><USER10> The C10K problem[1] is about real clients accessing real web servers, not about writing short strings over WebSocket.

I'll associate "C10K" and "Django" when I'll see a dynamic web page being served using the template system, the standard middleware and the ORM (with the default behavior of creating and destroying a database connection for each request).

[1] <http://www.kegel.com/c10k.html>

<comment><USER11> Why would you insist on creating and destroying a db connection on each request? We stopped doing that decades ago.

<comment><USER12> Django hasn't stopped insisting on that... v1.5 might have pooling, but it's taken them a long time to get connection pooling in.

<comment><USER13> Forgive my ignorance, but isn't this the point of something like pgpool? I didn't think connecting to a connection pool would be as expensive as connecting to the database itself (if it is, then my next question would be: What's the point of a connection pool? Because clearly I've missed something one way or the other).

<comment><USER12> Yes, but pgpool isn't always an option. If you use Heroku's Postgres service, you do not have sufficient privileges to run the commands to attach to software like pgpool.

The only way we were able to get connection pooling working in django 1.3/1.4 was to use django-dbpool[0]. It works okay, but is still pretty sketchy compared to the connection pooling libraries available for the JVM like BoneCP or C3P0.

[0] <https://github.com/gmcguire/django-db-pool>

<comment><USER13> Understood, thank you for the clarification.</comment></comment></comment></comment></comment></comment>


Ask HN: Are we witnessing the rise of the dark mode? - <AUTHOR> Increasing number of apps/websites and even OS (macOS and Windows 10) are introducing dark interfaces. Is this just a fad or an natural change due to the increased screen time the humanity is facing? <comment><USER2> I've always preferred the dark mode. I use the computer a lot and it's much easier on the eyes. I don't think it's a fad because it's for a practical reason. I hope apps / websites continue to move in this direction.

<comment><USER3> Agreed, I'm so happy to finally get a proper dark mode on the new macOS.

</comment></comment><comment><USER4> I think that dark mode in general is getting more attention than before. One of the main reasons is the introduction of macOS Mojave. Dark mode is a nice thing if people are working/browsing late at night or in low-light environment. It helps reduce eye strain for sure. Night Eye - [https://nighteye.app/](https://nighteye.app/) is a browser extension that enables dark mode on nearly any website and comes handy to websites that still don't offer a dark UI.

</comment><comment><USER5> Built in bright/dark interfaces, same as low blue modes are just convenience customizations which help people adjust screen to work habits - night work etc. They give real health benefits in my own experience. However I still wait for a killer e-ink laptop to please my eyes in any light settings.

</comment><comment><USER6> I work in an usually well lit room and dark mode is really hard when I got direct sunlight, not in my screen, but in the room in general.

Dark mode is nice when it's dark, so maybe it's related to the use of smartphones in bed at night.

</comment><comment><USER7> I've always thought it was just a fad (one that I like though) I never thought about it in terms of a response to increased screen time but that is very possible.

</comment><comment><USER8> I like this design trend!

Can you show me which websites use dark mode? I would love to see them. :)

<comment><USER9> [https://darkmodelist.com/](https://darkmodelist.com/)</comment></comment>


Writing a compiler in Python using Lex, Yacc and LLVM - <AUTHOR> http://wiki.alcidesfonseca.com/blog/writing-compiler-using-python-lex-yacc-and-llvm/ <comment><USER2> Inspired by this, I've started writing a compiler for a subset of Matlab. I'm sick of Matlab being an interpreted language year after year, and while I don't hope to _change_ that, I can at least do a proof-of-concept to lend weight to my derision.

I've got the lexer and parser done, thanks to Parsec, and some basic C code generation as a sanity check. Now for the runtime LLVM code generation, to make it feel like an interpreter! Thanks, HN!

<comment><USER3> Could you post a link to Parsec. Quick googling didn't come up with any compiler tools. Thanks!

<comment><USER4> It's a Haskell library: <http://hackage.haskell.org/package/parsec>

Here's a tutorial that uses it to parse a simplified Scheme: [http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_H...](http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours)

</comment></comment></comment><comment><USER5> He mentioned that llvm-py documentation was lacking... I was going through it, seems pretty darn good to me (relatively). <http://mdevan.nfshost.com/llvm- py/userguide.html>

</comment><comment><USER6> Impractical: 1) The compiler is gonna be very slow; 2) If you make compiler for low-level language, such as C you need precise correspondence between data types used in cpu, datatypes used in compiler's implementation language and datatypes in the target language.

<comment><USER7> On the contrary. Compilers written in a high-level language are at a distinct advantage: they're easier to optimize (significantly so), easier to debug, and support forms that are difficult to deal with in a low(er)-level language like C or C++.

I do compiler development every day, and I no longer touch low-level compilers. Everything I write is Boo (for my OS), Ruby (for my startup -- by far my favorite language for compiler dev, despite not liking it in general), or Python. As a result, I have far more maintainable code than the majority, and the code I output is incredibly well optimized.

Edit: To clarify, by 'support forms that are difficult to deal with ...' I mean things like using a pure S-exp structure. Rather than a traditional intermediary form, you can represent your compiler state as an S-exp and iteratively optimize and compile it. Standardizing around a form like that, when it's easy to deal with, greatly simplifies code. (This is actually the reason Ruby is my compiler language of choice these days.)

<comment><USER6> if you read carefully what I said, i never said that hig-level languages are bad - I said only this: 1) Compiler written in python, ruby and other "slow" (do not beleive that pyruby is slow?) languages going to take eternity to compile linux kernel. 2) You need to have _precise_ mapping between types in compiler and the language you implement. It is so important that gcc use a software library for floating point computation, otherwise you are locked-in wit you cpu's FP implementation and can not write cross-compilers.

<comment><USER8> > You need to have _precise_ mapping between types in compiler and the > language you implement.

No. You don't need that. You can treat your data however you want until you place it into the final binary. Before that, you can even treat all your numbers as strings if you really want to. If you need some constant expression evaluation, you just have to replicate the target machine's math operations in software - no magic involved here. As long as you get the right result, noone cares what you do internally.

If your compilation machine == target machine, you can even construct a function that calculates the expression and actually run it to get the result.

<comment><USER6> When you make optimization you need to do intermediate calclulation _exactly_ the same way the target machine does. Even if the number is ascii or unicode string, you need to do the computations strictly same way s target machine does, otherwise you'd break assumptions of the programmer, and lead to unreproducible code.</comment></comment></comment></comment></comment>


Fundraise, find a cofounder, or both? - <AUTHOR>

Here's where I'm at…
I recently finished my business undergrad and have been working full-time on my hardware startup for the past five months. More specifically, I'm building a total-body strength training machine that uses embedded sensors to track key exercise metrics in real-time. It uses this data to deliver personalized insights and custom tailored programs that smartly adapt to your progress. Think: bowflex, but smart, compact enough to slide under your bed, and has an apple-esque design (all ano aluminum construction).
I learned Solidworks, built the physical product (including the sensors), and have been testing it at a number of independent and multi-chain gyms in Toronto over the past 1.5 months to validate key features and business model assumption. Feedback has been very positive. I've secured $33,000 in pre-orders from different gym owners interested in a commercial version.
At this point, I'm confident that the product can be successful in the commercial and home markets, and I'm ready to move forward with the next steps. This includes raising capital to finalize the design for manufacture, building the adaptive iOS app and workout programming, and setting up manufacturing.
I have a list of potential investors and all my investor materials ready, however there's one thing I'm missing – I don't have a cofounder. I have a contractor (not cofounder suitable) helping me with the basic hardware components and algorithms, however, strictly speaking I'm the only founder. This is an issue as having a technical cofounder is critical for moving the product forward.
My question is:  Should I devote time now to finding technical prospects before pitching to investors or should I start pitching and continue my search for a cofounder in parallel? I may only have one chance with some investors and not having a partner could be a deal breaker.
Any advice would be greatly appreciated.
Thanks,
Jeff <comment><USER2> The dogma of "cofounders or death" is overrated. If you have the prototype, customer pre-orders, and investors, get some cash and hire engineers.

Sure, if you come across someone with an amazing track record by all means re- evaluate this, but I think you can get away as a sole founder with employees here.

It seems you've come a long way. Great job.

</comment><comment><USER3> So if I try to apply the advice Sam Altman gave in his lectures, I'd suggest you to be careful in finding a cofounder. If you don't already know somebody, any choice is very likely to be a bad choice.

You probably already put a few thousands of dollars into the product. Any cofounder/partner would have to bring a substantial benefit to the table, probably unlike anything a first-time cofounder with little experience could give to you.

My advice would be to look to an active investor, a business angel maybe. Such a person would either have experience and contacts to develop the business side or the software/hardware side.

Having no cofounder isn't that big of a catastrophe, because it is unlikely you will quickly find someone who is highly qualified, willing to take the risk and is as passionate about the product as you (hopefully) are.

<comment><AUTHOR> Really great advise. Thank you.

</comment></comment><comment><AUTHOR> DevX, I appreciate the advice. Finding someone down the road probably makes more sense. Otherwise, it's just disruptive to the entire business. I guess the problem becomes more of a financial concern. Engineers aren't cheap and I would need to raise more money and adjust my valuation.

Cellis, crowdfunding makes a lot of sense and I plan on doing one for the home user version of the product.

Benologist, I guess it's always been my plan to get a technical cofounder. The supporting software platform is just as improtant as the physical machine. Since, I'm not an engineer, I think it makes sense to have someone building out that side of the business. And to the point above, it's more economical in the beginning.

<comment><USER4> Have you found the tech stuff to be a bottleneck / usurping a significant amount of your time that could be better spent on other stuff?

<comment><AUTHOR> The tech stuff has not been a bottleneck. I've spent the last 1.5 months in gyms testing the product, while my contractors have been building the tech mvp (hardware + algorithms). They'll be done in 2-3 weeks, so I need someone to take over at that point and start building the app.

<comment><USER4> What would a cofounder do for you after the app's done? What's the negatives of just getting an app developer on contract next?

<comment><AUTHOR> Expanding the functionality of the app. The first iteration will be very simple with only a few features.

</comment></comment></comment></comment></comment><comment><USER5> What do you need a technical cofounder for? Like what is the critical piece for moving the product forward that you don't currently have?

You should continue to look for good people and size up if they would be a good partner. You should also start talking to investors. Not having a cofounder is just one data point.

I don't really believe in this one chance with an investor. A lot of them like to get to know you and your business over a span of time. It really does depend but seeking out good people (tech or otherwise) is always a valuable thing to spend your time on.

What area of the country are you in?

<comment><AUTHOR> The next step is building out a basic app that will display the metrics being tracked by the sensors and using that information to provide adaptive programming. To understand what I mean by adaptive programming take a quick look at fitstar.com. I wan't to build a very basic form of that functionality, but the beauty is users won't have to stop and manually record their exertion level, repetitions, and working time between each exercise. My machine will automatically track those metrics, so the experience is seamless.

Based on your feedback and the feedback of others, I'm going to pull the trigger and start setting up meetings with investors. I think that's a logical next step and finding good people is something that I can continue to focus on in parallel to other things.

I'm in Mississauga, ON.

</comment></comment><comment><USER6> Ditto crowdfunding.

You might also consider finding a tech person who can become your CTO if you are not especially strong in technical areas. If you are thinking you might go this route, you might consider doing it before a kickstarter campaign so that you can add some degree of legitimacy (and they can hopefully hype it).

Edit: Why limit your kickstarter to a home version? Different tiers = different markets. Have a plan to not need the croudfunding route, but if you can pull it off, use it to accelerate growth.

<comment><AUTHOR> I agree with your point. I think with the crowdfunding route having a CTO is crucial. Like DevX mentioned, after raising money I would be able to find someone who is compatible and has a good track record to fill that position.

I would love to launch the commercial and home versions simultaneously. However, the components need to be different for the commercial version because the product needs to be more robust. Therefore you're essentially designing, building, and shipping two different products. It makes things more risky, but there is a possibility to make it work if the same body component (which is an aluminum extruded frame with embedded track rails)can be used for both machines.

<comment><USER7> This early with only you doing everything, you need to pick is your product for consumers or is your product selling to gyms. It seems you've had some success selling to gyms, so would think your traction is showing you may want to continue down that path. Not sure if you have shipped a physical product yet, but it's hard enough getting one version right, let alone two.

If you go consumer, crowdfunding for the consumer side is the way to go. I would think if you had a successful crowdfunding campaign, you would be able to convince a good technical guy to join you (as clearly you've done a ton of hustle on your own).

From the fundraising perspective, at the this early of a stage investors mostly are investing in the team (which right now is only you), unless your product/traction is through the roof. At the early stage is also when you get most heavily diluted, so want to think about how much you are giving up vs. how much do you really need the cash? Again, it sounds like you have traction, so may want to figure out how to keep bootstrapping this vs. taking a big hit equity wise.

feel free to hit me up (email in profile) - I love the space you are going after.

</comment></comment></comment><comment><USER8> Have you considered crowdfunding? Physical products and hardware startups tend to do much better these days going that route.

</comment><comment><USER9> I'd definitely look for a tech co-founder. At the bare minimum, you'd gain in credibility. If you feel ok with the hw, look for a sw eng. I assume it won't be hard to know someone in the gym(s) you're targeting, that can fall in love with the idea and be not only a co-founder, but also a user/tester.

<comment><AUTHOR> Good idea. I'm actually testing at the University of Toronto gym, so it wouldn't be a bad idea to reach out to the comsci department.

</comment></comment><comment><USER10> Jeff, I run the largest peer to peer for tech startups CEO's in Toronto @ the Ryerson building. I'm happy to have coffee with you if interested since I imagine there is more context here that is missing (don't like just giving advice until learning more....) email is firstname.lastname@example.com.

<comment><AUTHOR> I sent you a message.

</comment></comment><comment><USER4> It seems like you're doing great with your current arrangement, what do you expect from a cofounder that this contractor, or another one, or an employee, can't do for you?

</comment><comment><USER11> Read what @sama says about cofounders. Solo is better than someone you don't really know. Trust me. Getting someone you just met on HN is very risky.

</comment><comment><USER12> I'm based in Toronto as well and this sounds pretty cool, can we grab coffee?

edit: email: yk.he @ live

</comment><comment><USER13> Better to hire somebody for the job than split control with a co-founder.

</comment><comment><USER14> This sounds neat, can we see pictures somewhere?

<comment><AUTHOR> Sent you a message.</comment></comment>


The Piracy Box Sellers and YouTube Promoters Are Killing Kodi - <AUTHOR> http://kodi.tv/the-piracy-box-sellers-and-youtube-promoters-are-killing-kodi/ <comment><USER2> I used to work for eDonkey doing support, many years ago. There was a fair number of people selling "eDonkey PRO", "eDonkey Premium" or similar, so the problem is familiar. They'd pay them, then email us with problems, and demand refunds if they were unhappy.

One particularly memorable email was something along the lines of "Cease this chicanery at once! You must refund my monies...". I've worked chicanery into conversations ever since.

<comment><USER3> >"Cease this chicanery at once! You must refund my monies..."

This is incredible. Any other emails you remember?

</comment></comment><comment><USER4> Beyond the impact to the Kodi project, I wonder how many people are contacted by their ISP over copyright infringement notifications who have no idea why they are being contacted. Amongst the flaws with the current take-down model, this is perhaps the biggest and one which may become quite the problem. I'm waiting for the day someone releases a WebTorrent ad with the explicit goal to overwhelm copyright enforcement. Ten years ago, if you were pirating content you likely knew. These days it's very possible to be engaged in pirating without ever knowing.

<comment><USER5> What kind of person thinks buying some cheap chinese set top box off eBay lets them watch stuff for free legally?

<comment><USER6> Anybody who is not a techie.

<comment><USER7> not really, people just willingly choose not to care about it... it's the same as with any other pirated goods, of course you know it couldn't possibly be the original, but it's easier to play dumb about it and hope it's a good deal...

<comment><USER8> There are large swathes of the population who have no idea what technology is. They see "box that you plug in to your TV to watch free movies" as a _technological_ improvement, as in, some kind of breakthrough enabled the free delivery of movies. They're not likely to think about the economics of it unless it's pointed out to them. There's probably a decent number of people who bought this and had no idea it was illegal.

<comment><USER9> I can offer anecdote in support of this... a lot of anecdote. My mother's friends discovered that an HDMI cable and their various tablets could let them stream with these "Cool sites with all of this free stuff!".

It never even occurred to them that it was piracy. When they thought of "pirating" or "theft", a glossy site that their friends told them about, and that asked nothing of them wasn't it.

</comment></comment></comment></comment></comment></comment><comment><USER10> What is Kodi?

Kodi® (formerly known as XBMC™) is an award-winning free and open source (GPL) software media center for playing videos, music, pictures, games, and more. Kodi runs on Linux, OS X, Windows, iOS, and Android, featuring a 10-foot user interface for use with televisions and remote controls.

\---

Seems like a Plex replacement?

<comment><USER11> One question: Can it play standard media files stored on encrypted USB drives? (ie ext4 or any similar format)

I'd kill for a media player that could. I think such drives are the one place I'm not fully encrypted.

<comment><USER12> It runs on top of your regular OS (usually Linux for dedicated players), so yes.

<comment><USER11> So if it is running linux then it should be able to mount ext4 drives ... so long as there is some sort of interface to accept keyboard input. And, of course, no ridiculous retransmission or caching of said keyboard inputs.

This comes up sometimes in my day job where on occasion I want to play something on a USB drive (to a projector/scree) but hesitate to save it unencrypted. ATM I often carry two laptops to accomplish this, but would much rather travel with one laptop and one tiny media player.

<comment><USER12> Yup. You can run it either standalone (perhaps with an automounting script in the background, that uses a hardcoded key?) or inside your regular desktop environment (in which case that probably has a solution for mounting the drive).

</comment></comment></comment></comment></comment><comment><USER13> I recently ran into this issue when searching for an android app to watch some live sports broadcast from a well known (but dodgy) pirate streaming service.

I found dozens of forum posts and blog entries advertising untrustworthy packages of Kodi bundled with 3rd party binary plugins.

I know not to get involved with them but there are plenty of people who can't resist the allure of free pirate content and fall into these scam malware apps.

I feel bad for the Kodi guys :(

<comment><USER14> They're (mostly) not scam malware apps. But actual sources of pirated content, which sometimes have bugs or go offline due to legal issues or network issues. The Kodi devs just don't want to be taking flak for crappy plugins and pirate streaming services.

</comment></comment><comment><USER15> So they aren't killing the plug-ins, they're just not allowing advertising using the Kodi name.

<comment><USER16> Makes sense. The plug-ins are probably the main reason anyone uses Kodi. Certainly one of the reasons I do personally.

It's a good move to move the name 'Kodi' away from piracy though as it's now a household name just like Napster was.

<comment><USER17> Kodi is a really good media player for your local home network. It's easier to access those files than VLC. PLayback is more reliable than say Plex apps. I dont' really use any of the apps, but spin up kodi to play files on my network. You can use it to play slideshows of photos too. I wish I used it more, depended on it because it's so good.

</comment></comment></comment><comment><USER11> >>> If you see somebody selling a box that's "fully loaded" or comes with the phrase "Free movies and TV with Kodi," please, ask them to stop. And let us know.

This reminds me of when Lady GaGa called on her fans to report piracy of her album. Copyright law isn't simple. Those fans who submitted false takedowns thinking they had permission to do so were not helpful. Trademark law is even more complex. If I were Kodi's legal team I would not ask anyone to enforce my trademark. Reporting to Kodi is one thing, but "ask them to stop" will result in false trademark infringement notices by people with no association with Kodi. You cannot split legal hairs when asking the public for favors. They will take your words and run with them.

<comment><USER18> Do note that Kodi said to "ask them to stop." Not "tell the police and YouTube and get them shut down." That's where the "And let us know" comes in: Kodi will then presumably write up official C&D letters and all that.

But if someone I follow on Tumblr links to one of these pirate boxes, I'm going to message them about the shadiness of the whole thing. Not report their blog or anything major like that, just message them. I think that's all Kodi is asking us to do.

<comment><USER11> And my point was that one shouldn't split such hairs in public statements. Kodi knows that some people will take this as permission to file complaints. If those complaints hits legitimate distributors, Kodi might have to backtack, as did Lady GaGa.

</comment></comment></comment><comment><USER19> Local Facebook virtual yard sale groups are flooded with ads for these.

<comment><USER20> Heck, I bought one of the $28 quad-core S905-based Android media player boxes off Amazon just to see how bad it could be - and it's got Kodi latest installed with a bunch of these dodgy plugins.

Otherwise, it's pretty amazing for $28, and the plugins can be removed and Kodi reinstalled from the App Store... We use it here at work to put Pandora up on the big TV in our work area / conference room.

</comment></comment><comment><USER21> > Over the past few years it's become clear that many users have been watching > pirated content using unofficial and unsupported add-ons that frequently > break, and they are installing add-on repositories whose trustworthiness is > questionable, leaving themselves open to numerous security exploits

Sounds like Kodi lacks proper plugin sandboxing.

> So while we don't love this use of Kodi

What use is kodi if not watching pirated media?

<comment><USER22> > What use is kodi if not watching pirated media?

Watching non-pirated media, presumably. A lot of people use it as a front-end to their media libraries.

<comment><USER23> I had always assumed those media libraries were 99% pirated and maybe 1% free or public domain. Where exactly are you getting DRM-free, fully licensed, legitimately purchased content?

<comment><USER24> Depends how pedantic you're being, but ripping DVDs for personal use doesn't count as "piracy" in my book.

Since this involves removing the encryption, it is technically a DMCA violation, but I'd like to see someone bring you to court over it. I'd love for it to go to the Supreme Court and for them to find the DMCA overreached when it effectively eliminated time shifting, media shifting, etc...

<comment><USER25> > Depends how pedantic you're being, but ripping DVDs for personal use doesn't > count as "piracy" in my book.

Exactly this. I got tired of lugging around my gigantic DVD collection and having them scratch or break with time. I've since ripped all of them, and Kodi makes for a fantastic frontend for my HTPC.</comment></comment></comment></comment></comment>


Quadcopter Programming Part 2: Using the CMSIS Library and First Takeoff - <AUTHOR> https://timakro.de/blog/quadcopter-programming-part-2/ <comment><USER2> The article's Delay function unfortunately has a rollover bug. If the counter rolls over in the middle of a delay, the delay will return early. It's a nefarious bug because it only occurs every 50 days, and only if the program is delaying. Also, while it's probably ok in this usage since it's a 32-bit cpu, it would be better to use atomic access intrinsics or a critical section and memory barriers rather than volatile to make the counter variable "ISR safe".

Embedded code is a lot of fun, but if you want to safely work on the "really fun" stuff it's important to maintain a high level of quality and correctness for fundamental but lame utility functions like this. Otherwise you could literally build a ticking time bomb!

<comment><USER3> >Also, while it's probably ok in this usage since it's a 32-bit cpu, it would be better to use atomic access intrinsics or a critical section and memory barriers rather than volatile to make the counter variable "ISR safe".

The dislike for volatile coming from people in higher systems is pretty tiring and unwarranted.

Volatile is a perfectly fine tool on low level mcus.

<comment><USER4> No, it is not, it will just work most of the time in low level MCUs because compilers support this abuse for lack of clearly better options. C and C++ have no support whatsoever for dealing with interrupts: volatile does not introduce any memory fences, atomics are for sharing data between threads which you do not have in many embedded systems, and sig_atomic_t is only defined for situations where you have a posix-like runtime environment. So sharing data between an ISR and the main program is undefined in C, and the compilers are free to compile "volatile" the way most people expect, but the language does not guarantee that it works.

It can be argued that the only kind of variable that can be shared safely between an ISR and the rest of the code is a volatile sig_atomic_t, but that is an argument from analogy and not from first principles, as the C abstract machine has no concept of ISR. The same goes for the argument that you should use atomic intrinsics, plausible, but still just an analogy.

(Just in case anyone was wondering if C as a language is close to the metal: no, it is not.)

</comment></comment></comment><comment><USER5> I found quadcopters to be a great way to get into embedded development. There are a couple posts on my blog [0] [1] related to getting Rust running on a quadcopter controller, although I never actually got my code controlling the drone in flight. The lesson I learned was that if I was going to do it again I'd definitely choose a board with an exposed debugger port, as I spent a lot of time repurposing one of the motor outputs into a serial transmit port just to do some "println debugging".

Not sure if OP is here, but I'd be interested in hearing about which debug options are easily exposed on that board. Can you use the port you are flashing the drone with as a standard serial port after your code is loaded? Looking forward to the future post about SWD that is introduced at the end of this post as well.

[0]: [https://www.joshmcguigan.com/blog/betafpv-drone-flight- contr...](https://www.joshmcguigan.com/blog/betafpv-drone-flight-controller- hello-rust/)

[1]: [https://www.joshmcguigan.com/blog/betafpv-drone-flight- contr...](https://www.joshmcguigan.com/blog/betafpv-drone-flight-controller- board-support-crate/)

<comment><AUTHOR> SWD is purposefully exposed on that board and instead of flashing via the bootloader I got flashing with gdb via SWD with the `load` command working. I just use a male header with some jumper wires for the connection. It seems stable enough. Some pictures of the debug port here:

[https://files.timakro.de/IMG_20191201_142259.jpg](https://files.timakro.de/IMG_20191201_142259.jpg)

[https://files.timakro.de/IMG_20191201_142246.jpg](https://files.timakro.de/IMG_20191201_142246.jpg)

</comment></comment><comment><USER6> CMSIS is the most bizarre API i've ever seen. This kind of mixing ALLCAPS_WithUnderscores_AndCamelCase is like criminal. Also _Min_Heap_Size. And that is the reason i would never use it and i've always looked for alternatives. Now i've ended up using Ivory/Tower eDSL framework where just about everything is equally complicated - as building a spaceshuttle.

<comment><USER7> On the bright side, the core CMSIS headers should work with all ARM Cortex-M cores, so you don't get locked into one vendor's HAL to do things like setup interrupts or interact with registers that are common to ARM cores. It also has something approaching first-party support with a permissive license.

I think that the ALLCAPS parts come from acronyms in most cases. Like, NVIC = Nested Vector Interrupt Controller. The naming can get a little bit confusing, but it seems fairly consistent.

</comment></comment><comment><USER8> What does this line of code mean?

        *(volatile uint32_t *)0x40021018 = 0x00000004;

Why is a pointer being created and dereferenced at the same time?

<comment><USER9> It's how you access memory mapped registers in C. It's writing the value 0x04 at that address using a 32-bit memory write. There is a peripheral register at that location.

</comment></comment><comment><USER10> I thought, the Peripheral library is deprecated for STM32. Is there any reason to use it besides the STM32 CUBE framework?. Because, the later seems to support more STM32 product lines.

<comment><USER11> Stm32 cube mx is the newest version of the framework, but the old peripheral driver library is a bit simpler and easier to use! It is more low level and a light layer over the hardware.

The new cube library can be more complex.

<comment><USER7> The new cube libraries do include two abstraction layers, though. I agree that the "HAL" libraries can be very confusing because they try to do everything for you with endlessly nesting functions and macros, but the "LL" (Low-Level) ones are closer to the old peripheral driver libraries.

</comment></comment></comment><comment><USER12> Just ordered one myself after reading your post, look forward to working on this platform!

<comment><AUTHOR> Great! Be sure to check out the first part if you have trouble getting started. Best of luck :)</comment></comment>


React Router v4 FAQ - <AUTHOR> https://github.com/ReactTraining/react-router/blob/v4/README.md <comment><USER2> I normally try to keep comments here reasoned and civil but the amount of churn in this library is almost so much of a joke that it should become a meme. At this point it's almost more expensive for me to continue updating than it would be to just fork the library and maintain the upgrades myself.

Any time I have to touch react-router I just resign the idea that I'm going to have to take at minimum a day to work out the bugs that pop up with every upgrade, (even minor changes).

> Why the huge change? (AGAIN?!)

> tl;dr Declarative Composability

The huge change is because the maintainers are apparently unwilling or incapable of either A. Creating something good enough on the first, second, or third attempt, or B. are completely oblivious to the needs of devs trying to create practical software and don't understand that project stability is just as important as a good API.

Thanks but no thanks.

<comment><USER3> I know. I hate it when people learn stuff writing free libraries to support new technologies and then release upgrades informed by what they've learned.

I've watched React Router grow from one-of-a-handful-of-experimental-routers- for-React-on-GitHub to the most well-known third-party library in the React ecosystem (tied with Redux). In that time, Michael and Ryan have learned plenty. They've also taught plenty. Libraries that experiment with their APIs, like React Router and React Motion, help all of us understand how to wield React better. I learned how to use contexts by dissecting React Router v0, when they were still an undocumented feature.

I understand the frustration that upgrading creates. (My first React project was creating an isomorphic server - I was definitely sensitive to changes in the routing API.) Still, I hate seeing a whinefest every time a free library makes a change that an app author disagrees with. You're always welcome to {fork it, build/use something else, help maintain and give feedback on API direction}. Michael and Ryan are enormously friendly and welcoming to external input.

Trying to embarrass the creators or turn them into some sort of open-source pariahs helps nobody.

<comment><USER2> > I've watched React Router grow from one-of-a-handful-of-experimental- > routers-for-React-on-GitHub to the most well-known third-party library in > the React ecosystem

> Libraries that experiment with their APIs, like React Router and React > Motion, help all of us understand how to wield React better

If I read this correctly, you believe that it is still in experimental phase? I don't have any problem with people learning and experimenting, but using major release versions a your petri dish is obnoxious for all the thousands of people using react-router even if it is convenient for the core maintainers. There is a difference between an upgrade and an overhaul, with the extent of the changes over V2,3,4 they might as well have just released a completely new routing library or just maintained an experimental branch to figure out what actually works before releasing a series of major breaking changes in quick succession to the greater world. I'm aware that breaking changes are necessary sometimes, but rapid churn is not necessary, esp once you are post 1.0 release. If there were some burning reason to release an upgrade then that would make sense but this release does not even address some of my major pain points with the API.

I also am not complaining about the cost and personally I don't see any validity in the "it's free so I am beyond reproach" mentality that open source people seem to have. What makes you think that I would thank someone for something that was free even if I didn't want it? Or that anyone would for that matter. Thanking people regardless of what they did, just because they did it for free, is one way to erase market signals which govern the direction of open source projects. I would rather just be candid and honest so that maybe people will remember that me and other devs in general are negatively impacted by breaking changes and therefore will consider keeping projects stable.

I also didn't "try to embarrass the creators" and the only person on here to made this personal was you, who decided to name the maintainers by first name.

<comment><USER4> > personally I don't see any validity in the "it's free so I am beyond > reproach" mentality that open source people seem to have. What makes you > think that I would thank someone for something that was free even if I > didn't want it? Or that anyone would for that matter. Thanking people > regardless of what they did, just because they did it for free, is one way > to erase market signals which govern the direction of open source projects.

Damn. Most of the time people follow their reasoning with, "I am paying for this, so do the stuff I want exactly how I want." But, This is the first time I've seen someone using the free-market to excuse being a dick to someone who's giving their work out to the world for free. The amount of entitlement mentality in this person is so unreal, I'm literally almost exploding in rage here, because I can't believe anyone would treat anyone else like that.

To the maintainers: 99.999% of people out there are not like this person, and we appreciate your work very much. Thanks for putting that work out there. Your effort is also unreal, but a kind version of unreal!

</comment></comment></comment></comment><comment><USER5> Interesting change. If I understand correctly, basically you have a base component that updates fragments of the UI based on the route.

        const App = () => (
          <BrowserRouter>

Hello World

            <Match exactly pattern="/" component={Home} />
            <Match pattern="/about" component={About} />
            <Miss component={NoMatch}/>
          </BrowserRouter>
        )

Couldn't we take it one step farther and just use a switch statement? It seems like using pure JavaScript would be more idiomatic React. The URL pattern could be parsed in the data layer, and passed down as props. That way the components don't rely on global state, making them easier to test.

        const App = (screen, args) => {
          let content;
          switch (screen) {
          case 'home':
            content = <Home args={args} />
            break;
          case 'about':
            content = <About args={args} />
            break;
          default:
            content = <NoMatch args={args} />
            break;
          }
          return (

Hello World

              {content}

          )
        }

It's probably just a matter of preference. Recently I started using React- Storybook, so I've become addicted to "dumb" components.

<comment><USER6> One reason to go with components over a switch statement is so you can render a specific component on all '/about' pages along with an additional specific component on all '/about/team' pages. With a switch statement you can only match a specific branch.

<comment><USER5> You can still do nesting within a case, or add another case 'about-team': and add another {var} to your component. That's essentially what RR would do. React Router approach is probably a little cleaner, however.

</comment></comment></comment><comment><USER7> I'm surprised at the number of negative comments about updates. You don't have to update. It will keep working. It's not like you're going to miss out and be left behind from some vast and vibrant react-router ecosystem. It's just a couple components that match strings up with other components and then barely matters to the rest of your application.

It's exciting that there are people out there experimenting endlessly to figure out the best APIs to build things with. Just because someone comes up with one idea doesn't mean they're wed to supporting it forever. Or for any amount of time: react-router v3 is open source and you can maintain it yourself if you like it or just want to stick with it but want more.

<comment><USER8> No need to maintain v3 yourself, they will be maintaining it for you.

>We intend to keep supporting the 3.x branch indefinitely (published separately on npm to aid in migration), although there will likely not be any future major versions based on that code. 4.0 is the future, but we won't leave you hanging if you want to stick with 2.x/3.x.

</comment></comment><comment><USER9> Disclaimer: I am a former Backbone-using developer who hasn't done much front- end work since React became so dominant. I just don't understand this project. I'm commenting to explain my confusion in the hopes that somebody else's perspective can help me see why React Router is helpful.

When React came out it was billed as just the "V" in client-side MVC. While just about everybody has their own understanding of MVC, my interpretation of the "V" was that it was about things you can see. So React was going to take my data and maintain a UI based on that data without thrashing on the DOM. Cool!

But nobody seemed to do that at first. They put HTTP requests all sorts of stuff inside the React component, and then handled the requesting, processing, and rendering as internal details to the component.

Then the Flux idea came around, which was (I think) to brand one-directional events as "actions" and then smartly cache/reduce an ongoing stream of actions into a single data structure that represents lots of potentially disparate parts of your application. This also made some amount of sense to me.

Surely there would be lots of things that could create actions: incoming DOM events representing a user's intentions, ajax responses that have potentially new facts about the world, websocket events, signals from the camera and microphone, and anything else that might cause a change in the overall state of the page. With the possible exception of DOM events, which the view should quickly translate into meaningful actions anyways, these actions are really not related to the "V" at all.

So what benefit would I get from authoring the logic of URL-change handlers in JSX? Wouldn't it be nicer to write some JavaScript that handles those events and transforms them into actions?

<comment><USER10> The V in MVC was a mistake IMO and it was eventually removed from their site.

<comment><USER9> Why do you think it was a mistake?

<comment><USER10> It's not how most people end up using React and it just causes confusion.

<comment><USER11> Flux (the data management architecture for react apps) eschews MVC altogether. Maybe that's related.

</comment></comment></comment></comment></comment><comment><USER8> They are going to support the old versions "indefinitely". The FAQ doesn't mention it, but their Release notes[0] does. I'll copy the relevant part here:

>We intend to keep supporting the 3.x branch indefinitely (published separately on npm to aid in migration), although there will likely not be any future major versions based on that code. 4.0 is the future, but we won't leave you hanging if you want to stick with 2.x/3.x.

[0][https://github.com/ReactTraining/react- router/releases/tag/v...](https://github.com/ReactTraining/react- router/releases/tag/v4.0.0-0)

</comment><comment><USER12> I think if/else statements with regexps, returning components, are my favorite "routing solution".

Ridiculously simple, no dependency on someone else's weird ever-changing ideas about declarative composable component-based route paradigms, no need to write your routes in a markup language, everybody understands it, extensible as hell, trivial to debug—it's a glorious cascade of beautiful advantages.

Try if/else today!

</comment><comment><USER13> It's interesting just how long it can take to unlearn habits from previous programming experience and find a way to do things in harmony with the current tools you're using. Probably the more experienced and senior you are, the harder it gets.

<comment><USER14> To the contrary, it gets easier. Many of the new things are older things I've seen in different contexts. Some of the new things are a welcome relief from shortcomings if old tools.

</comment></comment><comment><USER15> It took me over a week to grasp how routing would combine with redux, async, react and then server side rendering.

We got there, but there just hasn't been a simple (to reason about) way to do this in javascript. Acknowledging that the current library is fighting (I would call it an anti-pattern) with react is probably a good step. Thanks devs!

</comment><comment><USER16> One of the things that's burned me in the past with React Router is not just that the API changes from version to version but that documentation I'm reading at any given time doesn't indicate which version it refers to. I've wasted time trying to debug why things weren't working the way the documentation stated only to find that I was reading the wrong version of the documentation.

Some advice for anyone that hosts docs outside of the git source tree, make the version information clear. For example, the express documentation [http://expressjs.com/en/api.html](http://expressjs.com/en/api.html) states very clearly "4.x API".

</comment><comment><USER17> Looks interesting -- what's up with that Redirect component though ...? That seems all kinds of strange to me conceptually.

My mind is trying to justify it like this: Render me a component that's going to manage the state involved in transitioning to a new page ... I guess that kind of makes sense -- since a redirect is an inherently stateful process.

<comment><USER18> I too am confused by this. I found this GitHub issue [1] when searching for a withRouter HOC replacement.

1\. [https://github.com/ReactTraining/react- router/issues/3847](https://github.com/ReactTraining/react-router/issues/3847)

</comment></comment><comment><USER19> Okay. I understand that this library is kind of "learn as you go" project, much like React itself. But not make it on the third go… This is a part of React ecosystem that has not been reasonably "solved" (kind of like `redux` "solved" state-management good enough, or `express` solved server-side for Node good enough; and there are lots of iterations on those two), so if you want to start a popular OSS project, think hard about routing. (But really, think hard first!)

I also like this joke from github readme:

> Versioning and Stability

> We want React Router to be a stable dependency that's easy to keep current.

</comment><comment><USER11> I'm seeing mention of [https://ui- router.github.io/tutorial/react/helloworld](https://ui- router.github.io/tutorial/react/helloworld) and [https://github.com/wesleytodd/nighthawk](https://github.com/wesleytodd/nighthawk) does anyone have experience with [https://github.com/router5/router5/](https://github.com/router5/router5/) ?

</comment><comment><USER20> I use routers that aren't coupled to the view layer, thank you very much. routers can actually be pretty simple.

<comment><USER21> Example?

<comment><USER22> [https://github.com/wesleytodd/nighthawk](https://github.com/wesleytodd/nighthawk)

^^ This is the one we developed on my team. No view coupling, uses industry standard underlying components (Express Router), and layers on top of existing applications seamlessly (aka, no view tie in points, just anchor tags).

<comment><USER23> What does it add on top of [https://github.com/wesleytodd/react-express- middleware](https://github.com/wesleytodd/react-express-middleware) ?

<comment><USER22> That middleware is actually just a isomorphic render method, which uses express's render on the backend and react's render on the FE.

So that middleware actually requires a solution similar to what Nighthawk provides. The point was to keep the routing and the rendering separate, unlike what react router does.

</comment></comment></comment></comment></comment><comment><USER24> Anybody else having trouble with the link that they provide to their "Quick Start" documentation?

I can't see all the code unless I zoom out on it:

[https://react-router-website-xvufzcovng.now.sh/quick-start](https://react- router-website-xvufzcovng.now.sh/quick-start)

<comment><USER25> That version of the site will work best with Chrome. The newer version will fix for Firefox: [https://react-router-website- xvufzcovng.now.sh/](https://react-router-website-xvufzcovng.now.sh/)

The next build (now.sh versions URLs) will have both working. Sorry about that!

<comment><USER6> Quick question, is it necessary to render a single component within a Router? All the examples except the quick-start example seem to do so.

<comment><USER25> Yes, because we have to render props.children and normally Router is right under or near ReactDOM.render(), which only wants a single element from the component from the top of the tree. We were inserting a
, but that would screw over React Native users. So, unfortunately due to the structure of React, we have to enforce a single child.

This is improved a little bit in git, where we do a React.Children.only check: [https://github.com/ReactTraining/react- router/commit/5a74d46...](https://github.com/ReactTraining/react- router/commit/5a74d46a9fcf1b9663ba42b238ba6dd4584983ab)

<comment><USER6> Ah yeah adding that check should help. I wasted a good 20 minutes trying to figure it out the other day. Can the quick-start example be updated to have a single child? I would submit a PR but I was unable to find the repo.

</comment></comment></comment></comment></comment><comment><USER26> So if you don't want to use react router what do you use for react client side routing?

<comment><USER22> [https://github.com/wesleytodd/nighthawk](https://github.com/wesleytodd/nighthawk)

My team uses this, we built it in response to most of us not liking the React Router methodology, and already using Express, it seemed like a good route.

<comment><USER23> What does it add on top of [https://github.com/wesleytodd/react-express- middleware](https://github.com/wesleytodd/react-express-middleware) ? Are you using it for server side rendering, too?

<comment><USER22> See above: [https://news.ycombinator.com/item?id=12514798](https://news.ycombinator.com/item?id=12514798)

</comment></comment></comment></comment><comment><USER27> I started using react-router recently and I felt that some things were missing (like passing props to routes). I hope this release Will improve the API.

Thanks to all the devs that keep moving forward this wonderful ecosustem.

<comment><USER28> As far as I can tell, that part hasn't changed. But you're free to pass a HOC (Higher-Order-Component), ie.

      <BrowserRouter>
        <Match pattern="/" component={() => <MyComponent someProp="yep" someOtherProp={myOtherGlobalVar}/>}/>
      </BrowserRouter>

</comment></comment><comment><USER29> I am new to React Router. What is the alternative to managing routes on the front end when you're using only React (and redux) on the frontend and not routing on the backend in express or something?

</comment><comment><USER30> Is there any other Router library for React which has a stable API ? We are most likely to include a router library in our application soon and we don't want something which changes frequently.

<comment><USER31> I've been asking myself if I really need it. The very first React project I ever did I managed URLs by myself like I would have done in jQuery/Backbone. Honestly, I don't remember it being that bad.

</comment></comment><comment><USER32> During the past year or so, as the "standard" React architecture has come to embrace keeping application state together in a global store, react-router looks a little out of place. Why should it maintain such a crucial part of the application state separate from the rest of the app? In reality, the best pattern for the future probably looks a lot more like "redux-router" than react-router.

</comment><comment><USER33> I recently noticed that reactjs/react-router redirects to ReactTraining/react- router. Does anyone know why that is?

<comment><USER34> Because they changed orgs and Github redirects it for you.

<comment><USER33> Yes, but why did react-router move out of the reactjs org?

<comment><USER35> It's always been Michael and Ryan's project. They wanted to move it back out -- I assume to help promote their training business -- and that seems perfectly fair to me.

<comment><USER36> They maintain React Router to help promote their training business? I suppose that could explain its instability.

<comment><USER35> No, that's not why they built it (they built it before starting their business) and I don't believe it's why they maintain it.

<comment><USER37> I just want to point out that whether they built it before or after starting their business doesn't really matter. It's definitely a part of how they promote React Training today (see: moving the project to the ReactTraining GitHub organization, or how many times react-router is mentioned on their marketing website).

Not that I have a problem with that; all the more power to them. Especially if it helps support development of these libraries.

</comment></comment></comment></comment></comment></comment></comment><comment><USER38> After using react-router more than a year, I have to say it's a helpful lib, but the doc and the authors are not ready for serious business.

</comment><comment><USER39> It's interesting that a large amount of churn seems to be an unfortunately common trait of frontend libraries.

</comment><comment><USER40> Just a note: You can't scroll the docs (Chrome OSX).

<comment><USER25> Sorry about this! If you use the older now.sh link, it will work: [https://react-router-website-uxmsaeusnn.now.sh/](https://react-router- website-uxmsaeusnn.now.sh/)

It's fixed in git, Ryan just needs to push a new build.

</comment></comment><comment><USER41> [removed]

<comment><USER10> How so? He seems very nice to me and people in general like him and his course.

</comment></comment><comment><USER42> Great! I removed React router from a project yesterday, now it seems an even better decision.

Edit: I didn't have any big issue with React router and don't dislike it. It just don't work well with clojurescript/rum. I'm now using a cljs lib called 'bidi' for bidirecional routing (data only) and a small logic to change content reactively based on selected route.

<comment><USER43> Same! react-router is the only thing I've dealt with in this ecosystem that I truly, viscerally disliked.

</comment></comment><comment><USER44> As someone just arriving to React - should I just learn React Router v4?

<comment><USER45> Hi, one of the authors of the router here :)

Try to insert routing only when you need it. When you're ready for a router, react-router is a great choice. Lots of people are already using it with great success, and you'll find a great community of people willing to help you out.

<comment><USER15> Yes, I like this. It's important to learn what react is and why it's good for handling state in a component before you start trying to build the routing of a full web app.</comment></comment></comment>


Interview with SAP Co-Founder Hasso Plattner - <AUTHOR> http://www.spiegel.de/international/business/0,1518,824223,00.html

<comment><USER2> _"... it was exactly 40 years ago that you and four partners founded SAP. Today the market leader for business software is worth some $85 billion (€64 billion) on the stock market. Why is SAP the only German IT company that's a major global player? ..."_

Older than Microsoft & still going. I enjoyed reading about the early days of SAP, _"SAP: Inside the Secret Software Power"_ by Gerd Meissner ~ [http://www.amazon.com/SAP-Inside-Secret-Software- Power/dp/00...](http://www.amazon.com/SAP-Inside-Secret-Software- Power/dp/0071347852/ref=sr_1_5?s=books&ie=UTF8&qid=1333014700&sr=1-5) The bit that surprised me was the founders, ex-IBM used their client machines. They did this for many years developing their products on-site. All the development would be off-site on paper. To start work they'd walk in with decks of cards which represented their software product. The book also described the development of ABAP ~ <https://en.wikipedia.org/wiki/ABAP> A lot of technical knowledge went into doing this. Great read.</comment>


Ask HN: Favorite Support Tool for Startups - <AUTHOR>

Does anyone have a support tool that they're particularly in love with?  Ideally, we'd be able to do all of the back-and-forths over email, but have the discourse tracked using a reference ID with an email agent or cc or something.  If we could auto-close cases with an email, that would be even better.  Any thoughts?
Thanks a lot,
David <comment><USER2> I'll probably be bashed over the head, but debbugs (the thing behind Debian's bug tracking system) came to mind as I read the question.

<comment><AUTHOR> Cool, thanks! Looking.

</comment></comment><comment><USER3> We use and love Jira. It's a bit pricey, but has amazing features, tons of plugins, and integrates with Confluence, SVN, eMail, etc...

</comment><comment><USER4> Gmail & Ticketive.com

</comment><comment><USER5> Probably you find sthg here:

[http://en.wikipedia.org/wiki/Comparison_of_issue_tracking_sy...](http://en.wikipedia.org/wiki/Comparison_of_issue_tracking_systems)

<comment><AUTHOR> Oh yeah, looked at that, which I why I'm posting here ;)

The amount of information there is pretty overwhelming, and it seems like this should be a well-solved problem for startups who don't yet have a support person. The main problem is that engineers don't do much support, and aren't accustomed/are too lazy to login to a support tool to communicate through it.

<comment><USER5> Oh sorry, didn't know that you have been already there.

We have some experience with Bugzilla and Roundup. The latter suited our needs better (but they evolved over time, so a direct comparison doesn't necessarily make sense)</comment></comment></comment>


Ask HN: How to generate random terrain - <AUTHOR>

When I was a kid in the 1980s, I read a library book on the topic of writing military strategy sim games, and it had an entire chapter on producing random terrain. It started with the usual fractal techniques for producing contours, but then it went on to use weighted random walks to produce roads and rivers, lakes, bridges, and cities.
I've tried recreating the algorithms from what little I remember of them, but they never produce anything that looks very good. Online I've found plenty of references to ways of generating the contours, but never realistic-looking roads, rails, and waterways...
Does anybody know an online reference to that sort of thing?
Thanks! <comment><USER2> What kind of scale of terrain are you looking for? Continent maps or battlefield scale?

I got some stuff I rolled here <http://flywheel.be/examples/>

All random generated. But probably not what you're looking for.

<comment><USER3> These look great - what method did you use to define the borders on the risk- like map?

<comment><USER2> You mean the border between the hued territories? Roughly:

1) Randomly pick center points of territories, guarantee a minimum distance for best looks

2) Compute the Voronoi raster, i.e. for each pixel find the nearest territory center

3) Figure out which territories border which, based on the Voronoi raster

4) Compute borders for each territory by taking the midpoints of edges in the territory neighborhood graph. Use a couple special tricks for coastal territories.

5) Split up those borders into finer segments

6) Add noise to the border segments

7) Fill in the pixels according to the borders

<comment><USER3> Thank you so much for the detailed response!

</comment></comment></comment></comment><comment><USER4> Game development websites are a good place to look. Try these links:

<http://www.gamedev.net/reference/list.asp?categoryid=45#188> [http://www.gamasutra.com/search/index.php?search_text=terrai...](http://www.gamasutra.com/search/index.php?search_text=terrain+roads&submit=Search)

</comment><comment><USER5> For generating roads or waterways, try coming up with rules similar to the way they're created in real life. For example, water flows downhill and pools when it finds a local minimum. Roads, on the other hand, tend to avoid steep grades when they can, typically moving straight and branching at right angles at regular intervals.

Read up on L-Systems, too. They're great for creating organic structures, be they leaves, trees, or river-tributary systems.

Oh and this may be useful: [http://roguebasin.roguelikedevelopment.org/index.php?title=C...](http://roguebasin.roguelikedevelopment.org/index.php?title=Cellular_Automata_Method_for_Generating_Random_Cave- Like_Levels)

<comment><AUTHOR> That rogue-like cave generation algorithm isn't the kind of terrain I'm after, but is nonetheless quite awesome in its results. I'm now wondering if I can find an excuse to involve caverns in my game ;-)

</comment></comment><comment><USER6> You can take a look at my master thesis (Charack: Pseudo-infinite 3D virtual world generation). It's in a pre-alpha stage, but I think you can find something useful (besides the wide range of similar tools and works I found during my research).

Project link: <http://code.google.com/p/charack/>

<comment><USER7> This really is a wealth of knowledge and practical code. I know what I'll be spending my evening reading now. ;-] Thanks!

<comment><USER6> Thank you for the nice words. About the reading, at <http://charack.googlecode.com/svn/> you can find my thesis text and a full paper. Unfortunately the master thesis is available in Brazilian Portuguese only (I really had no time to translate it to English), but the paper is written in English ;)

</comment></comment></comment><comment><USER3> If you have a heightmap, the roads should be fairly easy. Pick start and end points (cities?) and use a pathfinding method like A* to plot the road. If you want something more stylized, you could select a handful of points from that method and then use beizer curves or something between them.

<comment><USER2> And finally, add noise. Adding noise using midpoint displacement for instance greatly increases believability for very little effort. But you need to tune things carefully.

</comment></comment><comment><USER8> For waterways, just simulate rain and erosion. Let's say you model your terrain as a height field.

1\. Add rain in random locations 2\. Have the rain absorb some of the soil from the square it starts in. 3\. Let the water flow in the direction of the gradient. 4\. Deposit som e of the picked up soil (maybe only with some probability based on the flow velocity?) 5\. Repeat

If you just want rivers and lakes you can skip the erosion step and just simulate the water flowing. If you wanted you could add sources manually and have water always flow from there.

</comment><comment><USER9> Here's an article on adding rivers to procedurally generated terrain - [http://www.gamedev.net/reference/programming/features/random...](http://www.gamedev.net/reference/programming/features/randomriver/). Searches for "procedurally generated [roads/rivers/waterways/etc] seemed to be the most promising.

</comment><comment><USER10> google erosion simulation algorithms (or derivations)- some brilliant stuff mostly developed for geography simulations that would make absolutely amazing terrains.

</comment><comment><USER11> I did some work on random terrain once. You can see the results here:

<http://steveasleep.appspot.com/pyworldgen>

If this is what you're looking for, I can try to explain it.

<comment><USER2> Cool. I made these: <http://flywheel.be/wouter/maps/>

Similar in concept, I guess. What technique are you using? I always start from fractal + voronoi but I think that's fundamentally flawed; going from raster to vector is silly when you could have gone straight to vector.

<comment><USER11> I'm starting with a triangle and expanding random sides with triangles or trapezoids, filling in tightly acute angles as well.

</comment></comment></comment><comment><USER12> Perchance recall the book? I'm semi-interested in retro approaches to the problem.

<comment><AUTHOR> I'd love to find the book again... I bet it's out of print, though. It had lots of detail on modelling damage to tanks, and creating terrain, and working out things like line-of-sight in complex worlds, and I think some basic AI, but had nothing to say about snazzy graphics whatsoever; I think it made some reference to vector displays or something like that ;-)

<comment><USER12> Any of this look familiar? [http://books.google.com/books?q=AI+computer+simulation+milit...](http://books.google.com/books?q=AI+computer+simulation+military+strategy+tanks+damage)

<comment><AUTHOR> Alas, no :-)

</comment></comment></comment></comment><comment><USER13> The freeciv map generator is pretty good if your looking for sample code for a world scale map.

</comment><comment><USER14> For waterways you could try to place random water sources and follow the gradient from there.

</comment><comment><USER15> Search for 'Mandelbrot' or 'Peitgen' and 'fractal landscape'.

</comment><comment><USER16> [http://lmgtfy.com/?q=terrain+generation&l=1](http://lmgtfy.com/?q=terrain+generation&l=1)

Seriously, I'm all for discussion of particular techniques, but your question is way too broad right now. Go read some papers or even just online tutorials or descriptions of how other software does it, and then lets have a discussion.

<comment><USER17> Did you actually read his entire question, or just the title?

<comment><USER16> I read the entire question, and there are plenty of great resources out there for rivers, as well as human settlements, roads, railroads, etc. Even a "I've tried method X and had problems Y and Z with the output" could produce interesting discussion, but this is just asking for links when a minute or two of Googling does a pretty good job of turning things up.

<comment><AUTHOR> True, I glossed over my previous research; I didn't think it'd interest people, but you're right, it's wise to show some evidence of your previous attempts before asking for tips...

My googling always just found me more and more ways of generating the height- field data - it's the roads and so on that interest me. I tried tinkering with weighted random walks (eg, given the desire to continue a road from a given point, pick an adjoining cell with a weighting that prioritises having the same altitude and being closest to continuing the existing direction), but this fails to capture things like the fact that roads tend to run along valleys and mountain passes - the hard part, it seems, is in choosing initial points. Likewise, a river can be continued by finding the most downhill adjacent cell, until you find a minimum then starting a flood-fill algorithm to create a lake, until you reach a boundary pixel that "goes downhill", whereupon you can start a new river going down from there - but this fails to realistically account for the widths of rivers (you can just make the river wider as you go down, and sum the width of rivers that meet, but that simple model looks wrong: real rivers are deeper when in narrow canyons and the like).</comment></comment></comment></comment>


Performance of Python runtimes on a non-numeric scientific code - <AUTHOR> http://arxiv.org/abs/1404.6388

<comment><USER2> TL;DR - _Nuitka_ (which has been garnering some attention on HN today - [https://news.ycombinator.com/item?id=8771925](https://news.ycombinator.com/item?id=8771925)) is not as fast as CPython and less faster than PyPy for the chosen scenario (enumeration of a fat graph and computing their graph homology).

A year and a half down the line after this paper was published (Apr 2013), Nuitka's main strengths seem to be the convenience in packaging the code into an executable which a number of readers have reported success in. If runtime and memory usage are more important, you are better off sticking with the interpreters for now.

<comment><USER3> This should be re-done with up to date versions of all programs. The authors mention having opened bug reports/existing known bugs. All contestants should have time to react to those, shouldn't they?

<comment><USER4> While that would be interesting, I don't see it as the responsibility of the author of a conference poster that has already been presented. It would make more sense for the authors of the various Python implementations to take this up as a benchmark.

</comment></comment></comment><comment><USER4> This comparison is interesting in that it compares the performance of plain or type-annotated Python code, but to get the full performance benefit of Cython you would replace lists with C arrays, objects with C structs, etc.

</comment><comment><USER5> By all appearances, the alternatives are only negligibly faster than CPython?!

<comment><USER6> Did you see that those graphs are logarithmic? PyPy looks between 3x and 4x on problems that run long enough for PyPy to have a chance to JIT properly.

</comment></comment><comment><USER7> I didn't find this paper to be very good. While it talked lightly about a relatively complex mathematical object it computes, it did not talk much about what's involved in its computations, except for some very high level keywords ("comprehensions", "object graphs").

What algorithms were used? What data structures? Was the code idiomatic? Was there any effort to reduce things like allocation?

Was homological computation the only test case? Even numerical benchmarks typically come in a suite (a good sprinkling of linear algebraic computations, tight straight line floating point programs, differential equation solvers, various numerical simulators, ...), because one LAPACK function will not give you the full picture.

This paper did not give me a very good understanding of how performant non- numeric math—which in and of itself is an extremely broad and general term—is on each implementation.

<comment><USER8> It's a conference paper, from EuroSciPy 2013, distributed through a preprint service. There's no expectation it will be a high quality paper. Instead, it's an appropriate quality for where and how it was published.

"What algorithms were used"? The papers says "The code used to install the software and run the experiments is available on GitHub at [https://github.com/riccardomurri/python-runtimes- shootout](https://github.com/riccardomurri/python-runtimes-shootout) "

Checking it now, it gives a reproducible way to download the specific packages used, and the benchmark framework. The actual code benchmarked is fatghol, from [https://code.google.com/p/fatghol/](https://code.google.com/p/fatghol/) . There's also a link to a preprint describing the construction algorithm, at [http://arxiv.org/pdf/1202.1820v2.pdf](http://arxiv.org/pdf/1202.1820v2.pdf) .

What you propose is an unrealistic expectation, and only possible for people with lots of money and time.

Instead, in real life what happens is people do A, and publish A, then do B (building on A), and publish B, then do C (building on B) and publish C. There's a trail of work backing up the final publication. It makes no sense for publication Q to revisit all of A-P, nor for the author to wait until Z before finally publishing everything. I also think knowledge transfer would be lower since someone interested in this paper's conclusions about the available documentation for the different Pythons (EuroSciPy is not a graph theory specialist conference) would almost certainly not be interested in the algorithm generation details.

You do realize the LINPACK is the "gold standard" benchmark used to rank the top 500 supercomputers, right? And all it does is solve A x = B. In any case, the performance suites like SPEC MPI still need to evaluate the individual benchmarks before assembling them in a suite. Even if you require a suite for something to be meaningful to you, this could be seen as a first step to building such a meaningful suite.

It appears to me, therefore, like you are needless harsh and critical.

<comment><USER7> Thank you for the comments.

I don't know about EuroSciPy 2013. I guess from your comment that such a conference does not require very high quality submissions.

It is typically not good style to simply say "here is a repository which contains the benchmark code". That is necessary, but not sufficient. (Although, I will say many papers do _not_ include any link to where code can be found, so this was a distinct advantage of this paper.)

There's no need to regurgitate all previous work, but a bit more than a reference is extremely beneficial to legibility and allows for emphasis on particular aspects of what will be measured.

My problem with the paper is my answer to the following question, "What can I conclude from the paper?" What I gathered was approximately the following:

1\. The author has a library for computing homologies. The abstract method for their computation is referenced in a (peer reviewed? published?) paper. The library is linked to, though no particular version is mentioned. (Can we really call it reproducible then?)

2\. The author has given a very brief overview of the stages of the FatGHoL program, two of which are relevant to the benchmark. The author does _not_ discuss the structure of the objects as implemented, so I must view it as a black box, unless I read source code.

3\. The author, in a few sentences, summarizes (but does not delve into) which few very high level data structures used.

4\. The author spends the rest of the paper showing CPU time and memory graphs.

5\. The author makes conclusions from the data, with sometimes plausible explanations.

There is no outline as to what is actually being tested, except this black box library. There are no code samples as you would typically see in a survey or conference paper. As a reader, I've at best concluded, "a subset of some version of FatGHoL has the following time and space measurements for a few input parameters." Was this the conclusion the author wanted me to have?

But note the abstract says the tests "[are] an opportunity for every Python runtime to prove its strength in optimization." Is this true? The author has not even remotely convinced me that the code being run is even relevant optimization capabilities.

I don't think adding up to one or two pages more talking about these things would have cost excessive time or money on the author's part.

The unfortunate bit is elsewhere on HN and Reddit, people are now linking to this paper as almost the definitive resource for comparing the performance of Nuitka versus other implementations.

Lastly, I do realize LINPACK is among the benchmarks used for supercomputers (even though it's probably more appropriate LAPACK is used, which it sometimes is). I am very well aware of the details of the benchmark, having written an equivalent version before myself.

<comment><USER8> Quoting from the web site: "The annual EuroSciPy Conferences allows participants from academic, commercial, and governmental organizations to: showcase their latest Scientific Python projects, learn from skilled users and developers, and collaborate on code development." It isn't a conference which requires rigorous submissions.

You say "very high quality". I used "rigorous" because quality has many dimensions. I believe people go to EuroSciPy in part to learn which other tools exist, and to learn from the experience of others. This paper appears to have that audience in mind. It's partially an experience paper, and discusses things like available documentation and the stage of development of the tools (eg, Falcon is in early development, and crashed on the test code).

If someone came to the conference, interested in performance (which is most of the audience) but not in NumPy (which is a smaller number), then this is a high quality paper for this type of conference for guiding them on which Python implementations to prioritize, even if the benchmark per se were ignored.

You quoted where the abstract said "an opportunity for every Python runtime to prove its strength in optimization". I can see how that might be interpreted as a very broad benchmark. But it earlier mentioned "Python library FatGHol ... moduli space of Riemann surfaces" and later says "This paper compares the results and experiences from running FatGHol with different Python runtimes", so I think you're reading too much into that quote.

My code is also non-numeric scientific code. It's extremely unlikely that I would understand the algorithm in that code, or that the mix of instructions would match my code. I would skip the extra details as irrelevant to my interests. Whereas the other points, like how Nuitka's claim that it "create[s] the most efficient native code from this. This means to be fast with the basic Python object handling." has at least one real-world counter- example, and like how PyPy can use a lot of memory, again affects my weights about how I might evaluate the available options.

Do you seriously think that one or two pages more would have had a significant effect on the comments on HN or Reddit? For that matter, I see eight comments total on HN about the paper, including mine and your three. I don't see (in HN) peopling regard it as a 'definitive resource', but only a resource. I don't read Reddit so can't say anything what's going on there, but surely complaining here about Reddit doesn't help.

Also, the paper was 4 1/2 pages long. You want the author to spend about 30% longer to write the paper, which I think is excessive.</comment></comment></comment></comment>


Ask HN: Will companies (Birmingham area) at the UK will give me work visa? - <AUTHOR> Hi, I'm planing to move to the UK because my GF going there for study. I have Israeli passport, about 4 years of experience in mixed fullstack development and DBA, no Academic degree and for the last 2 years I'm working as expat in English speaking country. I can stay in the UK for
 6 months without VISA . what are my chances to getting hired? <comment><USER2> Without a working visa I think you'd struggle unless there is a reciprocal agreement with UK and Israel that I'm not aware of. Some basic info here:

[https://www.reed.co.uk/career-advice/your-rights-to- working-...](https://www.reed.co.uk/career-advice/your-rights-to-working-in- the-uk/)

</comment><comment><USER3> Introduce yourself here:

[https://talk.birmingham.io/](https://talk.birmingham.io/)

Its a very friendly bunch of geeks - someone there might be able to help. There is a fair amount of tech activity in Birmingham so you could get lucky. Good luck.

</comment><comment><USER4> I don't believe you're allowed to look for work in the UK while on a tourist visa.

I assume you must already be aware, but just in case, you will also have to prove that you have the means to support yourself, without working, for the entire length of your stay.

</comment><comment><USER5> I'm not 100% sure but please check that it's even possible to apply for a working visa while you're in the country. I think that normally you have to make your application from outside the country.</comment>


Kotlin/Native v0.4 released: Objective-C interop, WebAssembly and more - <AUTHOR> https://blog.jetbrains.com/kotlin/2017/11/kotlinnative-v0-4-released-objective-c-interop-webassembly-and-more/ <comment><USER2> Is my understanding correct that IntelliJ IDEA will not have Kotlin/Native support, it will be only part of CLion? [https://blog.jetbrains.com/kotlin/2017/11/kotlinnative- ide-s...](https://blog.jetbrains.com/kotlin/2017/11/kotlinnative-ide-support- preview/)

Is this because C and C++ is CLion-only?

I'd love to see C&C++ support become part of IntelliJ IDEA bundle ;) Not sure why it hasn't been this way.

<comment><USER3> JetBrains IDEs are tooled for particular language workflows, but can, to a certain extent accommodate other languages through its plugins, though not as thoroughly as the corresponding IDE. (For example, you can still use the Python plugin in IntelliJ, but PyCharm has far more extensive support.)

CLion is the product targeting the CLang family of languages, and therefore that is where, quite reasonably, JetBrains has targeted its Kotlin/Native support.

<comment><USER2> My trouble with multiple IDEs approach is that most of the projects involve multiple languages and for me it doesn't make sense to start up PyCharm for Python and IDEA for Java. Would feel awkward to keep two IDEs configured to work in sync (both settings, shared code folders) and handle unnecessary RAM and CPU use.

Regarding general workflow, I would also have to make some a mental decision if .txt, .md, .sql, .js belong to my IDEA or PyCharm IDE.

So, unfortunately, for my case, everything goes through IDEA, regardless of having a separate IDEs with more extensive support for Python, Ruby etc :(

</comment></comment></comment><comment><USER4> This is a really interesting development. I've been poking around with making a cross-platform library lately, and had settled on Go because it does such a great job of building for iOS and Android simply (though the go bind tool), but the implementation feels a little messy because the nature of Go (e.g., no classes, property accessors, etc) doesn't translate easily to Objective-C or Java. So Kotlin might be a really interesting alternative here.

<comment><USER5> How about Flutter with Dart? It uses AOT so plays well with IOs. But granted, their approaches are very different as Flutter renders most things by itself.

<comment><USER4> The project I'm working on doesn't use any UI (that's still native), so I'd disregarded Flutter - but perhaps that's not fair. Looking at it, it seems to have straightforward ways to use native functionality, but I'm not 100% sure how I might go about exposing Dart classes/methods/etc to existing native code. Worth looking into, though - thanks!

</comment></comment></comment><comment><USER6> I guess that now all libraries should be built with the cross platform mindset, including platform abstraction, multitarget testing and avoid leaking interfaces... the compiler and the standard library are just the beginning.

<comment><USER7> I hope so, but I think it is very unlikely to happen. Bear in mind that the libraries for Android, iOS, Windows, Linux are completely different, so it is not easy to make a wrapper around them. And if you want something to run in different platforms you still have the jre.

</comment></comment><comment><USER8> Is kotlin native reference counted like swift or do they use some form of garbage collection?

How do they deal with named arguments in Objective—C?

<comment><USER9> See the answer for the 2nd comment:

 _Memory management is cooperating with Objectve-C runtime memory mgmt, see[https://github.com/JetBrains/kotlin- native/blob/master/runti...](https://github.com/JetBrains/kotlin- native/blob/master/runtime/src/main/cpp/Memory.cpp#L398) (function runDeallocationHooks())_

</comment></comment><comment><USER10> I have a mac but can anyone comment in using these tools on windows if this is possible.

<comment><USER3> All JetBrains IDEs are cross platform (Linux, Mac, Windows). Kotlin Native has support packages for all three for developing to those targets.

[https://bintray.com/jetbrains/kotlin-native- dependencies](https://bintray.com/jetbrains/kotlin-native-dependencies)

</comment></comment><comment><USER3> Kotlin/Native sounds like everything that GCJ was not.

<comment><USER11> Well, it's definitely true that it's not like GCJ, because it doesn't compile Java code and doesn't support Java libraries. So you can't just take a Kotlin/JVM program and compile it for Kotlin/Native, since the JVM-based libraries it uses won't be available.

But both GCJ and Kotlin/Native compile a high-level, garbage-collected language to native executables, so I suppose they're similar in that sense.</comment></comment>