You can also look here: http://www.internships.com/
Projects + Github + Blog would be all that you really need. Example from Udacity you could take one of the many specializations:
*Front End Developer: https://www.udacity.com/course/front-end-web-developer-nanod...
And many more
While learning try to do bite size projects that can also be portfolio items that you push to Github. When times get difficult and it appears that Stackoverflow and other online sources will not able to answer your questions, do not be afraid to jump onto one of the many IRCs
2. Apply for jobs on a daily basis, searching for jobs listed in the last 24 hours.
Don't work for free (just do more open source rather than doing that)
If the above doesn't work expand your job search to include all companies not just start ups. Also expand to other cities if required and be prepared to relocate.
Also I would get an idea of what kind of role your after and learn the relevant language.
If you are interested in basic programming courses and have the time the Stanford courses (CS106A and CS106B) which are on iTunes U are good starting points.
Hope that helps.
Then projects + github + blog + never giving up.
Maybe I should elaborate on my background a little more. I recently completed my Masters in Computer Engineering from University of Florida and am working at Ebay in Philadelphia. I know my basic algorithms and data structures, and can confidently write programs for implementing them.
Could you suggest good sources online or otherwise to develop my skills in these areas?
It's okay to not like the stack you picked, as long as it's popular. But learning is hard, so stick with whatever you picked to the point where you have a mobile app, or a web app on a server with a rest API that your front end code uses.
Some stacks you might look at:Have a new Macbook and an Iphone? learning swift and objective C and picking up IOS programming will get you work.Have an Android phone, and any sort of computer that's moderately fast? Learn Java and becoming an Android Developer.
But maybe you want to do a web stack. You generally want some experience on the back and and the front end. When in your learning, you don't know what to use out of a bunch of tools, pick what is most widely used, and if it's a tie, go with the older thing, or the simpler thing.
Like Python? Learn Django. If the company you want to work for uses a microframework like Flask or something, they will still probably hire Django devs, but the opposite may not be true.
Like Ruby? Ruby on Rails isn't the only framework, but it's super popular, and you want to get the skills, right?
Learn to use the command line (Mac, Linux, or cygwin if you have to stay on windows) to do things. Sign up for Amazon's free 1 year of cloud services, so you can practice setting up stuff over ssh and using git.
Learn git, enough to be able to put projects up on github, and to get them down onto your server.
In terms of front end, learn enough jquery to interact with a REST API and get data from it into your app. Consider a front end framework like angular. Learn bootstrap, which is a CSS framework, because again, its popular.
It's not necessary to understand big O or data structures in detail for a startup job, but it might be to get hired. Knowing SQL is probably helpful eventually, but don't worry if you don't.
Why do I keep telling you to pick the popular thing? Because startups want people who may not know the stack, but know how to use a stack and accomplish something. You can get hired to do android dev knowing only IOS, or ruby on rails knowing django, or using react and backbone when you know angular.
Learning to program is hard. Try to get in an hour or two every day. Once you know how to make something specific in a specific stack, branch out and learn more broadly.
That means investing money and time into your own education and skills. Then, when you have the skills, you can apply at startups with examples of your work.
The same way artists create art for their gallery/portfolio and show that portfolio before getting a job. Programming is an art - you should have a portfolio.
That means you need to invest time into creating that portfolio.
You and your wife having a difference of opinions on major life goals is something you should hammer out between yourselves, possibly with the assistance of a professional.
Let's focus on the more immediately solvable problems: if you're getting "You are invading my space" / "I see too much of you" signals, trivially solvable. This happened a few months into my marriage as well (I've been self-employed for the duration). I started making a point to work out of a cafe most days, and eventually found a co-working space. This lets my wife have run of the house during something which (most of the time) approximates a normal work day.
Not sure if it helps your situation, but it was a major stressor for my wife that I was not "with her" while I was physically in the same room with her. She prefers me being out-of-sight during the workday and an attentive husband and father outside of it than to feel like she's competing with IRB and losing for attention at 10 AM.
It is a regretful fact, much remarked upon in sociology literature, that financial pinches cause divorces. Make whatever adjustments to your business are required to maintain the standard of living that she expects you to have. This could include e.g. consulting to help bootstrap the product business, as opposed to burning through savings every month.
Many important stakeholders in your life may not appreciate how bootstrapper math actually works. Expectation management for it is important. Many stakeholders may follow scripts such as "A middle class man should work for a living. Someone who works is seen as working. Someone who is not seen as working is, therefor, not working." This counsels not conspicuously looking like one is not working. If you can develop other commonly accepted indicia that you are doing a Real Job, I recommend doing so. (You are, absolutely, running a real business. Non-entrepreneur stakeholders are not the only people in the average bootstrapper's life who need to understand that.)
Generic book recommendation for improving marital communication: the Five Love Languages.
This is a big problem and possibly not fixable. It indicates deeper problems, like communication problems and incompatible values. It also means you disregarded her wishes and now can't understand why she is unhappy about that.
My wife chose to be a stay at home mom and I think she resent my being in her space during weekdays.
Then get out of her space. Find someplace else to work. Go to a library or get an office of some sort or go to a business incubator space or something.
Also, do not underestimate how freaked out she probably is about the lack of financial security. This is a big hot button for stay at home moms. Can you find a way to give her some additional sense of financial security? This was a big source of friction in my own marriage, which ultimately ended in divorce. (I was the stay at home mom.)
Of course that one issue is not everything, but it is something that could be worked on in the short term.
I highly recommend the book Getting the Love You Want.
edit: Rereading this, it sounds more brusque than I intended. Also, if you do ask your wife what is wrong, that can obviously be a charged conversation. Getting the Love You Want has a technique called the imago dialogue. Even if your wife (who seems reluctant to therapy) won't engage in this, you can still use the techniques yourself. For this particular conversation you want to focus on mirroring, that is: let her speak, then repeat what she told you and ask if you summarized it correctly. If you're not both on the same page, this may end up being one-sided. The point is to make sure you understand her point before you make yours (or vice versa). You will often see you're upset about very different things.
The book is really fascinating.
Anyway, not saying she is right and I understand the dream as well. Just pointing out her perspective (I've got a kiddo as well).
What is done is done, so the thing to do now is to give it your best shot, but also communicate your progress honestly. You have customers, which should be a great turning point for the both of you.
What I think you need to do is work to understand what she is thinking, and work from there to, if possible, come to a mutually-agreeable approach.
I'd be cautious about unilaterally adopting any of the other approaches suggested in the thread (e.g., working from another location), because if the real underlying problem isn't "you're invading my space", but, e.g., "you are unilaterally making decisions and not respecting my concerns", than that may exacerbate rather than mitigate the situation.
When you have family you need to optimize for everything - wife, kids, financial and dreams, and not just for your dreams. This can be quite a juggle and a tension between your needs.
However the default of the 9-5 job, the rent/mortgage paid and spending time with the family is always a stable place you can return to, and then you can be in a good space prepare yourself and your wife for your next entrepreneurial adventure.
The next priority is to get you and your wife on to a stable footing, with good communication, and build a common vision for you and your family for the next 10 years and the next 20 years which may include building a business. I think talking about the next 10 years alone could give your wife a sense of security that you see yourself with her and the family forever.
Staying at home with young children is stressful, and with a baby crying, dirty nappies on the floor, or toddlers throwing tantrums, the house in a mess and the husband in the way and not helping I can imagine it would be quite stressful for the wife. Plus lord knows how you concentrate and be productive, they must be in your way too.
Lots of great words in this thread, but only you can decide what is best to do. You know all the facts. I wish you the best of luck and hope it all works out. I am sure it will.
A. Starting with questions relating to business viability: A1. Are the customers paying enough to provide a reasonable income? A2. Are the backlog of paying work and revenue growing? A3. Are you exclusively spending your time completing paying work and directly finding paying work?
B: Relationship questions: B1. Do you value your marriage more than your dream? B2. Are their children involved?
Pulling the plug on a non-working business now is better than slow heat death. A bootstrapped business is different from a investment fuelled startup. Just surviving is good for a startup because it allows the possibility of exponential growth. A just surviving small business takes nearly as much energy, but only offers an upside of "a little better than surviving". Figure out if you're treading water to protect sunk cost.
It really works to establish this before you get married.
Since the journey you are on, as you say, it really works when your life partner buys into your vision.
You are going to be making choices about how to work, when to work, and with regard to the current burn rate of your life, and with regard to the value of future pay offs, that are vitally important for people in a relationship to agree on. If your partner doesn't share your passion for this, or believe in you, how are they going to come on that journey with you? Will they be there for you and support you when you and your business need that?
Will they give you the extra runway by getting a job, or will they insist you chuck it in and get a job?
I mean, having a business is a lot of ways like having a baby, you are always working on it, and everything changes around doing it. And it really works for your partner and you to carry that weight together.
No one knows what's going to happen, it could all work out. Maybe it's simply differences in expectations that can be reconciled through communication. Or maybe it's something more fundamental. At this stage tho, you don't know.
My choice was to cut my losses quickly when it seemed like it wasn't working. I would caution against that, since I feel that the marriage is an asset, because of your commitment to each other. When you got married, didn't you vow to be there for each other, through sickness and health, and failure and success? So my recommendation after trying the opposite ( and it not working ) is just stick it out. Try to make it work, because that relationship could be so important to you if it maintains.
In my case, we divorced. Not, mind you, just because of a business. There's always a mix of things, and both people are responsible. I think the main thing was simply not really emphatically communicating about what our expectations were, and also not really being so committed to sticking it out, we both chose to cut our losses. Well, at least we had the same efficient mind! Still I believe through lack of communication and commitment we didn't quite work out exactly what it could have been. So persistence, could really be key.
Later I found someone who really did buy into my vision, and support me while working on the project. Objectively this person is far more compatible with doing this startup, tho the truth is, you never know how things could have been different, had you done them differently.
As other posters suggested -- maybe get some husband time to yourself, away from the wife and kid, cafe working, or cave working, or shed working, some time and place to be around other people who do share your vision. I think that idea of community really helps. Why? Because in a way you are asking your wife to be your community if you don't get out there and rely on others as a community. And being around the energy of others can really refresh you and give you that mental reset so when you come home, it's like a delineated time, and you're all ready to go husband and daddy mode again.
It is a scary time. Maybe rethink feeling ashamed, tho. You're trying to juggle doing a lot of things. You're not doing anything wrong -- you're just trying to make it work. That's noble, not shameful.
I spent years working outside the house, whether it was for myself or an employer I was not at home. My wife was/is a stay at home mom as well and that is a full time gig I sure as hell wouldn't want, it is hard. About 3 years ago I started working out of my house, and honestly my wife and I didn't really talk a whole lot about logistics we just did it and honestly had some excitement about it.
Well.... About 3 months in I noticed we both were being shorter with each other and honestly we were more distant even though we were in the same space. After a couple of more months we both realized something wasn't right. We had to have a few conversations about boundaries, separation of space and expectations. It took probably another 2-3 months to get a balance around it, so if you are doing the math from me starting at home full time to us having some balance it was like 6-8 months.
Somethings we did (still do):
1. Dedicated one room to be my office and put doors on it to keep that space isolated. We also setup some rules around it, if I was in my office with the doors shut, she had to consider that I was working and needed to respect that and not interrupt me unless necessary and even then to knock first. If the doors were open then it was open and all I asked was for her to not interrupt me if I was madly typing something out. :)
2. Being me, I also was making suggestions why she should do something differently around the house, or when she would complain about something I'd do the stupid male thing and offer a solution when all she wanted was the venting time. Even if my way was more efficient or better, she was running the house and I needed to respect that and let her do it. If she needed help she could ask me and I'd do what I could, but we agreed we'd have those as conversations not me just sticking my nose into something and commenting etc.
3. I spend a little time every week outside the house doing my work. This helps her and I. For me the change in view and different environments can be inspiring and for her she gets a break from me and to have some alone time. We all need some alone time.
4. I set hours on my work, and do my best not to violate them unless something is going on or its crunch time. This lets the house have a more natural flow, e.g. work hours and play hours.
5. We go out to lunch at least 1-2 times a week together, outside the house as a treat to ourselves, like a mini-date. My wife rocks and will also make me lunch a lot of days cause she knows I will work right though lunch and not eat which is bad.
6. Also, we joined a gym and sometimes go workout together and other times go separately. But it let us have time again outside the house.
Over time we have relaxed rule 1 more, but in the earlier days it really helped us get the cadence of the house down. Also, I get that it seems like you need less time together sometimes, but in reality we found that it wasn't the amount of time we were spending but how we were spending it and respecting each others boundaries. We had and have a solid marriage so while this took us time to figure out we just had to get the respect and rules in place. And of course, from time to time we still get on each others nerves during a given week, I know I can be difficult sometimes if for no other reason is that I am a constant smart ass. But that's just normal marriage to me.
TL;DR> Set boundaries, respect them, setup distinct times for work/home, respect her "job", get out of the house weekly for even a few hours and setup dates or activities together outside the house.
MIT OCW's Intro to Computer Science and Programming (in Python) covers a lot of ground related to programming (more than just Algos), but it covers some essential sorting algorithms and eventually gets into dynamic programming. I don't think anything much simpler than this would be worth your time (not to say this is the best), but the readings themselves (especially those from wikipedia) can actually be a little dense:http://ocw.mit.edu/courses/electrical-engineering-and-comput...
MIT OCW also has a full course on algorithms.
The above books are quite apt for beginners. You should expect to struggle a little but you must persevere anyway. I remember struggling with sorting and matrix multiplication algorithms when I learned it the first time in school. Do not mistake your unfamiliarity with the subject for its inherent difficulty! Once you write a few sample programs and see how the algorithms play out, you'll get the hang of it.
The thing is is that merge-sort was discovered by John von Neumann  and QuickSort by CAR Hoare . The less accomplished of the two won a Turing Award and one might quite legitimately walk away with the belief that developing algorithms from scratch may be non-trivial simply because the subject is really hard.
Which is a round about way of coming to some advice: if the very subject of algorithms isn't enough to scare you off, don't fret the fact that the presentation looks difficult. The apparent difficulty is in the subject itself and the only thing a gentle introduction or simplification means is that someone is pretending that the subject of algorithms is not really really hard with the natural consequence that when it does get hard, you're more likely to see the struggle as a failing of the student rather as inherent in the subject matter. And everything interesting and important in algorithms is hard.
This is why I don't hesitate to suggest people consider TAoCP. It covers the "easy" parts as well as or better than anything else I've seen. It just requires being ok with not understanding everything or even most things that Knuth covers because he finds them important and interesting. Because I'm never going to be that smart, I might as well work at my own pace, and celebrate the small victories like grasping the answer to one of the easy exercises that a year ago, I wouldn't have grasped.
The other recommendation is to take an algorithms course on Coursera. It's free.
it may work to start with just one area,an area that is close to something you already are making or solving, and then, literally, in searching for algorithms for that pick the shortest one and solve a small implementation of it.
in finding a reference implementation i found the following helpful :
-- pick code in the same language you will be writing your version in.
-- if you can, find and read the original paper ( try searching google scholar ) describing the algorithm, these are often clearly written and explain the motivating situations that led to the way the algorithm was constructed.
finally some example short algorithms from a few areas and favorites of mine :
string processing :
-- LZW algorithm
-- longest common subsequence algorithm
tree graph processing :
-- post order depth first search
list processing :
-- group elements in an array into sub arrays of length k
integer processing :
-- change of radix algorithm ( change a mumber from the given base ( 10 ) to base 2 ( or even to other bases as well ) )
most of all, just work your way through stepby step, like the algorithms your are making.
Robots are a complex system with lots of moving pieces. Often they use some form of reinforcement learning (which in turn may use Deep Learning for estimating rewards) to decide which actions to take.
Deep learning is great for recognition/classification but robotics is much more.. Deep learning has to coexist with a number of other critical components.
However, there is major and extremely exciting work being demonstrated in the literature art recent conferences on this front. Expect major developments this year
@opless: Deep learning may be a fad in the press, but there's substance underneath. It's been breaking one accuracy record after another in raw, unstructured media year after year. ImageNet is just one deep convolutional net competing against another. A lot of other ML algorithms have hit a ceiling, and the ceiling is tied to not having enough humans to engineer enough features. DL doesn't have that chokepoint, and it is able to process vast seas of data that other algos have trouble with. Therefore, for many problems, it will continue to win.
I always imagine the interaction with supply (quality freelance developer) and demand (company needing work done) to be like this:
Company: "I need great freelancers!"Dev: "I'm a great freelancer! My rate is $100/hr [or whatever]!"
[Company interviews Dev, sees prev results, feels happy w/Dev]
Company: "Great! We'll pay you that for the first few days on this platform, then engage you for long term projects off the platform. That way, we don't have to pay Matching Site the finder's fee."
We noticed the same broken things here. I don't want to give Elance/UpWork too hard a time - they can be good for some things (like Data Entry, etc) but clearly their model has some issues when it comes to development projects.
Where our model is different is that all of our projects have a dedicated Product Manager who overseas the build for fixed-price projects. The developers and clients deal directly with the project's PM (not with each other). That saves time for the client. It adds a layer but this counter-intuitively improves communication. I speak broken Spanish. So if I run into a Spanish speaker who speaks broken English then we can communicate. That's fine if we're doing something simple but if the nuance of different words matters then we'll do much better if we have a professional translator who's a native speaker in both languages in between us.
I actually interviewed the former CEO of oDesk for my blog a few years ago (long before Gigster existed) so I've been following this space and thinking about where it's heading for a while. That's why I agree with the OP about the opportunity for a new platform to rise in this space and the fundamental issue that a race to the bottom will impact the quality of the build.
@jalopy & @mithaldu - I think what you're alluding to is the simplicity of not having to deal with all the pain of being a freelancer (client management, paperwork, etc). That's our appeal to developers: we give them specs and they can just focus on building, not marketing themselves, client management, etc.
@logn - Eerily similar to how we operate.
Everyone involved in the design and programming should be placed on some kind of industry Do-Not-Hire list.
> the only reason anyone's still using them is the lack of a better alternative
That, however, is not true. Freelancer.com has been around forever and is much better. (By which I mean it's functional a vast improvement over Upwork.)
1. Require specs. If needed make this be marketplace listed work too, to write a spec.
2. Require flat-priced projects. Site moderators will handle scope-creep disputes.
3. Track each project's overall cost and analyze how much each developer actually costs for projects.
I think this would help eliminate the problem that low cost hourly devs sometimes make up for their pricing in quantity.
It is in their best interest to keep deal-flow high, which means that they try not to reject submitted projects and try to push the low prices onto the developer.
If a developer from India knows his chops and can run circles around JS-developers in Silicon Valley, he will also know that he can charge $100 per hour, over-deliver and still be cheaper than a bootcamp-JS guy.
Yet Toptal will negotiate a rate of $25 (or thereabouts), based on some average-pricing they use and justifying that "this is what most devs charge in your area, so $100 per hour will be too high, simply cause you're in India".
Also, this is a new account asking this question... It got me wondering whether this is some backhanded marketing-PR for gigster.
They are part of the Summer Class of 2015 for Y-Combinator and are really promising. You basically sign up to be a Gigster and then get paired with gigs that pay. Within a week you could be up and running with real projects that actually pay.
Gigster handles all the PM and HR related functions of a business and quickly gets jobs to you so you can start right away.
I've used elance extensively and I'm very, VERY disappointed with how the "transition" to upwork has gone. It is bordering on unusable and has added a lot of difficulty to what should be a straightforward transaction. What a disaster.
So yes, I would agree that there needs to be another competitor that is straightforward to use and definitely an opportunity here. I feel like Metcalfe's Law / network effects of the existing sites might be difficult to overcome, but its worth a shot!
Next step is to make sure that users who like sharing publicly don't sign up in the first place because they're not your target audience and public sharing can come with support headaches (think about copyright claims for example).
Does your pay-for plan already include a free trial period? Be it a week or month, it forces users to make a decision to upgrade. In my experience lots of users simply forget and reminders/ads don't work well as they can be ignored.
I wrote an article on this last month... http://taprun.com/articles/secret-to-freemium-pricing
Just give me the security updates for the version I have, because I don't want your designer's latest idea of what a browser should look like, and unwanted new features forced down my throat with the security updates.
Choice about what new features to install - much like Windows updates, would be nice.
At the very least provide ways to keep things working and looking exactly how they are at the moment. Needing an add-on to bring back the status bar in Firefox is a joke.
I want to be able to stay logged into Google/Facebook/Linkedin for convenience without other browser tabs knowing anything about it...or isomorphically, I want to be able to browse the internet while logged into those services without the pages I am browsing leaking data back to those sites. I'll take the hit of downloading 100k of jquery on my 20mbit pipe a few extra times.
I want my browser to sandbox my information to the same degree I can achieve by running separate browsers or setting up special browsing VM's.
* Even better extension support -- enable writing extensions in any language: expose a file system based API for a full Unix philosophy experience. uzbl has something like this but it's not nearly as ideal as Vimperator is for my use case.
* As others mentioned, lose mandatory UI downgrades and other crap Mozilla's been pushing us lately: give us a platform to customize instead. (Practically running a Firefox compiled from sources helps with some of the issues people have, but sadly there will be a day they overhaul the UI in such a manner it hinders the usability. And because of the security stuff I just can't go back and use an old one forever.)
* Yeah, better bookmarking. Firefox could use a better system, and Vimperator doesn't solve it either. Full-text search among history + bookmarks would be pretty good.
The well exposed API for external apps could solve it all, save for crap UI. For instance, the bookmarks could be crawled to an org-mode document where I could annotate, categorize and tags things to my heart's content.
- Obvious things like encryption support, tabs, full cookie options, (customizable) "smart" address bar, speed dial, history, favourites, optional synchronization, extension support, spell check...
- heavily customizable UI,
- plenty of other customization through settings or Opera's neatly done opera:config,
- easily togglable (is that a word?) side panel with M2-style lightweight E-mail client, notes, history, page info, and whatnot,
- detailed page loading (speed, domains, amount of transferred data) and file download information (what, where from/to, when, how much),
- in-built "plugin-on-demand" and noscript,
- Dragonfly (I just can't seem to get used to Chromium's developer tools),
- easy image properties ( http://puu.sh/jEqjh/ab197d996e.png ),
- mouse gestures and switching between tabs with right-click + mouse wheel up/down or something similarly effortless
- tab stacking,
- and last but not least: if you want to make money off me, instead of sneakily tracing where I go and what I do and partnering with Google, ask me for it on first start and maybe with a discreet "donate/subscribe" button on the start page / speed dial.
Things that would be just nice:
- tab sandboxing
- their own rendering engine
- One process per browser, not tab
- "reading mode" as seen on WP IE
I guess I want more of a browsing bundle, heh.
Show TLS negotiation in detail by default (which ciphers are supported? which was selected?).
Let me edit DNS blacklists & whitelists in text. Let me turn off the blacklist for trusted domains, so they can show ads and make money. Let me disable JS except for trusted domains.
Render .md/.markdown files directly. Support some extras (GitHub-flavored, for example).
Store my settings & bookmarks in git repos. Let me snapshot my bookmarks manually/periodically and see side-by-side diffs.
Perhaps as a large plugin, let me pull up magnet links to fetch & serve documents over BitTorrent.
- securely shares passwords across multiple hosts (emphasis on 'securely,' unlike Chrome and Firefox)
- blocks ads
- supports <script type="text/python">, <script type="text/common-lisp"> and <script type="text/smalltalk"> (hey, you did ask for ideal!)
- written and extensible in Common Lisp (elisp or Python would be minimally acceptable): the goal here is to be able to have 'the emacs of web browsers'
* Think very hard before adding things to make sure that they actually need to be in the core browser. Looking at you, FF Hello.
* Don't baby the user. Everything should be configurable. And existing options should not be changed on upgrades. And general solutions are (always) better than centralized services. Looking at you, Firefox "You cannot install unsigned extensions, period".
* Don't introduce "features" that hurt the end user. Looking at you, Pocket "you now are bound by the terms of Pocket's user agreement when you run FF".
* Don't try to do cat-and-mouse games. Looking at you, Firefox "we must try to prevent malware on the user's computer from taking over FF".
* Don't assume that everyone has the newest and best computer. Looking at you, Firefox "electrolysis tripling memory usage is fine, right?".
* Don't couple security updates with anything else. Looking at you, Firefox "you must downgrade to australis or else your browser will be unsecure aah!".
On "complicated" web pages, tiny changes in the position of the mouse while dragging (selecting text) can result in large changes in the selection (the parts of the page highlighted in light blue). Sometimes a tiny change in mouse position even causes a whole 'nother column of text to be highlighted.
It sometimes takes many tries simply to select the contiguous words I want to copy. It sometimes takes planning and learning from experience. I would prefer for selecting text with the mouse to be so easy that I can always keep all of my planning and learning faculties focused on the ideas discussed on the web page.
Even on pages (such as the page where this comment will appear) where selecting text with the mouse is relatively straightforward, I would prefer to be able to select a contiguous series of lines (or paragraphs if individual lines is too hard) by dragging in the left margin the way that it is possible to select a contiguous series of lines in TextMate 2 or in Sublime Text 3 by dragging in the gutter (the left margin where the line numbers appear). (Neither Firefox nor Chrome lets me do that with HN's pages.)
In general, I would prefer for my browser to be optimized for "active reading" or "reading broadly understood" (reading plus related activities like copying a short passage from a web page and pasting it into a text editor).
I would probably make heavy use of such a "browser optimized for reading" even if it barfed on "complicated" web pages (i.e., failed to render all or part of pages that use a difficult-to-implement modern web API) provided there were an "Open in Firefox" or "Open in Chrome" item on the right-click menu whenever the mouse is over a link -- or some similar easy-to-implement convenience.
In other words, I think I'd use it and love it even if it was unusable with most pages on the modern web as long as it provides a good experience on certain sites with relatively simple pages, like HN and Wikipedia.
"Ideal" isn't one thing. Allowing for personal customizations while following closely the standards make the base for implementing many "ideal flavors" of browsing experience.
We can use the asm.js model for opting in. Browsers that support it run the pages super fast, other browsers run them just as fast as usual.
A browser engine supporting just this standard would be considerably smaller, more embeddable, and a nicer base for current webkit based apps (e.g. spotify, steam, or atom). It might also help apps that want to use something like webviews for embedding content but need to be careful with memory / performance.
Yeah, browser manufacturer, I know you want me to use HSTS and you want me not to browse to HTTPS sites without certificates and all that. That's fine. I can understand that (for example) Google wants to be the only org that can track where I'm browsing, not my ISP or the NSA.
But for the love of dog, give me an option to turn all that nannying shit off as and when I want to. My computer, my connection, I'll choose how much information I want to share with people. Not you.
1. Terminal-only (^Z is a thing that I want)
2. Capable of some basic CSS support (e.g., colors, basic text decorations; whatever can be simply translated to ANSI escape codes)
3. Capable of doing <div>-based page layouts fairly consistently.
5. Some basic support for cookies and bookmarks (though, a session save would be an acceptable alternative for me)
6. Basic support for privacy/security features (think DNT header, HSTS, etc.)
7. (optional) libsixel integration for image/video output
Having the above presents me with the ability to leave GUI web-browsers behind entirely. Ads and the like would essentially be immaterial if JS and images are toggleable and everything would be glorious. Of course, no one appears to want this kind of thing enough for it to have been created yet. So I will eventually probably break down and make it myself :P
Never remove old history items when revisiting a page, but leave the history intact.
Treat tabs more like temporary bookmarks (and thus allow bookmark actions to be used with them like search (full-text), (batch) re-naming, arranging in folders, sorting).
Notes that can be attached to tabs and to websites.
A history of closed tabs.
Scripting support with REPL that allows to quickly process content of multiple tabs at once.
Transparent access to cookies and localStorage.
Something like Privacy Badger included.
Place dialog boxes always near the cursor, not in a tiny bar or in a pop-up near the top.
Bandwidth stats during page load.
Speed: No full-screen transition animations, lazy tab loading, smart tab unloading, ability to quickly and temporarily disable img, embed, video, script etc.
* Browser written in a way that prevents most exploits.
* Single-process sandboxed browser where only the active tab is allowed to run.
* Tab content written to disk so it can be restored in the event of a crash or running out of battery.
* Ability to "swap out" tabs to disk so they consume no memory.
* Deep searching of history (i.e. page content).
* Created by a privacy-friendly organization/people who aren't trying to spy on you.
* Avoid doing things automatically (download files to a folder, search for misspelled URLs, send URL to Google when typing it in, etc). Don't have keyboard shortcuts that are hard to undo (also, don't have single-key letter/number shortcuts at all).
* Don't have an over-engineered build process. The browser should be possible to build (not necessarily fast) on an old or low-end computer.
Scroll below bottom of page as necessary when navigating to anchor links.
Put focus in urlbar when switching to a tab unless the user has already moved it onto the page.
Continue to allow bookmark keywords for custom searches from urlbar (e.g. "w fun" to search wikipedia for "fun"). This still works in Chrome and Firefox but it gets harder to configure with every release.
History should be sortable by most recent view, where closing or switching to a tab counts as a view. Makes separate "recently closed tabs" menu superfluous.
Full-text history search.
Support for MAFF archives.
Built-in ad blocking.
Same with a passwords file, except make it encrypted with a master key.
* Reader browser
* Application browser
The reader browser should show you the "web" in a kindle-like readable experience, just as it does today.
A detailed development roadmap.
Privileged browser Apps and Extensions working on mobile. C'mon, it's 2015! ( no PhoneGap required )
An automation API.
The same really committed team who optimized V8.
Source on GitHub ( not necessarily all of it mind, some can be privileged access, tho a place to post issues that is no more code.google or crbugs, just, why? ).
Now I'm seeing Chrome become bloated, and slow. On top of this, it's now trying very hard to identify me by asking me to sign in with my Google account.
I want my next browser to make me forget that I'm using a browser in the first place, and also to not care about my identity.
Or maybe compiled HTML (like microsoft .CHM), except open (duh).
Reason ? Parsing XML or HTML is very CPU-intensive, and cheap smartphone's small CPUs (which have a very low L2 cache) have a very hard time dealing with it, not to mention classic desktop browser memory footprints. If not even regex can do it, why the hell not ? I'm sure the memory footprint of firefox and chrome is incompressible because of the raw nature of HTML. And for the life of me, if nobody can read a HTLM page generated anymore, what's the point of it ? Why not just compile it ?
I guess I could submit it to the IETF, to be honest. I'm not even a software engineer so basically I'm not sure if my idea is right or not, but I'll always find weird that the app-version of websites perform so much better than their HTML version.
In the internet explorer days, this was not possible because firefox and chrome were not mainstream, but I'm sure now is a good opportunity. It could eventually even replace or substitute .DOC and PDF files.
There used to be a Firefox extension for that, but that now doesn't work anymore because of changes in Firefox. Chrome closed a feature request for that with WONTFIX (https://code.google.com/p/chromium/issues/detail?id=1639).
EDIT: Oh, and also a simple user-friendly way to block autoplay of all audio and video elements. Maybe a "quiet mode" switch or something like that.
- No tabs, that's the job of the window manager. I get that most window managers are too underpowered to replicate browser tabs. Stop using those window managers I guess. Note that this gets you tab isolation for free, since every "tab" is just a completely different browser process. It hardly wastes any memory, too, because of dynamic linking.
- No features. I want to be able to set the url, search, have back/forward buttons, zoom the text. That's it.
- Extensible in a Unixy way. Press a key and execute a program with some hooks to modify the browser.
So far suckless's surf browser fits the bill. I currently use surf with a patch that lats me search duckduckgo from the dmenu url field.
- Support for privacy enhancing extensions. NoScript, Block, PrivacyBadger, HTTPS Everywhere, etc. I'm trying to see how these could work as a component separate the browser and I'm coming up blank on how to present the UI nicely. Currently I use privoxy for this, but it's subadequate.
2. A separated out password store where the store prompts me for each password request and I have to allow it. The store would work with more than just browser passwords.
3. Better cookie control: I need no persistent cookies, apart from whatever Google uses for 2FA.
* Less feature bloat, remove as many features as possible from the browser core and leave any non essential feature to plugins.
I would like to have this as a browser feature that I can control and easily change, rather than just a plugin. Adblock Plus would be a similar idea but I wish I could automatically teach it to block even more.
Virtualized Tabs that unloads completely when it is no longer visible on the Tab Bar to save memory and CPU processing.
NoScript built in.
Ability to write Extension in any Language, aka, the Extension API is exposable to all Languages.
Tabs opened in the background should not start playing Flash automatically. Only once the Tab is selected, does Flash play, and continue to play in the background after moving to another Tab. Should be able to right click on the Tab and Allow Flash to Continue Playing in the Background.
It would be nice if they showed a nice visual fingerprint too, although it's hard to prove their safety.
Plugins would be great (I love vimperator) but speed and efficienty is the real deal here.
- Option to stop all audio/video in all tabs
- Lazy session restore
- Reliable "save for offline viewing"
- Decoupling of "read later" from bookmarks and a separate interface for both
- Automagic unloading, archiving and clustering of opened tabs, perhaps with an auto-extraction of TL;DR from long articles
I very often open lots of pages (from HN etc.) but have no time to read them all at the time of opening. They linger as background tabs until the background tabs count is so big so I have to close them all and probably never come back.
Would be cool if the browser was able to somehow unload and archive unused tabs (to free some memory), and perhaps automatically group them into several categories: say, "angularjs", "bash", "youtube", "news" etc. and provide a good interface to return to them later.
However due to sheer amount of links I follow, my problem might be unsolvable :)
* Fully open source, with clear and open licensing.
* Extensions with a permissions system that works at multiple levels of granularity. So I should be able to trust an extension but deny it some specific things (without breaking it.)
* A headless mode, with python/ruby/other bindings, so I can use it as an automation library.
I'd also like the browser to ensure that websites can't read my identity when I'm browsing in an unrelated tab. Something like a variant of RequestPolicy.
- Extensive customizability of the interface
- Proper tab management (tiling, cascade, positioning) and tab stacking
- Mouse gestures
- Content blocker baked in
- RSS reader included
- Better cookie control
- Per-site privacy mode
- low CPU/memory usage - no "one tab per process" - I want 10s of tabs open without wasting few GBs of memory
- fast JS
- advanced search from address bar - custom search engines with search suggestions
- customizable Speed Dial baked in - no extensions needed.
- Dragonfly instead of DevTools
- detailed page loading info, not just "Loading example.com..."
I'm hoping to get at least some of these things out of either Vivaldi or Otter Browser when they're mature enough...
Good OS integration
Prioritization of power efficiency over performance
Built in request-based ad blocking like that found in iOS 9/El Capitan Safari
Tabs in a list on the side of the window
Per tab processes
In-browser video playback handled by embedded mpv
General focus on being a vehicle for viewing websites rather than trying to be an application platform
-Less continuous disk usage for caching and stuff, batch all disk writes together every now and then or so
-Something to block the new type of popup, the type that brings some thing to the foreground and shades the background
- Search through them better (by indexing their content and subject, autolabeling while allowing custom labels). (As a side-note, star-searching in Firefox is an undiscoverable feature; the new tab page should offer a way to do that.)
- Give a visual organization la Desktop / iOS app layout. Currently, the new tab page gives the six most common sites, which subconsciously forces me to forget about the seventh most common site I visit.
- Give a neat access to offline webapps. Right now, going to one is inconvenient.
Most of all, include tab freezing by default (to remove the memory, stop the JS, etc. without having to close the tab)
Very lightweight, low CPU usage.
Extensible, easy to write addons.
Keyboard shortcuts, single-key shortcuts for everything.
A good bookmark manager.
Customisable till the very end, through a simple to understand menu instead of the about:config way.
Minimal, no mail or RSS client, just the vanilla browser.
Superb in-memory caching for instant page navigation.
In fact, the old Opera had nearly all these features before they went and messed it all up, making it a chrome clone in a different skin. I was a paid user since the 2.x days.
Firefox was built on that ideology. Until it became the same monster that it was supposed to replace. The same thing is happening to chrome.
- full libre gpl3'ed codebase including plugins and extensions.
- immediate disclosure of all security problems (in the hope they get fixed promptly). the socalled "responsible" delayed disclosures annoy me to no end. let every exploit be a 0day exploit and leave it to the user to decide, at least it'll be an informed user!
Possibly also tree-like relationships between tabs so that subtrees of tabs can be operated on as a unit.
Textareas that don't suck.
Fork of Chromium without:
- all Google things
- Non-browser things like accounts and pdf viewers.
- attempt https if protocol is not provided
- blocking all js unless whitelisted
- blocking all requests to 3rd party domains unless whitelisted
- blocking all attempts to hijack right mouse clicks
- blocking all redirect attempts unless whitelisted
- destruction of all cookies/web storage on start/close unless whitelisted
That browser is dead now :(
Solves the security issue right there, aint nobody tracking me now. I'd like to see 1337 kidz xploit that paper. Escalate that privilege , from my rocking chair! And let me choose from a number of layouts. The smell of that fresh printers ink, nothing like it!
Bits and scroll bars and cookies. No taste, it's just trash.
- It must be ultra lightweight: fast when starting up, fast when handling load of tabs, just fast.
- Doing _one single thing_ exceptionally well: enable the user to browse. Built-in modularity means add-ons/plug-ins/etc can optionally be added to expand the browser capabilities.
Make device fingerprinting impossible.
Tabbing should be separated according to the context.
Bookmarking should be improved.
Instead of a plain web browser the program should work as a knowledge access/management system.
Even if i open many tabs shouldnt freeze or crash, Thats one of the most important thing i care about, Mostly firefox does that, keeps crashing if you open many tabs.
Would be great if allows to sync with mobile, like if i enjoy a website and display right away on my mobile, instead of using extension it should the out of the box. We are living on a mobile world now.
- pet-peeve: "disable JS" ON by default (option now buried in the guts of Firefox)
Benefits: speed, privacy (less interaction with CDNs).
- No phoning home
- In-built privacy protection
I'd also love for there to be a Unix-ish interface for browser plugins/extensions that isn't dependent on a specific language (or, if it is, for that language to be something C-compatible for maximum FFI compatibility). The more I can do without touching a single line of JS, the better.
A few months ago I was thinking about the old MinWin improvements (to Windows' basic core services), how Windows 8.1/10 are (arguably) smaller and lighter than Vista, etc... and it clicked: Microsoft have realized they're no longer the "hardware industry killer app," if you will, and have moved out of the way... to let the Web take its place.
In my opinion, Web browsers are basically mind-bogglingly complex rube goldberg machines, based on conflicting standards that are also rube goldberg machines, and the whole scene is basically meta-rube-goldberg-ception.
A lot of the complexity and conflict is mostly due to the history and tradition behind the technologies we're using: on the one hand, all you want is arbitrary sandboxed code execution and sane UI; on the other hand, sites start delivering content exclusively via JS and everyone gets mad. And in the meantime, who audits their web browsers? What was that about "safe" code execution, where the browser protects you from "nasty" code? We hear about the browsers themselves doing the wrong thing by users almost every week.
We need to fight this. I've come to the conclusion that the only way this can be done is to simply make the effort and do the hard graft to port a bunch of existing applications to a new coherent, practical modality/paradigm, dump the whole thing on an unsuspecting world, and wait to see what happens next. It might catch on. It might not. Get feedback, try again. Keep trying until it goes viral enough to make a dent and improve people's lives.
There are so many interesting and fascinating UI experiments out there, but nobody seems to want to commit to actually practically trying out a few of them in real applications :( and I think that's what's holding everything back - everyone's waiting for everyone else to make the first move.
Here's where I'd start: everything should be able to send messages to everything else, to work around the language problem; everything should be an object with arbitrarily settable properties - everything from the files in the filesystem to the windows on the screen; with the appropriate security context surrounding everything, you could do crazy things like programmatically share the tags you attach to the files you share over P2P, or tag images with text descriptions of their contents; the console should be inherently textual but in such a way that it is exclusively touch-gesture-drivable; I strongly believe in the anti-mac/post-mac UX paradigm; I believe that it's impossible to create the "ultimate" solution that will work for everyone, and that all I can ever hope to do is nudge everything in what I think is a good general direction. And the only sane way to release an implementation like this is to put it into the public domain.
Agh, this probably reads like a rant, and I guess it is. I'm just not sure where to start, although I do have some ideas. Incidentally, I frequently use "asmqb7" on the web, including for my Gmail account.
Which is why I first and foremost want my ideal browser to not be owned or beholden to a major corporation that will abuse it for it's own purposes, like Google, Apple or Microsoft.
We have an alternate method of understanding how software developed, which is to look at revision control commits. This method falls more in line with the techniques of development and the genuine evolution of the codebase. Recall that revision control methods were still being improved well after Knuth wrote about literate programming, and the available systems, where people used them(and a lot of shops didn't), weren't nearly as fine-grained back in the 1980's.
Personal experience: I tried using "Leo", an outlining and literate programming text editor, for a project. Although the documentation capability was nice temporarily and gave me an additional method of structure and organization, the hooks messed around with some formatting and refactoring operations, and most of the time, the benefit wasn't clear. The time I spent on the documentation could have gone - from my current perspective - into making the code smaller and simpler. At the time, I didn't know how that would be possible, thus I focused on defending against the complexity by adding more.
A lot of our preconceptions about what makes code both look good and behave well are temporary. That makes it hard to come up with a sensible system of organization, as we'll put effort in to enumerate and categorize only to discover that it falls apart.
Rmarkdown example: http://kbroman.org/knitr_knutshell/pages/Rmarkdown.html
iPython notebook example: http://nbviewer.ipython.org/github/empet/Math/blob/master/Do...
I've talked to Knuth. He claims he could not have implemented MMIX without literate programming. Literate programming is really valuable but you only understand that once you really try it. I gave a talk on this subject at the WriteTheDocs conference:https://www.youtube.com/watch?v=Av0PQDVTP4A
You can write a literate program in any language, for instance, in HTML:http://axiom-developer.org/axiom-website/litprog.html
There are some "gold standard" literate programs:"Physically Based Rendering" by Pharr and Humphreys won an academy award. "Lisp in Small Pieces" contains a complete lisp implementation including the interpreter and compiler. The book "Implementing Elliptic Curve Cryptography" is another example.
Suppose your business depends on a program. Suppose your team leaves (they all do eventually). Suppose you need to change it... THAT's why you need literate programming. Nobody is going be around to remember that the strange block of code is there to handle Palm Pilots.
Companies should hire language majors, make them Editor-in-Chief, and put them on every programming team. Nobody checks in code until there is at least a paragraph that explains WHY this code was written. Anybody can figure out WHAT it does but reverse-engineering WHY it does it can be hard.
Imagine a physics textbook that was "just the equations" without any surrounding text. That's the way we write code today. It is true that the equations are the essence but without the surrounding text they are quite opaque.
Imagine how easy it would be to hire someone. You give them the current version of the book, send them to Hawaii for two weeks, and when they return they can maintain and modify the system as well as the rest of the team.
Do yourself a favor, buy a copy of Physically Based Rendering. Consider it to be the standard of excellence that you expect from a professional programmer. Then decide to be a professional and hold yourself to that standard.
Literate programming hasn't "taken off" only in the sense that few people are performing the type of tranquil and rigorous work it was made for. Much of the (admittedly difficult) work being done by programmers today is in fact trivial. The difficulty comes from attempting to solve ill-specified or constantly changing requirements by glueing together a constantly changing set of frameworks and tools.
However, I would suggest that even in organization whose primary responsibility is wrangling with a messy soup of ill-defined requirements as fast as possible, there are often sub-problems whose treatment is amenable for the use of literate program, such as a library implementing a unique and non-trivial algorithm. In such cases, it can be worthwhile to carve out an island of tranquility, clear prose, and rigor, even if it means using slightly different tooling than the rest of the project.
It's one thing to imagine a profession of literate programming as practiced by Donald Knuth; it's another thing entirely to imagine it as practiced by the kind of people who are actually writing code.
Literate programming is based on the idea that you should explain what software does and how it does it in detail so that a reader can follow along and learn. That works great for TeX, which hasn't changed significantly since 1982. It works less great for say, Google/Alphabet, which wasn't even the same company last week.
The general problem with documentation is that it gets out of date as the software evolves to fit new requirements. Most real-world products face new requirements on a weekly, sometimes hourly basis; as a result, most fast-growing startups have oral cultures where the way to learn about the software is to ask the last person who worked on it.
* I end up deleting most of the prose once the code starts getting good. Good code is sort of literate already.
* As others have said, when you're doing some code churn, it's difficult to maintain a narrative structure that makes sense.
* Existing frameworks, at least for web programming, encourage you do draw boundaries around individual homogenous chunks of one type of code (router, view, migration) rather than human conceptual concerns (upload a file, browse my photos, etc). In order to do a good job explaining what a view does, you need to know what the controller is providing. In order to understand that you need to understand what the domain layer is doing. Frameworks just make it really hard to put, in one file, everything necessary to explain a concern.
I still believe in the idea, but I think for literate programming to work well it has to be done in an ecosystem where the APIs are all structured for literate programming, which doesn't really exist (yet).
I think that the decision to bring code into this world is not one to be taken likely, and a literate program is simply the story of why interwoven with the implementation of what: Where did -2 come from? When I ifdef for a FreeBSD bug, how will I know if the bug is fixed (and the code can be removed/changed?) And so on.
Literate programming isn't the only "solution" to this problem. Making programs really big by duplicating efforts, and working around workarounds, using Java seems to "work" (for strange values of work), so perhaps this is a blub thing? If your code is "self documenting" then you don't know what documentation is.
That is to say: Literate programming didn't catch on because it was dismissed by the larger number of programmers who could get "things done" who didn't understand literate programming.
However, to the initiated it's mostly in the way. With short, simple methods I find it easier to decode unfamiliar code by reading the methods than the by reading the tomdocs. Like many of my cow-orkers I've configured my editor to hide the tomdocs in normal use. Writing tomdocs is a chore to be done immediately before delivering code for peer review.
That's probably the biggest weakness of literate programming: it isn't for the programmer responsible for that code, or even for that programmer a year later when she has forgotten much of it. It's more for the developer or designer that isn't fluent in the language, but still has to interact with it. Since the value to the actual coder is distant and indirect, while the work of producing it is immediate, it tends to be an early omission under any kind of stress. In our case it would disappear if not enforce by peer review.
Tl;DR: If the environment is so volatile that the code is permanently broken reverse engineering doesn't work well. In such case the documentation may be your only recourse.
(Also, it was written by someone who liked to write books, and if a book was about software, he wanted to integrate the writing of the book and the software.)
Better than literate programming is to write code that explains itself. Don't write two things, one of which executes and the other explains it; write an explanation which also executes.
In other words, don't desperately separate and literate; instead, lisperate!
My pet theory is that programmers are driven by a constant feeling of obsolescence: Most implementations are incredibly short lived so that it seems futile to optimize the code for understanding (literate programming), when much less (programming experience, comments and help by people who know the code base) is good enough. Especially the last point in parentheses is crucial: Asking someone who knows the code base is likely a more efficient superset to text, because asking can be selective, nuanced and individual while a text just stares back at you.
The project I worked on was a decade-long piece for a consortium of defence departments from various countries. We wrote in objective-C, targeting Windows and Linux. All code was written in a noweb-style markup, such that a top level of a code section would look something like this:
<<Initialise hardware>> <<Establish networking>>
<<Fetch next data packet>> <<Decode data packet>> <<Store information from data packet>> <<Create new message based on new information>>
Ultimately, the actual code of a bottom-level chunk would be written with accompanying text commentary. Commentary, though, not like the kind of comments you put inside the code. These were sections of proper prose going above each chunk (at the bottom level, chunks were pretty small and modular). They would be more a discussion of the purpose of this section of the code, with some design (and sometimes diagrams) bundled with it. When the text was munged, a beautiful pdf document containing all the code and all the commentary laid out in a sensible order was created for humans to read, and the source code was also created for the compiler to eat. The only time anyone looked directly at the source code was to check that the munging was working properly, and when debugging; there was no point working directly on a source code file, of course, because the next time you munged the literate text the source code would be newly written from that.
It worked. It worked well. But it demanded discipline. Code reviews were essential (and mandatory), but every code review was thus as much a design review as a code review, and the text and diagrams were being reviewed as much as the design; it wasn't enough to just write good code - the text had to make it easy for someone fresh to it to understand the design and layout of the code.
The chunks helped a lot. If you had a chunk you'd called <<Initialise hardware>>, that's all you'd put in it. There was no sneaking not-quite-relevant code in. The top-level design was easy to see in how the chunks were laid out. If you found that you couldn't quite fit what was needed into something, the design needed revisiting.
It forced us to keep things clean, modular and simple. It meant doing everything took longer the first time, but at the point of actually writing the code, the coder had a really good picture of exactly what it had to do and exactly where it fitted in to the grander scheme. There was little revisiting or rewriting, and usually the first version written was the last version written. It also made debugging a lot easier.
Over the four years I was working there, we made a number of deliveries to the customers for testing and integration, and as I recall they never found a single bug (which is not to say it was bug free, but they never did anything with it that we hadn't planned for and tested). The testing was likewise very solid and very thorough (tests were rightly based on the requirements and the interfaces as designed), but I like to think that the literate programming style enforced a high quality of code (and it certainly meant that the code did meet the design, which did meet the requirements).
Of course, we did have the massive advantage that the requirements were set clearly, in advance, and if they changed it was slowly and with plenty of warning. If you've not worked with requirements like that, you might be surprised just how solid you can make the code when you know before touching the keyboard for the first time exactly what the finished product is meant to do.
Why don't I see it elsewhere? I suspect lots of people have simply never considered coding in a literate style - never knew it existed.
If forces a change to how a lot of people code. Big design, up front. Many projects, especially small projects (by which I mean less than a year from initial ideas to having something in the hands of customers) in which the final product simply isn't known in advance (and thus any design is expected to change, a lot, quickly) are probably not suited - the extra drag literate programming would put on it would lengthen the time of iterative periods.
It required a lot of discipline, at lots of levels. It goes against the still popular narrative of some genius coder banging out something as fast as he can think it. Every change beyond the trivial has to be reviewed, and reviewed properly. All our reviews were done on the printed PDFs, marked up with pen. Front sheets stapled to them, listing code comments which the coder either dealt with or, in discussion, they agreed with the reviewer that the comment would be withdrawn. A really good days' work might be a half-dozen code reviews for some other coders, and touching your own keyboard only to print out the PDFs. Programmers who gathered a reputation for doing really good thorough reviews with good comments and the ability to critique people's code without offending anyone's precious sensibilities (we've all met them; people who seem to lose their sense of objectivity completely when it comes to their own code) were in demand, and it was a valued and recognised skill (being an ace at code reviews should be something we all want to put on our CVs, but I suspect a lot of employers basically never see it there) - I have definitely worked in some places in which, if a coder isn't typing, they're seen as not working, so management would have to be properly on board. I don't think literate programming is incompatible with the original agile manifesto, but I think it wouldn't survive in what that seems to have turned into.
However, a modern version of literate programming is catching on in scientific fields based on Jupyter (IPython) Notebooks. It allows running simulations and embedding results. It's fantastic for exploratory work. The main downside is transitioning code from notebooks to longer term libraries or full applications can be somewhat tricky. Here's a good write up of notebooks and science: http://peterwittek.com/reproducible-research-literate-progra...
There are many tools which support Literate Programming for many different languages. The usual reservation about additional tools applies: each member of a team needs to have it installed, build times get longer, time for a new programmer to start contributing gets longer and so on. It makes many people never even consider LP.
But, it's important to remember, that the tools you use are just an implementation detail. What's important is an idea that source code should be written to be read by humans, not only for computers to execute.
Sometimes there's a need to go over a piece of code with a colleague who doesn't know it. It happens a lot when a new programmer joins a project that has some code written already. This is because to understand the code you need to know the context it was written in. The problem is that programmers often don't document this context enough (or even not at all). This means that reading the code is essentially a reverse engineering someone's thought patterns. It's much more efficient just to sit next to the person and assist him in reading the code by providing a live, context-aware commentary.
LP is "just" that commentary written directly in the code. What's important is that you don't need any special tools to use this style in your comment if your language is flexible enough. Most dynamic languages nowadays are capable of supporting LP style. Don't take my word for it, see for yourself. You can just go and read some LP code. A couple of examples:
http://underscorejs.org/docs/underscore.html http://coffeescript.org/documentation/docs/grammar.html http://backbonejs.org/docs/backbone.html
To sum up: LP is not dead, it just changed its form a little. Many people adopted (or invented independently) this style of code structuring and commenting. Many real-life codebases are written in a literate style because it makes a real difference on how long it will take for someone new to grok the code. Such codebases use docstrings and other mechanisms available in the language to do exactly the same thing that previous LP implementations did.
Then the question becomes: which one is correct? Maybe it's just easier and cheaper to write in the language the lump of sand understands and be done with it.
Besides, literate seems to go against the current view of overcommenting as an anti-pattern.
While reading English might be OK, writing is a different story.
2) Tooling/syntax is a big part of it. I like literate programming, but most syntaxes for it turn me off. Some of it also seems very tied to particular languages. None of that helped for a concept that was always going to be a hard sell.
3) I wrote, and am refining, a version of literate programming: https://github.com/jostylr/literate-programming-lib
It uses markdown where headers are the section headers, code blocks in markdown are the code blocks to sew together, and _"header name" is the block syntax. It has a bunch of other features, but that's the core.
My hope is that this might eventually help this style to catch on in some quarters.
4) I am just a hobbyist programmer, but what I enjoy about it is the ability to organize my code in any fashion I like. In particular, I can keep chunks to a screen size. Brackets never go beyond a page. And I can stub out anything I like real easy.
Now in many programming languages, small chunks are easy to achieve in the terms of functions or objects or modules or even just variables. That is, one of the most important in-the-now useful parts of literate programming is implemented in a good-enough version, particularly with good naming conventions and decent commenting. And good enough is what keeps many from using optimal practices. Or rather, and this is important, optimal from one perspective, e.g., literate-programming can easily rub up against "no premature optimization".
On the other hand, I like not using functions for code management. I want functions to be used when a function is really needed. But that's just my preference. I also like being able to see the whole construct in the compiled code put in one place instead of having to trace it out through function calls. But I have never been big on debugging tools; if I was, this would probably be less of an issue.
5) Updating does tend to be a problem in that with the excitement of a new feature or a bug fix, it is real easy to leave bad documentation there. But that would be true of any documentation. Here at least one can quickly look at the code and see that it seems off.
6) One key feature that I like about my system is the management of multiple files, really, a kind of literate project management. I do not know if the other systems did that. This is a game changer for me. When I open a foreign code base, I have a hard time knowing where to start. In any particular file, I can see what is going on, but getting the global perspective is what is missing. Literate project management can tell you what all these files do, do pre and post compiling options (linting, concatenating, minimizing, testing, dev vs production branching, etc.), and allow a true global organization of where you want the code to be. You can have all code, styling, content for a widget all in one place. Or not. There are no constraints to your organization and that is awesome.
It is also a downside. Constraints are powerful tools and when you have a system that allows you to do anything, it can lead to severe issues, particularly (ironically), of communication. I could see teams benefiting greatly from this if they agree on organizational principles and if not, I can see this exacerbating the conflicts.
7) The hurdle to get over is "Is it going to make it quicker to get my code done?" And I don't think previous tools have done this. I am hoping my tool will do this for the web stack. That stack is a mess and we need organization for it. For other programming languages and tasks, I don't think this is as glaring a need. It often feels a lot like just reversing the comments as literate-coffeescript seems to be. In the hands of a master, such as Knuth, a literate programming is a gem of wonder. But for most, including me, it is a different beast and may not be that pretty.
8) Programmers may have an irrational fear of writing. As a mathematician, I see many adults, even programmers, fear math for no reason whatsoever. The same may be true of prose, at least sufficiently so to discourage the desire to use this. Note that I think they could do it, but that they think they cannot. But I am an optimist.
Because it was so successful.
Computer programming, by contrast, is so explicit and obvious. The subtlety is lost. And with it, our humanity ( and ability to be subtly manipulated by forces beyond our comprehension and below our level of conscious perception ! ).
Culture is the original literate programming language. Instruction pointer for the collective mind.Virtual machine of choice ? Books. And your reading of them.
* Is it just interspersing documentations with the code?
* or Is it an idea of writing code in the style of communications?
There is subtle difference. The former is writing code first, then write documentation to explain the code (without changing the code significantly). For the latter, one may still write code, but he is not writing the code just to get computer working; rather he is writing code for the first purpose of communicating (to human).
In the first style, the program, stripping away documentation, is pretty much a working code as is. Yes, in many so called literate programming, the documentation are readily to be compiled into pretty web pages or pdf, but they are just pretty documentation. In the second style, the code is, to large extent, rearranged (to the computer, scrambled) due to the need of expressing ideas to human. Often a complex parser program is needed to re-arrange the code into computer acceptable form -- such is the case of Knuth's WEB.
Maybe I am over guessing, but I think many readers are only thinking in the first style (documentation+code) when they are commenting on literate programming.
And maybe my interpretation does not even fit Knuth's original idea of literate programming, but in my interpretation, the ultimate literate programming is just code, in the style of written language, arranged like a book, and readable by most literate readers (who possess the basic background -- the background knowledge of the problem domain and the background knowledge of how computer runs, in addition to basic set of vocabulary) as is, and with a compiler, can be translated into a formal programming language or machine code directly and run by the computer. I find Knuth's example -- writing two versions of the program (the code and the documentation) -- a compromise due to lack of compiler power and impractical -- who, after spending so much effort get the code written and debugged and barely worked, still have the energy to write article to explain it -- especially with no apparent readers in sight?
EDIT: In a high level view, there is just one code, but two groups of readers/listeners -- the human group and the computer machine group. In the first stage, computers are limited in power and parsers/compilers are dumb, so the code has to cater for the machines, and have the human readers stretch themselves to read the code (in so-called programming language). In the next stage, every day computer is powerful enough and it can take in more background knowledge (common vocabulary, idioms, styles and some common algorithm, scientific facts, international conventions, or individual/group/corporate conventions),and this stage will allow code be written in some sorts of middle ground. Then the final stage is of course with AI that can understand most human communications. I think we are ready to enter the early second stage -- there is capabilities and early signs, with most people's mind is still well stuck in the first stage.
I would say it depends what you are trying to achieve.
If it is a regular old web application then .NET will shine, giving you the MVC5 framework which is similar to rails, excellent database mapping, a well integrated web server, authentication and other web concerns out of the box, integration of odata. Let alone the strong typing and excellent generics which is probably the best of the C++esque languages (but its no Hindley Milner but that isn't of much practical importance for a startup).
Maybe use GO if you need it to run cross platform, need to do some insane performance tuning or heavy systems programming. I.e. you are starting a digital ocean or something like that.
Running .NET on linux is possible but may be more limiting. So you are probably running on Windows and the server costs could be higher BUT more than paid off by saved developer costs.
Of course you are also free to use both GO and .NET, using GO where it shines and .NET for the rest of the more prosaic businessey stuff.
On hiring - you will find more .NET devs for sure. Also .NET has been around a lot longer, C# is always getting great new features and there is the excellent F# if you need to do functional programming.
Your biggest consideration as a startup is rapid development and time to market. .NET will get you there faster. Click a button and you have a boostrap-designed, authentication enabled application with a DB back end in a few seconds that you can easily extend. You can get an MVP out in a few hours in .NET.
Without knowing more about your application, I would say it is 99% likely .NET would be a better choice.
Also, in the end, you will likely change your structure more than once from the first MVP, so I would just make a decision and move forward fast.
As for my opinion. C# is still primarily a Windows environment solution (although its getting better), Golang is a little bit more agnostic but I wouldn't use it anywhere but in a linux environment. My choice would be golang if those were my only two options, mostly because I feel the ecosystem, scaling and cost is better not to be in the Microsoft environment for a startup. However, if you are planning for a Windows based environment, then nothing beats C# IMO.
There are completely valid options that are neither of these languages, nodejs, python or some JVM based languages. I generally avoid the JVM, but that is a personal preference based on my experiences and I recognize plenty of amazing systems are built on JVM based languages all the time.
That's too bad, as I'd recommend Java and/or the raft of excellent languages available on the JVM.
With C# you're effectively locking yourselves into Windows, which seems a terrible decision from both a cost and scalability standpoint.
With golang you're losing the vast array of open source packages available for the JVM, as well as locking yourselves into a single language which may or may not fit your future needs well.
Scala in particular is an interesting JVM language. Clojure and many others are worth a look as well.
Pull the plug and all e-records become inaccessible.
As far as cash goes, have you considered freelancing?
Hands down, the TR1200-DT3 is the best treadmill desk out there right now. Their bluetooth app is crap, but as a treadmill actually designed for office use, this is perfect. Read this amazon review for ways to customize the programming to be less annoying:
LifeSpan also has a more heavy-duty model, the TR5000-DT3, $2000. If you're buying for an office setting where multiple people will be using it for more than 6 hours/day, get this one.
iMovR will have a new unit coming out, the ThermoTread GT Desk Treadmill, that MAY be just as good or better, but you won't get it until the end of the year at the earliest.
That's kind of the state of the art in treadmill desks right now. I imagine there will be more options in a year or two, but the LifeSpan models are by far the best options today.
Ask me how I know.
Here's my setup and what I learned: http://troy.yort.com/notes-on-standing-desk/
I also attached an iPad holder (http://www.amazon.com/gp/product/B00D5YUBNO). For someone without a standing desk, the bike+iPad alone would be a great compromise (reading, watching videos, composing emails, etc).
: Most office treadmills are designed for 1.5-2 MPH slow walks because it's hard to type while jogging, let alone running. OTOH, using a computer while biking at 13-15 MPH isn't hard, and using a tablet is easy. More: https://en.wikipedia.org/wiki/Metabolic_equivalent
Precor 956i with the entire upper structure removed - control panel is not visible but on the left. I bought it from a gym going out of business.
Lift is a Conset 501-11 1B116. I don't remember who I bought it from. Google Conset 501-11 and you will find many Conset resellers.
I made the table top.
It's been going strong for 6+ years. I no longer work at home so I don't use it but my wife does her writing - about 10-15 hours week - on the treadmill.
I did recently change my home office to treadmill desk. I'm from Finland, so I won't give any product recommendations. One thing I noticed it is very hard to find information about treadmills that you don't plan to use just for running, and might need to lose the handrails.
Long answer would depend on questions like how much space you have, how much do you weight, budget, planning to run also, do you have a desk already and how adjustable it is, and so on.
I think I only found one site on the net that talked about making your own treadmill desk. As the luck would have, he used the same cheap model I managed to track down (about $200). If you go cheap, it probably fits better and you can get rid of the handrails if need be. If it's more expensive, it probably is so sturdy that your standing desk needs larger adjustments to fit around and on top of it.
For me the Ergotron setup I have needs heavier setup to wall, but other than that, things work fine. When this cheaply made and assembled treadmill I got breaks I don't know if I give up on the concept, since I'd really like to use bigger and sturdier treadmill, but that takes so much more space.
Or you can get specifically for desk use made treadmill and even a desk to go with it. 2000 was the web price here.
If for exercise reasons - its far better to just go jogging / running for a few minutes each day?
What makes your solution better than Quickbooks or GnuCash?
What percentage of the market for free-lancer programmers can a bespoke product capture?
Why go through all the development effort of a book-keeping program and then only target it at a very limited market?
I have my own rails app that handles time tracking, and invoices. (Some customers just log into the app, and pay their bills without my involvement.) I spend about two hours a month on invoices.
This article has some stats - http://fortune.com/2012/11/27/welcome-to-the-age-of-the-free...
I have a Conset 501-27 legs with a custom top, and it's been great. 
Last I looked, hand crank desks weren't much cheaper than the motorized ones.
If you really like (and it takes a good month for you feet to get conditioned to the change) then you'll have your answer :)
Here's a few of the commercial options that I considered:
* Crank-adjustable desk frame: www.amazon.com/Ergo-Elements-Adjustable-Standing-Black/dp/B00YE6CRY8 with an IKEA desk top, perhaps. I also considered using a solid wood door that a friend was going to give me, but it was quite heavy and looked pretty bad.
* The IKEA electric standing desk (Bekant): http://www.ikea.com/us/en/catalog/products/S19022530/ A couple friends have had mixed success with this one. If you live near an IKEA, go check it out in person.
* A fixed standing desk and a tall stool (this is likely the cheapest option and would be the easiest to build yourself). Nothing in particular that I can link to on this one, but if you can find something that has the desk top at > 40" from the ground, that's probably a good candidate. I'm 6'0" and my standing preset is at 43.5" (sitting is 27" if you're curious).
* NextDesk - this is the one I ended up going with. I got the Terra (http://www.nextdesks.com/terra) and I'm very happy with it. It's expensive, but it felt a lot more solid than many of the other options that I looked into, and at the end of the day, it's holding a lot of expensive things. I don't want any issues with it, particularly those that result in the damage or destruction of my electronics.
A question, though: you said you didn't want electronics or a motor. I'm curious - why not? I'm assuming you're a developer, and you're going to have a computer at your desk, so there's likely power nearby. Is it a philosophical thing or something?
Incredibly well crafted (& in full disclosure: made by a friend!)
If you're good at woodworking, build it. You can be better than a warranty- be your own repair guy. I've never checked, but I would imagine there's a community online which can point you to guides & plans/prints.
Either way, I wish you the best.
If you don't find any table tops to your liking you can buy solid wood fireproof door blanks at a hardware supply and use that instead. They have serious heft and will last and are relatively cheap.
Having a good high stool to sit on when you don't feel like standing is also useful.
I have seen and witnessed this proposition in many areas of society. In my opinion, this stance is based on the idea that a given person's lifetime is all that matters. It has completely no concern for the future of humanity or the sustainability of the greater system.
You may not be discovered on your deceptions now, but the effects of them have lasting detriments. And sometimes those lies may come back to bite your children, your nation, your race, your species, or even your planet in the long run. In the social sense, you are a representative of any group in which you affiliate. In the flesh sense, you are a representative of your genes. In the practical sense, you affect the world around you.
I'll say this: if you've been sticking to PHP to avoid all these things I mentioned then you'll do yourself a favor by picking almost anything (I'd say Rails or a Node stack) and getting into it. Once you get the concepts of these stacks you can use that knowledge to jump to other stacks a lot easier as well. Eventually it all feels kind of similar. You'd even be fine to stick to PHP but would be a much better PHP developer after nailing some of those concepts.
They're relatively easy to learn, well-documented, and are pretty in demand on the job market.
Regardless of what you do, learn how to use modern, vanilla JS in place of jQuery. There is often no reason to use jQuery these days if you're targeting modern browsers. With `document.querySelector`, you can even replicate the selection capabilities of the jQuery `$`.
After all, the two most important skills in software development are the ability to learn and the ability to solve problems.
A stack with a steep learning curve is likely to improve both of these skills.
For back end, I run Vagrant + Ansible with PHP composer
Front end, it's bower + grunt
My other tools are Vim + Tmux.
For data and webscrapping I use scrapy (python framework).
The current project I have is what I've listed and going to learn Apache Spark and Elasticsearch. I'm currently stuck on learning Ansible to provision stuff.
I think many worthwhile things are going to require some learning curve whether it's steep or not is more up to the individual.
I'm putting off AngularJS, EmberJS, React stuff. I think it's to early. Likewise Docker and container are too early. I'm waiting on perhaps Docker 2.0 and some technical book out. Kubernates in my personal opinion is really an Alpha software there are many caveats.
I'm thinking of moving to Django/Python stack in my next project and tinkering with Apache Accumulo.
Seriously: if you fear a steep learning curve, replace one item of what you use now. For example, replace MySQL by PostgreSQL, then replace PHP by something else, then move out JQuery.
Don't obsess about changing too much. Speaking with a colleague, he was asked why he chose mainframe as his career.
"It doesn't change much. COBOL, DB2, CICS, JCL, etc. I can learn them and the applications to a deep level, and not worry about that learning going out of date. That lets me focus on getting deeper and understanding the business applications of why we do what we do."
"The right tool for the job" requires consideration of both the tool and the job.
The problem with separating one kind of AI from another (such as machine learning) is that anything we do with a computer can be described at as a Chinese Room  at a high level of abstraction.
They were able to provide an in-depth answer to a question I had asked various communities about & received no answer to.
It's a paid service, charging ~$20 per answer, but I didn't have to pay for some reason- I don't recall. IIRC the first question is free, but I could be wrong.
AFAIK they work mostly on reinforcement learning coupled with Neural Networks
if it's the former, work anywhere you feel you are making an impact.
if it's the latter, work in secret until you have the money to protect and launch your ideas.
this business is invested in now as if it is highly lucrative. if you are known and good you'll be agressively poached.
http://www.boomeranggmail.com/ has it as a main feature.
Also http://www.getsidekick.com/ will add it soon.
If in doubt, check: https://zen.market/?q=schedule%20emails
With gmail keyboard shortcuts work like a charm.
You can't schedule emails to be sent, however.
Along the same lines are the MISRA guidelines, though they are 1) targeted more towards embedded systems and 2) stupidly not freely available. There's an ISO standard for secure C coding (ISO/IEC TS 17961:2013) which is also not free. While you might not get to source document, there are hundreds of sites that summarize the requirements and recommendations.
SANS has a secure coding track worth checking out.
There's a tremendous amount of useful stuff in the NIST SAMATE project.
The OpenBSD folks write a lot about secure C coding.
Mozilla has some pretty good general advice at https://wiki.mozilla.org/WebAppSec/Secure_Coding_Guidelines
So does Apple: https://developer.apple.com/library/mac/documentation/Securi...
One thing to note, they split them into recommendations and rules. Recommendations are more stylistic and open to debate, whereas violations of rules generally result in definite security concerns.
If anyone has any resources to suggest, we'd like to increase our section in the Awesome Appsec list for C programming too. :)
Here is another interesting read, though again not comprehensive.
* Darrell Huff, Irving Geis How to Lie With Statistics
* Ian Ayres Super Crunchers Why Thinking-by-Numbers Is the New Way to Be Smart
* David Salsburg The Lady Tasting Tea How Statistics Revolutionized Science in the Twentieth Century
* Emanuel Deman, Models Behaving Badly
* Benoit Mandelbrot, Richard L. Hudson The Misbehavior of Markets A Fractal View of Financial Turbulence
* Nassim Taleb, Fooled by Randomness
The problem sets for the course are available free online. So you can have a look at them to decide.
There's other good books out there, but I still keep the Bertsekas book on my desk, along with Kutner's Applied Linear Regression Models.
emacs textmate2 R python / pandas jupyter notebooks (python, R, julia kernels) c++ Clojure Common Lisp linux on the server os x on my laptop ipad / prompt2 / pythonista / bluetooth keyboard
I think I might have been the last person on the planet to figure out that an iPad with a bluetooth keyboard in a coffee shop or library is a very productive work setup and that I do not need to lug my laptop everywhere.
We are living in a fantastic era and I just cannot believe the amazing free tools that are available for things like network analysis (NetworkX) and spatial visualization (ggmap).
Now that we're almost 140 people, I mostly use Gmail, Google Calendar, Sublime Text and Evernote, and Google Hangouts for engineering meetings. But, a lot of those people are using Vim and Git, so it's not all bad. :-)
Of course, we all use Anaconda Python.
Oh, and I read a whole lot less Hacker News.
JetBrains' WebStorm Node.js MongoDB Redis MySQL MyCLI Git GitLab (Hosted and Self-Hosted) Gulp FireBug Trello Slack CircleCI or Travis, depending on the project WakaTime
Debian Apache MySql PHP VIM 99designs Upwork GitHub webpagetest.org Google PagespeedInsights Google Analytics
Ruby for small things
Java to earn a living (with a bit of Ruby here and there)
OpenBSD on the server
Ubuntu for developing
Android Studio (IntelliJ) for Java
Atom with Vim Mode (and a thousand other plugins that turn it into an OS similar to how I imagine emacs) for everything else
Various APIs including Twilio, Stripe, MusicBrainz, Amazon, Shopify.
That's most of my professional and/or serious side projects, and then I dabble in other stacks when I can. Clojure lately.
VS Online/Visual Studio, Adobe Brackets, Git
The modern browser matrix & related built-in "dev tools"
Last merge was 2 months ago but it has 32 outstanding PRs so maybe he abandoned it.
Sublime Text LinqPad VS 2012 SQLServer 2008 SVN Windows 7
terminator/iTerm vagrant travis tmux Twisted ELK
Vimium w/ Chrome
For development machines, I have a company-supplied Macbook Air for work and a variety of laptops and desktops that I use for personal things. The Macbook runs OS X Yosemite. My personal machines almost invariably run GNU/Linux (I've been especially fond of Slackware lately) or OpenBSD. My primary rig has a 122-key Unicomp Model M keyboard and a Logitech M570 trackball mouse, along with two monitors (one 1680x1050, one 1440x900); my desk at work has a 2560x1440 Thunderbolt display, connected to one USB port of which are a Logitech K570 solar-powered keyboard (Mac model) and a Logitech M570 trackball mouse (I really do love these trackball mice).
My primary editor as of late is Emacs. My workflow revolves heavily around fiplr for fuzzy-searching and Magit for git repo management (on Linux / OpenBSD, at least; on OS X I use GitX).
Git is currently my VCS of choice, though this is more out of necessity (since the vast majority of the projects I work on are hosted on GitHub, be they public or private repos; I use Bitbucket somewhat as well, so I've been looking a little bit into Mercurial lately, but I've yet to really use it for real work).
My dayjob revolves around Ruby on Rails programming. As a result, common Ruby-related tools (in addition to, of course, Ruby itself) - particularly RVM and globally-installed versions of Bundler, gemr, and Rails 4 (mostly for the various generators, though I don't really use those a whole lot) - are installed on most of my machines, including the Macbook. My job is more geared toward system administration and backend programming, so I've yet to explicitly install common frontend-development tools (like Node, bower, grunt, etc.) on very many of my machines, but I do have them installed on the Macbook as a precaution.
When it comes to building personal projects, my go-to languages have been Ruby (without Rails; I'm more a Sinatra/Padrino fan) and Elixir (recently with Sugar, which I find to be much friendlier to use than Phoenix). I maintain some private Erlang and Elixir Slackbuilds to that effect in order to track the latest versions of both on my Slackware machines (the Erlang on Slackbuilds.org tends to be slow to update, and AFAIK there's no Elixir Slackbuild at all yet); I've yet to publish them, but probably will in time. I've previously used a lot of Perl in my projects, but other than CPAN, I rarely use any Perl-specific tooling.
For databases, SQLite and PostgreSQL are my go-tos; I stay clear of NoSQL databases (except perhaps CouchDB or Mnesia), since I don't feel that they offer anything compelling over Postgres for my needs.
Going into servers, my software stack tends to stick to Slackware or OpenBSD. My mail server runs OpenBSD with OpenSMTPD and a mail pipeline that includes SpamAssassin, spamd, and ClamAV. Meanwhile, for web servers, I generally go with either Nginx or OpenBSD's httpd (depending on whether the server runs Slackware or OpenBSD), along with PostgreSQL and one or more language runtimes (usually Ruby, Elixir, or Perl, inclusively, as described above). I don't really use any sort of config management system (like Chef or Puppet) on my personal servers; I prefer to configure them individually, using Emacs' TRAMP to edit configuration files over SSH.
I do some general electronics repair, too, on my free time. I thus carry around a physical toolbox in my truck with at least basic tools and parts (screwdrivers (particularly my really nice ratcheting screwdriver with a bunch of electronics-specific bits), spare USB/ethernet/power/SATA/etc. cables, wire strippers, soldering iron w/ solder, electrical tape, duct tape, crimpers, spare RJ-45 connectors, heatshrink tubing, zip ties for cable management, anti-static strap, multimeter, some spare PCI peripherals (including a spare dial-up modem card; you never know when you need to fix someone's dial-up), extra keyboards and mice, bag of spare jumpers, spare flashlight (in addition to the one in my glovebox), some sticks of DDR and DDR2 RAM, various AV cables, speaker wire, the works). I have a more thorough superset at home, and a thinner subset at work.
... I think that about covers everything.
EDIT: BTW, this is exactly how I got my first job... I wrote a demo app and showed it to a potential employer. It was enough to get my foot in the door at a place where I had the privilege of working long hours for low salary until I had enough experience to apply for more desirable positions. Confidence and shoe leather can be as good as an formal education... good luck :)
Yep, they're plenty to land you a job.
Like others have mentioned, this in particular is hard to evaluate without a. source code, b. demo login. Otherwise, all I can glean from this is that you know how to make landing pages :P
But I wanted to point out some design issues I found in your sites. This may or may not actually affect your candidacy, but I thought you should know about them in general as it might signal a lack of attention to detail:
a. Ex: https://i.gyazo.com/205c90719b7e16c19d29fba8b27006c9.png - the error messages are unstyled.
b. Ex: https://i.gyazo.com/fa23a197fa0adb4f8fc0a9aa88ae3797.png - the error message here is too small for me to read.
c. Ex: https://i.gyazo.com/fa3dcbe0c61735b8f958d4d556f57526.png - This is nearly impossible for me to read.
Basically this would signal to me that you're likely not too design-inclined and I would probably focus more on your backend abilities (if given source code). These would be red flags if you were applying for a position that involved design or UX though.
As far as landing a job. I see you already got a lead. I feel like dumbass now. These kind of apps I made just for fun with web.py and felt it's way too simple to pitch similar demos for a job. Even entry level ones.....I think I am suffering from imposter syndrome.
Good luck to you and thanks for reminding me of some things....
Best of luck! I think you'll do just fine! :)