Perl on Heroku - <AUTHOR> https://github.com/judofyr/perloku <comment><USER2> I did a lot of Perl CGI.pm stuff many years ago. What's the state of Perl for building web apps? Is it comparable to Python or Ruby? Where should an old Perl program start these days?

<comment><USER3> I've been using Catalyst for years now, for everything from AMQ Consumers which run warehouses to data analytics tools, to simple front-ends. Mojolicious looks promising, Dancer looks ... well, it does what it says it does, even if I don't see much point in that :-) Being Perl, there are a gazillion plugins for doing what you need that are well tested, and well documented, on the CPAN: <https://metacpan.org/search?q=Catalyst>

Template Toolkit is used almost exclusively for templating, although being Perl, there's lots of ways to do it (including Mason, which is a bit more PHP- esque).

DBIx::Class is the mature and most widely used DB interface, and seems to interface nicely with almost anything: [https://metacpan.org/search?q=distribution:DBIx- Class+DBIx::...](https://metacpan.org/search?q=distribution:DBIx- Class+DBIx::Class::Storage::DBI)

All frameworks (ish) play nicely with Plack, which is a straight rip-off of Rack, but of course being Perl, there are a gazillion well-documented, well- tested, and sensibly installable plugins for it: <https://metacpan.org/search?q=plack%3A%3Amiddleware>

And then there's Moose, which provides a sane interface to the mind-boggling flexibility of the Perl object-system 'hack': <https://metacpan.org/module/Moose>

Programming in Perl on the web has never been as fun as it is today, and you'll find mst (who's a member here) was a lynchpin in most of the projects that made that true.

People talk about Perl being a glue language, and that's absolutely right: with CPAN, it's the ultimate mashup tool when you need it to be. It supports functional programming, Moose has made OO with it awesome, and it has a testing culture second to none.

<comment><USER4> I'm one of the developers on musicbrainz, which is written using many of the technologies listed above.

We're experimenting with moving from Template::Toolkit to Xslate, we're having performance problems with Template::Toolkit.

Similarly we're seeing performance issues with Moose, and considering moving at least some of the code over to Moo.

If your project uses many CPAN packages, have a look at Carton. It has made our deployments infinitely easier.

<comment><USER3> Performance issues with TT? Yowza... I am assuming you're using the XS version, helping it cache, have used a profiler to confirm that's really where it is etc. You must be serving a dramatic amount of dynamic traffic!

<comment><USER5> TT performance really can be a bitch. When I'm profiling Catalyst apps to improve performance I pretty much always assume that the first set of hotspots I'll find will be either Template Toolkit or waiting for database queries. The controller code and the Catalyst stack itself very rarely show up noticeably - and I'd suspect that Catalyst being the heaviest (or most featureful, depending on how you want to lookat it :) of the currently popular frameworks that that's likely to be true of everything else as well.

</comment></comment></comment></comment></comment><comment><USER6> Looks awesome, always wondered if I could deploy perldancer web apps on Heroku!

</comment><comment><USER7> I see that it's looking for a special file named Perloku and then expecting to execute that. Would it maybe be better to look for a Makefile.PL, use that to build, and then work with the standard Procfile system that Heroku has? That would be altogether more flexible.

You could also mandate using Carlton[1], which someone downthread mentioned as "bundler for perl". It's alpha at the moment, but that shouldn't stop anyone from using it.

[1]: [http://search.cpan.org/~miyagawa/carton-v0.9.3/lib/Carton.po...](http://search.cpan.org/~miyagawa/carton-v0.9.3/lib/Carton.pod)

<comment><USER8> I agree; opened an issue: <https://github.com/judofyr/perloku/issues/2>

Carton; not sure. Maybe.

</comment></comment><comment><USER9> Also see heroku-buildpack-perl: <https://github.com/miyagawa/heroku-buildpack- perl>

_This is a Heroku buildpack that runs any PSGI based web applications using Starman_

</comment><comment><USER10> does anyone know if an alternate port has to be specified with this? Is there a reason it can't just be run on 80?

<comment><USER11> The example gives port 3000 as an example for running it on your localhost. Otherwise you need super-user permissions to start a server on port 80.

But on Heroku's Cedar stack, it will run on port 80.

<comment><USER12> Maybe 80, maybe not, it will run on port $PORT which is provided at runtime by Heroku. Practically you do not need to worry about it, Heroku will take care to route the request from port 80 on the outside to port $PORT at the dyno level.</comment></comment></comment>


Ask YC: Fewer lines of clever code or more lines of clearer code? - <AUTHOR>

This is a question mostly geared towards helping my own programming style (and of course maybe yours, by example), so if you can please reply to give me some input, that would be great.
I'm writing a Javascript calendar sort of like Google Calendar's functionality but with more collaboration features. For the events that actually show on the calendar, I wrote this function that converts positions on the calendar (left and right CSS offsets) to UNIX timestamps (and another function that does vice-versa). In the code below, the parameter "el" is a jQuery encapsulation of the DIV that holds the event, the "isEndTime" parameter is whether to look at the beginning of the DIV or the end (i.e., start or end of the event), the this.parent.timeStart variable holds a Date that begins at the very top left of the calendar (midnight at first Sunday of the week), the this.parent.timeslice variable is a shortcut/cache for the number of seconds that one column in the calendar represents (i.e., # of seconds in a day), the this.hSpacing variable holds the CSS "left" offsets of the 7 columns as an array (60, 210, 360, etc., for a 1024-wide window resolution), this.vSpacing is the vertical # of pixels in one half-hour block (each day is partitioned into 48 rows of half-hour blocks), and this.borderWidth is just the width of the border between half-hour blocks.
Within a minute or two, would you be able to comprehend the following? (the whitespacing is a little ugly, but I can't go over 80 characters horizontally)

   _dom2time : function(el, isEndTime) { 	// The function px2num below takes a DIV element and CSS attribute like "left", and 	// returns the number of px that CSS attribute was assigned. 	// For example, a DIV with left:50px called with attr equal to 'left' 	// would return 50.
        var px2num = function(el, attr) { return 		parseInt(j(el).css(attr).substr(0,el.css(attr).indexOf('px'))); }; 			 	return 		(this.parent.timeStart.getTime() / 1000) + 		parseInt(this.parent.timeslice * ( 		(function(n){for(var i in this.hSpacing) if (n <= this.hSpacing[i]) 			return i;}).apply(this, [px2num(el, 'left')]) + 		((px2num(el,'top') + (!isEndTime ? 0 :
			px2num(el,'height') + this.borderWidth)) / 		(this.parent.rows*this.vSpacing))));
   }
 If you can't understand it, let me just take a second to explain. The UNIX timestamp at a given position is given by the time at the start of the week, plus the days before that event, plus the seconds up until the event on the day of the event. So, I take the start-of-the-week timestamp, and then take the number of seconds in a day times the "fraction" of a day the event occurs at (it would be 5.5 for an event occuring on Friday at noon). Traditionally, this code would've been done very different by starting maybe with some variable which accumulated the time up until the event (starting with the beginning of the week, then adding the days up until, then the seconds in that day up until), but instead it's all compressed into one return statement. When I had written this, it came naturally, but when I stopped to look, I realized "Wow...this might be kind of hard to follow". And yet it's much fewer lines of code than a "traditional" approach would've used. What would you prefer?
EDIT: Am I writing Lisp in Javascript? <comment><USER2> Ultimately, it comes down to who will maintain this. If you're hoping to pass off ownership of this and let someone else maintain it, go for the longer but simpler approach.

If it's something that you'll be in charge of forever, get as clever as you can :)

Remember the words of Kernighan: "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it."

<comment><USER3> Kernighan is in error for those cases where in the process of coming up with a clever solution you make yourself smarter.

<comment><USER4> Yes, but beware: Additional smartness does not always stick.

And smartness can be highly conditional. Clever code is often written by calm and well-rested people, but its showstopping bugs are often fixed at 3am by panicked people who are losing thousands of dollars per second.

</comment></comment></comment><comment><USER5> Your problem here is that you're mixing logic and presentation, so it's neither clever nor clear. I'm not 100% sure what you're trying to do (your explanation again mixes everything together making it hard to understand) but I _think_ you want to do this:

\- Transform the screen position to a week-based relative coordinate system.

\- Convert that spatial coordinate into a time stamp represented as seconds since the epoch.

That's a minimum of two steps, two verbs and therefore two separate functions. Step 1 can be broken down further by introducing helper functions for inspecting the DOM, decoupling the representation of the UI elements from your actual screen-space coordinate system, as CSS isn't in a nicely-scriptable format.

Once you've done this, you'll discover the result to be only marginally longer, but highly reusable.

<comment><AUTHOR> Sorry for not being clear about that. The purpose of this helper method (hence the underline before that name) is to take an event positioned in the DOM and convert its position into a timestamp for that event. Probably the only place this will be called is when some change is made to the DOM of the event. For example, when it is resized, it'll have a different height as well as "top" offset, so that'll have to be translated into a timestamp. I don't know any other way to do this that would be fundamentally different, since at some point the pixel-based resizing is going to have to become a timestamp. Nothing in this function will be used anywhere else, hence I didn't make any more helper functions for my helper function. Thanks!

EDIT: And yes, I agree, if I ever decide to make events more fancy than just dropping in a DIV on the timetable, I'll probably have to do a bit more. But of course, only a couple things will change then, and I can just write those as helper functions for this function.

<comment><USER6> A separation of concerns is not just good for flexibility, it also helps with debuggability and readability and is a reflection of ability.

</comment></comment></comment><comment><USER7> It's confusing for me...I had to puzzle it out to understand it, and even then don't fully understand it. If I were writing this from scratch, I'd skip all the pixel computations and instead add "day" and "halfHour" attributes onto the elements themselves as you're building the display (or just attach a UNIX time directly, as neilk suggests). Then computing the UNIX time is just:

       this.parent.timeStart.getTime() +
         ((parseInt(el.attr('day'), 10) * 48) +
          (parseInt(el.attr('halfHour'), 10)) * 30 * 60 * 1000;

A couple readability/bugfixing comments on the exising code:

1.) In C-family languages, I really don't like functions that have the closing brace on the same line. I've tried it in my own code a couple times and always had to go back and change it when I went to reread the code. I have no problem with it in Lisp, but it's so different from normal coding C-like coding conventions that it makes skimming the code very difficult.

2.) parseInt automatically skips everything after the first non-numeric character, so you don't need the substr in px2num.

3.) You should get in the habit of supplying a radix argument to parseInt (i.e. parseInt(el.css(attr), 10)), because otherwise it'll interpret it in octal if the string starts with 0, which can lead to very strange bugs.

