My view, FWIW: silly fad. Non-scientific. Just sleep more and get a moderate amount of exercise and you'll probably be right.
 - http://www.gwern.net/Modafinil
If you've got a dollar, and an hour, maybe run through setting it all up , then run lsof -i at the end to understand what's listening on what ports.
Do these tutorials:
And when you are doing web development, use this command to understand exactly what is being passed between client and server (replace port number with the port number that your server is running on).
sudo ngrep -W byline -d lo port 8001
You have progressed to the next rank in your journey when you understand in detail what a request (typically from a browser) looks like and how it is structured, and what a response (from a web server) looks like and how it is structured.
BROWSER -> NGINX (80) -> PHP-FastCGI (3000) -> NGINX -> BROWSER
NGINX can also proxy on sockets
BROWSER -> NGINX (80) -> PHP-FastCGI (/usr/socks/php.socks) -> NGINX -> BROWSER
CGI just defines the interface, and the language would be implementing the interface.
The short answer is that it depends on how you set up your webserver. Different languages have different defaults, and of course you can override the defaults and set them up entirely differently.
A typical PHP installation runs as an Apache module. In this setup, the Apache server listens for HTTP requests and looks at their request path and virtual host. When it finds one that matches a PHP rule (defined in your Apache configuration), it starts the PHP interpreter, setting variables like $_GET and $_POST from the request data. On very old PHP installations, it then uses the path to locate the PHP script, parses it, and executes it. In newer (post-~2005) installations, the server caches the compiled PHP script in memory and executes it again on subsequent requests, without having to hit disk to read the file contents.
A Rails or Django deployment circa 2007 would use Nginx or Lighttpd as the webserver, and then communicate with a separate application server over FastCGI or SCGI. The latter are simple binary protocols that are designed solely to communicate between webserver and appserver; they basically include the information in the HTTP request, but in a parsed, compact format that's fast to decode. The application server would then decode the request and pass it to a web framework to execute, returning an HTML response that is forwarded on by the webserver.
Why split the webserver from the appserver? Because running your application's code is typically slow and memory-intensive; it's usually CPU-constrained. Serving static files and parsing HTTP, meanwhile, is typically fast, cheap, and bandwidth constrained. If you connect the app server directly to the Internet, your memory-hogging application will sit idle much of the time while pushing bytes out to a browser on dialup or a cell network. Splitting the servers lets you scale them independently; typically, you need just a few frontend load balancers to serve many app servers. It also gives you fault tolerance, since if an app server crashes, the load balancer can retry the request with a different one.
WSGI and Rack are HTTP interface specifications for Python and Ruby, respectively. Basically, all your Python/Ruby code needs to run inside a server somewhere, which talks some network protocol. A number of different web frameworks have cropped up to make programming webapps easier - things like Django, Pylons, and Flask for Python and Rails or Merb in Ruby - and these frameworks typically optimize for ease of programming. Similarly, a number of different appservers have cropped up - gunicorn and uwsgi for Python, unicorn and Mongrel and Thin for Ruby, Phusion Passenger for both - and these typically optimize for speed. A common gateway interface lets you mix and match between them. The reason why you need a different one for each language is that the app server and the webapp framework are typically hosted in the same process, communicating in-memory, and different languages have different memory representations. You don't always, however - uWSGI, for example, is written in C and can be used with Python, Perl, or Ruby.
Around 2010, people realized that HTTP was a perfectly valid transport protocol, and started to use it in place of FastCGI and SCGI. Now virtually all deployments use nginx talking http to one or more appservers that run the actual webapp code.
So to a first approximation, when your HTTP request hits a server, it makes a TCP connection to port 80 on an nginx instance somewhere. nginx parses the request (which looks something like "GET /myapp/index.php HTTP/1.1\n\n...headers..." - HTTP is just a text protocol), looks in its configuration file, and matches /myapp/*.php against the rule for some app (pretend it's actually a Python/Django app running on the same physical server for illustration). It then makes an HTTP request to localhost:3000 on the server to talk to the app server. On port 3000, you have uWSGI running, which again parses the request, populates a Python dictionary, and invokes the callable given in the uwsgi config file. That callable will typically be Django's entry point, where Django consults its root urlconf and routes the request to your application code.
I am a fresh college graduate. The job posting seemed appropriate for someone like me in my current situation (and was the only one in any whoishiring thread I felt was a great fit and not merely a good fit). I did a six-month internship in the same domain, using many of the same technologies as requested for the job. A perfect fit and the obvious next step, I thought. I would be doing what I had already measurably succeeded at, while also being able to use some of my public speaking experience I gained in school to present the modeled data I would be working on. I submit the application, noting all of this. I hear nothing back. A week later, I follow up with the email listed in the post. Still nothing back. I simply assumed they filled the position, however...
I see them post again the subsequent month in the whoishiring thread, still hiring. I do not get it.
An employee from the company saw my post and reached out. Really enjoying the job so far.
I didn't try posting in "who wants to be hired."
I'd really love to have a C implementation of distributed SVD computation for large matrices.
With accounts that are a 1-off and I don't really care about, I don't go through the trouble and just use a short password I can remember.
Something interesting I have found is that some sites will allow me to use a 64 character password when I create the account, but error out and won't allow me to login. If I shorten the password, it works fine.
Later this year I am considering transitioning every single account to its own email address on my domain as well. But I recognize that's a tad paranoid. Perhaps only the most valuable accounts.
I recommend 1Password. I don't think there has ever been a major security breach with 1Password, and when I reported a minor cryptographic flaw they were very quick to respond to me and plan a fix for it, despite the threat model being relatively small.
I'm sure there are many who have done it with no problems, but be assured that the legal complications COULD BE real.
I've this too. When I learn something new like a language I often want to do it right, like be "pythonic" when learning Python. It can take long for me to write some simple piece of code because I'm constantly doubting if my code is pythonic. And when it takes to long I lose focus and I stop.
The same thing applies when I started a little Go web app, Go was rather new for me. I decided to use Docker and wanted to have a perfect solution with 3 containers(Nginx as reverse proxy , web app and API), auto rebuild and autoreload in developement mode etc. Than I started with writing in Go and everyone had to be tested perfectly, so I was looking for how to test things and how to run tests automatically after saving a file.
These things slowed me down to a point I where stopped. What did I want? I wanted to learn Go. What did I achieve? I learned how to create have production setup for a web app and api in Docker, I learned something about test suites in Go and I was frustrated because another learning project failed.
My advice, just start your project. You can't do it perfect because you want to learn it!
For example, if the skill you want to learn is mountain climbing it's useful to read a few books before you climb a mountain - but what you get from a book is information to think about, not the skill to actually go out and do it. You learn mountain climbing by practising climbing mountains over and over again (preferably with a mentor). Every skill is like that - if you want to be good at it, keep doing it.
One more thing: If you really enjoy something you'll enjoy the process of getting better more than the end result, so if you don't enjoy it while you're rubbish at it you won't enjoy it when you're good at it either. Don't struggle with learning something hoping that you'll love it later. You probably won't.
I guess what it boils down to is that a lot of my self esteem is derived from being knowledgable and resourceful. It really embarrasses me when I don't even have a shallow depth of knowledge about a subject matter that could be potentially useful.
I don't really have much advice for you because I haven't really solved this one for myself, but one thing I try to do is concentrate on very short term goals. For example, when I was learning Angular a few years ago, I knew going into it that I wouldn't "get it" right away. After a few frustrating days I decided to break-up my learning into small goals, e.g. "what are promises and how do they work?" "What is the syntax?" "When should they be used?" I tried to avoid unrelated documentation and stack overflow posts because I knew that it would lead me into rabbit-hole after rabbit-hole. I wasn't 100% successful, but it did help me block out some of the cognitive dissonance.
The only other thing I'd say is that even though this is frustrating, I like to think that your anxiety is actually a good thing if you learn to channel it constructively. It's a good thing to want to know about a lot of stuff!
I should start following this advice myself.
I can read considerably faster than you can speak. Please just give me written materials.
I think for IT breadth-first is better at the beggining, but you can stay half-competent for too long if you never bother to look up the detais that weren't needed so far (my main problem).
When studying more general subjects it's not always easy to come up with a fun project and the books are usually not structured in a way that this techniques works. In those cases I try to find a good course online with a lot of reading material or a recommended course book because just watching videos and doing exercises is usually not enough to really learn the subject for me.
It might not be as efficient as reading the chapter all at once but I think you'll feel like you're making continual progress by tackling the practice problems sooner.
As someone who has an extremely low attention span I've found that continual progress is the key to sticking with something. This is also why I try to only learn one thing at a time since you progress much faster than trying to learn multiple things at once.
If it is really severe, consider being evaluated for adult ADD. I probably have this in mild form and also what might be considered the opposite, obsessive compulsive personality disorder, which results in me veering between wanting to understand _everything_ and working obsessively on _one_ thing trying to get it textbook-perfect and understand it completely. This combination often intersects well with the requirements for my work but sometimes... not so much, as I either insist on solving a problem better that is already working well enough, or considering a whole range of possible approaches when I really just need to complete one, and quickly.
I've found that when I meditate for even just a few minutes a day, I'm much more focused and less distracted -- more focused on what I'm presently doing, right now.
When I was 18 a tutor - who I didn't really know well - said to me in passing, and seemingly pretty randomly, "Your problem is that you want to run before you can walk with everything."
I had an epiphany over that and slowed down my "gets" for small, insignificant objectives and spent the time trying to really understand things.
From that point on I actually learned how to program properly rather than just doing enough to get by, for example.
As I've gotten older I've learned that my chasing the "gets" was a self-imposed restriction because there was always a small but sufficient reward for the accumulating of praise, etc. I've taught myself to very stringently prioritise (recent book suggestion: Procrastinate on Purpose) and categorise the things I "have to" do and instead of doing a hundred things that don't really matter (but they were easy and I get a "thanks") I work out which things I "have to" do will actually add value and make a difference, even if achieving them will take much more effort.
As my career has developed I've moved into being a specialist and now find myself coming back out into being a generalist but the "real" grounding in my skills sets me apart from "career generalists" and "credential whores" that my industry is plagued with nowadays.
EDIT: thinking about it, this "get" behaviour started when I was in junior school. I used to read encyclopaedias for facts and tell people. My parents used to praise me for what I knew, and my friends jokingly called me an "information magnet". I liked my cursory knowledge of "everything" and I guess I became addicted to it.
There is still much I don't understand at this point. This is natural since I haven't had an opportunity to apply the information to a personally meaningful context. This is the point at which I begin the practical phase. As most of what I need to know is documented in my notes, I will keep it on hand as a memory queue as I engage with specific questions or problems that interest me. And so when an issue comes up that I can't settle, I refer to the notes and also search around online to find out how I should apply the content in that particular problem situation. It's over the course of this process that I internalize the most vital details. That's where the learning happens, at least for me.
Another advantage to this approach is that you will have a type of mnemonic device to reboot your knowledge. As most people forget practically everything shortly after moving on to new subjects, it's critical to have a way to index the information you don't want to forget in the future. Something along the lines of a "memex" (or external memory system) is a good metaphor for what I'm talking about.
How I come to give this advice here is that years ago, a participant here on HN described how his programming career struggled until he got medical treatment for adult ADD. Now he can learn more effectively on the job, and he makes a lot more money with a much more stable employment history. You owe it yourself and to anyone else who has helped you develop as much as you have so far to check your attention regulation so that you can be as healthy and happy as possible.
It's pretty short but covers some good strategies for learning that are backed up by current Neurobiology research.
That's the core obstacle these days to picking up new skills and knowledge.
Mastery of any subject-matter ALWAYS takes practice and repetition. Simple, but those things require sustained repeated investments of your time and attention.
Especially with learning a Lisp language, you can be really frustrated by having to read so much before you can actually create something.
But slowly and surely I'm learning. I just re-read the chapter(s) I don't understand over and over again.
So my advice is don't try to skim over a whole book. Try reading as slow as possible, and if you don't understand something, take a break and then get back to that same shit once more. And of course, write some code as soon as possible.
The practice is important. I plow through books too but you need a project to become proficient. I bought a laptop and started working on some small scala projects on my laptop and reading books. That was enough to let me submit some janky scala for an interview and land a job as a scala engineer.
Some material is harder to learn, some of it is easy. I think it's better to defer reading books for a bit and get some familiarity with the basics so you have a point of reference while reading. The other day I was assigned a pretty big feature with a piece of the domain I wasn't too familiar with. I spent a few days writing a parser to get closer to the spec before starting to work on design docs etc. Having the familiarity then allows me to make sense of the research and existing design documentation so I think having a point of reference is a really important part of the reading/learning. If it's too far away from my current experience, I can't draw new pathways so it just falls out of my head. If I have that basic seed, I can grow some new pathways and expand my position with reading etc.
Ultimately, I think the best way to learn is to actually present the information again to other people. This is the culmination of practice and research together. To write a detailed article on a topic, you'll have to both write the code and also do a lot of reading. Any gaps in your knowledge you'll identify while you're writing and then it's a simple bit of google-fu to get a really solid level of understanding on a topic as you fill out your article.
Re-implementing things is also a terrific way to expand your knowledge. If you read a pattern book, you'll have some high level understanding of how the patterns fit together. Once you apply the pattern once, though, you'll never forget it and you'll see how it works at a very different level. So couple that with writing an article, etc, and it's a super effective approach to learning.
The fastest way to learn, say, Python, isn't to read a Python book as fast as possible. It's a lot of little steps in the form of "be able to write an if statement without referencing the documentation."
At home, I just try to work on my own projects as much as possible, but I don't have much time every day. It is hard. I exercise (gym) religiously as I find it helps to keep my mind somewhat in check.
Time is my biggest problem really, so this leads to the frustration you have described.
I also like to play challenging games (LoL) - and that is a HUGE time warp... :(
Well, logically, if you've started learning something I'm guessing its because you want to do something with it? So have some patience.
Somewhat expensive, but worth it, I've found.
For point 1 - things should be like Python, not like resolving dependency hell in the 90's. Installation should be a double-click. Errors should not be easy to make, it should be obvious what things do, and error messages should be obvious. The people who design tools don't care about any of this stuff.
For point 2 - honestly, 99% of people - as in, 99 out of 100 people, who pick up a Rust tutorial have programmed literally 4 other languages - they have written working lines of code in 4 other languages. Look at this shit: https://doc.rust-lang.org/book/ open the menu at top-left) - Guessing Game! The Dining Philosophers! "Lets set up a new project. Go to your projects directory. Remember how we had to create our directory structure and a Cargo.toml for hello_world?" in just as many words that your poor audience has to read through you could have said: "semicolons terminate statements; blocks in curly braces; module import is use module::submodule::symbol; comment with // or /* */ which can nest." Look very very closely at my two strings in this paragraph: they contain literally just as many characters.
You could start by summarizing go in a sentence and get people going, not trace it back to the ENIAC. I hate this GOBS and GOBS of time people assume we have.
And back to point 1, tool writers assume we have like infinite time to follow 27-point directions that could be 100% automated. And tutorial writers assume we have infinite time to read all about the history of the world. I have to watch YouTube videos at 2x speed so that they're sounding like they're rapping, just so I can get to all the stuff I don't need.
Get to the point, people. Not everyone has a picnic following directions that shouldn't even exist.
If I'm just cruising through things at my own pace, it's all good.
Learning itself is pleasant. I think we're wire to enjoy it. If you had a judo lesson now and learned a simple trip, you would have fun. Give most people their first programming lesson and they'll enjoy jumbling up letters or whatever you do.
Not knowing is unpleasant. In your first lesson you have no expectation. In the second, you double your knowledge. On the 20th, you are dealing with forgetting and you've accumulated bits you find difficult. You are still a beginner, but now you have expectations.
You can trip or throw a cooperative opponent but you keep repeating mistakes, frustration. There is still a gulf between where you are and scoring on an uncooperative opponent. You can jumble words, add numbers or record form data in your db. But, the gulf between doing that and writing your spaced learning iWatch app is big. Basically, you suck and you are judging your performance by the standards of a programmer, judo player or whatnot. Sucking.. sucks.
I'm about 5 weeks into learning a language and I'm in this spot right now. week one was really fun. Every lesson meaningfully improved my vocal, grammar, etc. I know about 1200 words and a decent amount of the basic grammar. You need about 2500 words before you can understand a simple paragraph or video snippet. I'm nearly useless outside of the context f a lesson translating single sentences. I can't think in the language (I translate) which means (A) it's difficult and frustrating and (B) I might understand your first sentence as you wrap up your thirdeven if I know all the words. None of the gammer is natural to me. etc. etc.
Basically, there's a massive gap between where I am and where it felt like I would now after the first lesson. Massive. Even if I conjure up discipline I didn't need in week 1 and push hard this week, I'll still suck. My vocal might go up to 1500, but I'll regress on something. It's whack-a-mole time where revision is 75% of the work and 50 new words is a drop in the ocean.
Thinking of it, I realize I might have taken the wrong side of the debate. Learnings sucks. I hate it.
But, for the sake of it I'll keep arguing this point. This expectation/reality gap is as irrational as it is inevitable. You know it how long it will to learn things in advance. I know I can't get fluent in a language in 25 hours of practice, but it does create frustration.
Since I'm not going with the "learning sucks, I hate it" conclusion, lets wrap up with stoicism. Good as any, ne? Do thy duty though the the skies fall down upon thee. Seek not vain pleasures of the moment. Rather, take comfort each day knowing that thou hath done thy work. Focusing on your goals to much can make learning emotionally hard (frustrating, etc.), unless your goal can be achieved very quick. If your goal requires 100 hours over 2 months, when you are 46 hours deep, you feel like you aren't making any progress. You are probably wrong, but it doesn't feel like it. Don't focus on the end goal, just do your 2 hours and pat yourself on the head. Good stoic. Nice stoic. Here's a Senecan biscuit. Well done.
BigQuery is the best interface for it. Can resolve queries on the entire dataset in less than a few seconds (however, you only get 1TB processing free per month. Since the full dataset is ~285GB, you only get 4 queries per month. Plan ahead on the May 2015 dataset, which is only 8GB.)
I can answer any other questions that people have.
The most downvoted comment is ironically in iAMA, by a mod of iAMA (ironic because of the recent drama).
I'd find the top ten most upvoted, but I ran out of free bandwidth on BigQuery :(.
Relationship between Reddit Comment Score and Comment Length for 1.66 Billion Comments  and the Github repo . Reddit cliques N2 - deeper into the subs 
 - https://www.reddit.com/r/dataisbeautiful/comments/3cjyvb/rel...
 - https://github.com/minimaxir/reddit-comment-length
 - https://www.reddit.com/r/dataisbeautiful/comments/3cofju/red...