4.) When you have a known number of arguments, use function.call(obj, arg1, arg2) instead of function.apply(obj, [arg1, arg2]).

5.) In this case, it's probably clearer if you just used an accumulator; using a closure doesn't buy you anything, and means you need to mess with the this parameter.

<comment><AUTHOR> The pixel computations are done because of the way this is used in the calendar. When a user resizes the event, some kind of pixel computation is going to happen at some point, since mouse coordinates have to be transferred in some way to "left" and "top" offsets (perhaps by first translating to the start time and end time abstractions). This was probably the dirtiest part in that respect, as it is the point at which I chose to translate between pixels into usable data. It's a helper function, so to speak, so I don't have to deal with any of this in my more general abstract code (which does indeed follow the much more "clean" approach). Hence the underline before the method's name. :) (this is part of an object)

1\. I agree, but they're tiny inline functions so that's why I did that. I'll refrain from doing that from now on as this seems to be a general consensus.

2&3\. Aah, good point. I just went back and looked at an old JS project and noticed I was doing both of these properly with parseInt. I've forgotten though as I haven't done too much heavy Javascript for a while before this. Thanks so much!

4\. I've used call before like that but for some reason I forgot about it and switched to apply. Thanks!

5\. Ok, that's what I wondered. The comments so far seem to agree this would be better for readability. I don't plan on anyone else even touching this code, so indeed like someone else suggested that could be an important factor, as indeed if this wasn't a personal project I would've used a more orthodox (i.e., less compressed) approach.

That's exactly what I was looking for. Thanks!

EDIT: Also, if I used "day" and "halfHour" attributes they would be hardcoded. Maybe someday I'd like to change to hour blocks, or have a view in four-hour blocks instead of half-hour. I am using this object as an abstract class that handles a calendar view, which will be passed specifics for the view. For example, the day view will be initialized like this:

    			 arguments.callee.$.__init.call(this,
    				{timeblock:1800, rows:48, cols:1, timedir:0,
    				startTime:startTime,
    				timename:'day', container:'daycontainer'}
    			);

Where the "arguments.callee" stuff is just calling the (inherited) superclass initialization function. This way, if a New World Order appears and ever decides to make 5-day instead of 7-day weeks, all I have to do is change one line of code. ;) (while that's true, the real reason for me doing this is so I don't have to write code 3 times for a day, week, and month view)

That's (partially) why I didn't do something like hardcode "day" or "halfHour" attributes (although I do store all this information in the object--the method I showed above is a computational helper function).

</comment></comment><comment><USER8> Fewer lines of clearer code: I reject the dichotomy.

So first you have four lines of comment explaining a completely unnecessary helper function--px2num(el,'top') doesn't save a lot over parseInt(el.css('top')), and the later is clearer. Then you have all packed into your return something that's technically one line but actually takes seven lines to display in a way that it can actually be read.

So could this be written clearer in less than ~12 lines? Oh yes. First, why are we working in seconds when JavaScript uses milliseconds natively? Assuming that's really necessary, you must do myDate.getTime()/1000 an awful lot. So let's assume you added a getTimestamp method to Date.prototype. And I'm going to assume that el.style.left actually has to equal one of the members of hSpacing--it doesn't make sense that you'd allow dropping without snapping to the grid _and_ that you'd only want the right result if they happened to drop left of the day column but not if they drop one px right.

And it looks like you've got jQuery mapped to j instead of $, which is weird but ok.

        function domStartTime(el) {
          var week = this.parent;
          return week.timeStart.getTimestamp() +
            week.timeslice * j.inArray(parseInt(el.css('left')),this.hSpacing) +
            (parseInt(el.css('top')) + this.borderWidth) / week.rows / this.vSpacing;
        }

        function domEndTime(el) {
          return domStartTime(el) +
            parseInt(el.css('height')) / this.parent.rows / this.vSpacing;
        }

</comment><comment><USER9> I am totally in the simple, but longer camp. There's absolutely no benefit from being overly clever about your implementations. It's just going to take you 10x longer down the road to figure out how to debug the damn thing.

My first programming job was a shop where we actually wrote _reference_ code that would be implemented by other companies into various chipsets. There was no room for lack of clarity there. Everything, absolutely everything, must be crystal clear. I've taken many of the things I've learned there to all my other programming projects.

</comment><comment><USER10> _I wrote this function that converts positions on the calendar (left and right CSS offsets) to UNIX timestamps (and another function that does vice-versa)._

This seems like a very bad design. Is it really better than simply attaching a time property to every div at calendar creation? You are coupling presentation and data, which is in general a terrible idea.

Also, you realize that other countries arrange days of the week differently? If you ever internationalize, you will be in a world of pain. If you ever decide you want column width to vary for some reason, again you are fucked.

You can sometimes justify tricky Javascript since download speed is a factor. However, your JS strikes me as probably more wordy and complex than the straightforward solution.

Tricky techniques that exploit tight coupling are almost always wrong.

<comment><AUTHOR> Yes, I skipped over a few of the specifics. The "Saturday/Sunday" at the end of the week versus "Sunday at the beginning" is taken care of, I was just using that as an example to explain; internationalization works fine. The time property is already attached to the DIV; however, this will be recomputed based on some DOM-change to the event. It makes it simpler, since (for example) when the user resizes the event, I can just deal with the physical resizing of the DOM object, and once they're done, translate it to the timestamp. I'm a presentation/data separation freak to the point of having no Python code include any HTML, and no HTML include any JS (except the


Man charged after recording deputies has free lawyer - <AUTHOR> http://www.twincities.com/localnews/ci_22357287/man-who-was-charged-after-recording-deputies-has

<comment><USER2> I don't understand why the police even care if they are being recorded. They are well training and should know the boundaries in which they need to operate, so someone recording them shouldn't be a big deal. Heck, a lot of times they record themselves (dash cams).

 _Disclosure: I have two brothers that are police officers_

</comment><comment><USER3> Why can't the police get the message?</comment>


Does the USA own the internet? - <AUTHOR>

I always thought the internet was not owned by ANYONE, however with the news of the NSA stuff I have been performing tracert's at my end and I notice that EVERYTHING passes through the USA. So if the USA was to shut off the internet at their end, would it disrupt everything globally?<p>For example if I connect to a server in France, for some reason that goes through the West Coast USA... <comment><USER2> How are you connecting to that French server? If you're using a domain name, maybe the nameservers are located in the US.

If you're using an IP address then that sounds a little strange.

</comment><comment><USER3> Does the USA own the internet? It sure thinks it does.</comment>


Multiline Shebang – Rosetta Code - <AUTHOR> https://rosettacode.org/wiki/Multiline_shebang <comment><AUTHOR> I recently discovered the multi-command shebangs and started using it to develop scripts in Golang. E.g. `//usr/bin/env true; go run `dirname $0`/*.go; exit $?` at the top of my Golang code's `main` package makes it a Golang script.

The multi-line shebangs take it a step further, and am glad this page exists as it documents how to do it in various languages.</comment>


Codecentric go challenge 2014: crazystone vs. Franz-Josef Dickhut - <AUTHOR> https://go.codecentric.de/

<comment><AUTHOR> Dickhut is a former Go champion from Germany around 6 dan ([http://en.wikipedia.org/wiki/Franz- Josef_Dickhut](http://en.wikipedia.org/wiki/Franz-Josef_Dickhut)), Crazy Stone is one of the most powerful Go engines ([http://en.wikipedia.org/wiki/Crazy_Stone_(software)](http://en.wikipedia.org/wiki/Crazy_Stone_\(software\))).

After three games Dickhut is ahead 2-1.</comment>


JXcore Beta 2 Released (Node.js 0.10 stable multithreaded) - <AUTHOR> http://jxcore.com/jxcore-beta-2-released/

<comment><USER2> Let's address the elephant in the room: This seems to be not open source.

</comment><comment><USER3> Are there significant performance gains over using the node Cluster module?</comment>


Tubalr, YouTube without all the bullshit. - <AUTHOR> http://www.tubalr.com

<comment><USER2> Looking at this it's shocking to me how Google who became famous for their "less is more" approach to interface design have turned YouTube into a cluttered mess which reminds me of MySpace.

<comment><USER3> Youtube has always been kinda cluttered. I hear youtube is run mostly independently from the rest of google, so im not surprised that it is hasnt gotten the minimalist treatment

</comment></comment><comment><USER4> I don't like the wooden background. I think it's tacky, and it's precisely _not_ the minimal approach you are promoting.

Otherwise: good work. The selection of music it gets me when selecting an artist is rather impressive. I can see me using this a lot.

<comment><AUTHOR> Thanks man, I guess I can agree with you on the background.

<comment><USER5> Good work on fixing the background :) I feel the only thing missing is seeing what videos are coming up next. So rather than hitting "Next" and "Previous", it would be nice to see a row of thumbnail videos underneath the main video so I can skip around like a grooveshark playlist.

Edit - Gee willickers the site is fast! Really cool :D

<comment><AUTHOR> Thanks man glad ya like it :) I like the idea of listing out upcoming songs... now only to figure out a way to do this without cluttering up the ui!

</comment></comment></comment></comment><comment><USER6> This is how i see it: <http://imgur.com/dA15I>

Unfortunately I'm not interested in registering stuff at imageshack.

<comment><AUTHOR> Not really sure why thats showing up for a background, the images for the bg is hosted on the server.

</comment></comment><comment><USER7> I've been using this all day today. It's very nice but I wish I could enlarge the videos to full-screen.

<comment><AUTHOR> I'll look into adding this ability, I tried enabling it today; however, it just wouldn't work. It added the icon to the player to go to full screen, but it simply would work. Glad you've had a use for the app and thanks for using it!

<comment><USER7> Yes I really it.

I hope you succeed with it, (and that YouTube goes the route of hiring you rather than shutting you down!)

On my wish list for your app would be the ability to synchronize two browsers to the same stream....

<comment><AUTHOR> Hah, I wish, I dout anyone from YouTube will even notice it :P

</comment></comment></comment></comment><comment><USER8> Are you doing anything to filter the non music-related results from youtube?

<comment><AUTHOR> I'm just getting the 20 most relevant results.

</comment></comment><comment><USER9> How does it find similar artists?

<comment><AUTHOR> I take the top 20 similar artist from the last.fm API and then take the number one video for each artist and serve them up :)

</comment></comment><comment><USER10> this is neat, can we get a tech overview of what's going on behind the scenes?

<comment><AUTHOR> Heres something quick and dirty:

A user input's a band or artist... or really anything they want to. You can insert Football, Funny, LOL Cats, or anything else you can think of. I'm aiming for people to use Tubalr for bands and artists, but it dosnt really matter, long as it has a use!

Then Tubalr posts to YouTube.com and retrieves a list of the top YouTube videos for whatever was searched excluding videos that dont allow embeding(I post to gdata.youtube.com/feeds/api/videos/… to determine if its embeddable, and throw it out if its not). Then Tubalr does some parsing and rips out the video ids and puts them away for the next step.

Once there is a list of all the videos, I then use YouTube's API to embed the YouTube player with the correct video. The YouTube API allows you to determine on the fly if a video is paused, finished, or any other state you can think of. Once a video is complete, it simply embeds the next video, using some jquery and a .php file with the player in it.

So what if a user hits the "Similar Artist/Bands"... well, Tubalr uses audioscrobbler.net's API by doing something like below!

Tubalr hits ws.audioscrobbler.com/2.0/artist/ARTIST_NAME_HERE/… and grabs the top 20 similar artists/bands and stores them for the next step.

Once Tubalr has the list of 20 similar bands/artists, it hits YouTube up for the number one video for each artists.

Then, after Tubalr has all the similar videos we just use the YouTube API to embed just like we did for the default option!

</comment></comment><comment><AUTHOR> give it a shot

</comment><comment><USER11> interesting, was able to scroll Canibus's music as if it was a DVD menu! lovely. Using apis, scraping or pattern mining?

<comment><AUTHOR> YouTube and Last.FM's APIs</comment></comment>


Show HN: Programmatic job advertising. Pay for applications, not clicks - <AUTHOR> https://exchange.directlyapply.com <comment><USER2> So instead of paying for click, I guess like Indeed? I only pay when I get an applicant?

Will that work out more expensive though?

<comment><AUTHOR> Yes that's exactly right. In terms of paying more, it will always work out less as we have hundreds of sources for applicants. You can check out our calculator (exchange.directlyapply.com/cpa) and compare with indeed or any other job board to see how we stack up in terms of cost.

</comment></comment><comment><USER3> Amazing. We are looking for retail workers in SF - will give it a go!

<comment><AUTHOR> Thanks! Yes, it would work well for that. Reach out if you have any issues.</comment></comment>


The science is in: exercise won't help you lose much weight - <AUTHOR> https://www.vox.com/2018/1/3/16845438/exercise-weight-loss-myth-burn-calories <comment><USER2> I'm curious though - what affect does adding muscle mass have on the "Basal Metabolic Rate"? This article seems to be talking about cardio, not strength training...

<comment><USER3> The text "... we have very little control over our basal metabolic rate ..." links to [https://www.vox.com/2016/5/18/11685254/metabolism- definition...](https://www.vox.com/2016/5/18/11685254/metabolism-definition- booster-weight-loss) , titled "Most of us misunderstand metabolism. Here are 9 facts to clear that up."

> Building more muscles, however, may be marginally more helpful. Here's why: > One of the variables that affect your resting metabolic rate is the amount > of lean muscle you have. ...

> "If you have more muscle, it burns fuel more rapidly. But that's only half > the question." If you do gain more muscle and effectively speed up your > metabolism, "you have to fight the natural tendency to [want to] eat more as > a result of your higher metabolism."

> Many people cave in to the hunger that may come with working out a lot, too, > and just end up adding more fat along with the muscle.

> Jensen also noted that it's difficult for people to sustain the workouts > required to keep the muscle mass they gained. "For most people, it's kind of > impractical," he added.

> Overall, he said, "There's not any part of the resting metabolism that you > have a huge amount of control over. The control tends to be relatively > modest, and unfortunately, it also tends to be on the downside."</comment></comment>


Ask HN: What do you think Wikileaks will drop, RE: AMZN? - <AUTHOR> They keep releasing coded maps showing data centers, and are hinting that it's related to Amazon somehow. And apparently they're going to release a new batch of leaks this week. <comment><USER2> They're going to reveal that Amazon is bent on the subjugation of humanity and divert enough wealth to Jeff Bezos that he can live above us in an orbital Xanadu? We knew that already.

</comment><comment><USER3> Amazon datacenter locations, apparently.

</comment><comment><USER4> Russian propaganda ?</comment>


No more yes. It's either HELL YEAH or no. - <AUTHOR> http://sivers.org/hellyeah

<comment><USER2> I am somewhat pleased to learn this isn't a post about the importance of enthusiastic consent when it comes to sexual advances ([http://fullcomment.nationalpost.com/2014/02/27/robyn- urback-...](http://fullcomment.nationalpost.com/2014/02/27/robyn-urback-to- mcgill-activists-a-yes-doesnt-mean-consent/)).</comment>


Gambas: Visual Basic on Linux - <AUTHOR> http://gambas.sourceforge.net/en/main.html <comment><USER2> [http://gambaswiki.org/wiki/doc/diffvb](http://gambaswiki.org/wiki/doc/diffvb) lists "Differences From Visual Basic" and says "Gambas is not intended to be a clone of Microsoft Visual Basic" and "you can't simply copy your VB projects over and expect them to compile under Gambas".

<comment><USER3> >Thankfully, in Gambas you cannot use GOTO to trap errors! Instead, use CATCH, FINALLY or TRY

For error handling goto is generally much clearer than using exceptions.

<comment><USER4> The construction being referenced is On Error [ERR_NO] Goto LABEL, which is not usually local to the error, and, depending on the dialect may be a generic handler that first needs to figure out what error it's handling.

<comment><USER5> Or, worse, and common in classic VB, ON ERROR RESUME NEXT. Which just skips the line that errored.

<comment><USER6> It sets Err. Which is essentially how SH, C and Go work too.

(With the obvious exceptions of longjmp and panic/defer, global vs local var, and Go forcing to assign the error.)

On Error Resume Next isn't great, but calling it much worse than On Error Goto, or much worse than other languages, is a stretch.

My point is only that people complain about it in VB disproportionally often compared to other languages. (Does that mitigate the issue to some extent, if every VB dev is super aware of it?)

<comment><USER5> I don't think I've ever seen any vb code which actually checks that, though,or dry little, certainly. In C and Go you get something returned, which is a hint that you should maybe do something with it. In VB a magic global variable is set, and then generally ignored.

<comment><USER7> That's how I've done it. Enable it before the line(s) in question, then check err.number, and add "On Error Goto 0" after that so you get the default handler again.

Usually much cleaner than jumping to somewhere else, but that had its uses too.

<comment><USER5> Ah. I was never actually a VB programmer, but I did have a few side-jobs porting VB apps (mostly CRUD webapps) to something more modern in the mid- noughties. My experience from that was that real world use of on error resume next was to turn it on and leave it on.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> In the same vein, we have Lazarus vs Delphi:

[https://www.lazarus-ide.org/](https://www.lazarus-ide.org/)

<comment><USER9> That's a solid choice is this arena.

<comment><USER10> For open source, I don't think there's a better one.

(Multiplatform) GUI is one of those things you really have to throw money at if you value your time.

<comment><USER11> Really? What's wrong with TCL/TK?

<comment><USER12> There is nothing wrong in TCL/TK. TCL/TK has:

1) SafeTcl for running untrusted code

2) AndroWish for making Android apps