I have the program running on Amazon EC2 right now converting the whole dataset. I plan to upload the database to the Internet Archive when it completes.
Anyone have a recent link on Reddit's infrastructure? Given the small size I would think it easily fits in memory so I'm a bit curious how they handle it.
EDIT: regardless, does anyone know if similar datasets with spam?
I.e. the frequency of comments of a certain nature, typical karma scores for those comments, breakdown by subreddit etc.
I get this screen
Welcome to BigQuery!What is BigQuery?
but it doesn't show the data.
tspike mentioned a QA engine which would be awesome, what else can people think of?
I'm going to assume the following is true about you:
1. You can translate someone's desires for a product into a software spec.
2. You can translate a spec into a real, working piece of software by programming it using your favorite languages and tech stack.
3. You can do the above in a reasonable amount of time, reliably and consistently, and follow a project deadline with milestones without too much supervision.
4. Your friend is asking for this because he wants to market it as part of a product or service.
Great! If you want to be fair to him and give him "mate's rates" then charge him $2000 per week.
Why $2000 per week? Here is the logical progression:
1. You have the aforementioned, assumed skills (which I am deducing from you being a developer of 3 - 4 years) that make you very valuable.
2. Your floor for making an iOS app for a client would be $5000 per week. Why? Because it's mostly arbitrary and it's what the market would pay, and I assure you the market would bear someone of your skills being paid this much money.
3. $2000 per week is a vastly discounted rate from the $5000 figure quoted above, which is appropriate for friends. Note that this is appropriate for friends working together as business partners, not for something so insignificant that a friend is doing it pro bono. That you want to be paid at all indicates this situation is not the latter.
When I do technical consulting I always bill weekly. I fundamentally disagree with billing hourly for a variety of reasons, so I think you're right that you should not be billing hourly.
If you don't want to bill weekly you can set an entire project fee. In that case, I would take the above amount and multiply it by the number of weeks you anticipate working.
What I would emphasize to you is that pricing is basically arbitrary. You simply charge the highest amount the market will bear. If this project is worth doing and "serious" enough to warrant you being paid, you might as well be paid generously, even if it is very discounted for a friend.
I then took a pay cut to get a job as a tech support guy at a tiny local internet provider. Over the next couple of years the company merged with a bunch of other small ISPs and I found myself given more responsibility. Not liking all the paperwork this involved I wrote some web based tools in perl to make my life easier. This was noticed, as was the fact that I was cheaper than a "real" programmer, and when they wanted to expand the dev team I was given the job. Now, after more than a dozen years and quite a few different organizations I'm a team lead on a pretty large and successful system.
I guess the point of the story is to build stuff, especially stuff useful to you right now, and don't be afraid to take risks.
I honestly don't mean any of that to be mocking. I am just saying, a lot of people fail because of distractions from their primary goal. So now you have to ask yourself, what are you willing to give up? Are you willing to block out all of those distractions so you can start to learn a new skill? Only you can decide that and only you can make yourself fail if you don't.
Next, start building something. Honestly, you don't need to understand math at some high level to build great software applications. Go pick something and build it. Look at Jennifer Dewalt (http://blog.jenniferdewalt.com/). She set out to make one website per day for 180 days and blog about it. Imagine the amount of dedication to complete such a task. And look at how much she learned in that time! Just pick things are build them. Learn. Grow. Start right now.
Being a dev involves a lot more than just coding; communication, organization, teamwork, etc. all go into development. These are skills that are harder to pick up from the internet than coding. It is for these reasons that I would recommend that you consider going to school as a good way to start your career. School is a clear cut path in a situation like yours where you are going from basically no experience to starting a career.
School is not the only way, but I personally would bet on it as the better outcome. Do not let math be a deterrent. You can learn it. Check out Barbara Oakley's book A Mind for Numbers and read Lockhart's Lament. It does not have to be an impediment. Finally, as you mentioned there are a lot of resources online. MIT Open courseware has a lot of awesome resources, especially the intro to programming with Python. Coursera is also obviously awesome. But if this career were as easy as spend 6 months or a year studying and come out making $100K then everyone would be doing it. You need a more realistic plan.
So you have a general direction: software development. Now make some short-term and long-term plans about how to lead a good life and do what you're interested in along the way.
Luckily, there are tons of great resources out there to learn to make whatever you want. Don't be overwhelmed by what's out there. Although HN is a fantastic place to keep up with what's going on, it's very easy to get caught up in the noise.
Learning to write software is like learning to do anything else. All it requires is practice. I was fortunate that I went through a university and it opened my eyes to a lot of theoretical things, but I am where I am today because I spent a lot of time outside of university learning things that were more practical.
I can point you to a few resources to get started (there are plenty more that people here can recommend!)
Generic Programming: https://www.codecademy.com/en/tracks/pythonhttp://openbookproject.net/thinkcs/python/english3e/
Web: Ruby on Rails - https://www.railstutorial.org/bookRailscasts - http://railscasts.com
At the end of the day it depends on what you're interested in and what you want to make. I find that when I want to learn something new I try to remake what someone else has already made. That way I'm thinking less about the idea and more about how that software should be constructed.
I think the thing that got me where I am now within a reasonably time period is picking a type of technology (in my case, it was learning iOS and Git well enough) I wanted to work with, then stick to that until you become employed while attending every hackathon and relevant meetup, time permitting. You'll need projects that demonstrate your aptitude and ability.
If you or anyone else is interested, my story is actually on Codecademy: https://www.codecademy.com/stories/155-from-lawyer-to-ios-de..., and I've even written a book about the transition: http://quitlawandcode.com/
You're going to do fine. I know it seems like such a binary and insurmountable transition, but the more hours and practice you have, the more OOP and other concepts will just click for you. Also, you're not too late! I started at learning at 30.
FYI: I'm terrible at math, though I love learning, and would like to re-visit it when I have some more time (probably when I have high school aged kids).
I find myself enjoying coding more and more each day and IT support less and less. But I "know" IT territory very well. From IT managers, to day in day out, to projects one cam expect. I live and breathe it. I feel out of my depths even applying or building a resume for a development job and have a family to support. What's the safest and best way to get my bearings and jump into a dev job?
Work is supportive of my advancement in coding, but its leveraged as a cheap way to automate processes.
Figure out what you want to learn/build, and just start. When you hit seemingly insurmountable roadblocks, just take 20mins away from the computer and come back. Stick with it, have a long run view rather than a short run view.
Best of luck. You can do it!
Once you've exhausted the features you can add to a music app, you can execute any idea that you come up with that utilizes the Internet, sharing, etc. You won't necessarily become a master of 4D printing, but any theory you have about anything you can test and create a physical representation of on the Internet.Don't rush building it for the sake of finishing. Learn and understand what you are doing and your next project will have the potential of promis. I spent 3-4 months working on a website that I knew had no chance of becoming anything. However, I just kept smashing my head against the wall and making it better while slowly but surely improving my skillset to the point where new things now come easily, because I understand the philosophy.Now that I have moved on from that initial music website I can now pursue much more innovative and intellecutually stimulating projects (which I wouldn't have been able to do had I not spent so much time on a project that I knew had no chance of success). Give yourself a throw away project, commit yourself to it, and use it as training for the next one. If you truly commit yourself, you should be able to build pretty much anything you see on the Internet 1 year from now. That is not a guarantee! But you have plenty of time and there no reason not to believe that you cannot.
I.e. I know a load of libraries and built a fair deal myself, including a orm and a crud framework from ground up, and I know many of the pitfalls (I fell for many of them but I was young and foolish) however I also learned the why stuff grlets built a certain way and now it's ten time easier to pick up new things (yeah ember does this and that because it solves the problem x in a way I already saw done here and there, which is better than this other way under these conditions)
Another example I've been around to see the latency/bandwidth problem arise so many times it's not even funny anymore. and each generation solve it's time solution (initially it was the terminal because bandwith was the problem, then the thick client because latency, then it was again dumb data screen within browser, then ajax become viable so code moved back to the browser, last framework are so bloated latency is an issue again and they are moving templates back server side once more)
Learn enough new thing about solving the problem yourself, and basically you'll know every class of library that tries to solve that specific domain. Then you are free to learn higher level stuff. If you start too much high then it's easy to be lost in a flurty as technology shift without understanding the whys.
Figure out what interests you yourself, whether you want to go somewhere or do something, and how you might get there. What's important to you.
If your current job can or does line up with that, great. If not, then start working toward your target and toward a different role at your employer, a different employer, or self-employment.
Have enough cash and/or short-term assets available to operate for at least six months without a job. Maybe longer, depending on what the job market looks like in your area.
As for yourself: diet, exercise, regular sleep and regular meals, and working sane hours. Work on your own mental, social, and physical health. Your finances and your cash flow and your sleep and your meal schedules are all part of this health, too.
Schedule time for yourself. Outside of your job. Both to learn and grow, and for socializing. Seek out folks that will challenge you either at work, at university, at a Maker's event, or outside. Seek out and talk with folks of different backgrounds and interest areas and any of the different genders and of different personal histories and experiences. Learn a new language.
Once you have pondered on these and have your plans underway, then you can start working on the technologies and the tools and the online courses and classes and the rest. If they're applicable, and how you best learn.
While your employer will certainly like the focus on your career, life is more about yourself.
"Working through" means doing exercises and projects. Reading or watching material without applying it doesn't help.
I aim to spend an hour a day on this. It doesn't always happen, but it's a reasonable enough goal that I can find time for it most days. Occasionally, I'll take a full day to study on the weekend.
Some specific recommendations:
books: SICP (https://mitpress.mit.edu/sicp/) K&R The Art of Computer Programming (if you have lots of time) On Lisp (http://www.paulgraham.com/onlisp.html) Learn you a Haskell Types and Programming Languages CLRS The Dragon Book (Compilers, http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811) OCW Courses: 6.172 (High performance engineering) 6.046 (Algorithms)
I've found it's best to pick a topic you know enough about to be motivated to study it, but haven't done serious work in.
You don't really know unless you apply it. I grew up disassembling and competing cracking programs, then I learned c because assembler was too slow for creating things like compilers that I wanted to create.
Then I had to learn c++ in order to create graphic interfaces for my programs.
Then I needed python in order to develop faster... java, objective c, c sharp, they provided me with things that I needed.
Then after years of programming I created a company and felt behind. We were so f*ching slow. We needed something else: we discovered metaprogramming in Lisp. Much better then, things improved.
We modified the CLang compiler in order to do much better than anybody else what we did. We were pretty successful.
But it is not enough. We want to change the world. We want people of the world understanding each other using their own languages. We want to understand DNA and end cancer and aging. We want robots that drive and cook. We want to understand nuclear fusion. We want to improve battery technologies, to remove the salt from sea water cheaply. We want to make inexpensive LED plant growing so we can travel to Mars or Venus.
And all the technology that we have is not enough for solving those problems. When you face those problems you became humble and you met the best people you could ever imagine.
Surrounding yourself with really smart people you will learn in a year what you will in your entire life if you only face trivial problems.
Sounds like you are already doing more to improve than most!
>I'm not learning that much on the job anymore, just adding value to the company.
Do you feel like you are often the smartest person in the room where you currently work? If so, time to move some place where that isn't the case. I find working with people more skilled than myself is the fastest way to improve. Sure, your ego will take a hit, but it is worth it for the self-improvement benefits.
However, short of places like Google, I'm not sure how to go about finding a place with more skilled people. Can't know for sure until you are actually working there.
It's amazing to me when watching others play how they miss cues I can now see. Or how my mind has subconsciously optimized where to aim in a heated firefight depending on the gun I'm using (sometimes sternum, sometimes head - I more notice I'm doing it as opposed to actually doing it).
Plenty of good advice here, but high-speed mind activities should be included in any advice of "staying sharp" (i.e. Battlefield, RTS computer games, iphone brain games I suppose)
(relevant: Starcraft performance factored by age: http://journals.plos.org/plosone/article?id=10.1371/journal....)
- Keep alcohol consumption to a minimum, even a single glass of wine impacts memory formation and recall.
- Get lots of sleep
a) I changed my perspective. In University, learning was broken up into easy to digest semester long chunks. In four months, I would write papers, write exams and receive marks which sort of indicated what I had learned. Since University, I have had to change my expectations, both in terms of chunks of time and in terms of feedback. I try to remind myself that I am learning, but sometimes I just learn in chunks that are almost too small to notice.
b) I keep a journal about what I am learning and what I am working on. This journal tends to be long on opinion. Every few months, I go back and read how far I have come. For me, there is no better way of seeing how far I have come than to read how wrong I used to be. Hacker News helps with this, since there is no shortage of extremely smart people who are willing to tell me that I am wrong.
c) I added hobbies. When I was in University, learning was my job and all of my hobbies and social interactions were built around this. Since University, I have picked up some hobbies. For me, lifting weights and jogging started off as a way to solve a serious health/stress problem and evolved into a bonafide hobby. I may not be learning as much as I was in University, but I can bench press my weight now and run 10km at will. Progress (of any sort) is addictive for me and it forces me to keep finding ways to progress.
d) I got into public speaking. In University, I belonged to a Toastmasters chapter, but after University, I not only joined another chapter, but I started seeking out speaking opportunities. Not only did my public speaking improve, but I have learned an immense amount through speaking in public. The old adage that you never really know something until you can explain it to someone who knows nothing is 100% true.
Right now, my biggest challenge is to incorporate meditation into my day to day routine. I love meditating and I know that it makes me a better, more mindful person, but it is hard for me to incorporate it. My hope is that a little more mindfulness will keep me from obsessing about the big picture (where change is so slow) and keep me in the moment.
Good luck, my friend and if you need anyone to talk to, my email is in my profile.
There are many famous papers out there (search on HN, the topic gets posted frequently). I highly recommend you choose a topic, and just look up the important papers in that topic (google scholar is a great tool for checking citation numbers).
I think that learning a lot can hurt the overall effort, Focus on one or two things at a time and use them to do stuff. Try and get to the 'know what you don't know' stage for each thing, even if you cant do something at the moment knowing what steps you should take to get there is a good feeling.
The problem is, you cannot grow if you do not push yourself to the next level.
Practising something you already kind of know how to do will mainly optimize speed and avoiding mistakes and will let you plateau slightly above your current level. To really advance at something you have to take on tasks that are out of your comfort zone. You can then reapply the learned skills and concepts back to other areas.
I think you have to actively massage your brain to prevent it from stagnating and freezing the algorithms it applies the most. It think we are blessed to work in a field that is conceptually challenging enough that we can actually observe this. In another area you would just wake up one day saying stuff old people say :D
When I left school and started working I also felt like I wasn't learning, but when I sat down to think about it, I actually was learning a great deal. I just didn't feel like I was learning because I didn't care for anything I was learning.
You will almost certainly learn new things on the job but those things are likely things aligned to your employer's interests and not your own. I think you might want to see what interests/excites you and try to dive into that material instead of learning things that other people think are useful or suggest.
Even in the comments here you can see people recommending learning new frameworks and others recommending classical texts like SICP or even learning functional languages. Clearly each of these groups of people thinks what they are learning is useful or important. On the other hand, they might not think what the other group is learning is very useful. I certainly don't feel very happy learning a new language or framework, but other people don't like learning theory unless they can use it to build something.
I'd also suggest Haskell. compare this: http://www.joelonsoftware.com/articles/LeakyAbstractions.htm... to abstractions from math. mathematicians ensure the abstractions never leak. they make the rules, there is no way out of the game. this kinda points in that direction: http://conal.net/blog/posts/denotational-design-with-type-cl...
I think the most important thing is just keep trying.
As for commercial applications... well software for business is usually dry and boring grunt work. Interesting, innovative, and challenging are, paradoxically, antithetical to commercial software. You want reliable, boring, and simple. Perhaps you need to look for a research position or take a risk and start a venture based on one of your ideas.
I'm intrigued this is here, because when I read the title this was my immediate suggestion.
In my experience there's no better way to learn than working on side projects that explore technologies that you don't already know. Is this what you do?
Writing an app on the same framework/languages as you use at work is also definitely valuable, it'll give you more depth of knowledge that's then directly applicable at work (in fact when starting a new job I recommend doing exactly this) but it won't stretch you much intellectually. To do that you kind of have to force yourself to use completely new stuff.
Or start contributing to meetups, be out there, and get another job that is a step up.
Or try and make a product on your own, even if it is a silly idea, until you launch it. Do it again.
1-1.5 years isn't a plateau don't stress too much, that you want to do more is nearly all you need to climb, there are countless people that don't want anything more
Maybe you're not challenging yourself sufficiently. Try to find something that will be very difficult for you and start to attack it.
You can do so pretty easily via GitHub. Sign up to a few mailing lists, not every important project is on GH.
Consider a daemon you use really often. Familiarize yourself with the code until you master it.
1. Eat food. Eat good, healthy food on a regular schedule. The willpower center of your brain takes a LOT of calories to run, and if you don't fuel it, you'll find yourself paralyzed by laziness. Make sure the calories you ingest are solid ones - protien, fat, sugar. Not HFCS or other forms of fructose, since it messes with your insulin and makes you feel full even when you aren't.
2) If you are male, check your orgasm and pron consumption. For myself, if I've orgasmed in the last three days, I get a kind of empty, grey fuzz feeling that feels a lot like depression. As someone who's fought mild depression, one of the best ways for me has been to regulate my sexuality and orgasm only when I know I don't need to do anything the next day. Track your energy and your sex drive, and see if there's a correlation - I bet the results will speak for themselves.
3) Sleep on a schedule. Caffeine doesn't count. It's painful and it takes willpower and it sucks but that's life. I solved this one by getting married to a woman who keeps a very strict sleep schedule (ymmv :P )
4) Organize your time. Follow pomodoro or a one hour on-one hour off time. If you find yourself "half-working" (sitting at your computer pretending to work but really browsing HN and Reddit). Get up. Go outside. Walking and standing are good for your health and your creativity.
5) Find a friend or partner who energizes you. Someone who you can hang out with and have crazy ideas and good conversation. If you don't have someone like this, start by making acquaintances at a local club or meetup.
6) Rest. Understand that recuperating your strength for a day isn't going to wreck your chances at becoming the next great startup CEO. It's okay to give yourself a break, before you break.
Hope this helps :)
In the depression/anxiety/lethargy space I find it's not time for any major life breakthroughs.
The biggest breakthrough for me is finding the initial half ounce of mojo to begin the space-clearing and space-claiming process... whether washing a single dish, throwing an old piece of clothing, deleting an email I'll never get around to replying to.
Then, doing it again, and again, one damn t-shirt at a time.
Soon the momentum picks up and the clearing happens by itself.
Also, for me generally the only way out is through - I find it starts with acceptance of this moment as it is, so I'm careful to not add my judgments ("This should not be happening", "I fucked up", etc.) to the situation, but instead hold the lethargic/anxious/depressed parts of me in kindness. Not trying to change anything about them.
From that starting place of self-kindness I can take a breath, dust myself off, and begin taking one simple, tiny action not to make anything happen but only to make space for the new and invite it in.
I ask myself often: Which old junk am I ready to let go of to make space for the new? I don't need to know what the new is, just trust life and start throwing away the shitty t-shirts.
Go for a run? If you don't have the energy to run, go for a walk. If you're not going to do anything during the day, might as well enjoy the sun and visit new places.
Living with depression, which causes much of these types of feelings, I've learned not to force anything- as it usually doesn't work. So I just wait for the cycle to move on & am grateful to have energy when I do.
2. I've found I've a strong connection to musical context, i.e., when my ass is dragging, playing tunes I have listened to while doing things I find fun (in my case, careening down mountains on bikes with earbuds in) can give me a good jolt out of a lethargic moment.
3. Redirect the slack. Few time-wasters out there compare with surfing the web. So, if I'm falling down that rabbit-hole, I surf to find things I find motivating and energizing, e.g., reading about the training regimes of athletes I admire, or find youtube clips of them demonstrating significant badassery, or finding training clips I can follow (I've been enjoying Ryan Leech's 30 Day Wheelie Challenge lately.)
4. Take a nap. In the sun if possible.
5. Listen to Car Talk (while eating some proper food, but be careful with liquids that can come back through the nose.)
6. Smile. If you can't do #5, just plaster a big, fake grin on your face. I find it rare my brain doesn't say "hey, we're smiling here, crap we must be happy and energized and I just missed the memo, time to get on that!"
Other than that I can only think that you're not properly motivated. I don't know much about clinical depression so this may be obtuse but let's assume you were being tortured; burned, whipped, fingernail removal, whatever. Would you do everything in your power to get out of that situation? Well right now you're comfortable. There are no pressing matters and you have pretty much whatever you need from day to day. That emotional inertia that was there when you began working on your startup isn't there. There are also no new stimuli to spur you back into motion. So the only thing you can do is rest until your comfort level with your progress drops enough for you to get back into gear. I don't know, there's a very good chance I'm projecting from my own past experiences.
The only solution I've found which works for me every day is to get angry. Angry about what other people have done that I haven't done. Angry about what other people have that I don't have. Angry about not using my talents to the fullest - not seeing what I'm capable of doing. Angry about being told no, I can't. My progress is fueled by rage and my heart will probably pop by age 50 but I will get my work done. I will never allow myself to be comfortable.
Good luck, whatever you do.
After a while I realized that this is not sustainable and I have to do something. I started to focus on weight loss since the results are easily measurable and I felt if I succeed that will give me positive encouragement to improve other parts of my life. Started off with simple changes. Started walking home from work (about 6km) instead of taking the bus every day. During my walks I listened to my favorite tracks or just walked in silence and thought about stuff that I wouldn't normally spend time thinking about. The change in my day to day mood was measurable even after the first week.
After a while I started doing yoga at home following YouTube videos and started meditating regularly. Yoga, besides having positive health effects (flexibility, weight loss) teaches you about being aware of your body and it's needs. I noticed that after a couple of weeks I started eating way healthier and drinking way more water (these days I do at least 3 liters / day) and way less alcohol.
In six months I lost over 26 kilos, which is obviously really nice but what is even better that I feel happier in general and more confident in myself. My life is not revolving around my work anymore. This new found self awareness also had positive effect on my professional life. I'm thinking more clearly, my code quality is better and I solve problems faster than ever.
I know it can be really hard to make yourself do it, esp. when you feel down, but after you are done, you will be asking yourself what were you objecting to in the first place.
If you want to learn more about the link between exercise and brain health read "Brain Rules" by Dr. John Medina or watch his Google talk by the same name:
He also has "Baby Brain Rules" on parenting techniques to help your new baby get a good start (some of the stuff you need to do way before you even get pregnant/decide to have a child).
I generally ascribe to the "show up and do something" philosophy on days like the one you're describing. I tell myself that I can have the rest of the day off guilt free if I just do one task that I've been meaning to get done. For me the biggest challenge to working is starting, so generally once I start working on that one task, I find new energy and will continue working once I finish it.
If this is a regular problem for you, the time to address it is when you're feeling "up" - get exercise, get enough sleep (even if that involves midday naps, and I'm sure many other things that people can suggest).
Then focus on diet and exercise.
Usually when i get lethargic it means something is wrong with my enviroment, nothing new, everything run of the mill and other people have allready down it. In that case- try to automatize it or find out how one could do that .
If you are, stopping feeling guilty because the time is not productive will help a lot.
Don't say there is nothing to be discovered in physics, please you are just making yourself less academic intelligent as you might have sound.
The sad reality of "fundamental" physics is, and has been for decades, that there is really very little that is both doable and worth doing. If somebody were to dump a Genius grant on me today, with the only condition being "work on whatever you want in physics for the next 5 years"... I would feel compelled to give it back. Because I really don't see anything sufficiently promising or interesting in physics that I would be willing to dedicate the next 5 years to it. (All those people you see screaming for more physics funding? What they are really screaming for is their "right" to keep comfortable upper middle class lifestyles, funded by the tax payers, in exchange for nothing of any value.)
Now compare that to what is going on in software. If "new login scripts" is the most interesting thing you can think of, you really need to broaden your horizons. Just look at the last few years of very rapid progress in deep learning. There is nothing comparable going on in physics. Things like thought vectors are giving me vertigo - my old skepticism about the feasibility of general AI has been seriously dented lately. Problems which once looked completely intractable suddenly look easy, and you start wondering how many more surprises are just around the corner, and how many - or rather few - years it might really take to get there.
And the potential? Suppose you managed to write down the ultimate, complete, fully quantized, elegantly unified, simple, concise, true Theory of Everything. There it is, an exquisite formula on a sheet of paper. It summarizes everything we know about physics. Everything around us follows from it. Wonderful. But... what do you do with it? Sure, stare at it, marvel at its ingenuity and the centuries of concerted effort needed to get there... but then what? How long can you stare at a sheet of paper and marvel at the history and elegance of an equation before it gets a little... old?
Now compare what AI, even just the narrow kinds emerging right now, can do, and the potential of true general AI. Now that would - will - obviously change the world.
I was also skeptical of the Airing claim, although after reading about the Murata piezo blower things, they're amazing, whether Airing is able to make a CPAP out of them or not.
Frankly, as an old, fat, CPAP using guy, I'd rather eat mouldy cheese than use a nasal pillow CPAP device. Plus, the Airing thing would have to be strapped to my face anyway; at my Rx pressure it'd blow out of my nose within an hour. The hose on my traditional BiPap turbine machine doesn't bother me at all.
I'd be delighted to have a smaller BiPap machine made out of these Murata things, if it meant a less bulky power supply and a smaller base unit.
The site claims that the device can provide 20 cm HO (which is ~1961 Pa). Apparently some hypothetical normal man breathes at a rate of 6 liters (i.e. 0.006 cubic meters) per minute at rest . If you pump a volume V of fluid across a pressure difference of P, you've done work VP, which is 11.76 Joules per minute or 0.1961 Watts. Keep in mind that this is the work done, not the power consumed, but let's be generous and assume a 100% efficient blower. We'll also assume that no power is harvested during exhalation.
In eight hours, that's 1.56 Watt hours.
Duracell's zinc-air chemistry claims up to 442 Watt hours / kg . That's about 3.5 grams of zinc-air goo per night, ignoring packaging, blower loss, etc.
This seems entirely plausible to me.
Edit: In the interest of precision, I should add that the analysis is accurate for an incompressible flow. Air is definitely compressible, so, if you pump air, more volume is going into the pump than is coming out, and you're heating up the air (adiabatically if your pump is any good). So, with a compressible fluid, you have to consider not on the work done moving the fluid across a pressure difference but also the energy you've stored in the fluid by pressurizing it. The pressure difference for CAP is tiny here, though, so this would be a miniscule correction to the math above.
I'm not sure if this device is plausible, but I know this calculation is not useful. You're calculating the mass of air moved, which, first of all, does not itself say much about the energy required to do so; for instance, horizontal motion doesn't require any net energy (though any real device doing so will of course need to do something to accelerate and decelerate, there's nothing to say it can't be very, very cheap). Second you appear to be discussing it as if there isn't a pair of lungs right there providing motive power. I do that much moving of the air every day (plus a bit, probably, I'm a tall guy) with no batteries at all.
This thing is not responsible for "moving all that air"... it's responsible for a pressure increase of the air, which is at least somewhat equivalent to saying it's responsible for "moving air" but only a fraction of the value you computed. They say it is supposed to do from 1 to 20 "centimeters of water". According to the Great and Mighty Internet, 20 cmH20 is 0.02 atmospheres, just to give some perspective. I do not have the math to calculate the energy requirement that represents when the air is in motion itself; my physics would only be sufficient to calculate the energy implied in pressurizing a closed container from 1 to 1.02 atmospheres, which is useless in this case. Perhaps someone else can pop up for that.
(Bear in mind I took a full standard College physics-for-non-majors course set, using full calculus, and what I know from that is that what I know is inadequate... if that also describes your experience, your education is inadequate too. We're going to need to hear from someone with more specialized education.)
My suspicion is that yes, this device is plausible, but the final version is going to be larger than the versions shown. Whether it crosses over the invisible line where people become unwilling to wear it is anybody's guess, but... sleep apnea sucks and those masks do suck too, so there's some room for these guys to work in. I'd classify this as a "considered risk" rather than "two orders of magnitude impossible". I reserve the right to change this assessment as more data comes in, especially a (good!) physics analysis of the real energy required to do this.
Ha. I work at a company that makes medical devices. It's just so damn easy, you know! Seems like a pretty blunt case of handwaving away this critical step. This is an electric device that controls if you can breath. This thing has a non-trivial risk of hurting someone through electrocution (it's plugged into your conductive mucus) or asphyxiation (though hopefully you'll wake).
So yeah, they'll clearly just POST to the FDA certification API and get a response within a minute.
Also, all physical perks have the disclaimer: "Subject to FDA clearance and doctors prescription in the US and local regulation abroad."
From a financial perspective, I can't imagine getting the device certified in multiple countries is going to be cheap. Would they also be expected to check doctors prescriptions in various languages somehow before delivering?
> what should we do as engineers?
I looked up Stephen A. Marsh (see http://www.fundairing.com/ under 'inventor').
Interesting guy - a strange history. He also is CEO of Encite LLC (also located in Burlington, MA). He does have many patents in fuel cells, etc.
Previous to Encite LLC he was CEO of a now-defunct technology startup Integrated Fuel Cell Technologies, Inc. (IFCTI)
Encite LLC was formed from IFCTI, through some obtuse legal machinations.
I am no expert in law, but it sounds like he basically ran IFCTI into the ground as CEO, then bought it and its resources back at a large discount via Encite LLC. The previous board members tried to sue him but lost due to some ambiguities in the laws.
Maybe someone else has more?
BTW having used a CPAP I know it is not possible to generate the volume and pressure (particularly the pressure) needed by something this size without a quantum leap in current technology.
I can't devise a method to prove and explain my conclusion. Perhaps someone more versed in the area can.
One promising technology is a small pace-maker-like device that is implanted in the chest and stimulates the hypoglossal nerve while you sleep: http://www.medscape.com/viewarticle/834474
When I see something like that my first question is if the doctors involved are real or not.
One of the challenges we have currently is that the medical field is over regulated and there are excessive barriers to entry. Perhaps you can make your peace with the fact that it isn't your money and if people want to hope against hope for something better and pledge a few dollars, that is their choice. Then the developers might get their shot at developing something new. Maybe it won't meet every criteria they listed. Maybe it somehow will. Maybe it will be a complete flop. (Shrug)
Innovation only happens when there is some leeway for some of it to fail. $100k is a drop in the bucket for medical research. Why do you feel such a strong need to not even let them try? I suggest you let it go.
Their constraints do seem very tight but I can conceive at least one way in that you could shrink the device down. There would be multiple actions in such a device:
1. During the inhale increase pressure. As noted by the image this is achieved in the device with "blowers."
2. During the exhale present a restriction to airflow, but don't cut it off entirely. You could use something similar to an aperture to restrict airflow here.
3. Between the exhale and inhale maintain pressure. If you use an aperture-like-device you can simply close the aperture completely.
This means that the device becomes partially passive, reducing power requirements. I'm no expert but let's assume that you are only inhaling 50% of the time - this cuts down the amount of time the "blowers" need to run by 50% (or can double their power consumption or something in-between). My uneducated opinion is therefore: remotely plausible.
Skepticism is certainly warranted based solely on the timeline presented and my experience in medical devices.
As to the rest, you're operating on incomplete information. According to the NSPE, "Engineers may express publicly technical opinions that are founded upon knowledge of the facts and competence in the subject matter." You say, "what should we do as engineers", so I'll make the implicit assumption that you're an unlicensed "software engineer" like many on HN. If so, consider that you may be operating outside your area of expertise without complete knowledge of the device. I would make careful public statements: I, for example, wouldn't say "I performed a first-principles analysis and, as an engineer, I find the device claims are impossible."
Talk about it and spread the word to others that this is impossible to do.
There's also some interesting discussion here, mostly to the tune of "it won't work":
The machine just has to maintain a positive pressure during certain portions of the breathing cycle.
What I see here is a possibly overly-ambitious design, but no obvious scam.
BTW, here is a video of Airing's Chairman: https://vimeo.com/130685879
I also don't think it is 'disposable'. I think it is recyclable and from what I've seen the $3 is dependent on recycling them.
That said, my dollars are staying snugly in my pocket for this campaign. It's pretty farfetched, and I don't like the metric they used to illustrate the actual pushing power. It doesn't add up.
But they are extremely intrusive to sleep, especially if you have a partner. A better CPAP machine is needed. But I won't give them pre-order money, more because I've seen way too many bad crowd-sourcing projects than out of specific concerns towards this project.
For $3 I'll buy it on a whim and try it out. I'd try a larger one that was significantly smaller than a standard CPAP for $20, maybe even $50.
But whether or not the project is legit is kind of beside the point to me right now. Having done a lot of prototyping of my own, in both software and hardware, it bothers me to see people jump directly to crowdfunding before they've even built a hot-glue-and-wires version of a prototype. Prove the concept. It's not that freaking hard.
All they say they've done is built the shell of the noseplug. They haven't any idea how to get the electronics on the inside. Their FAQ page makes it sound like their understanding of cutting edge electronics comes from Popular Mechanics, or Boing Boing.
People act like hardware is so extra-special hard. It's not. It's no more or less difficult than hacking on software in your free time. The actual, core functionality of your project, whether it's hardware or software, should be possible to validate in less than a month. The rest of what it takes to turn any project into a real product will far eclipse the proof-of-concept work in the level of effort necessary. There's no such thing as "if you build it, they will come".
Okay, no, Elon Musk's Hyperloop can't be validated in a month. A brand-new, hyper-secure, microkernel operating system written in Rust wouldn't be, either. I'm not saying all ideas are possible in a month, I'm just saying the stuff people typically do in the given spaces as garage inventors are on the short-scale for validation.
It just takes up a little to a lot more space. But if you're dedicated, most people can find the space. I'm sure a few adults like supposedly involved in this project can rent out a small warehouse on their pocket cash together. I don't even work full-time, I live in one of the worst areas of the country for real estate prices right now, and even I could scrap together the money for a small warehouse, if I had to.
It's going to be hard if you don't have any experience in hardware. Yeah, but even making a simple CRUD app is going to be hard if you don't have any experience in software. We live in a golden age of hardware development. Nearly everyone and their neighbor in the US has a garage full of tools that could bootstrap a small industrial renaissance in a 3rd world country.
Or you don't even have to buy anything, design a flat-pack vector layout in Inkscape, email it to any of the thousands of laser-cutting services in the country, tell them you're fine buying scrap material, wait a couple of days, and you can make anything the size of a breadbox for about $50.
Need more complexity? Make a 3D model in blender, send it off to any of the dozens of (and growing) 3D printing services, wait a couple of days, and you can make anything the size of an old Walkman for about $50. Seriously, don't buy your own 3D printer unless you want to get into the business of maintaining 3D printers. Outsource that malarky.
But come on, if you don't believe in your project enough to put your own time and money into it, how do you expect us to believe in it? (though, I know that isn't really stopping anyone).
On the other hand, it might br hard to convince a lot of people that this isn't real. After all, most of humanity believes some version of supernatural nonsense which includes such things as people flying, resurrecting, partin seas, singing bushes, talking snakes, 6,000 year old earth, rapture, being chosen, paradise, etc. in other words, there's plenty of empirical evidence to show science and reason don't stand a chance. Yet.
First off, if you're going to do layoffs, make sure it's one and done. This means, probably cutting more than you have to so that you don't have to keep making layoffs in 6 months, etc. The quicker you can get back to hiring, the better it will be for morale.
Layoff your lowest performers first. If you don't, then your top performers will leave you, and you will get crippled within less than a year. Don't do something like ask everyone to take a paycut, because it means that your top performers suffer just as much as your low performers. You should get rid of your low performers quickly.
Try to give as generous a severance package that you can. And meet with each of them face-to-face if possible, but with several dozen it's probably impossible.
Make it quick and let them leave with dignity. That means let them say bye to their friends, and making sure that every single question they may have answered. COBRA, unvested options, Unemployment benefits, etc. Personally I wouldn't escort them out or lock their accounts unless you think that they are going to cause problems. Hopefully they won't.
Do all the layoffs before lunch. Have a meeting with the rest of the company after the layoffs, after lunch and explain why you had to do it, and explain your plan to ensure that it doesn't happen again.
Never tell the employees how YOU feel. No one cares.
A common mistake when winding back a company is only pulling it back to break-even. Eg, 'Our revenue forecasts show we can cover 50 salaries, so let's cut back to 50 people.' There are two problems with this - first, if your forecasts are too optimistic, you will be forced to do another round of cuts and the team / clients will start fearing a death spiral. Second, cutting a business back to break even leaves you with no spare cash flow to invest in future growth - you risk stagnating. Better to add an extra 10% to the layoffs now than risk the remainder of the business.
From there, the decision about who to let go is sometimes obvious (you might be dropping a product line, have an underperforming team, or some stand-out low performers). Do what you can to re-deploy your top performers elsewhere within the company - you'll want them, and their advocacy, moving forward. Where it's not obvious, and you can't get guidance from team leaders etc, accept that it's going to be partly a crapshoot where nobody wins.
How you communicate the decision and the reason why is critical. steven2012 has covered this well elsewhere in the thread. Be honest, take responsibility, and be positive for the future you plan to create. Good luck.
Anyways... Half the company met in one place (and they got let go) and half the company stayed.
Do a single cut. The second cut prompted people to lose faith in the company. It didn't matter what the CEO said, most people simply believed that "this was it". Many started to look for other jobs. I believe the first one we called the "bloody Tuesday" and the second one was a "bloody Friday". It became a permanent joke/non-joke that whenever a big meeting was called, people were going to be let go. Or whenever someone talked about "strategy", it meant cutting departments. Not a good thing AT ALL.
Don't be a dick about it. From what I know, the people that got let go got a good severance and references. Both good things.
Make sure the morale stays up. Many of us had issues dealing with it. Productivity dropped, faith in the company, etc. Actually, the worst part was watching higher up people stay and not be affected, and slack off on top of it.
Nothing worse than seeing someone who makes 6 figures play Mario Kart in the break room for the whole day a few weeks after all this happened.
What DID help was that us lower folk started playing video games over lunch. It fostered new friendships, and helped us get productive again. But that got cut as well after people complained (to this day, I don't get it).
If you can't do that, honestly, it's all just empty words and bullsht in my opinion. Someone screwed a lot of people by over hiring and mismanagement. Hope whoever was responsible for that is first to go.
1 - When you have the announcement, be clear about the reasons for it. ("The market moved", "We didn't hit our revenue plan." or "Mgmt f*cked up.")
2 - Highlight the severity of the situation. ("If we don't do this, we have 3 months of runway left, which isn't enough time. If we do this, we have 9 months to get our act in gear.")
3 - Given the constraints of #2, be as generous as possible with severance.
4 - Never ever badmouth anyone who was let go as a result of this.
5 - Be a proactive reference for those let go. Don't just wait for calls - make placement calls for your people.
(Note - 3 through 5 is in part to be humane to those leaving, and in part to rally those left behind.)
6 - If at all possible, only cut once. Cut deeper if you need to just to avoid doing it twice.
7 - Be firm in the meetings. "This isn't about performance, it's about saving the company." It's not a negotiation. Have at least 1 witness in the meeting, ideally an HR person.
Note - all of these things still won't make it any better, just less worse. It's a tough thing to cut off your foot to save your leg. That's what you're doing.
Chances are they already know it is coming, if work is slow and not coming in or the burn rate is high and you have run long on funds then they will be expecting it. Have a very clear plan to explain to those that stay, as to why the ship is righted now and how you plan to survive. Plan to loose at least a few of your best guys, if you loose one, use his/her salary to give the others a raise or you will lose them too.
Also cut the pessimist over the pragmatist or the optimist. In a layoff environment the pessimist will kill your company moral. If you got a guy that is say 15% better than another guy but he is a pessimist and the other guy is an optimist, keep the optimist. That being said, trim dead weight if they are just not skilled let them go not matter their outlook. As others have said, look to trim, trim more than you need.
My second suggestion is to go out of your way to be the best reference these people have ever had. Write letters of rec, tell them to list you personally as a reference (with your cell #), etc. And if you can, use your network to help them find new opportunities.
For those who remain, just try to be as honest as you can. If their jobs are possibly insecure, let them know as well.
Best of luck, I know this is hard.
- Managers should tell their direct reports personally, rather than delegating to someone else like HR. I still remember, unfondly, when one manager didn't want the burden of delivering the bad news and found someone else to do it.
- Give the people who will be laid off as much time as possible to send work emails, talk to colleagues, get taken to lunch, etc. As <steven2012> said, let them leave with dignity. Your employment agreement already prohibits misuse of corporate resources and criminal law prohibits theft of company property; as a general rule there's no need to have a security guard hovering over a desk.
- Write a letter of recommendation if your corporate policy allows and your employee's performance merits it. Give it to them in printed form and PDF. Don't merely offer to do it if they ask.
- As many others have said, do only one round of layoffs. Company morale can survive a single round. It may not survive repeated rounds, with nobody knowing when (and where) the next axe is going to fall.
- Communicate honestly with your remaining employees to the extent policy allows. The best managers will admit it if they don't know something.
Having said that, if I were about to get laid off there are some things that would ease the transition and make it more bearable. First worry is income. If you could guarantee a months severance, that would go a long way. Second is health insurance. If you could have all those resources prefigured out by the time I left, I'd be much happier. Third is promise of future income. If you could have recruiters on standby so that if I could make the choice to begin the job search, it would be great. Lastly, this is sorta extra credit, but experiencing job loss is quite tramatic. You can make counselors / work therapists available to be there in the time of need.
Basically what I'm trying to say, if you are going to let people go, make the only thing they have to worry about is getting over the shock of getting let go. That is unavoidable. But if they know they are being taken care of and empathized with, they'll get over it quickly.
Some transparency into why the decision was made can be make it easier to move on. Generic reassurances that "it's not performance related" are not always helpful, particularly because that's so often bullshit.
It certainly was performance related to the extent that if the person being laid off was doing twice as much good work for half as much money then it's unlikely they'd have been let go. It's a hard thing to talk about, I know, but that's what people want to know when they ask why.
That way the person let go knows whether and how to adjust their performance going forward at their next job so they're more likely to survive that company's inevitable layoffs.
- Start deactivating their accounts a week before giving the news.
- Give 3 days severance pay and act like it's not just them not wanting to figure out how to cut 3 days out of a paycheck.
- Have the manager escort the employee to HR without a word, and then leave and let HR deal with the hard part.
- Tell the employee over email while they're on vacation, and then never bother to have any follow-up in any form.
The best advice I can give as someone on the other side is to:
1. Do it quickly. Tell them right away that they have been made redundant, and that it is non-negotiable. Let them know that it is not of any fault of their own, and that they will be allowed to interview whenever they please. Being made redundant sucks, not just because you're out of a job, but because you often feel that if you were better at your job the company wouldn't have had to make cutbacks.
2. If you make someone redundant during work hours, make sure they leave the office at the end of the day. I've worked in companies where employees were made redundant at around 2-3pm and then asked to return to their desk to carry on work. This was a huge problem for everyone in the office, as that person was still working to a deadline, and was asked by the manager to (paraphrasing) "stop moping, and get on with your work".
3. If you know anyone looking to hire in roles you are making redundant, let that person know that you know someone who would be great at the role, and let that person know that you'll write them a glowing recommendation.
I like Manager-Tools because it is step-by-step and actionable. Does not say "think out of the box" (how?), it gives you exact words that have worked for 1000s of companies.
BTW, performance based layoff list might be a legal issue in some case, for example when the reason is workforce reduction. Without a good lawyer don't go there...
* Put paperwork in place - termination, contracts, final settlement, dues etc etc - get those facts together in writing.
* Have a schedule for each affected employee's "exit" interview. No "send so-and-so in". That can be very stressful for the employee. Instead, set up a calendar invite and talk.
* If any employees are remote, have a video-conference so they can SEE your face.
* Go through the process as quickly as possible - ideally, all announcements within the same day.
* Have a "script" for the interview. This should include the announcement, the reason and the next steps (HR, benefits, payroll, equipment). Don't be needlessly cryptic/dishonest about the reasons behind the firings. Layoffs occur for ONE reason only: finance. So tell your employees the basic facts, but you are not obligated to share ALL the gory details. Simply saying "Our financials are the reason why we are doing this and I am sorry this will impact you and many others" is good enough.
* Be patient during the interviews. Don't rush it. Every laid-off employee thinks this has to do with them personally, when it's not. So take your time to explain, sympathize, offer help and guidance.
* Don't forget to reach out to the non-affected employees after the process. They too are running scared and deserve compassion.
I also personally reached out to all affected employees a few weeks after the layoffs to see how they were doing. Nearly ALL of them had jobs, which was awesome. This may or may not work in every scenario, so YMMV.
The first start up I worked at, had a pretty tough rounds of layoffs. One of the engineers found a home at a startup that was backed by the same VC. Eventually as the first startup went under, he laid the ground work for some of us to transition over to his dev team.
I've never been laid off from a real job, just from a temp one where the owner was a jerk. Few things I can think of:1) Try, with you best efforts, to help the folks you lay off to get other jobs. Recommend & refer them to those you see relevant. Make sure they get advice from their direct boss about what the should/better/could do next, and try to get your company waling their hand thro.
2) Clarify the situation quickly. People hate to get these news but rumors running around are much worse.
3) Some managers afraid try to detach their compassion to cut this awful mission fast. This is not the time to pull the authoritative boss too much. You're already sending them, try to show warmth.
4) Keep in touch with the best employees you have to let go. Try to hire some of the in the future if you can. If will be a great closure.
5) Can you send them away with something?A course to develop their skills towards the next job? a gift? few meetings with career coach for each laid off employee? (you can but that at bulk)
Best of luck!
- http://www.lhh.com/career-transition/career-transition.aspx- http://www.risesmart.com/outplacement
We all went out for beers afterwards and discussed it.
I suggest you get the CEO to mention there will likely be cutbacks, that way its not out of left field.
Otherwise, just be honest. Bring them all into a room, be short and don't beat around the bush. The last thing people want is a bunch of bullshit. Watch "Up In The Air" -- its pretty sad how this effects people.
Give them the rest of the day to collect their things....a few days to clean up their laptops before turning them in.
What size company is this?
I've been through a 'silent layoff' at a startup, wherein most of the staff just stopped getting paid. We were funded by PE; the leadup to the separation was several weeks of accusations back and forth re: lying about available funds vs. mismanagement of granted funds. The company offered no severance and fought my unemployment claim. I was kind of relieved when it was over, but I would not recommend handling it this way unless you just don't care; it's been years but I still basically hate everyone involved.
I've since survived 3-4 rounds of layoffs where I'm working now. We've had it most of the ways you can have it: mass meeting, one on one w/ HR rep, nominated out-of-dept managers shepherding individuals out of the building, rent-a-cops in the office, etc. In all but one case, the departing employees were given a couple of paychecks severance + placement assistance and IIRC in at least one case remaining employees were offered grief counseling.
I don't think I could ever enjoy being laid off, but IMO the right way in a multi-person separation is to have one meeting with everyone, be honest about what's going on, and give them whatever you can to soften the blow. Unless there's a good chance your funding situation is about to improve, this means you should do it a little earlier than you think you need to so that last x days/weeks of salary can be severance instead; IMO people are not going to be significantly happier about being laid off if it happens 2 weeks later. If you've got contacts at other places and you can give references or help place, do that. You probably don't need police to escort people out, but you should get the departing employees out of the building w/ relevant credentials and badges revoked asap. Don't let people mill around, it exposes you and gives them more opportunity to vent in ways both of you will regret; I've seen where people were let go, then went and deleted things from file servers or otherwise destroyed property prior to leaving the building.
Do it as soon as you can. If you know now, tell them now. Every day you don't tell them is a day they're potentially missing out on another job.
For yourself, try and keep some perspective. Things happen. Life moves on. People recover.
Source: I had to tell 22 people that the company we were running had just gone in to administration and today was the last day. We only found out ourselves the day before when our "accountant" (grrr... anger still remains towards that one) revealed herself to be less than competent. It was horrible, but me and my colleagues just sat them down and laid it out straight and said we'd do whatever we could to help, and that was that.
Either be visibly available or take part in the layoffs.
In the layoffa, be fair, transparent and clear - but follow the protocol. Don't beat around the bush, your (and your managers') first sentence should be "We're very sorry, but we will let you go." Instilling hope or doubt where there is none is unfair, don't do it by accident.
Reiterated because it's so important: nobody cares about your feelings that day. You can't make it better. Don't make it worse and be a real grown-up.
-Getting a month's severance pay. Personally I wish I had gotten more, but it greater than zero so I couldn't complain all that much(sorta, I wouldn't have been happy if it was just a few hundred or so).
-Getting a month's worth of health coverage. My internal doomsday clock started ticking for getting a new job, and having that health insurance gave me some comfort knowing I wasn't going to be completely screwed if I were to be slammed by a hauling truck the moment I left the parking lot.
-Being reassured it wasn't for performance reasons, especially since I had just gotten a poor review several months prior(the severance contract specifically stated this, and said I was eligible for re-hire). I wanted to leave, and I'd never reapply anyway, but it was nice to do so on good terms.
-Getting an offer for a reference during the transition. My sorta-boss said I could use him as a reference before I even asked, I didn't need it but I really appreciated it.
-Getting some time to talk with now-former-coworkers, rather than being whisked out of the building. I was annoyed that my PC access was immediately disabled and my keycard disabled(let me take my stuff to the car, I need multiple trips, wtf), but getting closure with people(along with emails) more than made up for it.
The one thing they did that pissed me off was that they did it on a Monday morning at 10AM after I had spent the whole weekend pulling overtime for them to finish up a major project deadline that was due 5PM that day. It felt like a huge slap in the face to put on your A-game for the day, only to be dropped after sacrificing personal time for the company. Despite all the rosy things I said, I'm still bitter about that.
It sucks to be in this position and I wish you, and those who'll be laid off, the best of luck.
I would advise telling everyone remaining you are "over cutting" so they know that another cut is not coming in the next couple of months if things don't turn out the way you hoped. Other than don't be an asshole and provide as much support for those cut as possible and don't use weasel words like "right sized" or "let go".
Is the need for lay-off simply related to revenue or are you eliminating a whole category of work (e.g. outsourcing)?
Being told that 'we just don't do that work any more' is perhaps less disruptive to other parts of the organisation.
A cut for revenue reasons will obviously raise issues about the competence of management and so your high-fliers will be arranging to leave.
By virtue of being the best, these are the employees who would most easily be able to find work elsewhere, and they're the smartest employees who will not just shrug and carry on as before when they see their fellows being made redundant around them. They will think about what it means for the company (and thus their future). They will see what's happened and think about moving on. Maybe not right away, but they'll be thinking about it, and your best employees are (by definition) the ones who other companies most want.
You asked us to note where we speak from personal experience. I've seen it happen, and I've done it myself. I watched a round of redundancies come through, and I was told not to worry; I was essential and a good employee. I found another job with a company that was doing better. The company I left found that the people it most wanted to keep drifted away over the following year.
You need a plan to keep these employees.
Also, check the local laws for laying people off for whatever reason you're doing it. You'd hate to have someone come back with a legal claim in a year. I've seen that happen too.
Just make clear to people who are being laid off the reason.
Essentially people will feel a bit happier knowing that it wasn't them who screwed up.
I have fired people recently and wished I had read that blog post first!
You just might, and you'll lose all credibility with your employees.
Let them know at least a month in advance, leaving them much needed time to adapt to their new financial situation.
My advice is first, realize you're not going to be popular. Treat people with dignity but don't worry too much about how they will take it. They're going to take it poorly. They're going to be upset. If some of your employees aren't, then that's a bonus. With this in mind, don't let your process or productivity become unnecessarily disrupted and be very careful in making concessions.
With this many people, do it all at once. Don't make people wait in agony for hours or days waiting to see if they'll get called in next. The specifics on how to do that will depend on the structure and size of your company, but do not allow for suspense.
Like others said, treat the employees with dignity and offer a reasonable severance as far as is possible. This isn't about preserving your relationship with them, it's about being a decent human being and making accommodation to ease a large transition like that.
Good luck. Like I said above, don't overthink it or worry about preserving your employees' opinions -- just behave in a manner that seems both reasonable and decent to you and be satisfied with that. Making it fast, moving forward with resolve, and appearing like you know what you're doing will help comfort the remaining employees to whatever extent is possible.
To me it was much harder than firing people - hard by itself - because mass layed off people ask "why me" where I had no good answer.
Keep handkerchiefs around.
email me at email@example.com and I will post what listings I already have for your area, and will find some more. (Presently I have the Portland Oregon area, Seattle and six or eight others actually posted but I have at least a few listings each for hundreds of cities in dozens of countries.)
Ask your local government's employment office for help with outplacement.
Say nice things in their linkedin profiles.
Give them all hardcopy letters if recommendation.
What I will say is, you should consult with an attorney. It is all well and fine to go through life assuming that all people are good, honorable, ethical and even altruistic. Yet, it is even better to believe those things while taking steps towards protecting yourself and your company should you come across someone who deviates from such notions.
Why do I say this? Because I've been burned on more than one occasion by people who see a layoff as an opportunity to enrich themselves. If you don't know how to manage a layoff it is very likely that you will do and say things that will expose you and your company to liability. This is the part that sucks. You have to lawyer-up in order not to create a problem for yourself or your business. There are Federal and State laws you have to be aware of.
Spend a few hundred dollars to sit down with an attorney well versed in matters surrounding labor law and have him/her advise you on how to conduct the layoffs.
I'm not joking, the predictions and discussion of technical progress are very much relevant. It should be required reading. The nearest I can tell, anti-intellectualism and the red scare have robbed multiple generations of a valuable source of vocabulary and context for understanding our current stage of human development.
As for how, exactly, we get past alienation - I don't know.
It's a fun question, but I think it has a straightforward answer.
1. The IPv6 header is already twice as big as the IPv4 header, so the win in shrinking the TCP or UDP headers is extremely marginal.
2. No, the kernel IP handling code would get more complicated; since BSD Unix, the PCB code in the kernel has assumed sessions were organized by port numbers. Meanwhile: the underlying concept of a numeric mapping between applications and instances of protocols on the wire wouldn't go away; you'd just be overloading IP addresses to accomplish it.
3. I agree that the opportunity to encode funny service names in hexadecimal trailing address space is an upside to eliminating ports.
4. Removing ports strictly simplifies network reconnaissance. IPv6 already makes scanning painful, whether or not you have TCP/UDP ports. With IPv6 and TCP ports, you have to do both: identify the live hosts, and then identify the listening ports on that host.
Some architectural downsides:
1. It is often (not always) helpful to distinguish between an entity providing a service and the services they provide. That distinction is lost when everything is an address.
2. Port numbers prevent us from accidentally trying to speak, say, RTP to a line-printer protocol server. Badly coded servers will often crash given random crap, and while that's not dispositive (the priority should be "eliminate badly coded servers), it's a helpful feature of having ports.
3. The network is required to be aware of which end-systems own which addresses. They are not required to be aware of which applications are running on which end-systems. The end-to-end argument says: put the minimum amount of state in the network, leave as much up to the end system as possible.
If you got rid of the port numbers, you wouldn't just need an IP address for each service, you would need one for every outbound connection you make, and this address would need to be announced and stored in routing tables, checked for collisions, etc. Allocating ports is a lot cheaper, since only the endpoints (and stateful NATs/firewalls) need to know about them.
Because SRV records aren't in widespread use (by specification and only consequently implementation). First you would need to stop using the A (or AAAA) record, on all existing protocols. This is a good thing because, comparatively, the A record is pretty stupid. However, it's never going to happen for the same reason that you probably can't set up an SRV record with whoever is hosting your DNS.
Also, ports are a portion of an address that routers can ignore - making them better at what they do. With multiple addresses per host you are going to annihilate routing tables/caches and make the internet slower.
I hope this is the right place >.>
> Some negatives:
The first and the foremost: we would need two totally new protocols in placeof two already well-known, well-functioning and well-tooled ones. Benefits youmentioned are negligible.
If you want to contribute, you can do it on your own time (review your contract first) and/or make the business case to your team and get signoff from the relevant people.
The business case normally isn't too hard: show how your team benefits from the contributions. "Reputation" is hard to manage but recruiting is easy. From a technical perspective, it just takes showing that some of the bugs/features you've handled in the system are easier maintained as part of the core system instead of an internal fork. I've done the same while working for software companies, non-tech companies that used software, and even the US federal government.
Finally, if you're working in software development and getting a "shitty salary" do something else. There are probably a dozen other companies hiring within a mile of where you work right now. Stop blaming others and go after what you want.
That's why all my code is released only under the AGPL3, so that companies do not dare use my work without paying for it.
It might be 'sad' to you, but it's the only reason FOSS has gotten so popular in the last 10 years. When a company gets large enough and depends on it enough, they will hire developers to actually fix and contribute to FOSS. With almost all major projects, this is the case.
"It's really depressing to hear things like this and I feel I'm doing a disservice to the FOSS community for working at shitty companies like this even though I depend on the job to pay my bills."
How is it 'shitty'? FOSS is free. Which means the freedom to use it and not contribute back. It's pretty shitty to put the blame on them for not giving back to the community.
Also, they are paying you to work there.
The major flaw with most of these sites (and especially the "curated X Y Z" versions) are they go out of date or just don't build up a community and wither and die with out of date information. That's the real trick.. not just delivering the information.
A good tutorial might take hours, days or weeks of my time. In that time, I am not engaged with your site.
- HN hasn't annoying ads. (How will you monetise it? Because you must monetise it somehow in the near future and we have already a lot of 'code schools' where people pay a fee to access).
- HN is his community. No community and your site will die. Many clones of HN have already died.
Anyway good luck!
Or we could just post some of our tutorials here! This is an introductory one I wrote covering the basics of HTML, jQuery, and making a ToDo app with my database http://gun.js.org/web/think.html .
The other comment I have, unrelated to the above, is that your repeated reference to "talent" is somewhat of a red flag to me. There is nothing wrong with being confident in your skills, but often the idea of "talent" can be conflated with ideas of "if only I didn't have all these procedures, I could write code SO FAST", the consequences of which are generally the reason those procedures exist today. Personally, there is a very small percentage of developers that I have met over my career that I would call "talented" (< 5%) and they would certainly never say it about themselves (and I don't consider myself among them). Talent was in how they thought about solving problems (that maximized quality and minimized work) rather than their ability to "bang out" a solution really fast. The ones that openly refer to themselves as "talented" are often personalities that need to be managed.
a) Yes. Much of the software development you will do in the plain vanilla business world is not very analytical, interesting, or exciting. Many companies are very slow moving and your ability to influence that is going to be nil if you're just writing their software.
b) I have much less talent and passion than I thought I did when I started. :)
Don't let that deter you. Software development as a job is still better (compensation, hours, opportunity to solve problems on a daily basis, ability to find jobs) than virtually anything else out there.
Of course there are jobs at the intersection of those sets, but also there is much competition for them. It's harder to find them and you might have to accept lower pay for them.
You also mention "corporate world": larger teams impose their tax on participants. "The Mythical Man-Month" book (by Frederick Brooks) says that for a team of size n you have n(n1)/2 possible communication paths between participants, which means that the communication and coordination overhead rises much faster than the team size. This accounts for half of your time being taken by "process".
So small companies migth be more interesting, but also riskier (because small companies are tipically start-ups which haven't yet confirmed the validity of their business model). Of course there are exceptions, but on average this also means you get paid less.
One case study for fun job is id Software at the beginning - the guys who developed Doom, the first significant 1st person shooter game. In early 1990ties it was the most installed software on computers by one Microsoft study (googling for details left as an exercise for the reader). The game was technological breaktrough, something new, it had massive impact and was financially successful. And you bet they had a lot of fun doing it.
Edit: corrected the group intercommunication formula
There probably are better jobs. But unless you live in a major city, it will probably be hard to find one. And even still, it's not exactly easy to get a job at a good place to work. Everyone wants that job!
* Not necessarily a startup, just a small company.
As I used to tell a buddy of mine who was a pilot; planes are for rich people, motorcycles are the poor man's airplane but we only get 2D's of freedom not 3D like a pilot. Similar arguments apply to boats, which is left as an exercise for the reader.
I was depressed for almost 10 years. It started in my sophomore year of college. Initially I would finish 3 hour programming assignments in 10-15 minutes and was the student representative of the CS department. I had a lot of friends, and was quite 'normal' I suppose. Then things started literally falling apart. I lost interest in my old hobbies, stopped talking to friends, kept failing classes, found no pleasure in anything. I asked my roommates to find another place and started living alone, and then decided to commit suicide by cutting my wrists in the bathtub with a knife but pussied out when the blade touched my skin... Fuck, what a nightmare.
However, I somehow dragged my feet through this misery and managed to graduate (two years late and at the bottom of my class) and luckily bumped into an old friend who remembered how good I was with computers back in highschool. He was running his own company and offered me a (non-programming, IT) job. It was great at first but once again the depression started rearing its ugly head and I started slacking off at work, being late for appointments and isolating myself again.
I tried doing the things people seem to suggest online like exercising regularly (never could for more than a month), yoga, mindful meditation, but I would always relapse.
It took me 6-months to finally get the courage and see a psychiatrist. He diagnosed me with depression and anxiety and put me on lexapro. I could never imagine how much 10mg of something could change your life.
Within a few days I started seeing major changes in myself. It rekindled my interests in my hobbies (programming, gaming, reading etc.) my memory improved tremendously, I felt compassion towards my friends and family, much more social and became super efficient at work. Fast forward a year and I'm now CEO of my friends company and I've dealt with some personal tragedies on the way without relapsing. Things are holding up pretty well.
If you think you're depressed don't hesitate to seek help. If you notice someone falling apart for no reason and might be depressed, offer to accompany them to a psychiatrist and that you'll keep it confidential. (I wish I had gone sooner)
One addition I made to the CT techniques was visualizing my emotions as having distinct personalities Anger, Sadness, etc. I got this idea after watching the recent Pixar movie. It's silly but it really helps to picture your emotions as people who have their own agendas and are trying to manipulate you into carrying them out because then your depression becomes a people management problem. Consider the difference: 1) how can I manage Anger, Sadness or Fear so they don't drive me nuts? 2) how can I cure my depression? The first one is actionable, and the second one is not.
Despite having good results with CT, I'm convinced there is no magic cure to depression. You only manage it all your life. But that's a good thing because it means depression management is a skill you can cultivate, and that gives me hope.
1. Home life: How our your living conditions, bills, people you live with. Are you comfortable?
2. Work life(e.g. Work/Study/Job hunting): Do you enjoy what you do and is it a good working environment?
3.Relationships: How are you getting on with Friends, Family, boyfriend/girlfriend e.t.c?
If one of these area's is off then it's ok and you can usually cope if two or more are off then you definitely need to try and change something.Alwyas talk to someone about these feelings/situations as it's very hard to think clearly or logically during these times you definatley need a second opinion.And somethign to be aware of that a lot of people don't seem to know is imposter syndrome which most people deal with at sometime or other. When you have the idea that although you can do something your actually just fakeing it and eventually wil be found out: http://www.theguardian.com/lifeandstyle/2013/nov/09/impostor...
Everyone who is depressed, or knows someone who is depressed, should keep in mind that everyone is an individual, and there are many causes of depression.
If you are depressed, your first stop should be a doctor or other professional, as soon as possible. Today is Sunday, so call and make an appointment tomorrow, Monday.
Do not try to tough it out or ignore it. Your life does not have to be miserable.
Some people mentioned doing sports and in my opinion, this is one of the most helpful things one can do. Running a mile maybe one or two times a week can clear your mind from lots of negative thoughts and make you feel happier. In addition to that, some people like Yoga/Pilates to calm down and rearrange themselves. After all, the very most important step is getting professional help! Depression can influence your whole life and it is always good to have someone who is listening.
Summarized:- Get professional help- Do sports - Write down what you feel- Reduce stress
Atypical depression is characterised by mood reactivity and is the most common form of depression (40%).
See a doctor, get some therapy for the bad thoughts that you've internalised when you were depressed, and get a prescription.
Life can be great.
Hyperbole and a Half couldn't have explained it better:http://hyperboleandahalf.blogspot.com/2011/10/adventures-in-...
How have I addressed all this junk? I've been seeing an EMDR therapist for about 7-8 months now and simply talking through these issues, asking hard questions, and confronting my feelings with an honest-as-possible lens. Much of it has been tackling shame head-on, walking past it, and acknowledging how much I've grown into a person I'm starting to love more. Part of it is also finding nuggets of a person I once loved being and reclaiming them, challenging myself to love others without restraint, have empathy, and place others before me.
EMDR therapy in particular has been really interesting. While I don't think it's an end-all solution, it has been well researched, and takes talk therapy to a new level. It forces you to process memories as you would while sleeping (specifically, REM sleep), with a hope to reprogram your feelings towards those memories, or scenarios you've created that lead you to believing you're much less of a person than you really are. It plays into the idea that we are our own worst enemy, and say the worst things to ourselves which form our identities, which in turn affects how we work (program), and where we stand with others. "Surely I'm the least [important / impactful / compassionate / loving] person in this room."
With all that said, I highly recommend seeking therapy if it's affordable, and most of all, be as truthful and honest with yourself as possible. Confronting your doubts and fears head-on, and replacing them with positive truths about who you are goes a long way, even if it takes some time. It really helps to have a therapist with you to affirm these truths. Remember, they may not know you as well as the people in your life, but that's good, because this person you're seeing is an unbiased support figure, fighting for the potential you have in you. This may not be _the_ solution, but it certainly will push you in the right direction to a life filled with hope.
But you know, there's something therapeutic about coding, where solving the many problems we solve give us some sense of a victory. And that's something, isn't it?
Docker is exactly like OpenVZ. It became popular because they really emphasize their OpenVZ Application Templates feature, and made it much more user friendly.
So users of Docker, instead of following this guide: https://openvz.org/Application_Templates
They write a Dockerfile, which in a simple case might be:
FROM nginx COPY index.html /usr/share/nginx/html
Then you can push your nice website container to the public registry, ssh to your machine and pull it from the registry. Of course you can have your own private registry (we do) so you can have proprietary docker containers that run your apps/sites.
From my perspective, the answer to your question would be: Always prefer Docker over OpenVZ, they are the same technology but Docker is easier to use.
But I've never really invested in OpenVZ so maybe there's some feature that Docker doesn't have.
No security patching story at your workplace? No problem, containers don't have one either! If someone has shipped a container that embedded a vulnerable library, you better hope you can get a hold of them for a rebuild or you have to pull apart the image yourself. It's the static linking of the 21st century!
docker is a glorified chroot and cgroup wrapper.
There is also a library of prebuilt docker images (think of it as a tar of a chroot) and a library of automated build instructions.
The library is the most compelling part of docker. everything else is basically a question of preference.
You will hear a lot about build once, deploy anywhere. whilst true in theory, your mileage will vary.
what docker is currently good for:
o micro-services that talk on a messaging queue
o supporting a dev environment
o build system hosts
However if you wish to assign ip addresses to each service, docker is not really mature enough for that. Yes its possible, but not very nice. You're better off looking at KVM or vmware.
There is also no easy hot migration. So there is no real solution for HA clustering of non-HA images. (once again possible, but not without lots of lifting, Vmware provides it with a couple of clicks.)
Basically docker is an attempt at creating a traditional unix mainframe system (not that this was the intention) A large lump of processors and storage that is controlled by a singular CPU scheduler.
However, true HA clustering isn't easy. Fleet et al force the application to deal with hardware failures, whereas Vmware and KVm handle it in the hypervisor.
This is the core that Docker solves, and in such a way that developers can do most of the dependency wrangling for me. I don't even mind Java anymore because the CLASSPATHs can be figured out once, documented in the Dockerfile in a repeatable programatic fashion, and then ignored.
In my opinion the rest of it is gravy. Nice tasty gravy, but I don't care so much about the rest at the moment.
Edit: As danesparz points out, nobody has mentioned immutable architecture. This is what we do at Clarify.io. See also: https://news.ycombinator.com/item?id=9845255
But it's not, at least in my experience; not to mention that as of now, anything running Docker in production (probably a bad idea) is wide open to the OpenSSL security flaw in versions of 1.0.1 and 1.0.2, despite the knowledge of this issue being out there for at least a few days.
Docker's currently "open" issue on github: https://github.com/docker/compose/issues/1601
Other references: https://mta.openssl.org/pipermail/openssl-announce/2015-July...http://blog.valbonne-consulting.com/2015/04/14/as-a-goat-im-...
You can tear down the host server, then recreate it with not much more than a `git clone` and `docker run`.
2. Precise test environment. I can mirror my entire production environment onto my laptop. No internet connection required! You can be on a train, on a plane, on the beach, in a log cabin in the woods, and have a complete testing environment available.
Docker is not a security technology. You still need to run each service on a separate host kernel, if you want them to be properly isolated.
Docker gives you the ability to version your architecture and 'roll back' to a previous version of a container.
- Docker is nothing new - it's a packaging of pre-existing technologies (cgroups, namespaces, AUFS) into a single place
- Docker has traction, ecosystem, community and support from big vendors
- Docker is _very_ fast and lightweight compared to VMs in terms of provisioning, memory usage, cpu usage and disk space
- Docker abstracts applications, not machines, which is good enough for many purposes
Some of these make a big difference in some contexts. I went to a talk where someone argued that Docker was 'just a packaging tool'. A sound argument, but packaging is a big deal!
Another common saw is "I can do this with a VM". Well, yes you can, but try spinning up 100 vms in a minute and see how your MacBook Air performs.
OpenVZ, LXC, solaris zones and bsd jails on the other hand or mainly run complete OS and the focus is quite different from packaging your applications and deployments.
You can also have a look at this blog which explains the differences more in detail: http://blog.risingstack.com/operating-system-containers-vs-a...
Some people have mentioned security...patching in particular. Containers won't help if you don't have patching down. At the very least it lets you patch in the lab and easily promote the entire application into production.
I think that the security arguments are a canard. By making it easier and faster to deploy you should be able to patch app dependencies as well. I, for one, would automate the download and install of the latest version of all libs in a container as part of the app build process. Hell, build them all from source.
IT departments need to be able to easily move applications around instead of the crazy build docs that have been thrown over the wall for years.
If the docker tool will have something like `docker serve` and start his own local registry will be more than great.
For this case when I switch to Go was a great solution, building the binary is everything you need.
About docker being helpful for development, definitively yes, I switch to postgres, elasticsearch and redis containers instead of installing them on my computer, is easy to flush and restart and having different versions of services is also more manageable
Docker took the LXC OS container template as a base, modified the container OS init to run a single app, builds the OS file system with layers of aufs, overlayfs, and disables storage persistence. And this is the app container.
This is an opinionated use case of containers that adds significant complexity, more a way to deploy app instances in a PAAS centric scenario.
A lot of confusion around containers is because of the absence of informed discussion on the merits or demerits of this approach and the understanding that you have easy to use OS containers like LXC that are perfectly usable by end users like VMs are, and then app containers that are doing a few more things on top of this.
You don't need to adopt Docker to get the benefits of containers, you adopt Docker to get the benefits of docker and often this distinction is not made.
A lot of users whose first introduction to containers is Docker tend to conflate Docker to containers, and thanks to some 'inaccurate' messaging from the Docker ecosystem think LXC is 'low level' or 'difficult' to use, Why would anyone try LXC if they think it's low level or difficult to use? But those who do will be pleasantly surprised how simple and straightforward it is.
For those who want to understand containers, without too much fuss, we have tried to provide a short overview in a single page in the link below.
Disclosure - I run flockport.com that provides an app store based on LXC containers and tons of tutorials and guides on containers, that can hopefully promote more informed discussion.
I think thats the best way I can summarise what Docker _is_.
Where I've worked in the past, setting up a new development or production environment has been difficult and relied on half-documented steps, semi-maintained shell scripts, and so on. With a simple setup of a Dockerfile and a Makefile, projects can be booted by installing one program (Docker) and running "make".
You could do that with other tools as well, but Docker, and even moreso the emerging "standards" for container specification, seems like an excellent starting point.
TL;DR: It's better for deploying applications and running them than using home-made scripts.
I think it was here , but deleted now.
Add in image registries and a decent CLI and the developer ergonomics are outstanding.
Technologies only attract buzz when they're accessible to mainstream developers on a mainstream platform. The web didn't matter until it was on Windows. Virtualization was irrelevant until it reached x86, containerization was irrelevant until it reached Linux.
Disclaimer: I work for a company, Pivotal, which has a more-than-passing interest in containers. I did a presentation on the history which you might find interesting: http://livestre.am/54NLn
What differentiates Docker is not virtualization, so much as package management. Docker is a package management tool that happens to allow you to execute the content of the package with some sort of isolation.
Further, when you look at it from that angle, you start seeing the flaws with it, as well as it's potential. It's no accident that Rocket and the Open Container Project are arising to standardize the container format. Other, less-well-known efforts include being able to distribute the container format themselves in a p2p distribution system, such as IPFS.
Technologically, both OpenVZ and Docker are similar, i.e. they are containers -- isolated userspace instances, relying on Linux Kernel features such as namespaces. [Shameless plug: most of namespaces functionality is there because of OpenVZ engineers work on upstreaming]. Both Docker and OpenVZ has tools to set up and run containers. This is there the similarities end.
The differences are:
1 system containers vs application containers
OpenVZ containers are very much like VMs, except for the fact they are not VMs but containers, i.e. all containers on a host are running on top of one single kernel. Each OpenVZ container has everything (init, sshd, syslogd etc.) except the kernel (which is shared).
Docker containers are application containers, meaning Docker only runs a single app inside (i.e. a web server, a SQL server etc).
2 Custom kernel vs vanilla kernel
OpenVZ currently comes with its own kernel. 10 years ago there were very few container features in the upstream kernel, so OpenVZ has to provide their own kernel, patched for containers support. That support includes namespaces, resource management mechanisms (CPU scheduler, I/O scheduler, User Beancounters, two-level disk quota etc), virtualization of /proc and /sys, and live migration. Over ten years of work of OpenVZ kernel devs and other interesting parties (such as Google and IBM) a lot of this functionality is now available in the upstream Linux kernel. That opened a way for other container orchestration tools to exist -- including Docker, LXC, LXD, CoreOS etc. While there are many small things missing, the last big thing -- checkpointing and live migration -- was also recently implemented in upstream, see CRIU project (a subproject of OpenVZ, so another shameless plug -- it is OpenVZ who brought live migration to Docker). Still, OpenVZ comes with its own custom kernel, partly due to retain backward compatibility, partly due to some features still missing from the upstream kernel. Nowadays that kernel is optional but still highly recommended.
Docker, on the other side, runs on top of a recent upstream kernel, i.e. it does not need a custom kernel.
Docker has a broader scope than that of OpenVZ. OpenVZ just provides you with a way to run secure, isolated containers, manage those, tinker with resources, live migrate, snapshot, etc. But most of OpenVZ stuff is in the kernel.
Docker has some other things in store, such as Docker Hub -- a global repository of Docker images, Docker Swarm -- a clustering mechanism to work with a pool of Docker servers, etc.
4 Commercial stuff
OpenVZ is a base for commercial solution called Virtuozzo, which is not available for free but adds some more features, such as cluster filesystem for containers, rebootless kernel upgrades, more/better tools, better containers density etc. With Docker there's no such thing. I am not saying it's good or bad, just stating the difference.
This is probably it. Now, it's not that OpenVZ and Docker are opposed to each other, in fact we work together on a few things:
1. OpenVZ developers are authors of CRIU, P.Haul, and CRIU integration code in Docker's libcontainer. This is the software that enables checkpoint/restore support for Docker.
2. Docker containers can run inside OpenVZ containers (https://openvz.org/Docker_inside_CT)
3. OpenVZ devs are authors of libct, a C library to manage containers, a proposed replacement or addition to Docker's libcontainer. When using libct, you can use enhanced OpenVZ kernel for Docker containers.
There's more to come, stay tuned.