3) Wapp for web apps

4) Embedded SQLite database

5) Expect for automation

6) TclKit for single binaries

7) Hecl for running Tcl code on Symbian devices

8) Fossil that is better than git, stores repo in much less space.

It's not like there is anything wrong in any programming language, when it's still getting features, fixes, security fixes etc.

Problem is, when there is existing large VBA/VB6/VB.Net/Excel etc apps and Microsoft stops developing Visual Basic language.

</comment></comment></comment></comment></comment><comment><USER13> For Windows, MacOS, iOS and Android: check out AppStudio. It lets you code in VB like BASIC. A VB like Design Screen lets you drag and drop visual controls. Output is JavaScript/HTML so it runs everywhere. (Disclosure - I'm on the team) [https://www.appstudio.dev/](https://www.appstudio.dev/)

</comment><comment><USER14> This is fantastic. I've lamented the lack of a good GUI and environment for making desktop apps since VB 4, but it looks like they never went away.

Gambas looks fantastic, and exactly as easy to develop with as I remember VB 4 being. I can't say I can stomach the language it uses, but something like this for Python would be a godsend.

<comment><USER15> Check out Anvil: [https://anvil.works/](https://anvil.works/)

<comment><USER14> This looks nice, thank you. It's only web apps though, right? Ie no native components.

</comment></comment></comment><comment><USER16> Speaking of Visual Basic... this tool (Windows based) that let's you quickly/easily develop an simple Android app using a flavour of Basic:

[https://www.b4x.com/b4a.html](https://www.b4x.com/b4a.html)

The developer recently released the tool's source and made it free.

It's a mature tool with lots of community support. It also has a pretty slick GUI Android screen designer (Win only - but works in WINE).

It might even be feasible to get the Gambas tool to work with the B4A Android Bridge and Designer.

<comment><USER17> It's worth noting that the same developer has free tools for desktop (Java) and Raspberry Pi applications, and a paid tool for iOS.

All of these use the same dialect of BASIC, and I believe they can use (but don't have to) a cross-platform GUI.

</comment></comment><comment> some-username About the same time that "Microsoft plots the end of Visual Basic" ([https://news.ycombinator.com/item?id=22570684](https://news.ycombinator.com/item?id=22570684)).

</comment><comment><USER18> I can't believe I haven't heard of this, it looks awesome. Looks like it can compile web apps too?

<comment><USER19> [https://gambaswiki.org/wiki/comp/gb.web](https://gambaswiki.org/wiki/comp/gb.web)

I remember reading about this some time ago, like almost 10 years ago. So you have to wonder if there are businesses out there using Gambas web apps without knowing it. :-) Some of the developers who use Gambas are very experienced.

</comment></comment><comment><USER20> _The phenomenal quantity of bugs and inconsistencies that makes Visual Basic so delightful persuaded me to start this project_

 _It seems that Microsoft was aware of the poor quality of its language, as VB .Net is not backward compatible with older versions of Visual Basic._

 _I dislike the bad level of common Visual Basic programmers, often due to bad pratices imposed by the bugs and strangeness of this language._

Pity he couldn't resist taknng a swipe at vb and vb programmers in his introduction. Also he's inaccurate wrt to his comments about why Microsoft didn't make a vb7.

</comment><comment><USER21> Sourceforge? Is this an old post?

<comment><USER22> Not everyone is jumping into Github.

<comment><USER23> No but everyone should jump away from SourceForge after the shady crap they pulled. Gitlab is also a thing.

<comment><USER24> SourceForge has now long been under a different ownership then when the shaddy crap happened. Since ownership changed there has been no shaddy behavior.

<comment><USER25> I wasn't aware of this - and it's a testament to the fact that sometimes there are no second chances after image and trust is destroyed.

</comment></comment></comment></comment></comment><comment><USER26> "Gambas" means prawns in Spanish

<comment><USER27> Also slang for legs in Argentina.

<comment><USER28> And for AR$100

</comment></comment></comment><comment><USER29> Would be good to have a cross platform version of this. I wonder how difficult it would be?

<comment><USER30> Xojo does it, but they are a long time commercial effort (RealBasic).

<comment><USER18> Xojo is a solid paid solution. I use it all the time.

<comment><USER31> Could you please talk about what kind of projects you are using it for? Do you use it for serious projects or just toy ones? Web or mobile?

I looked at the site, this sounds interesting. Just interested in hearing it from someone who uses it

<comment><USER18> Well let's say you need an app to program IP addy info into a IOT device on the LAN. Multi-platform done in 1 hour. You can also write web apps, drag and drop, we're really excited for the web 2.0 coming this year.

</comment></comment></comment></comment></comment><comment><USER32> It's not "Visual Basic". At best, it's a basic done in the same "spirit" as Visual Basic.</comment>


The Pitfalls That You Should Always Avoid When Implementing Agile - <AUTHOR> http://www.infoq.com/articles/pitfalls-avoid-agile#.VZpxboAJfA8.hackernews <comment><AUTHOR> Moving from traditional project management to agile is a paradigm shift. This article discusses the role that management plays in organizations that have decided to adopt agile.</comment>


The Village Sleeps Again – how by-passes affected village life (1962) [video] - <AUTHOR> https://www.youtube.com/watch?v=wJ-R-CuZlAk <comment><AUTHOR> Includes footage of a timber framed Tudor house being moved out of the way of a bypass in Exeter!</comment>


Are We Heading for Another Tech Bubble (debate)? - <AUTHOR> http://www.nytimes.com/roomfordebate/2011/03/30/are-we-heading-for-another-tech-bubble?hp

<comment><USER2> _Even though ordinary investors have been locked out of the game, should this bubble burst, the financial elites will most certainly find a way to shift the consequences of their folly onto the rest of us._

Cynical although certainly possible. But what remains unanswered: how big a hit would be coming if Zynga didn't grow into its valuation (and every other "overvalued" company failed as well)?

It does not compare, even a little, to the 1990s. This is a much smaller scale, and that's why I object to the use of the word "bubble". It's like calling a three-foot-high wave a "Tsunami".

<comment><USER3> "It's like calling a three-foot-high wave a "Tsunami""

In deep water before they hit a coast tsunamis aren't very high - in fact they can be about 3ft.

<http://en.wikipedia.org/wiki/Tsunami#Characteristics>

As someone who co-founded a startup in '95 (and did the whole arc of VC money, IPO, acquisition, death over 7 years) I have to say that there are certain elements of the current situation that do seem awfully familiar.

<comment><USER2> You're taking my analogy too literally. I meant a wave that is just a wave.

 _there are certain elements of the current situation that do seem awfully familiar_

Perhaps, but I've been involved in the startup world since around then, and the fundamentals that made the dot-com bust what it was are not present now. People didn't know what they were doing back then, and every MBA was sure he knew he could make millions with a .com domain name. There was a lot to learn. Not everything has been worked out, for sure, and irrational exuberance rears its head more often than we'd like. But this is not a repeat of the '90s bubble. Companies are making real money, and are able to sustain it. The general public is used to what the internet is and is willing to do business with it. The first generation of internet-savvy youth are coming of age. There are few IPOs, and the companies that have done so (e.g. OpenTable) are profitable and growing. That's why I insist that we are not in a bubble -- not a stock market bubble, not a tech bubble. There are overinvestments, but they're not going to bring the industry or the stock market to its knees.

Chicken Littles are running around yelling that the bubble is coming, and a few people are trying to reason with them. I'm attempting to be one of those people.</comment></comment></comment>


I stopped using for loops and started mapping instead - <AUTHOR> https://blog.hackages.io/why-i-stopped-using-for-loops-and-started-mapping-instead-5f6b579a0525 <comment><USER2> Welcome to the fruit of programming language research from decades ago! No snark intended. Since learning of functional programming languages about 15 years ago, I'm continuously amazed that our industry is so slow to put this research into practice.</comment>


Ask HN: Ethics of paid long form content - <AUTHOR> I had an idea for an online magazine for long form content with the provision that people have to pay to submit articles if published. I would have sole responsibility for editorial direction. what are the ethics considerations I need to be aware of? <comment><USER2> That's basically how a vanity press works. Or any number of unethical awards shows.

As for the ethics of it, well they're the same as the ethics of vanity publishing houses and low quality academic journals. Money is supposed to flow to the writer, not the other way around. It's like a job; you're not supposed to be paying for a chance to do the work.

So yeah, not really too ethical.

</comment><comment><USER3> Yog's Law[0]: "Money flows _to_ the writer." The business model you're describing is entirely unethical.

Let this scene from Goodfellas describe what should be the correct relationship between author and publisher[1].

[0][https://whatever.scalzi.com/2014/06/20/yogs-law-and-self- pub...](https://whatever.scalzi.com/2014/06/20/yogs-law-and-self-publishing/)

[1][https://youtu.be/8L4HHPTiZN8?t=25](https://youtu.be/8L4HHPTiZN8?t=25)

</comment><comment><USER4> You're supposed to pay the people producing your product, not the other way around.

</comment><comment><USER5> It's not a magazine, it's an advertisement.

Usually these sorts of publications are essentially sponsored. IBM used to have trade rags that delivered ads with strategy and tech material written by IBM and partner employees.

The other model is career builder magazines. "Regional CFO Monthly" will host conferences and give awards to executives who are featured in the magazine, with articles written by conference sponsors.

The entire experience is about getting the big shots who will spend money to accept the reward and bring their minions to cheer them on.</comment>


Apple Changed Its Site's Code So the Word "click" Doesn't Look Like… - <AUTHOR> http://techcrunch.com/2016/02/25/more-to-love-with-every-dick <comment><USER2> The UK site[0] doesn't have that tweak, the US site[1] does.

[0] [http://www.apple.com/uk/osx/](http://www.apple.com/uk/osx/)

[1] [http://www.apple.com/osx/](http://www.apple.com/osx/)</comment>


Former miners out to put Kentucky on the tech map - <AUTHOR> https://www.theguardian.com/us-news/2017/apr/21/tech-industry-coding-kentucky-hillbillies <comment><USER2> I'm from the region, and work remotely as a coder. Some of these really backwoods areas are very beautiful and tranquil, and when combined with the affordability, I think it is a great place to code. A lot of local politicians and economic developers are grasping to coal/lumber/manufacturing, but I think there is opportunity to build small tech hubs for young people burnt out on expensive, crowded, and distracting cities. Invest in a few bars, coffee shops, low rent office spaces, and most importantly, broadband, and I don't think it would be hard to convince coders and entrepreneurs to come.

EDIT: additional thought: there are also great outdoor recreation opportunities that is one of my favorite things about living here (hiking, mountain biking, rafting)

<comment> gm-conspiracy Good luck with the broadband, especially in the current political climate of the FCC.

I believe that having affordable, high-speed internet (where you are allowed to actually host a server), would revitalize Appalachia.

Between the shuddered coal-plants that can be repurposed as data-centers, and rails-to-trails right-of-ways that can be used for fiber runs, there is plenty of opportunity.

Good luck convincing the politicians, though.

<comment><USER3> I am confused, are you guys suggesting that some cities and towns in Kentucky and other areas within the US lack the same broadband infastructure that I enjoy access to in small-town Mississippi?

<comment><USER4> I live on the most populous hilltop in Hyden KY. Our only ISP caps at 1mb, and its not terribly reliable. Satellite is of course an option, but the expense is prohibitive if you use a lot of data.

<comment><USER5> Wow, that just sucks. North Dakota has pretty good rural broadband on the whole. I get the feeling its because we seem to have multiple providers everywhere and the rural electric cooperatives and local telephone companies have stepped up with some serious fiber.

Technically, you should have benefited from some of the legislation passed, but after looking at it, it was pretty impossible to access.

</comment></comment></comment></comment></comment><comment><USER6> A huge amount of Government money has gone into infrastructure for Pikeville, KY. There was the Pikeville Cut-Through, finished in 1987, where the U.S. Army Corps of Engineers _moved the river_ to a more convenient location.[1] That also got the town a superhighway connection with two interchanges. There's the East Kentucky Expo Center [2], which has only two events, wrestling and a beer fest, scheduled for the rest of the year. There's the University of Pikeville, with 2,300 students. There's the Pikeville Medical Center, an 11-story hospital with a 10-story parking garage and 3,200 employees. There's a large, modern high school with a swimming pool. It has 2,300 students, so it must be drawing from a larger area than the town. There's a downtown multistory car park connected by a sky bridge to part of the University of Pikeville.

All this in a town of only 7,000 people.

Population is increasing slowly; it's not a dying town. The town itself never had heavy industry; the mines were elsewhere. It's a service center for central Appalachia. Population within 20 miles is 110,000. The town's problem is that the area it services is losing population.

If you wanted to locate there, the local mall has about 30,000 square feet available. No coffee shop in the mall, but the mall has a supermarket-sized Texas Roadhouse. Eat more beef. AT&T offers 45mbps Internet in most of the downtown area.

[1] [https://en.wikipedia.org/wiki/Pikeville_Cut- Through](https://en.wikipedia.org/wiki/Pikeville_Cut-Through) [2] [http://eastkyexpo.com/AllEvents.html](http://eastkyexpo.com/AllEvents.html)

<comment><USER4> Its the only actual town for miles in any direction. All those other dots on the map nearby are incorporated hilltops. If they have a gas station with a Hunt Bros pizza franchise, its a town.

That said, our leaders spend any aid money we get on 'tourism' which never pays off, but they don't learn.

<comment><USER6> Check out the tourism site, "Pikeville, Kentucky's Outdoor Family Playground".[1] There's zip lining, kayaking, and a riding stable. There's also a web site for downtown Pikesville.[2]. Boosterism is alive and well in Pikesville. It's a pretty little town. But it's just not going to draw tourists from far away.

There are bigger places in much worse shape. Youngstown, OH, population down to about 60,000. It was once a bigger industrial city. When the steel industry shut down, it lost its purpose. Plenty of industrial space is available if you have some use for it. Ohio and Pennsylvania have too many cities like that: Akron, OH; Erie, PA, Bethlehem, PA. Pittsburgh came back from losing its steel industry. Cleveland didn't.

[1] [http://www.visitpikeville.com/](http://www.visitpikeville.com/) [2] [http://www.pikevillemainstreet.com/](http://www.pikevillemainstreet.com/)

<comment><USER7> > Pittsburgh came back from losing its steel industry.

Not really. It's still down population almost 10% from 2000.

Losing Westinghouse was a gigantic loss--and it didn't need to happen. Westinghouse should have been a source for tech talent during the Dot Com boom to combine with CMU and Pitt students. Instead Pittsburgh was a technology desert in that same time (I remember trying to find WiFi hotspots there in 2000-2002 and people staring at me like I was from Mars).

</comment></comment></comment></comment><comment><USER8> While bridging the diversity tech gap, this is another gap that needs to be addressed; the tech-displaced gap (which is the same tbh, and is only going to get wider as time goes on).

Don't want to get too political here, but this "middle-america" vs. "liberal minorities" class war is nothing but a fabrication of the media and the elites to get these two disenfranchised groups to battle amongst themselves- they're the same side of coin.

At 25 I went back to school for programming and it was hard and I only was able to do it because of the support of my parents. For a 55 y/o coal miner with a family to support, rent to pay, etc. I can't even begin to imagine how they would go about "learning to code"\- as if they don't have these responsibilities.

Though children are the future, these people are the present, and if we don't find ways to help them (whether it's free community college, bootcamps, or internship placements), they're going to get desperate (e.g. vote Trump), and the future is going to pay dearly for it.

<comment><USER9> It's capital vs labor. It's cute how employee professionals think they are in some sort of ruling class (at least according to the media).

</comment></comment><comment><USER10> As someone who grew up in Appalachia and has since moved to NYC and built a career in tech, it hurts me to read stories like these and think about how many good people are getting left behind, due to factors largely out of their control. Sure, folks could uproot and abandon the area, but that solution is no less tragic. In terms of natural beauty, few places can rival. With a bit of enlightenment about what opportunities already exist in affordable tech education, some meaningful investment in infrastructure, and some entrepreneurs willing to get their hands dirty, we could turn this region around. Silicon Holler has a ring to it.

<comment><USER11> Investment in infrastructure would especially help, because it would create jobs that could then flow into the local economy. West Virginia is one of the most beautiful parts of America, and could have a booming tourist industry. Travel through there and you see one deindustrialized town after another where a few million dollars of investment would transform the local economy.

</comment></comment><comment><USER12> Time and time again I keep coming back to the same conclusion - anyone who has the desire can learn to code. I would say that 95% of people have enough innate logic to write code, they just need to be taught to express it formally.

<comment><USER13> >in 2015, then watched as more than 900 applications rolled in. From this pool, they chose 11 former miners who scored highest on a coding aptitude test. Two years later, in an old Coca-Cola factory by the Big Sandy river, nine men and one woman remain

They gave people an IQ test and took the top percentile of a group that, due to their interest, was already slightly selected for intellectual ability. This is not proof that anyone can program.

Did you even read the article? It is in accordance with the unfortunate fact that programming is a high IQ job that the majority of people are not capable of becoming proficient in. Though for many here this is not unfortunate, as it is the reason wages remain high despite a lack of licensure.

Humans differ in cognitive ability and most of this difference is genetic. Modern psychometrics and common sence agree with this. We cannot build a better word on false but pleasing ideological assumptions.

<comment><USER14> I missed the IQ test part. All I read was coding aptitude test, whatever the hell that is.

Sure we're all different and maybe 95% is high but its at least 50%. One out of every two people I meet I am confident they could become proficient at programming given a solid learning environment.

<comment><USER13> A programming aptitude test is just an IQ test with another name.

>One out of every two people I meet I am confident they could become proficient at programming given a solid learning environment.

That's quite possible, even if what I say is true. People tend to mix with people on their own intellectual level. The people you talk to enough to get a good estimate of their intelligence are unlikely to be randomly selected from the population.

If you believe average people can become good programmers, this implies you could make billions converting 100 IQ people into programmers and then undercutting everyone else. I predict you will fail, unless you figure out a way to vastly deskill the art of programming.

<comment><USER15> An alternative way to prevent deskilling programming is to make the tools required to program such that learning to use them becomes mostly a matter of oral tradition rather than accessible. This might (or might not) be happening.

For example, the evolution of Javascript from a low status programming language to a high status one has paralleled a shift from a stable core language and a well documented API to the DOM to a combinatorial explosion of changing frameworks and complex development toolchains. Learning some combination gulp and babel and redux and angular(2) and webgl and ten other things is more a matter of access to people who will patiently answer questions than something a person can learn without working on a team.

<comment><USER16> I think your learning style is leaking through here. While not a JavaScript expert (who designs a language with whitespace/formatting not being a first class concern?) I had no trouble picking it up from the docs and random blog posts.

I'm a learn-by-doing type though, YMMV.

<comment><USER15> I agree people's mileage varies. My gut is that programming languages have generally evolved in ways that widen that variation and that the explosion in the number of people who are coding due to increased access masks much of that change.

</comment></comment></comment></comment></comment></comment></comment><comment><USER17> It's interesting to have local politics geared towards attracting talented people, but there's precious little that can be done if talent is fractionalized at a national level through the concentration of urban bubbles to immigration policies that stem inflows of talented people...

Talent is distributed unevenly, but I don't think a series of competing local lobbies will change that. I've always thought that all of the local ecosystems for which talent flows unevenly should think seriously about banding together and working on policies that 1) increase overall talent availability 2) distribute its spread more evenly -- 1 would involve working to get Congress to create incentives for entrepreneurs/high-skilled workers of all kinds to come to America in the first place, for example, while 2 might be a combination of infrastructure/tax policies.

</comment><comment><USER4> I live in eastern KY and there are a few programs like this one. In Hazard KY, another coal-bust town, I was accepted to a program to train force.com developers. Hold your scoffs please, we've learned a lot in the last few months, including using JS.

The broadband struggle is real. I worry that at some point we'll still need to relocate.

<comment><USER3> Is broadband expensive or bad or unavailable? What about satellite internet? I live in Mississippi and broadband internet is affordable and available throughout the state and has been for years so I expected Kentucky to have the same or similar. Some places miles away from the nearest town in MS definitely don't have broadband.

<comment><USER4> 1mb 'broadband' service, offered as DSL, runs about 90$ per month, and that's our only ISP. One could get satellite that's faster, but satellite internet also has low data caps, and the cost scales out of proportion. The terrain derails reliable wireless services, and the low population density rules it out anyway - folk are pretty far apart.

<comment><USER5> Who is your electric company?

<comment><USER4> Our electric company is AEP, but our ISP is TDS. They're awful.

<comment><USER4> Hadn't ever considered it, didn't know the power companies were crossing over like that. I'll definitely investigate further, thanks!

</comment></comment></comment></comment></comment></comment><comment><USER18> We were lucky to host some visiting Bitsourcers in NYC. They were fantastic.

They told us the same thing: coal miners have to _think_. You do the right thing, the right way, _every_ time, or somebody could die.

The stakes are lower for tech projects, but they brought the care with them.

<comment><USER4> I haven't met any of their devs, but when our program began the owners came to speak to us. They're good people.

A lot of times it seems people take it for granted that 'skilled/intelligent' and 'rural' are mutually exclusive.

<comment><USER19> Did you mean to say "not mutually exclusive"?

<comment><USER4> Nope! They aren't mutually exclusive, of course, but a lot of folk believe that they are, hence my comment.

</comment></comment></comment></comment><comment><USER20> Looking at that picture of the huge empty highway and ramps, I can't help but think that the $15 million needed to connect to fiber optic backbone could have been found if so much hadn't been wasted on that road building. The same is true in many economically shrinking areas of the US, where fewer and fewer people get more and more miles of roads. (Also, think of how much of their newly created 400 acres of flat land was wasted on those ramps.)

<comment><USER21> I swear to pizza, in my hometown they are removing TWO ENTIRE MOUNTAINS because rocks keep slipping on to ONE of the South-bound lanes. Last I heard, the estimated cost is over $50M. Only 50k people live in the entire metro area. Population is halving about every generation on top of that. Best part is, this route runs alongside a river. On the other side of that river is an identical route. They could literally just shut down the road and not even need to build any new bridges...

</comment></comment><comment><USER22> That's interesting, this is the second miner-to-coder success story I'm seeing in the news recently. There's also Mined Minds in PA: [http://www.pbs.org/newshour/rundown/couple-teaches-laid- off-...](http://www.pbs.org/newshour/rundown/couple-teaches-laid-off-coal- miners-pa-code/)

Coincidence or indicative of people from declining industries switching to tech?

</comment><comment><USER23> Are there good groups in Louisville, KY, for adults wanting to learn how to do software development (or more generally, enter the tech industry)? Does anyone know of any good online resources for adults along these lines?

I know about a number of resources for kids learning to code, but those are maybe not appropriate for a motivated adult wanting to investigate switching careers.

<comment><USER24> Between Louisville, Lexington, and Cincinnati there is a large community of developers, tech startups, meetup groups, and a job market that is wide open for good talent. Meetups and classes in Louisville are definitely a google search away. Also there's awesomeinc.org in Lexington. If you want to learn to code, try some online courses first. If you dont hate it, get out and meet other developers, look into courses available. Expose yourself to enough concepts so you can make an informed decision about what you would prefer to actually do as a developer.

</comment></comment><comment><USER25> I'm curious, what was the actions put in place by the federal government that they blame for killing their coal industry?

<comment><USER4> In general, they blame environmental regulations rather than market forces. The area is full of urban legends about how the natural gas power plants are vastly inferior to coal fired plants, but they're being upheld by a cabal of evil liberals who want to destroy the industry because ???</comment></comment>


Show HN: We made a web app so that our parents can keep reading to our daughter - <AUTHOR> http://readastorytome.com/ <comment><USER2> This is a really good idea. This has nothing to do with the current crisis but if you could somehow credibly guarantee hosting for 50+ years people could read stories to their yet to be born grandchildren. People with terminal diseases and a two year old could still read to their children after their passing. Consider it.

<comment><USER3> At $.02/GB you could host a 1 GB video on S3 for about $12.

Based on past performance that price would probably be even cheaper as the per-GB-month price keeps dropping.

The video would be likely be much smaller than 1 GB so you could instead spend the same money to put it on all three major clouds, AWS, Azure, and Google, storage tiers for the same price.

I'm willing to bet $100 that at least one of them will still be operating a cloud blob store in 50 years.

<comment><AUTHOR> When you think about it, these files won't need to be accessed very often or quickly, so you could reduce the costs to $2.5 per GB by using AWS Glacier. I mean what is an extra 3-5 hour wait when you have already been waiting 50 years...

</comment></comment></comment><comment><USER4> Awesome idea, and nice work! Is this open source, and if so, would you mind sharing a link to it? I am beginning work on a slightly similar project [1] to help facilitate speech therapy (girlfriend is a speech-language pathologist) over video chat and would be interested to compare with your approach and tech stack.

I saw this [2] Chess + video chat project the other day, and drew heavy inspiration from its approach [3].

[1]: [https://github.com/scott113341/slp- memory](https://github.com/scott113341/slp-memory)

[2]: [https://news.ycombinator.com/item?id=22790728](https://news.ycombinator.com/item?id=22790728)

[3]: [https://glitch.com/edit/#!/rootshirechess](https://glitch.com/edit/#!/rootshirechess)

<comment><AUTHOR> I have not made it open source atm, but it is something I am considering.

Tech stack: Elixir/Phoenix (liveview mostly) WebRTC code is based off: [https://codelabs.developers.google.com/codelabs/webrtc- web/#...](https://codelabs.developers.google.com/codelabs/webrtc-web/#0)

I setup a turnserver using [https://github.com/coturn/coturn](https://github.com/coturn/coturn)

What do you need help with? Maybe I can help you now.

<comment><USER5> I'm interested more about how you are doing deployments of elixir/phoenix app, and your dev setup ... like do you use docker for developing and production and stuffs like that ...

<comment><AUTHOR> edeliver + distillery

Followed this tutorial [https://www.digitalocean.com/community/tutorials/how- to-auto...](https://www.digitalocean.com/community/tutorials/how-to-automate- elixir-phoenix-deployment-with-distillery-and-edeliver-on-ubuntu-16-04)

<comment><USER5> Thanks for the info. Can you give more info on your dev setup? Do you use docker for developement/production?

<comment><AUTHOR> I don't use docker - I have never really used it and wasn't going to start. It's using one DO server, a 4 vCPU, but could be using much much less. Before posting I upgraded it from a 5$ machine The turnserver is a $5 DO server.

Feel free to email me - email@example.com and I will gladly fill you in on all the nitty details around the deployment. It's embarrassingly simple :)

<comment><USER5> Thanks for the info and for offering help. I will definitely reach out to you in case I need more info on your setup.

Wishing you best for your app.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> This is an awesome idea, I had one yesterday that was similar but for a different purpose: LastMessage.to/<someone>

After reading this article: [https://www.cnn.com/2020/04/03/us/costa-luminosa- passengers-...](https://www.cnn.com/2020/04/03/us/costa-luminosa-passengers- ordeal/index.html) "Kevin and Ryan Sheehan will never know whether their father heard them say goodbye on speaker phone."

My thought was to create a place where you can leave your last message to someone or to the world.

<comment><AUTHOR> That story really gets to me.

With Covid-19 it's not just getting sick, it's getting sick and then being isolated from your family and loved ones knowing you may never see them again. Then you have the health care workers who are providing life saving care while isolating themselves from their loved ones so as not to risk getting them sick. The closest thing I have experienced to that type of fear is military service, but at least in that case my family and I had time to prepare for it mentally. Luckily I got through that experience okay.

I couldn't imagine being in the situation that these people are in today.

Anyways - I find it kind of hard to put into words how Covid makes me feel

</comment></comment><comment><USER7> This is so cool, My mom is a school teacher, and the school is trying to get her to make videos for her students.

She struggles with video editing software to make videos. This could help a lot, especially if I could have custom stories.

She could do a story session with my and I would just record the screen.

<comment><AUTHOR> You can! Right now you can upload a PDF and that becomes your story.

<comment><USER7> Thank you !!

I was thinking about building something like this over the weekend. You saved me a lot of effort.

I'm willing to self-host / donate some money if that helps with server costs.

<comment><AUTHOR> Anytime. You should still build one! It was a lot of fun to build.

Thanks for the offer, but right now I don't see a need for any donations/self hosting. Maybe that will come, but at the moment a relatively small single DO box is handling it pretty well.

</comment></comment></comment></comment><comment><USER8> Thanks for sharing! It such a great idea :-) Talking with my wife (SLP) she observed how important is interactive reading and I was wondering if you had that planned or if open sourcing this was an option so I could contribute to something like that.

Just as a reference, some therapy platforms allow the users to draw on the book, or put stickers and such... and even though this is not full-blown therapeutic, being able to draw (a transparent HTLM canvas on top of the image? websockets communicating x,y?) would add a lot to this, I think.

Thanks for sharing!

<comment><AUTHOR> I thought about adding a transparent layer so that my daughter and parents can draw on a story. I never thought about it from a therapy point of view, but that is just not an area I am familiar with - interesting though. I would be super happy if this can be used for that.

As far as open sourcing it goes - I have not made it open source ATM, but it is definitely something I am considering.

<comment><USER2> Is there any way you could apply here: [https://apply.ycombinator.com/session/new?continue=https%3A%...](https://apply.ycombinator.com/session/new?continue=https%3A%2F%2Fapply.ycombinator.com%2F) and rush your build in April/May? You have ten days left to apply but it looks fine in the current state. You really have something here. I have no affiliation with YC/HN.

</comment></comment></comment><comment><USER9> This is wonderful. Truly one of those 'make a difference' kind of projects! Kudos.

<comment><AUTHOR> Thank you!

</comment></comment><comment><USER10> This feels a lot like Caribu app [https://caribu.com/](https://caribu.com/)

</comment><comment><USER11> Add in the WHO book for children to help with dealing with covid too:

[https://www.who.int/news-room/detail/09-04-2020-children- s-s...](https://www.who.int/news-room/detail/09-04-2020-children-s-story-book- released-to-help-children-and-young-people-cope-with-covid-19)

<comment><AUTHOR> Done!

</comment></comment><comment><USER12> This looks really cool! I only see 7 books in the bookshelf. Are you planning to add more?

<comment><AUTHOR> Thanks. Yes - I will be adding more over time.

<comment><USER13> Are these 7 books on public domain? Dont you have to run through buying rights or something to use books written by others?

<comment><AUTHOR> They are all CC licensed books. See the footer and bookshelf where I include the license and link back to the sources

</comment></comment></comment></comment><comment><USER14> I just wanted to personally thank you for making this. My 7yr old and his grandparents in NYC are LOVING this. Please keep uploading more great books to the library!

<comment><AUTHOR> Thank you so much for this comment. Really made my day.

</comment></comment><comment><USER15> Nice app. It could also be used to help the medical students who's exams have all been cancelled. I would like to help if this is open-sourced.

One feature request: my Microsoft surface has a front and back camera. For some reason, the app started with the read camera on. Would be nice if there was a way to pick which camera you want, if there are multiple cameras on the device.

<comment><USER8> I think that what camera is used doesn't depend on the app but on the browser. In mine (Firefox) it asks me if I want to give permission to the app to use the my camera AND it asks me which camera I want to give permission to. Chrome also has something like that (I think it's in the URL bar, an icon that looks like a video camera?)

Anyways, hope this helps!

<comment><AUTHOR> You are correct - that is one way, but with webrtc there is also a way to give users an option to pick which audio/video source

</comment></comment></comment><comment><USER16> Very nice. Testing on my iPhone 6s landscape, I noticed the prev and next buttons were not aligned with the book page.

I also created a similar tool a few weeks ago available for free as well here [https://www.appblit.com/bookcafe](https://www.appblit.com/bookcafe)

<comment><AUTHOR> That is really cool! Honestly we didn't focus on the "look" beyond making sure it was functional.

</comment></comment><comment><USER17> Caribu is an app in this space as well. Essentially video calls with sync'ed storybooks.

</comment><comment><USER18> I just tried this and couldn't get anything to load (Firefox). Maybe I'm just doing something wrong? Didn't see any errors in the console

<comment><AUTHOR> Mobile or desktop?

<comment><USER18> Desktop. I went into an "Anonymous Room" and it showed the interface, but there was no book. I tried selecting a book from the "Bookshelf" and nothing happened

<comment><AUTHOR> Interesting - I tried it and it worked in firefox. Are you blocking Websockets by any chance? Perhaps it's your firewall. I am using phoenix liveview which uses websockets for everything.

<comment><USER18> So I tried again and it seems to be working this time. But the page of the book is ~240x190px and I can't read a darn thing.

<comment><AUTHOR> Can you send me a screenshot? Send it to firstname.lastname@example.com

<comment><USER18> Third time is apparently the charm and now it's working just perfect. If it messes up again I'll send something.

</comment></comment></comment></comment></comment></comment></comment><comment><USER19> How has your experience with LiveView been?

<comment><AUTHOR> Pretty great. It let me write this really quickly with minimal effort. There were some quirks and some weird hacks I had to make when it came to working with JS, but that could also be me doing it wrong.

My biggest complaint would be around some latency issues when the connection is bad, but I knew that would be an issue when I chose it. I would definitely choose it again.

</comment></comment><comment><USER20> Such a cool idea!

<comment><AUTHOR> Thanks. It's been pretty useful for us and let us keep some type of normalcy during these strange times.</comment></comment>


Announcing a pre-release of F# 3.1 and the Visual F# tools in Visual Studio 2013 - <AUTHOR> https://blogs.msdn.com/b/fsharpteam/archive/2013/06/27/announcing-a-pre-release-of-f-3-1-and-the-visual-f-tools-in-visual-studio-2013.aspx?Redirected=true

<comment><USER3> Who uses F# and why?

<comment><USER4> Being serous, who uses Go and why? The reasons are similar to why one should use F#

<comment><USER5> What? The use case for F# is simple: you have a body of existing .net (i.e. C#) code you want to interoperate with, but you want a modern functional language with all the benefits that brings (a real type system, a better steer towards immutability and purity, etc.). What's the use case for Go? It's certainly not that.

<comment><USER6> F# is general purpose and multi-paradigm, it even has OO classes and imperative for and while loops. I for one got into .NET because of F# and to me .NET is just like any other language runtime.

<comment><USER5> OOI why did you choose F# rather than Haskell, OCaml or Scala? I mean sure, it's a perfectly good language for the more general case (leaving aside the poor tool support outside Windows and limited deployment options - <USER2> conversely if you're already committed to Windows the tooling is very good), but there are plenty of comparable options there; the unique selling point is the .net integration.

<comment><USER7> Here's a comparison of OCaml and F#[1], as F# is "descended" from OCaml.

Mono provides full support for F#. The F# compiler is open source (Apache license). MonoDevelop has some support for F#, but I haven't used it.

I don't fundamentally see the difference in deploying a runtime like the JVM over Mono. Mono even lets you pre-compile to native code (that's how the run on iOS, for instance), so you don't need to install the Mono runtime.

I use F# in production on Linux machines (telephony applications) and have so for many years. We use Windows to develop, test, build, etc. and then copy things over to Linux and it just works.

1: [http://stackoverflow.com/questions/179492/f-changes-to- ocaml](http://stackoverflow.com/questions/179492/f-changes-to-ocaml)

<comment><USER5> >I don't fundamentally see the difference in deploying a runtime like the JVM over Mono.

It's not a fundamental difference, it's about being confident the tools and support you need will be available. With the JVM you've got the full weight of IBM and Oracle behind you, and thousands of vendors selling things like latency-optimized JVMs, heap analyzers, managed hosting services. Likewise with the CLR you've got MS and a whole ecosystem of companies building tools around their VM. With Mono I don't get the same level of confidence that I'm moving with the herd, that there are many other businesses who will have hit any possible problems, that I can hire people who've used the platform before...

But my tooling comment was mostly about the development tools. I'd be super- nervous about developing on one OS/VM and deploying to another; don't you find you hit VM bugs that weren't present when you tested?</comment></comment></comment></comment></comment></comment></comment>


Show HN: Application for comparing domestic Nigerian Flights - <AUTHOR> http://beta.flightdey.com

<comment><USER2> Nice, Its doesnt connect from your listings to their process page. I understand these carriers dont have apis but you can scrape then mimic their datasets so it can pull results and data on their process page. Cheers</comment>


Livestream of MHacks, the largest student hackathon ever - <AUTHOR> http://new.livestream.com/MichiganHackers/MHacks

<comment><USER2> This has been an awesome event, thanks to everybody who put it together!</comment>


Arc4random in libressl 2.0.2  - <AUTHOR> http://port70.net/~nsz/47_arc4random.html

<comment><USER2> Must we bikeshed every issue there is, in such highly public fashion?

Not only is this entirely uninteresting, but this is not the way to do software development. Take it to the respective mailing list, issue tracker, IRC channel, etc. That's what they are there for. I'm sure it's less distracting to the developers as well.

</comment><comment><USER3> The problem is Linux, not LibreSSL. Kernel.org needs to figure out if they are depreciating or keeping sysctl and if they aren't, find a failsafe way of gathering entropy inside a chroot or when file descriptors are exhausted. You can't expect OpenSSL nor LibreSSL to cater to the slapstick that is linux kernel development. If they can't get their shit together then switch to BSD or OSX.

<comment><USER4> How shocking. OpenBSD guts OpenSSL, breaks something while doing so, then the top comment is "well, Linux is broken, use a BSD."

<comment><USER3> OpenSSL doesn't handle it any better. As per Matthew D Green "It's like asking whether the crew of the Space Shuttle should have parachutes to protect them in the event that the shuttle explodes. OpenSSL says 'yes,' LibreSSL says a better idea would be to prevent the shuttle from exploding in the first place".

LibreSSL isn't even production ready yet, getentropy_linux.c is still in the tree getting worked on, and the sysctl method works (for now) with (most) linux kernels as a failsafe API to gather entropy while inside a chroot/file descriptors exhausted.

For all we know next month kernel.org could roll out a new failsafe API for entropy collection and finally kill off sysctl.

<comment><USER5> I'd like both if I'm heading to space--I want my vehicle to not explode, and if it does explode I want a way to get back down to Earth reasonable safely.

At least several of the Challenger crew survived the explosion and were definitely conscious and functioning for at least several seconds afterwards, and oxygen use records indicate they were alive for the fall to the ocean (whether they were conscious or not for the whole fall depends on whether or not the cabin depressurized, which is not known).

So, parachutes for a Space Shuttle crew are not prima facie unreasonable. There are engineering issues, which ultimately were determined to make them not worth it.

</comment></comment></comment></comment><comment><USER6> Capitalizing arc4random seems like a mindless application of the rules for the sake of mindlessly applying the rules. It's the name of a function in a case sensitive language; it's all lowercase.

</comment><comment><USER7> Once again, the critics and the LibreSSL team are talking two different languages.

To LibreSSL, if the OS doesn't have a secure, reliable source of entropy, it's broken, and the "right" behavior for a crypto library is to fail. That's even an option in the Linux compatibility layer -- if there's no good entropy source, fail.

To the critics, the entropy the responsibility of the crypto library, and if the OS can supply it, the library should have a fallback.

The LibreSSL fallback layer is what's in question here, and if you really want security, don't use the fallback layer and get a fixed for the Linux kernel that provides the ideal kind of OS-level entropy.

<comment><USER8> Not sure what you're talking about, because one of the major complaints with the recent LibreSSL release was that in the event there was no reliable entropy source, it happily used an unreliable one.

<comment><USER9> Is the portable LibreSSL library being written by the OpenBSD folks or someone maintaining a fork? My impression of their plans was that they would focus on OpenBSD first and foremost and once they were happy with it, then would be the right time to start porting it to other platforms (or any platform which provides the same guarantees as OpenBSD's API could already use it).

<comment><USER7> The OpenBSD folks are doing it, and in the comments in the source they make it clear they expect the OS to provide a secure and stable entropy source.

<comment><USER8> And I expect my car to provide a reliable form of transportation, but if I turn the key in the morning and chickens fly out from under the hood, I stop what I'm doing, I don't keep driving to work.

<comment><USER7> Agreed. Maybe the default in LibreSSL should be swapped from "go ahead and use this fallback faux-entropy if we have to" to "fail if we can't get good entropy". It'd be a matter of changing and undef to a def in the code.</comment></comment></comment></comment></comment></comment>


Don't blame open-source software for poor security practices - <AUTHOR> https://dri.es/dont-blame-open-source-software-for-poor-security-practices <comment><USER2> Who would blame anyone _but_ Equifax?</comment>


Intel to mislead press on Xpoint next week - <AUTHOR> http://semiaccurate.com/2017/03/10/intel-mislead-press-xpoint-next-week/ <comment><USER2> The article extends on the previous articles and claims made by SA, most recently this one discussed in another HN thread: [https://news.ycombinator.com/item?id=12562856](https://news.ycombinator.com/item?id=12562856)

Definitely curious to see if Intel will indeed fail as spectacularly as predicted. Given the underwhelming feeling one's left with seeing the backpedaling on the performance claims, this could be yet another example of crappy/barely usable 1st-gen products, usable 2nd gen.</comment>


This App Splits Your Dinner Bill According to Your Race and Gender - <AUTHOR> https://munchies.vice.com/en/articles/this-app-splits-your-dinner-bill-according-to-societal-racism-and-sexism <comment><USER2> I can't tell whether this is a satire or a parody.</comment>


An Illustrated History of Failure (Paul Fenwick : OSCon 2008) - <AUTHOR> http://blip.tv/file/1137169 <comment><USER2> A blip.tv video (that doesn't specify length; I'm guessing ~50min) from O'Reilly OS Convention, 2008

Abstract:

Paul Fenwick, Perl Training Australia: "An Illustrated History of Failure"

The average individual is given little scope for failure, at least not the type that really matters. The opportunity for catastrophic failure, that influences nations or continents, has been traditionally reserved for royalty, parliament, and others in a position of great leadership.

However in recent times we have developed a profession who have the opportunity to fail like never before. A profession that can make mistakes that are so monumental, so wide-reaching, and so costly they can shake civilization to its very core. This elite group, rarely seen by every day society, are the foundation upon which modern society depends. The few, the proud, the Software Developers.

Join us for a voyage of discovery, as we travel back through history to some of the most monumental failures the world has ever seen. From the O'Reilly Open Source Convention, Portland, OR, July 25, 2008.</comment>


For Gadget Geek in the Oval Office, High Tech Has Its Limits - <AUTHOR> http://www.nytimes.com/2016/01/25/us/politics/for-gadget-geek-in-the-oval-office-high-tech-has-its-limits.html <comment><USER2> As I read about each of the security concerns and the measures taken to address them, I kept thinking: isn't that what Richard Stallman would do?</comment>