I didn't realize this was just a discussion thread here, and I opened two tabs like I usually do - one for the main link and one for the HN thread. In this case I got two tabs with the same HN thread. :)
It's no longer maintained, and most likely not functioning, but still running on Heroku. (tangerine.herokuapp.com)
Here is what it looked like : http://imgur.com/a/aOgf1
We ended up taking out most of stock Django and only using the router and controller functions.
One thing that I have found to be very important is: don't fight grief.
I've realized it's a normal feeling, you should let yourself feel it, it's only worse if you try to fight it.
Remembering "the good times" with common friends/relatives/??? instead of racking your brain with the "why" also seems to make it a bit better.
Other than that, only time will fix things.
Sorry for your loss.
To be candid, I have no idea what it feels like to be blind and have never paid much attention to accessibility other than reading a tutorial or two and making sure I use alt tags on my images. The main reason for that is that I'm lazy and based on my experience, most developers are in the same boat.
Now, if there was a service which would spin up a remote VM session inside my browser (a bit like BrowserStack or SauceLabs do) with all screen reader software setup and no screen (only audio), it'd make it a lot easier for me to experience my software as a blind user. There should probably also be a walkthrough to help new users use the screen reader and help them get started. If you're lucky, you could turn this into a business and it could indirectly help you achieve your goal of making better software for the blind by exposing more of us to your issues.
Anyways, I know you probably have more pressing issues to solve and I hope I didn't come across as arrogant, just throwing the idea out there.
I would be very interested to learn how visually impaired developers such as yourself and others got started, and for any suggestions for how I can make my student's experience more positive.
First off, you're 100% correct when you talk about how devtools are inaccessible. This problem is an historic one, stretching back as far as early versions of Visual Studio, or other early IDEs on Windows. Basically, the people who build the tools make the tools for themselves, and not being blind, make inaccessible by default tooling.
I do most of my work on Windows, using the NVDA screen reader, and consequently I have the ability to write or use add-ons for my screen reader to help with a variety of tasks. This being said, this always means more work for equal access, if access is even possible.
I'm interested in any sort of collaborative effort you might propose. Targeting accessibility issues in common devtools does seem to me like a reasonable place to start attacking this problem.I had read a few months ago that Marco Zehe, a blind developer at Mozilla, was pushing some work forward for the Firefox devtools, but haven't heard much about that recently, and I think they might be distracted trying to get a11y and e10s working together.
Basically, I'm interested in helping in any way you might suggest, and from the thread here it looks like there are some enthusiastic people at least willing to listen.My email is in my profile, let's make something awesome.
If you have an interest in Braille and have software development skills there might be something to do there. The UI program that drives our prototypes is open source and available on GitHub. https://github.com/Bristol-Braille/canute-ui
We have plans to open source the hardware as well.
If you want to add support at a lower level, our current USB protocol is outlined in this repository. It is a a dev-kit I knocked together to allow some Google engineers to write drivers for BRLTTY (and thus for ChromeOS).https://github.com/Bristol-Braille/canute-dev-kit
For any developer, it's important to practice your craft, and when looking for a job, it's valuable to have a portfolio of work you've contributed to. So you can get multiple benefit by helping create a tool which will help you be more productive, and also show your skill.
Clearly, this project should be something that you're passionate about, but one project I've had on my when-I-have-time list is below - I would be happy to work with others who are interested (@blinddev @ctoth @jareds).
After your text editor / IDE, one of the next most important tools is a tool for tracking bugs/tasks. Unfortunately, many of the common ones, like VSTS, Jira, and Trello, are either not accessible, or at least not productively usable with a screen reader.
Over my career I've developed my own scripts for working with such systems, but it would be good to have something that others can also benefit from. I should probably put my initial bits on Github, but time is currently consumed by other projects. Email me if this interests you. Also happy to mentor on general career challenges around being a blind software engineer.
For example, could you read this article and then give an overview of the main issues of web site performance? Could you then come up with one recommendation for a performance improvement in a code base you're familiar with? Could you justify in practical terms why your recommendation was the best bang for the buck, vs. other other possible improvements?https://medium.baqend.com/building-a-shop-with-sub-second-pa...
Now, how do you judge yourself?
1). Have the conversation with a dev whose skills and opinion you trust.
2). Record your answers on audio, and ask someone on HN to give you fair and constructive feedback. Many here would be glad to do this (feel free to ping me as well).
My sight issues are not comparable to being blind, but as an example, I've asked Pandora for simple accessibility improvements for years and they never take action. Have even offered to write (less than a page) the code for them.
Would they (and software tool vendors) feel the same way if this were highlighted on a high traffic web page?
The world can certainly use more open source accessibility standards, protocols and tools.
See our first demo: https://blockly-demo.appspot.com/static/demos/accessible/ind...
Right now, it is effectively a different renderer for the same abstract syntax tree. We'd love to see people evaluate the direction we are currently going, and possibly apply the same accessible navigation to our existing render.
In terms of dev tools, Blockly blocks are usually constructed using Blockly (https://blockly-demo.appspot.com/static/demos/blockfactory/i...). That said, no one has considered what it would take to make our dev tools blind accessible. The fundamentals are there.
Granted, Blockly programming is far from being as powerful as other languages. It is aimed at novice programmers, whether for casual use or to teach the fundamentals of computational thinking. You can write an app in Blockly (http://appinventor.mit.edu/).
If anyone is interested, reach out to us: https://groups.google.com/forum/#!forum/blockly
As a partially sighted developer, I generally use a screen reader for web browsing and email, but read the screen visually for my actual programming work. So I don't have significant first-hand experience with the accessibility (or lack thereof) of development tools. But some of my totally blind programmer friends have expressed some frustration with the accessibility of some tools, especially web applications. They generally use Windows with NVDA (http://www.nvaccess.org/). At least with NVDA, you can write add-ons (in Python) to help with specific applications and tasks.
I am not blind, but I designed it to operate without looking at screen.If the app will take off, I'm considering into forking/pivoting into RSS reader that also is not using screen. App is already accepted in the app store, I'm sorting out launch details.
Please accept my deepest apologies for the shitty job we (the developers ) are doing at providing interfaces for vision impaired.
Probably when we're all old, we'll have vision problems of our own :).
All of the complaining I do about JIRA aside, I do find it to be a reasonably usable tool for what I need (page load times annoy me far more than accessibility issues). There are some tasks that I cannot complete (reordering backlog items), but I collaborate with team members, which can help us all to have better context about the rationale for changes.
Gitlab I find quite poorly accessible, but thankfully it is just a UI on top of an otherwise excellent tool (git). I find that the same trick that works with evaluating GitHub PRs works with Gitlab MRs. If you putt .diff after the URL to a PR or MR, you can see the raw output of the diff of the branches being compared.
Debuggers are definitely my biggest current pain point. I tend to use MacGDBp for PHP. This is quite reasonably accessible. It allows me to step through code, to see the value of all variables, and to understand the file / line number being executed. It isn't possible to see the exact line of code, so I need to have my code editor open and to track along.
I'd be happy to learn more about any projects you take on to improve web application development tools and practices for persons with disabilities. Feel free to reach out on LinkedIn if you would like to talk.
I'm mostly responding to encourage you to keep at it, and if you haven't tried Mac OS, maybe give it a whirl. Apple is pretty good about accessibility and their accessibility team is very good at accepting and acting upon feedback.
 http://github.com/jscheid/kite http://emacspeak.sourceforge.net/
A super-rudimentary basic version will be something I finish when I've the time in the coming months. I was hoping to get some interested from the blind community and get ideas for further OSS work involving that general space (editors).
I would be happy to help.
Another interesting idea: try using braille screen for ourselves, so we as dev's will be able to work at complete darkness without any light :)
I'm a seeing student with an upcoming six week block of time to do a out of school project. I have previous experience developing accessable software and would love to work with you. If you're interested, shoot me an email at email@example.com
Send me an email; my address is in my profile.
Do let me know how to contact you.
If you do contact him please blame me so he can shout at me, not you, if I made the wrong guess here.
I'm not sure that using tools that try to provide a good visual experience is the right approach. Have you tried writing scrapers that provide an optimized textual representation?
There is also a fair amount of research out there on the topic (see Richard Ladner at UW).
Feel free to send me an email if you get anything going!
Clients want sites that implement current SEO best practices. What sort of best practices are those? A Yoast SEO plugin, maybe. Developers often mention the URL structure of the site itself, say it's "clean." This might be appreciated by future admins of the site, but it's unrelated to the goal of making pages that can be scraped.
It surprises me developers and SEOs overlook the difficulty of scraping the web. Keyword density does very little to help a page that cannot easily be serialized to a database. It's true that machines have come a long way. Google sees text loaded into the DOM dynamically, for example. But its algorithms remain deeply skeptical of ( or maybe just confused by ) pages I've made that make a lot of hot changes to the DOM.
And why wouldn't it be? I ask myself how would I cope with a succession of before and after states, identify conflicts, and merge all those objects into a cached image. Badly, sure. At this point, summarizing what the page "says" is no longer a deterministic function of the static page. Perhaps machine learning algorithms of the future will more and more resemble riveting court dramas where various mappings are proposed, compared to various procedural precedents, and rejected until a verdict is reached.
I wasn't very good at SEO. I found web scrapers completely fascinating, I spent way more time reading white papers on Google Research and trying to build a homemade facsimile of Google. Come to think of it, I did very little actual work. But I took a lot of useful lessons that have served me well as a developer.
I realized, for example, how many great websites there are that are utterly inaccessible to the visually impaired. With very few exceptions, these sites inhabit this sort of "gray web," unobservable to the vast majority of the world's eyeballs. The difficulty of crawling the web isn't simply related to the difficulty of summarizing a rich, interactive, content experience. They are instances of the same problem. If I really wanted to know how my site's SEO stacks up against the competition, I would not hire an SEO to tell me, I would hire a blind person.
Firstly, just offhand, the following stacks should be fully accessible with current tools: Node.js, Rust, Python, truly cross-platform C++, Java, Scala, Ruby, PHP, Haskell, and Erlang. If you use any of these, you can work completely from a terminal, access servers via SSH through Cygwin or Bash for Windows, and do editing via an SFTP client (WinSCP works reasonably, at least with NVDA). Notepad++ also makes a perfectly adequate editor, again with NVDA; I'm not sure about jaws if you're using that.
GitHub has a command line tool called hub that can be used to do some things, and is otherwise pretty accessible. Not perfect, but certainly usable enough that NVDA (one of the most popular screen readers) uses it now. Many other project management systems have command line tools as well. If you write alternatives to project management tools, you will have to convince your employer to use them. Replacing these makes you less employable. You need to work to make them accessible, perhaps by getting a job on an accessibility team.
The stacks you are locked out of--primarily anything Microsoft and anything iOS--can only be fixed with collaboration from the companies backing them. Writing a wrapper or alternative to msbuild that can let you do a UWP app without using the GUI is not feasible. I have looked into this. Doing this for Xcode is even worse, because Xcode is a complicated monster that doesn't bother to document anything--Microsoft doesn't document much, but at least gives you some.
I imagine this is not what you want to hear, but separating all the blind people into the corner and requiring custom tools for everything will just put us all out of work. if you're successful, none of the mainstream stuff that cares even a little right now will continue to do so, and you'll end up working on blind-person-only teams at blind-person-only companies.
0: My most notable Rust PR is this monster: https://github.com/rust-lang/rust/pull/361511: https://github.com/camlorn/libaudioverse
Puns aside, Who on earth would make a blind person work on UI? I think it's better that you parted with them, even tho I'm sorry you have trouble finding a good job.
Best of luck.
Mine looks..less nice, but has the benefit of being straightforward and fast-loading:
(This thread is certainly giving me some motivation to go fix it up some more.)
Surprised nobody's posted it yet.
Other people are also posting their own, so here's mine: http://www.dougkoellmer.com/
Other job-hunt-specific efforts:http://www.dougkoellmer.com/portfolio/http://www.dougkoellmer.com/resume/http://www.dougkoellmer.com/games/
Can't be totally sure but I believe they've gotten me a job or two.
Stumbled upon this one yesterday, it's from a paper, but well written:https://mzucker.github.io/2016/09/20/noteshrink.html
A long time favorite writer:http://www.frankchimero.com/writing/the-webs-grain/
You need to think of yourself as the product and work out what's the best way to describe and package the skills and experiences that you have already acquired and how they can be applied to whatever your target companies are looking for.
Also think about whether you are using your portfolio site for lead generation or lead qualification. Lead generation means that you'll have recruiters finding your portfolio off the back of your SEO and they contact you. Whereas lead qualification means you are selling your self to a hiring manager/expert after they've read your resume and decided that they want to check your credibility before interviewing.
Does gwern fall into this category? While I'd need to know more about what he's like in person, the author certainly seems like a technically competent individual.
This is mine: https://ruph.inIt's something I threw together recently, but it's still missing some content. I like the style though :)
Stephen Wittens' site is another that comes to mind
from scratch, no css framework responsive portrait by alisabishop.com
edit: feel free to use it as a template for your own site! https://github.com/panphora/davidmirandainfo
These sites have set the standard of beautiful personal website for me. Despite their modern appearances, they're both just static sites, generated with bash: https://github.com/Jack000/Expose
A jaw-dropping website by Steven Wittens that pushes the boundaries of what your browser can do. Nothing I've seen has ever topped this wizardry.
(You should view it on desktop, with WebGL capability.)
Minimalist modern design, sans any kind of framework (like Bootstrap for example) is the name of the game.
I love looking at people's personal sites though. I've got a small index of them from over the years at http://pinboard.in/u:icco/t:personal.
It's an interactive Game of Thrones map. It shows you where everyone is at a given time. You select who you want to track, drag through time and the character path trails show up on the map. The interface is genius, best I've seen for messing around with (thing, place, time) triples.
A horrible website for horrible people (in the style of CAH): http://jefflombard.com/
(full disclaimer last one is my own site, anyone is welcome to clone it, it's based off of cards against humanity and available under creative commons: https://github.com/jefflombard/jefflombard.com)
I've just updated my blog and would appreciate any feedback https://trengrj.net/
It was even helpful to kickstart conversations in meetups / other technical gatherings
Most of the time more people e.g.: watch my github page: http://github.com/wkoszek page than my real website http://www.koszek.com since its harder to find you on a separate website. This is unless you market it.
To summarise: enter the http://cr.yp.to/ and see how good the content is and how you're ok with no form too, if content is outstanding.
Kept it minimal :)
This is a site I built for myself, friends, and the public; however, I haven't promoted it much... Trying to get more users, but it's been under construction for a while. Nothing fancy, but I wanted to build something that was free for users.
Also to the poster: side projects are great, showing off your pet project is awesome, but I can say that a lot of employers don't even care to look at them... I cannot speak for ALL employers, but a lot of the time interviewers and employers don't have the time to poke around in your side projects - they're very busy too. It's kind of a shame
Here is my site:
I optimized it for following:
1. Easy to understand layout
2. Images to highlight projects
3. A professional picture.
4. Contact & email information.
Don't bother fighting email collecting bots, they already have billions of them due to breaches and most likely yours if it appears on Have I Been Pwned. Rather I recommend optimizing on usability and making it easier for human reader to send you an email.
Note: The design looks slightly different on desktop and mobile. E.g. on desktop it loads institution logos and uses a two columns or efficient use of the space.
It's a UI library for animating 3D web stuff, so it should look pretty. Suggestions to improve are welcome!
Main page: https://web.archive.org/web/20150801213611/http://lukaszkups...
Experience page: https://web.archive.org/web/20150826004819/http://lukaszkups...
About page: https://web.archive.org/web/20150826004912/http://lukaszkups...
Contact page: https://web.archive.org/web/20150826004918/http://lukaszkups...
Blog page: https://web.archive.org/web/20150826004935/http://lukaszkups...
I will release new design next week, based on brand-new static site generator ;)
Sarah Drasner - http://sarahdrasnerdesign.com/
Assume whoever looks at your portfolio is going to scroll from top to bottom first, get a first impression, then _maybe_ click through things later.
So build for the question "What do I want people to see if they scroll through my site without clicking on anything?"
I had some good feedback on mine as well - https://tim.fyi - and I'm pretty happy with it (love to hear what other people think too though). After the intro though, it's more about highlighting recent specific projects and talks and articles, rather than acting as a full CV. Sounds like that might be what you're going for?
If I were you, I'd keep it simple. Go for a short simple intro that highlights what you're about, a two or three sentence summary of what you've done and what you're good at, and then keep the body as something that gives more of a feel of what you're about and up to right now. Links to blog articles, things you're tweeting about etc.
You can provide an actual CV for people who want to dig into the details of your list of achievements and research in more detail, but if this is the first place people hear about you and it's your personal site, then a sense of personality and active things going on is more important imo.
That said, I did try to create a single page of some of my projects so people can look at them more easily: https://www.stavros.io/projects/
The other day I also decided to give my resume some love, so I created a single page with side-projects I believe to be worthy of mention: http://resume.stavros.io/
Maybe those two will give you some idea. I've scrolled through some of the other responses in this thread, but I'm not sure I like the project sites that are tech demos themselves. They seem to conflate "optimizing the listing of projects" with "optimizing showing a project". Most of the linked sites are great tech demos, but very bad at getting me to click on the actual posts themselves. Then again, maybe mine is worse.
Some nice ones on top of my head:
As the original poster, I too have been through many years of grad school. I have not needed to interview for jobs, and believe my website has sold me well.
edit: Seriously, why does a site need to be like a fucking pop-up book?!
Not sure if it fits the context but have a look at Matthias Noback website http://php-and-symfony.matthiasnoback.nl/
A one man hardware & software powerhouse. He is an old-school EE in Japan and his personal projects are astounding in breadth and depth.
His SD Card and FFT libraries are classics. His hand wired SMT circuits are works of art.
Every open source project needs a site like this.
Perhaps a teaching-focused site that explicates all the tips and tricks you've gleaned about atomic microscopy. Maybe featuring a WebGL microscope simulator. And extensive Youtube tutorials for beginners.
Or a data bank. Resources that would appeal to researchers rather than students. Modelled after something like the Electron Microscopy Data Bank:
Your goal is simply to convey that when it comes to this particular characterization technique, you're the world's #1 expert. Not so different than the inbound-style, content-rich influencer marketing all of us are seeking to master here ;)
Also feel free to peep my old one: http://iheanyi.github.io. I didn't like this one because it was too image heavy, but I did like the layout of case studies better in this iteration than in my new one.
And I guess another old iteration I was using when I was looking in college: http://old.iheanyi.com. Yeah, I know. I re-design my website a lot.
Maybe not exactly what you're looking for, but its simple and clicking through any project makes me to want to work with and/or hire him immediately.
Alas, the project was not finished... (the NZ government intervened)
I think my personal site is a very nice minimal site: https://cmp.is/
I strive to have as little js/css as possible. Currently only has Google Analytics and whatever Cloudflare wants to stick in there. I have to simplify the CSS to the bare basics eventually. I use Hugo to build the site and I get to post many different kinds of posts like links, notes, and real full posts.
It's an auto updated portfolio with my github, dribbble, and some other social networks.
Disclaimer: I use the site
Blog: https://axiomatic.neophilus.netPhotoblog: https://odyssey.neophilus.net
Particularly happy about the way the photoblog turned out. I think the interactivity of the globe, showing you where photos come from give it an immersive touch that isn't in your face.
It is for a visual designer, so obviously the presentation of that work is different than academic/technical research, but it is very clean and simple.
Apparently he is re-doing his portfolio as the main site is just a giant tweet.
I'll humbly say that I'm by no means an academic, but I try to showcase what I know front and center and and let the rest be unraveled by those that are interested on my personal site - https://lacke.mn
I got this up after getting my job offer in place, but for now I'm happy with it. One thing that's missing is my resume, but for me that's application-specific and I'd rather have people ask for it than display a fixed version.
Feel free to critique, HN!
http://okaysamurai.com/portfolio/okaydave2006.html - It was built in Flash over 10 years ago, but the skill and creativity behind it is a force that is absolutely still relevant today.
Windytan: http://www.windytan.com/DJ Bernstein: https://cr.yp.to/djb.htmlFabrice Bellard: http://bellard.org/
[NB Along with things like the restoration of Navigation and Bombing Computers from UK strategic bombers!].
I built an interactive unix-based terminal to navigate my projects and resume. I'm planning on adding a better layout though since it's been pointed out to me that the people actually looking at my site to hire me won't know what to do with a terminal :p.
My issue is that I don't have a very impressive resume yet (though I should probably link a PDF of my current resume anyway), so I decided to keep it simple and lightweight but also stylish because I bill myself as the intersection of tech and design.
Mine has switchable backgrounds ("Don't like the speaker look? Go with serious, punk, scottish or racing driver."). Many people have commented about this when meeting in person.
Recently redesigned. It used to be like this:
(Yes, I know, the new version is not as user friendly, it's not finished yet).
Would be glad to hear any feedback!
Yes its a tad salicious, but its an interesting technical project.
I have a rather large email list that would be quite expensive to send to with MailChimp, Sendgrid or the like. I've been able to use Amazon SES to send large blasts, daily for next to nothing.
Edit: This is NSFW
Built using ClojureScript. Ethernal WIP.https://github.com/arximboldi/sinusoides
And a simple webpage for my work on laser projector video games:
My laser projector work has gotten me hired at a few places. :)
He is _super_ smart and his posts often sneak into the homepage here.
When I first saw this site I was blown away. Sure, the level of detail may be off putting to some people, but even from a purely engineering standpoint it's impressive.
Shoutout to Anand for the incredible work.
And it was open source before it was cool.
More a researcher type of site but it also showcases the work I've done, so perhaps it's useful.
Simple UI so that content is the king!Just 4 main pages but also organizes content in a way a user would like to see!
Turned out pretty cool.
It's a grid of all the "cool" personal projects I've made since I started coding.
Would love any comments/critiques!
Would love some honest feedback on it!
Has links to blog / slides / github and list of GitHub projects with search. Allows people and myself to quickly find something. Getting recruiters' pitches (and occasional hand crafted emails to join teams) every day.
You know, I've dealt with many clients who ask for flying text, moving pictures and looping videos in their websites. Don't be that client to yourself. When we work with such clients, we usually start probing with lots of WHYs, and the other "W" questions, something in the lines of
- "Why, according to you, do you believe that is the best way of displaying the information?"
- "Why do you believe that all the 5 points are equally important?"
- "Who are your most ideal users?"
etc, etc, etc. We kept probing till it comes down to the simplest, bare-bone answers, at best -- YES or NO. For instance, "YES, the user will need to provide just the email ID and nothing else."
Now, apply that to your own personal website, get down to the simplest core of your personality/quality/characteristics/qualification. Better yet, think of your target industry and come up with a compelling, different take on it and make it interesting for your prospective employer.
One of the biggest mistakes most "providers" make, is talking about themselves, as that is the easiest. Instead, talk of the recipient, be it the employer, the client or the user. They talk of themselves since they everything about themselves more than anyone else, so they stay in that comfort zone. Go, venture to your prospects, focus on them and not you.
Do that, and they will be the one to come to you and "ask you for more." When they start asking for more, the journey forward is easy - now unfold your story, build it up, surprise them. Go on.
The narcissism part:
Personally, I've had people surprised, smiled, and intrigued at conferences, events with my business card[1, 2] and they usually go to my website.
1. Front - https://dl.dropboxusercontent.com/u/1308/photos/business-car...
2. Back - https://dl.dropboxusercontent.com/u/1308/photos/business-car...
It's all client side. Runs on JSON, JS, HTML and CSS. Super cheap to host. I'm mainly documenting my journey into metal fabrication as a programmer.
All the people who know both products exist .... is probably just you.
If your company fails it'll definitely be because of what you did, not what they do.
If your company succeeds it'll - almost - definitely have nothing to do with anything the other company did.
Perhaps the best advice is from Michelle Obama: "When they go low, we go high"
Consider aiming for high end users in your market, then you need far fewer customers to generate a decent wage.
For example if you charge 49 vs 9 then you need 5 x less costomers to hit your paycheck.
Just be sure to validate with real customers that the market can bear the price point you need.
Outcompete them on quality. Pretty simple. And don't forget that you don't compete with each other. You compete with being considered irrelevant.
The message you need to worry about is almost certainly not "Why you should spend money on my product instead of getting theirs for free." The message you need to focus on is why people should want your product at all. In fact, before you get to that stage, your message may need to be as simple as "We exist."
This was the marketing goal of Aflac's initial duck commercials. They were a little known insurance company with low name recognition. They tested two commercials. One was a more respectable, conservative commercial. It achieved around 40% name recognition, which was the industry standard and would have been a big improvement. The second achieved 90% name recognition, but was a silly duck making fun of the sound of the name. It was considered hugely risky, but the CEO latched onto the 90% name recognition metric and went with that campaign.
After becoming a household word, they changed their marketing campaign goal to trying to educate people about their product. It was poorly understood as to how it differed from other insurance products. Yet, they were already a Fortune 200 company because everybody at least new their name and that they existed.
Cart and horse and all that.
I've been using a Retina MacBook Pro 13" (early 15) and 15" (mid 15) and just picked up the xps 13 9350 with iris pro.
There are definitely some quality control issues but once you get a working model with no faults (I had one that wouldn't reboot and had terrible coil whine, one that had loose trackpad and yellow tint on screen but this could also be because of Amazon's shitty packaging where the laptop was in a box with only some brown paper crumpled in) - atleast they took them back no questions asked. I'm amazed how far windows laptops have come along.
The only real downsides are that it power throttles (and thermal too, but I placed my own aftermarket thermal paste and it doesn't cross 66 C on full load now) due to the iris GPU itself consuming 18W at it's rated turbo boost with the SoC's TDP being 15W (long turbo) and 25W (short turbo). Perhaps go with the i5 model that has the HD 520 or the new 9360 that has kabylake with better thermal and power consumption (HD 620 is roughly similar to HD 540 but won't throttle). You can also use Intel's XTU to undervolt and better battery life and throttling if you're going to use windows.
Linux runs flawlessly, infact so does OS X if you can replace the wifi card. AMA
So for ~$1900 I have something that blows the MacBook Pro out of the water.
- 4k touchscreen
- i7 Skylake processor w/ identical stats to that on the $2400 15" macbook pro
- 16 GB RAM
- 128 GB SSD + 1 TB HDD (I replaced the HDD with a 500 GB SSD from Amazon)
- NVIDIA GTX 960m w/ 4 GB GDDR5 RAM
It's sturdily made, I take it everywhere. The only thing I miss from my mac is the trackpad. You can't beat mac trackpads. However, the trackpad on the Inspiron is great, much better than many of the others I've tried. When you take into account it has better graphics acceleration than the $2800 macbook pro, you find that dollar for dollar, it's one of the best value laptops out there. (Seriously, compare it to even Dell's XPS 15, you'd have to pay ~$1650 for an XPS 15 to get comparable specs to the $1300 Inspiron 7559. The Inspiron even has double the graphics card RAM of the $2550 XPS 15!)
Trackpad much worse than on a Mac
Bad fan control means it was sometimes noisy in near-idle contitions (though in idle it was very silent)
there were some flicker issues with the GPU (might have been resolved though)
one key was bouncy, meaning it sometimes triggered twice
it woke up from sleep randomly, sometimes while in my bag, often completely emptying the battery
In the beginning it also crashed very often, however this was resolved with an update.
So all in all the quality wasn't on the level of a Mac.
And I wouldn't even start speaking about the OS.If you're used to macOS, it's still such a day and night difference.
Connecting a normal low dpi display to the 9550 with HIDPI display lead to so many annoyances with Windows and all the programs that won't support this for the years to come. I'd barely consider it useful. Although the display itself was quite nice.
* My XPS has a really awful touchpad. When I first got it, it was definitely my main reservation. I tried a 2014 model and noted that it wasn't much improved.
* The battery life is much, much worse on the XPS, which is probably the main reason why I find myself reaching for the mac. I've kept Ubuntu 12.04 on it, so Linux power management has likely gotten better but there's still no comparison. * other than that, I've loved my XPS. It's super light, has a brilliant keyboard, excellent specs and still works well after three years.
Initially I though I would never use the touch-screen, but it is actually quite useful when reading things (scrolling) or quickly clicking basic things when not really sitting behind the keyboard on a desk. Same for the light in the keyboard, very useful when working at night and on airplanes etc. The screen in general is really really good, some colleagues have the 1920x1080 screen, I would pick the 3200x1800 screen again next time since it's much nicer to read from and allows you to use smaller fonts (= more code on one screen)
Linux support is generally much better than other relatively new notebooks I've had, but still sometimes things break. The Developer Edition is released a bit later than the Windows models, probably to stabilize Linux support. I've only used it with Ubuntu, but I see others use several other distros which seems to work without much issues.
Here are my pros and cons:
1. The hardware is great; the developer edition favors more Linux-compatible hardware (obviously), and for us, it didn't require very much setup. Usually the default configuration will be enough. The touchpad, like the MacBook, has a glass surface and feels excellent.
2. Like the MacBook, it's very light. The screen looks great, and honestly on Linux I prefer 1080p.
3. Dell has a very reasonable warranty, and is very quick to respond. Example: You can install whatever Linux distribution you like, replace the SSD (so long as you don't ruin anything while you're there, of course).
1. It's fragile. Unlike the Macbook, you have to be at least (more) careful with this thing. We ended up breaking the screen without much effort; I wager it was the fact that it was in a backpack that got dropped somewhat aggressively.
That being said, we also bought the $60 accident protection, and Dell sent out a technician from a local repair shop to fix it for us within that week. If the technician can't fix it, they will over-night you a shipping box and a FedEx label to send your laptop back in.
Just be careful with it; treat it like the $1000+ machine that it is.
2. No replacing the RAM. It's soldered onto the board. That's not a problem for me because I barely push ~4GB.
Conclusion: I use a MacBook now; my XPS 13 is actually coming in tomorrow and I'm very excited. I think it's a great machine and a great MacBook replacement, and has excellent Linux compatibility. Dell's customer support is great, just be careful with it; it's not an aluminum body or several layers of glass in front of the screen. Make sure to buy the one with the right amount of RAM so you don't regret it later. If you're worried about storage, there's a $150 500GB M.2 SSD on Amazon, buy the lowest storage version and upgrade it. Get the protection plan. It's cheap compared to the cost of buying a new device.
If you don't mind something heavy, check out the new Thinkpad P50 or P70. They have actual desktop-level performance, terrific screens (matte, color corrected 4k IPS!) and the new NVMe SSDs. I do most of my daily development on a P70, and increasingly just lug it along when I travel even though travel was the reason I bought the XPS 13.
Also, do realize that the UltraSharp model will have a significant impact on battery life. The comments I've looked at for the XPS 15 9550 (4K display) say that the battery life is basically halved, but it's supposedly still around 4.5 hours of battery life.
If you prefer the 15-inch, you might want to wait for a while - they still only feature Skylake CPUs and I think an upgrade is imminent (given the recent XPS 13 upgrade and all.)
I don't have any personal experience with the machines, but I'm planning to buy the XPS 15 once it gets an upgrade.
Out of curiosity, what has you disappointed with Apple's new laptops?
Why on earth there's no startup which just puts together linux laptops? I'm sure you can grab Chinese/Taiwanese/Korean whitelabelish product customised with linux friendly peripherals or just put the box together yourself with engraved penguins here and there. Half of devs would love it, another half would hate it - but that should be enough to survive, no?
Otherwise I think it a great machine.
I liked it, but I didn't travel with it so not sure how carry-able it is. Current shop is Mac oriented but I would have gotten another one if it had been up to me.
Might want to consider the skylake version, sure it's the previous generation, but the CPU perf is pretty similar, and the Iris 540 is a significant GPU upgrade. Not a nvidia/ati killer by any means, but much better than the normal intel integrated graphics.
Either that or way for similar to ship in it's kaby lake incarnation.
Also keep in mind that the "upgraded" 3200x1800 screen about halves the battery life and is reflective. Not really worth it for me (at least in a 13" screen).
Sadly you can't get more ram or an i7 with the 1080P (they called it FHD) screen.
Just be careful with the Dell Thunderbold 3 TB15 dock (not sold any more I think). I got one, and with the latest drivers it works, but has some quirks.Also be careful to sort out complaints about the XPS in the net: may have problems using the dock, not with the laptop itself.
And the touchpad is great by the way.
- Plays 4k video under Windows 10
- Runs Arch linux without any hardware compatibility problems
- Silent, portable, fast (pick all three)
It sounds like an advert but this was a machine I didn't pick myself and it is the best computer I have ever used. The next time I spend money on my own laptop I will move from Thinkpad to Dell. This is after using Linux on Thinkpads for the last 13 years or so.
I thought this was worth mentioning as the Latitude is probably a bit cheaper than the XPS.
The warranty just ended, so unless they finally fixed it for good, the machine may have been a waste of a thousand dollars. I'm crossing my fingers and hoping it keeps working.
It's basically a rip-off of the (2015) macbook machined aluminium body design. It has the 7th gen processors rather than than the 6th of the new macbook, and a similar price.
Not sure about linux support, from what I've read there may be an issue with the webcam.
I ultimately went with a retina MBP (early 2015). My next laptop is likely to be either a Lenovo T460 or a Dell P50 (or their successors).
I suppose that the thing will only improve with future Ubuntu Hardware Enablement Stacks that include new kernels and so...
It sounds like the software you need is available on all three operating systems, so the Dell machine is a fine choice.
I'm assuming that the movies you want to watch are rips or Netflix and not something like UltraViolet streams.
I got some very good - and upgradable - hardware at a good price with an extended battery. Good call, would buy again.
I think it's really good machine.
Granted I owned the older 9343 model but despite the many BIOS updates (and several Linux distros) my laptop kept up phantom right clicks and cursor jumps - very annoying! No issue with Windows 10 though.
I sold it onward and happy with the real-estate 15" provides me once more.
Ubuntu 16.04: Pretty much works flawlessly as long as you have Intel WiFi- I had some issues with a flashing screen at first but they all seem to have been resolved using `apt-get upgrade`. Suspend/resume, audio controls, and brightness controls all work fine. I run docker images for pretty much everything and it's great to have native docker without a VM involved.
Physical Characteristics: It is very light and easy to use on the lap, on the couch, or in bed. It feels more like a MacBook Air than a MacBook Pro. Fans are on the bottom but they don't really spin up that much, even when I don't have anything under it.
Keyboard and Touchpad: Keyboard is fine. Touchpad is a lot smaller and more "clicky" than a MacBook Pro. The force touch on the MacBook Pro is way better (it's pretty much the gold standard of touchpads).
Screen: I have the FHD screen because I don't care about touch, and it is Matte (the QHD+ touchscreen is glossy). DPI scaling in Ubuntu 16.04 is hit or miss. In my experience, some apps, like Chrome, only respect DPI Scaling if it's in multiples of 0.5 Other apps, like Firefox only respect DPI scaling if it's an even number. JetBrains products do a good job of respecting DPI scaling though. I keep it at 1x DPI scaling, so everything looks pretty small at 1920x1080. If you go with the QHD+ touchscreen, native resolution is 3200x1800 so 2x DPI scaling will be an effective resolution of 1600x900, and it will look great. I think most apps should work fine at 2x DPI scaling.
Webcam: The webcam location really is stupid. I dislike video chatting on this computer so much I'd rather use my phone. I use Android and kind of miss iMessage and FaceTime from the mac (it's how I would talk to some Apple friends), but whatever.
Other Thoughts: Linux FTW. IMO, the last good release of OS X was 10.6.8. Everything after that either changed the scrolling direction or added some sort of bloat to the OS. I'd run 10.6.8 still if I could. Ubuntu 16.04 feels like getting your life back. It's super quick, you can use apt-get to install dev tools instead of hacking around with homebrew, you get the real version of `sed`, and you don't feel like Apple controls your life anymore. Gotta say it twice- native Docker support and no messing around with VMs anymore!
Take the leap of faith and get the XPS 13. Or a Lenovo with good linux support. Part of me wants to try out the big ass trackpad on the new MacBook Pro but none of me wants to go back to paying $2k every time I want to upgrade my laptop.
Edit: removed "inb4 downvotes".
Early this year Apple acquired Turi for $200 million. It was founded by Carlos Guestrin, one of the professors who is teaching the course.
We (Class Central) are also working on a six part Wirecutter style guide to learning Data Science online. Here is part 1:https://www.class-central.com/report/best-programming-course...
Feedback would be appreciated (on the format as well as content)!
If you want to just try them out, I'd honestly recommend just going through the scikit-learn documentation. Almost all of the algorithms provide an example, and the API is pretty consistent across different ML algorithms, to the extent that it can be.
People learn differently, some people prefer to get into the math right away, others will never be interested in it. I'm interested, but I tend to be more motivated when I've used the algorithms, start to learn about how and why they perform well or poorly under various circumstances, and then dig into the mathematics specifically to find out why.
Also, I'm not going to be creating new ML algorithms. So, you know, that also influences my level of interest. I do care about the mathematics involved, because I do want to genuinely understand why some outputs are available for random forests but not naive bases or logistic regression, why performance and/or accuracy is great in some circumstances and not others, and I don't want to have to rely on too much hand waving. But if you want to actually develop and research novel ML algorithms, you'd need to get considerably deeper into the math.
Ask HN: How to get started with machine learning?
For keeping up with the latest research, once you know what you are doing, reading papers on Arxiv daily/weekly is a great way to keep up, nearly everything gets published there
It is a remarkably high signal to noise community.
Excellent book for starting with NN and DL.
That said, I hear you. I wanted a 32gb model with crazy good battery life also, but to be honest, Windows laptops are kind of all shit right now. I'm in the exact same boat as you. I hate the new MBPs and need a new laptop soon, BUT I'm still landing on the old style MBP as the way forward every time I look through the available options.
Probably not much help, but that's my 2 cents.
e: that said I am going to keep refreshing this thread and hope someone mentions something I haven't looked at yet.
If you want to spend a similar amount of money, get the Asus UX390UA (Zenbook 3).1) It's lighter2) It's got better components in every single aspect -> CPU, GPU, SSD size, Screen, keyboard, etc., etc....3) It's actually cheaperSTILL
If you want to spend less, but now around the same performance of a MBP, maybe get the Asus UX330. It's basically a toned-down UX390, but still awesome.
If you want a cheaper STILL, consider a Clevo reseller like PCSpecialist (UK), Scan (Everywhere?), Sager (US), XMG (Europe). They are the ultimate in performance per cost, it's just that they tend to not be the most asthetically pleasing.
Dell XPS 13 is also a very good alternative, I've heard.
Do you really need to be coding on the bus/train/plane or in hotels? When you go to a meeting, do you really need to bring your entire development setup with you?
When I go into a client's office for a meeting I usually only need to take notes and do presentations. So I get a cheap $500 laptop for that. If I need anything at all from my home workstation, I just remote into it. Actually, I did this even before I was working for myself - I'd just remote back into my workstation at my desk.
Is it just that you don't want to deal with 2 machines? Are you just doing it because that's what everybody else is doing?
A fully upgraded MacBook Air is still the best. (i7, 500GB HD, 16GB RAM) I got several of them.
Lenovo is too heavy to carry around. Even a MBP is too heavy and bulky for me.The Elitebook has no 500GB HD available and also only 16GB RAM.
And they have an entire article devoted to the topic of laptops. 
Run Linux beautifully, if you care about that.
But it does learn from its mistake, the new Surface line-up is epic.http://mashable.com/2016/10/27/microsoft-better-apple
I have been using a Windows laptop for over 5 years (Yeah a Lenovo!) and have went thru the whole upgrade from Windows 7 --> Windows 10.1 Anniversary update (for free), and to much shame of mine, my b!@#ch of a laptop still doesn't cry considering a boot up time of 6 seconds!
Yet I needed a dedicated Unix environment and although Bash is available natively now on Windows, it's not going to be stable soon enough for me (6 months from now maybe, Creators Update is coming in Jan' 2017). So, a week ago I did buy the MBP retina 13" Early 2015, and trust me I am not disappointed, after last night's #AppleEvent.
I might be biased but coming down to your query:> Are Lenovos worth considering post-superfish-gate?
"based on my personal experience".
- Thinkpad x250 (x260 has PWM issues)
- 4th Gen Thinkpad x1 Carbon (FHD model to avoid screen lottery)
- Thinkpad x1 Carbon Yoga (OLED)
- Refurbished 2015 Macbook Pro
on a serious note, look at Aorus X5, I like the RGB keyboard. you can get it to colour the keys based on context. could be a nice alternative to the overpriced touchscreen of the new macbooks.
They also have a 17" and a 12.5" laptop, but you're probably looking for something in between 13 and 15.
I'm in the same market. I have a late 2013 Macbook Pro and there is ZERO chance I'm buying a modern 15" MBP. The Touch Bar is offensive to the point that I'll put up with Windows instead.
- Asus ZenBook Pro UX501VW (15.6")
- MacBook Pro 2016 (15.6")
- Dell XPS (13" or 15")
- Lenovo X1 Carbon
If you don't like the MacBook Pro (or think it's too expensive), then I'd go with the ZenBook Pro.
Comes pre-installed with either Windows or Ubuntu 14.04 LTS. Also comes with Thunderbolt over USB type-c so you can charge and hook up your peripherals over 1 cable.
The build quality definitely isn't as good as Apples. I had to return my first T460s due to severe light-bleed issues. The new one is fine, though the TrackPoint isn't as good as it was in previous generations. The TrackPad also is not as good as Apples, though I try to keep a keyboard-only workflow so it's not that much of an issue (till it is)
(I got a lemur)
The actual build quality isn't great, but it's functional with no frills which is exactly what I wanted.
Not quite as thin and light as a Macbook Pro, but not far off: 17.5mm and 4 lbs.
1) You work on an open source project and an altruistic company hires you to keep working on it. This is ideal, and I've only ever seen it once (Sendmail hired a couple of core contributors to keep making Sendmail awesome back in the 90s).
2) You work on an open source project, people see the work because they use the project, and then offer you a job to keep working on the project, but slowly over time you are working less on things that are great for the community and more on things that are great for your company. I've seen this a lot.
3) You get hired by a company that uses a big project, and they ask you to start making modifications that are useful for the company. It turns out what you did was useful for everyone so you contribute it back. Sometimes it turns out to be a huge win and so you keep working on it. I saw this with Cassandra and some of the folks at Netflix.
4) You create a cool project and your company lets you open source it. It becomes well known and then other companies want to hire you for either 1, 2 or 3. I saw this a couple times were people left Netflix to go to Facebook or Google to continue work on an OSS project.
If you work on Chromium or Firefox, you'll pretty much be limited to Google or the Mozilla foundation (with some exceptions). So if you want to do it to learn some great code but don't have a particular project that you love, I'd suggest one of the more infrastructure projects that are widely deployed if you want to increase potential job prospects.
In summary: There are lots of ways to get paid to write OSS, but you may not like them all.
My major source of income is my "Varnish Moral License" (see: http://phk.freebsd.dk/VML/index.html)
It is not particularly easy to shake money loose, but I'm making a living and I'm trying to explain to the world that free software is not the same as gratis software.
(See for instance: http://queue.acm.org/detail.cfm?id=2636165)
As others have pointed out, the browsers are all backed by actual organizations with employees, so that will probably be a tough row to hoe, unless the end goal is to get employed by one of them.
Another person worth looking at would be Eric Holscher, who's Twitter feed frequently has interesting insights into running an open source project as your full-time job.
The best bet if you want to do open source full-time would be to work at a company like GitLab or Sentry, but that does restrict the exact kinds of open source work you can do (at least during working hours).
: https://github.com/nayafia/lemonade-stand: http://www.fordfoundation.org/library/reports-and-studies/ro...: https://changelog.com/rfc: https://twitter.com/ericholscher/status/752572876138565632: https://about.gitlab.com/: https://sentry.io/
And to answer the inevitable question: many of my paid features are also available as 3rd party OSS plugins. Many companies prefer to pay for the commercial version so they know the features will all work well together and be supported years from now.
Once payroll rolls out contributors set their own compensation.
Some more information on that can be found here: https://gratipay.com/about/features/payroll
Previously Gratipay was Gittip, and worked much like Patreon - essentially a donation or ~tip~ system.
There's still some work to be done, but I've been following this project for awhile. I've been working full time now on other stuff, but I keep up with their updates, and Chad (founder) is a great dude.
Incidentally, previous experience with the specific codebase isn't necessarily a requirement to get a job working on a project: if you have general experience in the field and can work with an open source community then these both transfer over (this is how I got into working on QEMU). Learning a new codebase is something that you typically have to do when you start a new job in the closed source world, after all...
I'm a software engineer at Google, where I've contributed to Google Servlet Engine, Omaha (https://github.com/google/omaha), Firefox, Chromium, and Android, among other open-source projects.
Some of these are closed-source projects that were later open-sourced, some are developed in the open, and some are run as a hybrid between the two. I also develop random crap on the weekends, and Google gives us wide latitude to open-source that work if we want.
I recognize you're asking whether one can start with open-source contributions and eventually receive compensation for it. I'm answering that in my case I am compensated for a job that happens to involve lots of open-source contributions, which is the same end result but starting from a different place.
So I'm here to tell that friends or family aren't always the worst possible clients. If you both know what you're talking about, and are well organized, and define precisely what's the price for each task, it can be a great experience.
today the project has 900 stars on Github and a lengthy Smashing Magazine page :)
More info here:https://www.smashingmagazine.com/2016/07/how-i-ended-up-with...
We pay our developers to help us build it and we are currently hiring an Android dev. http://ie.indeed.com/job/android-developer-passion-human-rig...
Code is here: https://github.com/securityfirst
- I grew up in a family without a lot of money, by using open-source software growing up I got to learn a lot of different aspects of digital production, sofware development, and try software I never would have had the opportunity to try if it hadn't been open source. This was incredibly formative in shaping my skill set today, so I have a lot of past open-source contributers to thank for where I find myself today
- I believe businesses have a responsibility to the community in which they operate and where their employees live. This is corporate stewardship, for a big business maaybe they invest in a local school, or sponsor kids sports teams or summer camp. I'm a freelancer, so I wont be sponsoring any sports teams, but I feel its important for my 1-man business to give back in a 1-man-sized way!
So with those two things in mind, a desire to give back to open source, and a desire to help the community I come from - I have tried to find challenging new work that pushes the limits of current technology. I stretches me as a learner & worker, it provides a solution for a problem that meets the clients needs, and if I can find a way to give the solution I came up with back to the community, then others can save time and money by using my work as a springboard for their own solutions.
I write and release lots of use cases and examples demonstrating techniques and solutions, and pour a lot of time, and even some of my own money into getting them out there!
If your aim was to help a project like the Firefox project, and you wanted to be paid for your time - I would try to find a client who has an ee case not currently supported by Firefox, having them pay you to solve their problem, and also arrange that your solution can be sent back to Firefox and included in their codebase. Its a win/win/win for you, the client, and Firefox, plus a bonus win for all Firefox users at the same time!
Note that this doesn't have to involve doing a PhD or actually being an academic - it's more a providing the tools that enable academics to do successful research kind of thing.
And of course, if you're starting a new project, there's the Kickstarter model - followed by, for eg., Neovim, Chocolatey, etc.
 https://www.bountysource.com/ http://alternativeto.net/software/bountysource/
Learn/money idea to what you want is to get a job where open source is welcome, cherished and used. Internships are good to try it out. HIIT in Finland was such place and I interned there, and the result is here:https://github.com/wkoszek/freebsd_netfpga So I've got $$$ for stay + food + cinema for hacking project which I knew we'd publish and I learned a bunch.
If you're not for a rich country, Google Code In and Google Summer of Code be an option. You get a $5000 stipend for spending your summer at home hacking code, you get a decent mentor from a project you're interested in and you get experience.
Another model is to reach out to projects which are backed by a legal body. For example the FreeBSD Foundation helps and support the FreeBSD Project, and they have sponsored projects. If you're good in FreeBSD and have an idea, I feel there'd be some $$$ if you can deliver something useful. FreeBSD has feature idea pages and if you see a fit, you could just ping people and start collaborating.
Last, and I think the hardest, is to start hacking good code in a product you see is (1) open-source (2) backed by a company. I don't know how many hiring managers are techies merging pull requests etc., but even through individual engineers you can get a reference. After 10th pull request accepted by a guy who reviewed your stuff and with whom you've worked, I feel like it's easier to shoot "Are you hiring? I NEED THE MONEYZ!" email.
I work in Open Source and there are plenty of companies that build their business around a product and hire at market rates, normally they have a SaaS model of operation, but you'll have to set your sights a little lower than Chrome or Firefox. These companies include Ghost, Mongo, Elastic, Basho, Cockroach Labs, Automattic (Wordpress), Silverstripe, and countless more.
Another way to do it is to do postgraduate work at a university and get a grant, I know people who work on the Rust compiler in this capacity.
There are usually 3 kinds of paid contributors we see:1. Companies scratching their own itch while we maintain it
2. People I hire to work on the project
3. Phd students technically on a stipend doing their research with us (we do AI)
Another possibility is a 3rd party company paying someone to add a pull request to an open source project whether that be us or others.
I'd highly recommend it, although I believe enrollment in a university is required for eligibility.
If I need something fixed or added to a FOSS project for $WORK, that's work related and it's perfectly reasonable to do so.
Now getting someone else to pay you is a much bigger stretch. Outside of a couple people who work for really big companies that market commercial versions (or support packages) for FOSS projects, I don't know of anyone that gets paid to work on FOSS.
I had met some people from the company a couple of times and wrote something they wanted adapted to work with their products but didn't want to invest in it.
A few thousand to get me to do something I was going to do anyway at some point was a good way for them to get something that they wouldn't monetise directly.
Not sure how to get a gig like that though :)
I don't know a lot about the frontend OSS world, but I know that if you pick a project that has a lot of money being thrown around (in large deployments, for example) then you'll find that it's easier to get some of it to land in your pocket. Niche projects are difficult to get paid for, but can be good places to learn; smaller projects may be happy to have some help and will lend more guidance when you ask questions. But, then again, some big projects have people specifically tasked with bringing new developers up to speed and "community management", so that may even out that difference.
It will never hurt you to have OSS contributions on your resume. It's gotten me jobs, and has allowed me to round up good paying contract work when I've needed it (even in unrelated fields; I've recently done some Ruby work, even though I've never had a real project in Ruby). And, as someone who has hired people, I can say I've only ever hired people who had OSS work I could see. Sometimes unrelated to what I was hiring for, sometimes they were already working on what I was hiring for and I just wanted them to be able to spend more time on it and get them on board with the company road map.
All that said, it's not the easiest way to make a living in software. Getting a real job is probably the easiest way, and if you're lucky you'll get to work on OSS stuff to one degree or another. I've worked on tons of stuff that I never got paid for, and don't expect to ever get paid for. And, if you aren't really directing your efforts toward making something pay, you're unlikely to find that it'll pay.
OSS contribution does not, in the general case, lead to getting paid. But, it can lead there if you want it to.
Basically the idea is that the code is open and free, but if someone uses it a lot to make money they pay you a licensing fee.
I have a folder called "daypages" in my dropbox. Each day in my life becomes a file in this folder. Today's is "daypages/2016-10-26.org" That's about it. I don't really organize by project much.
Each day typically covers the tasks that I intend to get done that day, along with places I've been / friends I've met. The occasional tearful journal entry punctuates the otherwise mundane. Every morning, I spend a few minutes arranging today's daypage and rescuing forgotten tasks from yesterday.
No matter where I am or what I'm doing, a keybinding quickly flips to today's daypage. From there, keybindings can go back or forward by day or by week. I just jot everything down as I think of it or experience it. (I implement this with emacs/org-mode, but i'm sure you could extend this idea to any configurable text editor)
When I need to find something (whether "united frequent flier number" to "cool restaurant in SOHO" to a link that i captured six months ago), it's only a `git grep` away. Emacs has incremental search for this. If I need to schedule something, it goes in my calendar or in that day's daypage.
When I'm in the mood to reminisce, I just flip back to last year's daypage and spend the afternoon drinking tea and reading about the lovely things that happened last year.
It's like Google for the last three years of my life. Maybe this wouldn't work for you, but my small but growing collection of daypages is now one of my most prized digital possessions.
* Camera - https://www.simongriffee.com/photography/
* Simplenote - https://simplenote.com/ and Notational Velocity - http://brettterpstra.com/projects/nvalt/
* Website with tags powered by Hugo static generator - https://gohugo.io/
Someone please make a browser-based wiki that works offline (HTML5 local storage) and can be used on any computer, including pocket ones like iPhones, and keeps your information synchronized between them.
- Todo lists and reminders. org-agenda. - Bookmark lists. org-capture and org-protocol. - Kanban boards. I don't use this, but kanban.el. - Wiki. Org-mode files and grep/ag with helm. - Financial tools. ledger. - Calendar/reminders. Org-agenda. - Files on disk. dired, org-mode. - General notes. Org-mode. - Literate programming. org-babel. - Mail. mu4e. - rss. elfeed, gnus, or rss2email. - git. magit. - irc. erc. - ...
- To do lists (prev. Org mode, OmniFocus, Things, many others)
- Bookmark lists (prev. raindrop.io, Pinboard, others)
- Kanban boards (prev. GitLab, Trello, others)
- Wikis (prev. MediaWiki, Confluence, TiddlyWiki, etc.)
- General notes (prev. my own tool, OneNote, Evernote, Simplenote, many others)
- Photos (I share using Notion and use Google Photos)
- Files (I share using Notion, but still use many services for this, including S3, Dropbox, GDrive, ...)
It's a non-linear graphical (in two senses of the word) knowledge management software that stores universal links to all of your stuff, local and in the cloud. It also does notes, tags, and script nodes (which can for example be used as alarms / reminders) and represents EVERYTHING as a great big graph.
The main UI element is a TableTop, which is also just a node in the graph that acts as a visual slice through it. Nodes (normal and other TableTops) can live on any number of TableTops.
Non-nerd users can see the TableTops as an infinite number of large work tables with your de-duplicated documents on them.
I have to work on the TL;DR. I also have to work on not rewriting the prototype every few months. :)
Unscheduled todo goes into ~/todo.
Documents are in ~/d/org where org is the organization (school/company name). There are often subfolders, like subject name for school. Archive in ~/d/org/_archive/year. If a project is still running, it is still in the ~/d/org root, not in the archive, regardless of how many years it spans. I might sort by year inside that project folder if there are files ready for archiving.
Personal projects I generally sort by language (~/p/py; ~/p/php; ~/p/txt; etc.), for some reason that works well. Projects that I don't touch anymore (use nor expand) go into the archive folder (~/p/_archive). Maybe I should start sorting the archive by year as well, but it's not big enough to warrant that yet.
Collections like downloads, disk images, temporarily cloned git repositories, etc. go into separate folders, which makes them easy to manage and clean up. Unless they really belong with a project (code dependency) or cannot easily be re-downloaded, then they go in the project's folder.
This gives me: - A Git interface. - Integrated Kanban board - Integrated Wiki - Integrated CI - Integrated Slack Clone (Mattermost)
I now use Mattermost channels to handle most notes, bookmarks, etc.
I use the kanban board for ToDo lists.
I use the Wiki to document damn near everything.
I've also recently started using Amazon Drive ($60/year for truly unlimited storage) to backup everything. I run it on my NAS which hosts all of my local media and daily backups of all household computers.
Amazon Drive also includes Amazon Photos. Both services have web and mobile apps.
I use combinations of Mattermost and AWS Lambda to schedule/trigger things. (Build and deploy the wife's weekly webcomic every Wednesday at 8am, for example)
The goal of the tool is to use known commandline tools (for example taskwarrior (todo), khal (icalendar), khard (vcard), beancount (financial data), mutt (Maildir actually) and so on) and give the user the possibility to (semantically) connect the data of these tools. Then, one can do data mining on PIM data.
imag is in pre-alpha shape and only few things are there by now. 3 days ago I released version 0.2.0 with tools (we call them "modules") for the following "pim aspects": bookmark, counter (this was a first example module), diary, link (to semantically link data), notes, ref (to refer to files outside of the "imag store"), store (to do plumbing in the "imag store"), tag (to add tags to data), todo (basic integration for taskwarrior) and view (to view entries from the "imag store").
As said, we are in a really early stage of development and only few things are there yet. This is a hobby project I'm working on in my free time (also to learn Rust) and I only can make progress if I have enough time to do things.
I also write blog articles about imag every two weeks about what's currently going on in the codebase. Read about a use-case I'm thinking about in one of my blog posts - and yes, these are really ambitious goals!
Feel free to ask questions!
Edit: Fixed link markup. Sorry about that.
: https://github.com/matthiasbeyer/imag: http://beyermatthias.de/tags/imag.html: http://beyermatthias.de/blog/2016/08/07/imag-usecases/
- Bullet Journal
Major tasks, journaling, and goal tracking in a Bullet Journal on a per-day basis. Monthly goal lists live in a separate entry, and daily scheduling happens via a month page. Most self-driven work comes in through here, and I'll usually keep this open nearby while I'm working. The physicality of the journal helps a ton.
Inbox-as-todolist. "Starred first" view allows top priority tasks to be visually distinct. Most work from other people comes in through here, however it's really convenient to schedule or bounce things to the near future. Lots of people use Boomerang for this but I prefer followupthen.com - I can send/fwd an email to "tuesday", "january" or "3weeks" @fut.io and it pops back into my inbox that exact morning.
- Google Keep
Random unassigned tasks live in Google Keep, the Android "OK Google - Note to self, get new shoes" voice command saves directly into Keep. This is extremely convenient as a place to store random nagging thoughts while walking down the street. Having a Keep widget on my homescreens ensures that I see the list often.
I just throw in all my personal notes and to-dos in the text file. And remove them when things are taken care of. If it gets too crazy, I either get stuff done, or purge projects. LArger, long-term projects and pipe dreams go in the trello board.
Financial stuff runs automatically between direct deposit and auto-pay on bills. So I just put all mail or paperwork that show up on the desk in front of me, and if there are papers there, I do something about it, then put them in a filing cabinet.
Everything work-related goes into tracking systems at work.
So... just one text file, constantly open and with frequent edits, and a trello board I check out when I am caught up on things.
* Also keep Slack open when I am working. If someone needs something, they can ping me on Slack and I will be available within 5-30 minutes.
* Gmail stars for everything I can't address immediately. Everything else is dealt with immediately and inbox count is 0 for most of the day (both work and personal addresses).
* Iphone calendar (with alarms) for everything I am putting off for later or need to schedule/remember
* Iphone notes for everything I am putting off indefinitely (movies/books/games to consume, gifts to gift, songs to learn, general goals for the next few years, travel destinations, events)
* Occasionally I leave things out of place so that I remember what I'm doing next time I leave the house (tennis racket on the bike + tennis shoes and shorts/compression shorts in my bag)
That's pretty much it. I really don't like having to keep things in mind. And when I want to zone out on a run or a vacation, I can safely do so knowing whatever I need to accomplish is on one of those lists and will probably get an alarm from my calendar if its urgent. I used to love using Pocket for reading papers/articles when I don't have a reliable connection, but its completely broken now and doesn't save pages consistently or renders pages unreadable.
IMO maintaining a wiki is way too slow and (depending on your work place) only accessible across VPN, which is incredibly inconvenient. Paying someone to act as scrum master/maintain a kanban is generally a waste of money/time as well, unless you work at a huge company (10,000+ people across hundreds of teams). But I'm biased and have always had a strong preference for small teams.
Bookmarks - Pinboard with weekly backup to json/text.
Notes - A bunch of markdown files in folders (diary,projects,etc). Every day is a new file. I have @tags littered all over my notes for searching. Beauty is that there are many apps that can write markdown and search plain text.
Finance - ledger-cli, well, actually my own version with better reporting abilities, in my opinion.
Task management - to-do.txt. Again, many apps to choose from to manage the file.
Syncthing - Sync all of the above everywhere, plus other stuff.
Backup - restic and rclone.
Also, everything I've mentioned is cross-platform. Maybe not the application, but the source data is, and has an application that can modify it on almost every platform.
I've used txt files/folders, then excell/word, then markdown (easy to write & read), and wiki.Then I found freeplane, started to play with it and never got out, its incredible: use plain text or html (to format your notes), insert images, links to external files/folders, the visual mind-map representation gives a great overview of your notes and lets you organize in a foldable tree (branches, parents, childs) your notes (like in deeper layers of detail).
After the initial text/html nodes, branches and folds, I started to use "styles" to add icons and automatically format certain nodes with a background color (ex: TODO=yellow backgrnd, DONE=green backgrnd, PROBLEM=red backgrnd, ...)
Why is freeplane better than the others methods I tried before? It organizes knowledge in a foldable tree, that gets bigger and bigger over time, and after a few years, its just easy to "find" in the notes. It also performs quite well (my maps are huge, huge, years old huge)
Have a look and decide for yourself.
Even finances and accounting: http://orgmode.org/worg/org-contrib/babel/languages/ob-doc-l...
For Kanban's, I have used Trello, but got a little annoyed. I recently found this personal Kanban project:https://github.com/greggigon/my-personal-kanbanIt's use is very simple, and I find that it works well for me. A little difficult to share among a group though.
Finally for All the rest of my documentation: Keepnotehttp://keepnote.org/This glorious little tool handled nearly anything you can throw at it. It supports Windows and Linux ( I am not certain about Mac), and it is search-able. I have used it from all my work related notes, specifically for debugging solutions, like Binding Exceptions in Telerik.
For anything which I can't figure out a way to tie to one of my current goals, a helpful general rule of thumb is that, it may not actually be that important to hold on to. There are of course exceptions, but they're few enough that a nice folder structure on my hard drive can catch the rest.
I've been using Pinboard for a while as a bookmark list, but find the lack of any structure beyond tags a bit limiting. Just feels like I'm dumping links for the sake of it and will never really end up referring to them again.
Cool quote in a book? Put it on a card and file it by theme. Reminder about feedback I want to write up for a colleague? Put it on a card. I did something really great at work and want to remember it at annual review time? Put it on a card and file it under Personal Achievement. Etc. Recipes, Writing ideas, presentation first drafts. Cards work well for all of that.
I'm really using a combination of two systems. The first is Ryan Holiday's index card system for harvesting the wisdom and interesting bits from reading. The second is an index card version of the 43 folders tickler file. It's not a perfect system, but I love t and I like that it is something I can keep doing forever independent of any stupid decisions by Apple or app developers going under.
To get started you need:
- Some nice index cards. I like the Exacompta ones.
- Tabbed divider cards. Smead makes really nice ones.
- A way to carry some with you all the time. Right now I'm using the Nock Co Fodderstack for this.
- A way to file them. You can get some crappy boxes on Amazon, or something nice and vintage off eBay or elsewhere. Index cards used to be a lot more widely used than they are today, so the old selection of index card furniture is much better than what's available new.
I'm building an enhanced text editor that makes viewing/editing taskpaper files more convenient:
- Interactive programmatic access via an embedded scripting console - GUI for creating/editing tasks and tags (like calendar widget, autocomplete) - Enhanced views, for example: - Calendar view - Priority view (automatically sorted by @due(DATE) tags) - Bookmarks view - HTML "linkified" view - Recurring tasks
- Bkmks  - Drafts app  - Simplenote  - Notational Velocity 
Over time I've figured out a good organizational system (folder hierarchy) that makes sense to me so I know where to find things when I need them.
The "safety" of plain text files feels good to me for such personal / important data (after years of trying different apps/services, only to have them go out of business or cease development or not work on a different platform or have sketchy privacy policies).
Documents, sheets and notes, are in nextcloud, as well as pictures and other things. Calendar is there as well. Its all in one server, with raid0 ssds, raid5 for massive storage, a few "service" VMs like for nextcloud, a few containers here and there, with easy access and overview of it all on the hypervisor. Android phone has notes which is nextcloud notes application for simpler reminders/buy-milk kind of things.
Boagworld has a great video on his setup and how it all works: https://boagworld.com/working-in-web/omnifocus-2/
Getting things done book: https://www.amazon.com/Getting-Things-Done-Stress-Free-Produ...
The github repo is here: https://github.com/wheatbin/wheatbin
Very fast to make a quick list, but of course awesome filtering/calculation/lookups etc.
I have a to-do.xlsx for work, and one for home. Different sheets for to-read, to-call etc.
If there was a service that could do email, calendars, contacts, notes, passwords, bookmarks, rss/atom feeds, file storage/sync, and document editing well and in an integrated fashion (at least all within the same interface), that would be great, but I doubt it will ever exist. Google has made all those things, but they don't offer any sort of combined solution and have about 3 different versions of notes/to-do/bookmarks, none of which are integrated with anything else.
* Calendar as overarching to-do, covering errands, appointments, blocks of "do this work". Sometimes I follow it closely, other days it is largely a suggestion.
* Mindmapping to collect notes, outlines, brainstorm. Lately I've used Coggle  for its easy sharing. When I need to add details, the nodes may grow into Gdocs links.
* "Scratch" text file when I just need to jot work things down and I really don't care about the organization yet. If it becomes more lasting I tend to move towards the other tools.
* Trello when I want to cut out more discrete tasks over a longer period and log their status.
* Riot.im to talk to myself. This is something new I'm trying, which is that I can start a conversation without having someone in the room yet, by thinking "out loud". Then I can subsequently invite people in to continue it. A tiny nudge in context that distinguishes it from dumping a text document on someone.
Right now my Trello board is organised based on the work I need to do for a week. I haven't really experimented with changing this frequency though as it pretty much works for me now. And a lot of times, I need to sub divide my weekly tasks and for that I use checklists. When needed, I create separate reminders for these sub tasks using the Reminders app(primarily because it is super fast and syncs well across my devices).
When I need to look for something, I first use Spotlight to search for it as it can search across all of these apps. Works most of time, but I have to search individual apps for better results at times.
I have a file where I keep project ideas organized by category(webdev, ML, writing, etc).
And I have a file where I keep my daily notes(I write down most of my thoughts, it helps me to focus).
In that file, I use tags like:
- #pst and #vid for blog posts and video ideas
- #prj and #sup for project and startup ideas
- #ftr (or #bug) for feature ideas for my projects
- #link for useful links
- #jok for great jokes I've encountered or came up with.
That way I can always search through this file and easily find information I wrote down years ago.
I also put symbols >> and >>>> at the beginning of the most important ideas, so that I can easily search and find the most important epiphanies I've had this month/year.
Also, I highly recommend an app called Editorial for iOS. I use it constantly, it's incredibly powerful, and has amazing automation features. I can create shortcuts to auto-insert current date, some tags, etc. I can search through all of the dropbox files, and I can write python scripts to automate any text manipulation. It's amazing.
* To do lists/Reminders - macOS reminders * Bookmark lists - Safari bookmarks * Kanban boards - Trello * Wikis - http://taoofmac.com (https://github.com/rcarmo/sushy for the engine source) * Financial tools - Numbers or Excel * Calendars/Reminders - macOS Calendar * Files on disk - Dropbox + a NAS * General notes - Evernote (now OneNote) * Mindmaps - Mindnode (works great on iOS) * Photos - NAS
* I left Evernote around 6 months prior to switching jobs because the app was becoming useless and migrated everything across to OneNote (which was free anyway). That gave me: * To-dos * Notes * Blog drafts (I wish it did Markdown, but...) * Occasional web clipping I want to keep beyond Pocket. * I started using Pocket more to bookmark stuff I'd want to follow up at home or on the move * I started using Chrome more (thought about Firefox, realized that Chrome also kept extensions synced the way I like it. Would switch if I could set up a private sync backend) * I started using OneDrive alongside Dropbox at home (I don't run Dropbox on my work laptop, but some files I might need at work like school schedules and stuff go on OneDrive) * Trello was replaced for work purposes by Office 365 Groups (works pretty well) * My NAS now backs up nightly to Azure * I use Outlook for work calendars, iOS to access everything (Outlook on iOS is pretty good and has its own isolated calendar, which suits me fine)
In general, I don't mix work and personal stuff (OneNote is an exception because it can _access_ different notebooks, but they're on two separate accounts. I generally access my "Shopping" notebook at work to check on to-dos and add stuff, then close it).
I can be up-and-running on a new system in under an hour. Just install my IDE's, get the Adobe CC from the cloud and get started.
I use a file called ~/TODO for that in this format:
| % cat ~/TODO | == EASY == | todo/no/progress | . task/some/progress | x task/done | | == MEDM == | todo/no/progress | . task/some/progress | x task/done | | == HARD == | todo/no/progress | . task/some/progress | x task/done
I use a file called ~/SITES for that in this format:
| % cat ~/SITES | | begin category | http://link link name | http://link <b>more interesting link</b> | begin subcategory | http://link link name | http://link <b>more interesting link</b> | end | end
> * Financial tools
Just a XLS file with GNUMERIC/LIBREOFFICE for editions.
> * Calenders/Reminders
I use a file called ~/CAL for that in this format:
| % cat ~/CAL | 09/28 c car/something | 10/04 B birthday/someone | 10/08 x some/event/other | 10/12 N some/name/event | 11/10 B birthday/someone/else
| == | TODAY IS 10/26 B birthday/someone | 15 day(s) to 11/10 B birthday/someone/else | 22:54|hostname|dir % _ | ==
ZFS with LZ4 compression + GELI encryption on FreeBSD.
Bookmarks:Pinboard, as well as pocket/instapaper for offline reading of bookmarks.
Financial tools: Mint by intuit to keep track of all my accounts, numbers/excel for budgeting.
Calendar/Reminders: Google calendar and macOS calendar. I use siri/google assistant to capture spur-of-the-moment things that I don't want to forget.
Files on Disk: Dropbox. Backblaze for backups. Google photos and icloud photos for extra photo backups.
Wikis/General Notes:Emacs org mode. I keep a journal.org file, that I sporadically update, as well as an ideas.org file for things I'd like to investigate/try build in the future.I use evernote for lists/notes from mobile devices as I haven't figured out a good way to use org files on iPhone/Android.
There isn't much overall integration, I just know that for important files I reference dropbox, Financials and Bookmarks have their own services, and then notes are going to be in emacs or evernote. Events/reminders handle themselves as I typically schedule them in the stock calendar/reminder apps and forget about them until I get a notification. I don't find the lack of integration to be a problem actually, as long as I know where to look for something based on what it is (e.g. notes -> orgmode/evernote, events -> calendar/reminders, files -> dropbox etc.)
Calibre (https://calibre-ebook.com) for docs/ebook management (metadata), with Recoll (https://www.lesbonscomptes.com/recoll/) for full-text and metadata search on Linux.
The journal I keep is on paper. I find that writing down helps me clarify things in my head. It works better than writing on a computer, perhaps because hand writing is a slower process and you get time to think things better.
-- Calendar for events e.g. Google Calendar
-- GoogleMail with its task function for emails
-- one file for yearly, quartely and weekly goals
-- a normal file structure, with a README in each respective project folder, all literature, documents contacts, work, etc
-- one hard copy lab book for conceptual work.
Having said that, the things I come back to are Trello (Kanban-style boards), Pinboard.in, a personal wiki, and Google calendar. I like everything web-based so that I can access things wherever I am and whatever device I choose to use.
Over and above that, I use a paper-based daily planner that I've iterated over time. I pull everything to do that day on to it, then bin it at the end of the day.
Version 3 is here: http://www.slideshare.net/dajbelshaw/dougs-daily-planner-v3 (CC licensed)
What all these apps and lists get wrong is the following: What you know and what you need to do are highly related.
I usually use a combination of OneNote & Outlook for office work organization.
- One note: For organizing web clippings, information, self help tutorials, information that I might need to reference back some day etc.
- Outlook: For my meeting requests, reminders, appointments, TODO tasks etc.
- Trello : For my goals and my self-learning stuff (which I rarely re-visit after creating it ;))
- Google Keep: For quick lists/reminders
- EverNote: For some important articles/algorithms/programs that I might need to refer time and again at an urgent notice over my smartphone.
- Google calendar: I failed at integrating this with Trello, but otherwise, this is an excellent tool for scheduling your day (exercise hours, recurring tasks etc).
Overall, I find OneNote to be an amazing tool at organizing information and I think this has the potential to be that solution for 'one size fits all' scenario. I'm really surprised MS just gives it away for free and doesn't market as much as its other Office tools. The only reason I don't use it for my personal tasks is due to the lack of a good android port. OneNote was(still is?) atrocious w.r.t memory and execution on android. The desktop/mobile app would hardly sync well most of the times and the layout design was messed up. Felt to me that someone just copy/pasted the desktop app on android with little modifications.
I still have found my holy grail : a kind of knowledge management software where I could just stuff things probably with tags.Not only links (I have pinboard for that) but ideas, snippets of knowledge etc.
This would be online (not necessarily self-hosted) and I'm willing to pay for that.
Accessible via smartphones and potentially with an email gateway would be great.
I don't think mindmapping software fit the bill. I really would like tag and/or full-text search.
Wikis come close but it's quite cumbersome to add a piece of info.
Only exception is when I am on the go and I want to take quick notes on my phone. For this I use google keep, making the notes sticky until I am in front of any of my laptops and dump the note into org mode again.
Then for every task I would ever like to do at some point in the future, from bucket lists type things to project tasks which aren't yet scheduled, I have a huge WorkFlowy list.
Then for ToDo that I'be actually committed myself to I actually use Google Sheets where each mini-project has its own row with the next action defined and a history of all activities in the context of that project (both previous next actions and other things I did for that project) on the rest of the column. That allows me to keep a 'narrative' of each projects and to group them by meaningful time horizons (i.e. on a specific day this week, next week, the week after, the month after etc.)
This sheet works really well for me together with some Keyboard Maestro macros and allowed me to grow my perfect system but it is definitely time for turning that into a proper app though.
Whenever I get around to making that app I'd also love to include daily, weekly and monthly checklist/self-questionnaires/journals for additional level of planning structure.
I often thought that store some information as Prolog facts would make it more accessible while being somewhat structured. I have not had time to build a proof of concept on this.
- Spurn ~. It generally gets cluttered with machine specific stuff.
- The primary goal is to preserve knowledge.
- The data should be easily readable in 20 years time on hw/sw not yet invented.
My 'digital life' goes in its own folder (eg /foobar), which is Syncthing'ed around to various machines, and backed up periodically. It's very big, and contains a snapshot of 'everything' I want to preserve.
Cron run various scripts to pull data from multiple services (e.g. Pinboard, DayOne, etc) so if they ever go down, I have the data I created on them.
I segment documents and projects that I create / work on from those I've just downloaded to use. This results in a fairly simple top level folder structure:
- docs: Documents and textual data
- dev: Projects, design work, development etc
- external: External tools, software, etc
- media: mostly video/audio
Projects of course do live in their own git repos.
- Emacs org mode for notes, todos, etc (best in class)
- DayOne for journaling and notes while mobile (integrated with org notes)
- Pinboard bookmarks
I'm not a huge fan of using fancy project management software tools, because fashions change, tools go out of date, data gets lost etc. Straightforward text files for most things is the best combination of usability and persistence for me. Wikis are great, but suffer from this - they need maintaining, software needs updating, the database format could change, etc. A bit of work to get a text based system going is totally worth it ;).
* To do lists/Reminders -> Google keep * Bookmark lists -> Chrome bookmarks (automatically synced, search works in content as well) * Kanban boards -> Trello * Wikis -> Nope * Financial tools -> Nothing * Calenders/Reminders -> Google calendar * Files on disk -> Total commander / Dropbox * General notes -> Asana * Music -> Google music * Videos -> YouTube
Instead we have what we have today: lots of alternatives that act as replaceable parts of a bigger web. Luckily most of them have API-s and things like IFTTT and Zaiper exists.
Goals - Streak (IOS app)
Tasks both timed & untimed - Any.do (IOS app)
Financial - Quicken (IOS + desktop app)
Long term notes - OneNote
Short term notes - Notes
Files - I have a disk structure that makes sense for me. Augments with OSX tagging to ensure documents that require timely deletion are dated & marked for deletion.
These all reside on my phone's first screen home.
The tools currently are Gmail and Google Calendar.
I've tried many times to try new tools and processes, such as Trello, Evernote, Remember The Milk, Getting Things Done, Kanban, etc. Pieces of those processes have made it into my workflow, such as weekly, monthly, and quarterly goals. But the tools still end up being email and calendar.
I also tried Notion but it's very slow.
For side-projects kanban boards, I just use Gitlab issues' kanban view.
2) I don't. If it doesn't fit into the above-mentioned 2 page document it's not important enough to be categorized. Categorisation (control) used to be a major source of stress in my life.
3) For academic paper/thesis writing I am actually working on a software to organize all research/quotes and then keep references to them in a "main document". Contact me if you'd like to know more.
OmniFocus for ToDos/Reminders and synced issues from JIRA (work) and GitHub (personal projects)
Evernote for taking notes, capturing webpages/blog posts I want to save/read later
DevonThink for going paperless at home. Scanning everything that comes into the house.
notion.so looks also nice, but I can work more smoothly in dynalist
My stack is becoming simpler as I declutter my life. On last update, I quitted Evernote and my notes are now managed on a text editor. I still use other tools for:
- collaboration (Trello, Slack, Gmail)
- finances (Spreadsheet: informal balance sheet updated every quarter).
- RSS (Feedly)
- image references (Pinterest: images with searchable descriptions. Unfortunately their search engine is bad, worse than Evernote's)
- managed owncloud for calendar
- managed, but small and lovely email provider with catch all on my own domain
- semi managed hosting (shared server with multiple non root users and ssh, unique thing) for website and quick online sharing of text or screenshots (upload via shareX+ftp)
Evernote (coupled with a ScanSnap document scanner) ->
Documents Financial Statements Contracts Receipts Code snippets Infrastructure notes Invoices / POs / other financial docs
Email Calendar Bookmarks (Chrome) Spreadsheets Docs
To do lists Reminders Project Management (lists of to-do lists)
Notepad+ for iPad Pro (then shared to Evernote)
It is like Google spreadsheet and Trello made babies in my book when you utilize it's ability to add filtered Views and connect and link data across tables.
Attachments from other services, calendar views and ability to do low level formulas are other standout features imho and it just seems to fit how I actually think better than any service out there.
For email, I've really been enjoying Google Inbox, the ability to sleep items is nice, and the reminder function is quite a handy TODO list of sorts.
But mainly it's the vimwiki for me.
For pretty much everything else, I usually just keep text files in ~/Documents.
For personal life, I have lots of old things in mails in Gmail (also notes in mails to self), scan paper administration type things and put them in a password protected ZIP in Dropbox, plan books to read on Goodreads, store contact info on my phone, chess games in Scid and other than that I rely on memory.
I like to keep them separate.
A Wiki (http://dynalon.github.io/mdwiki/#!index.md) works great for my work related stuff, while org-mode (http://orgmode.org/) works for everything else.
* Sometimes Google Keep for other random notes.
* Wunderlist for long term todos
* Apple Reminders for "remember the milk" type reminders
* Trello for work & personal projects
* Mint for budgeting
* Google calendar for calendar things
* Dropbox for cloud photo storage from my phone (may switch to Google photos at some point)
* Backblaze for offsite backup
I like OneNote a lot more than I like Outlook, but the integration is reasonably good. You can create tasks from OneNote that give you reminders in Outlook, which link back to the rich-text "source material."
* Dropbox, for text files and code. To be replaced. * recently, Google Docs, used as an ad-hoc wiki. * Google keep for random 'check this out later' notes * Pinboard, for web bookmarks.
Other than that, Simplenote for notetaking on web, android.
Lastly Google Drive is heavily used for the rest.
I sync most important files between 3-5 devices with Syncthing. Devices are small and portable, 2x laptop, raspberry pi, netbook, I'm going to replace it with external drive connected to my Omnia Turris soon.
I have a few external drives with photos, music, films I liked, everything is evaporating online, torrent trackers are disappearing, content on Netflix is expensive and getting worse and worse, so I 'data-hoard' everything and backup at least twice once per month.
Like a year ago I opened a spredhseet where I log all my bills and it works for me as financial database, ~20 categories of expenses, each has some subcategories.
* Kanban boards Yellow sticky notes on a fridge.
Still looking for an optimal solution for calendar though, and other information I keep in Dropbox, iCloud notes and on paper lists.
* Asciidoctor - for Notes, snippets, documents, Projects. * SublimeText + Material Theme + Plantasks for daily to do and journal. (synced through dropbox) * Wunderlist - For grocery shopping list
Unlimited list items
Tags (colored, private, public)
Search and filtering
Its nothing fency.
My task-list is broken down into times and days like:Task ListAM - morningMD - middayPM - afternoonN - evening
Oct 25 AM - send email for x
* Emacs Orgmode
* nvPy (https://github.com/cpbotha/nvpy)
* Asciidoctor files
It took me a long time to find the right mix of tools that are ideal for my specific workflow. These are the tools I mostly rely on now:
- Outlook.com (with custom domain) for my personal email. I find Outlook's 'Sweep' feature a lot more feature rich than Gmail's filters. I have rules that automatically move newsletters over 3 days old to archive and then delete unnecessary emails over 10 days old automatically.
- I've grown to like Wunderlist a lot for personal tasks. It has its limitations but it gets the job done well. I don't bother with many folders etc. I just throw everything in the inbox and add due dates to it. Inbox is sorted by due date. Works great for me. Also, it integrates well with Outlook.
- Evernote is where is store anything that's remotely relevant to me. Again, I don't bother with multiple notebooks. I have 2 main notebooks - Inbox and Cabinet. All notes start in Inbox. When they are no longer needed for my day to day work, they are moved to Cabinet. All notes are meticulously organized with tags. I am contemplating having a 3rd notebook called Library (offline notebook) with all my favorite online articles tagged by topic. This might work better than a Wiki to be honest. I also use their browser extensions a LOT.
- I use aText snippets inside Evernote to log call notes, meeting notes etc. using a standard format. I have quite a few other snippets that I use in other applications as well.
- All my favorite articles are in Pocket
- All my personal files are on OneDrive. Work files are on Google Drive (it's easier to collaborate on Google because everyone I know uses Gmail / Google Apps).
- Work tasks are on Trello
- Photos automatically organized on Google Photos
- My code editor (Visual Studio Code) settings are automatically backed up on GitHub Gist using https://marketplace.visualstudio.com/items?itemName=Shan.cod...
I also use a few other tools occasionally but mostly rely on these for everything. Like most people, I wanted one tool to fit all my needs but I came to accept that it's just not possible considering the complex needs of each function. You might not think about it but, task management in itself is more than just a simple list of to-dos that requires a lot of programming to be done right. Stop trying to find a one-size fits all tool. Leverage multiple tools and integrate them together. For instance, Evernote talks to Gmail through a browser extension so you can always save an important email easily. You can also create more complex workflows using IFTTT. That would be the best way to organize yourself.
Rest of the info I store in .txt files in a folder.
I am not a busy man :)
Evernote (I might be way too dependent on this)
Over the years I've tried many planning methods, with very low success.
I tried GTD for 7 years before declaring it a failure. It does have some good ideas that I still use, but the TODO management didn't work for me. I think it'll work only for people who have fewer goals than I do. It doesn't handle large lists very well.
Some things I kept from it:
1. Filing cabinet - Instantly useful from day 1.
2. Calendars are only for hard deadlines. Don't put stuff in there that you merely want to do. I know this is the opposite of the submission here. For me, planning everything in the calendar, including things I could ignore, led to a mess. Keep it for things you really cannot ignore.
In general, any obsessive time based planning like this submission fails for me. GTD is not time based. I prefer planning my tasks for the week, not for the hour.
I like the idea behind Kanban, but I do not think it fits most of our personal lives. Very good for certain work environments, though.
Pomodoro technique: It's good, but not really for task management. It's just a good technique to stay focused. Worked for a few months until I got used to it. Now it does not keep me focused and I can easily get distracted by the web, etc.
These days I'm trying this:
I think it works better than GTD, and fills the gaps in it. If you do not want to buy the book, a condensed, down to Earth version is available as the 1 Minute Todo List:
Personally, I feel the book is better than the PDF at explaining the rationale behind the 1 minute todo list. Reading it was very calming. It explained all the problems I had had with GTD and similar techniques.
1. If you cannot examine your todo list inside of a minute, it is too long. So spend a lot of effort ensuring your daily todo list is not long.
2. Urgency and importance are not the same. We're hard wired for focusing on urgency, so do not try to make a TODO list purely based on importance.
3. Every week, identify everything that must be done in the next 10 days and put it on your list that you'll examine daily. Things you decide not to do in the next 10 days, keep in your "list to examine weekly".
4. Every day, multiple times of the day, look at the short list and do tasks from among them. If new tasks come in, add them, but keep the list short (no more than 20-25 items). If your list is getting too long, identify things to move to the "list to examine weekly" and get them out of the way.
5. If something needs to be done today, put it on the top of your list!
6. You'll also have "the list to examine monthly" as well as quarterly.
Very simple idea - works a bit better than GTD.
I think my biggest problem is that I need to reduce the goals in my life and focus on only a few. I have more goals than time in my life, and I keep jumping from one to the other. No task management system will work until I do this. Tough decisions need to be made!
* Google Calender
* Wunderlist for task today (life and work)
> We value T-shaped people. That is, people who are both generalists (highly skilled at a broad set of valuable thingsthe top of the T) and also experts (among the best in their field within a narrow disciplinethe vertical leg of the T). This recipe is important for success at Valve. We often have to pass on people who are very strong generalists without expertise, or vice versa. An expert who is too narrow has difficulty collaborating. A generalist who doesnt go deep enough in a single area ends up on the margins, not really contributing as an individual.
Where you choose to be deep should be an area of interest to you and which the market values.
-- Robert Heinlein
I wouldn't necessarily restrict this to "the digital world."
Each new piece of knowledge you learn will give you a better base from which to learn more, and slowly the amount you are able to learn will increase to help you cope with the load.
After a while you gain the ability to reduce a problem you're faced with down to other problems in other disciplines, then things start getting boring because you can already figure out a way to reduce this problem, etc. So at that point it's time to mix it up a little and refocus.
Another thing that should be noted is that you should always make sure that you are out of your depth with at least one thing you are studying. You can only really improve by pushing yourself. However remember that you cannot push yourself constantly, sometimes you need a break. So in doing this, you should be driven by your own interest.
What I have found is that I am not necessarily able to do everything at once, so I end up doing a rotation of things I find interesting at that moment. Eventually I'll either discard some topic or problem or such, because I don't find it interesting or I will find something new that I find more interesting. If things get stagnant, mix it up a little!
I've been doing this for approximately the last five years, and I think the payoffs have been great, and I have learned so much more than I think I would have otherwise. However I have nothing to compare to! So we cannot be sure =)
Do what interests you.
My salary increased once I marketed myself as having a specific specialization, but the difficulty of finding a job increased too.
It is a basic application of supply vs demand. As, say, a PHP developer, you're competing with millions of other PHP developers around the world. There are plenty of jobs, but there are also plenty of people who are competing with you, driving your price downwards.
If you narrow it down to knowing a lot about a very specific framework or PHP system - for example, you know a lot about Laravel or Drupal, then you're competing with fewer people, and people are willing to pay more for an expert, but there are also fewer potential jobs.
There's also an associated risk. If you specialize in Laravel and Laravel goes out of style, you will have to remarket yourself as a PHP dev again... Some people specialized intensely in Microsoft Silverlight, and they ended up like this - http://www.commitstrip.com/en/2015/07/28/betting-on-the-righ... (it's not a total loss, as some programming paradigms work across languages). With the risk comes increased reward.
Do both, as people always have. But start out a generalist to get an understanding of what is good to specialize in. Then pick 2, 3, 4 diverse areas to home in on.
To be employed, you'll do better as a specialist. If you pick the right specialization.
Certified AutoCAD technician
Certified TIG Welder
Degree in Supply Chain Management
Certified Bicycle Wheel Builder
Proficient in 3D Modelling
Launched an ISP in 1995 that is still going
Project leader for a charity market garden supplying produce to a food bank
Assistant director / Assistant Producer of a feature film released on DVD (you can buy it on Amazon)
Producer of 4 music videos that have appeared on MTV
Made most of my own furniture from scratch - bed, table, freestanding kitchen unit, chairs
Was resident VJ at a successful rave series for 5 years
Appeared in stage plays for paying public
Qualified scuba diver
Arrested twice on TV on environmental protests
Occasional data analyst for a Superbike racing team at the national level
This isn't even my final form & this list is incomplete
Live life, box sets are for the dead to get buried in.
Be somewhere between "mediocre and good" at many things, and be really good at one or two things. If you can be great at one or two things, that is nice, but not strictly necessary.
There's a lot to be said for generalists, or "T-shaped" people. Every single project requires a large breadth of skills all up and down the stack... and a lot of moving pieces (client, server, markup, JS, CSS, blah blah blah) that work together.
There is a place for specialists, too. In fact, we need them to make the world go 'round. But... there aren't as many of those places.
Here's a real-world example. I literally just finished troubleshooting this issue. Finding the bug and developing a fix involved (1) our iOS client (2) our React web client (3) our server-side auth, implemented in Rails (4) a messaging library with both client and server components (5) some other bullshit I can't even remember at this point.
I'm not the best at any of those things. I'm barely even good at them. Honestly, I don't even fully understand the auth fix that our brilliant (and I don't mean that sarcastically) programmer implemented. But I understood enough of those moving pieces to isolate the problem and get things into his hands.
It'd be really fucking great if I was the world's leading iOS developer or whatever, but if that's all I knew, this issue wouldn't have been fixed.
When I first graduated from the university (at 23), I got a job as an IT support guy in a growing company (80+ employees at the time). I was the only IT support and my job was to help people with their issues and maintain the IT infrastructure. I managed to solve all types of issues which I guess people started to recognise. This was fine. However, since I also knew programming, my managers wanted me to help out on development (PHP), to ease the load on the developers. As time went on I became better with our framework and started to get more more complex programming assignments, while still being IT-support. For me this became a real struggle, completing programming tasks on time, maintaining IT infrastructure (servers, network, buying hardware, phone calls) and helping people with their issues. Somehow I managed, which my managers recognised (I assume, and hope), so I got additional assignments regarding "Big Data", basically get information, store it, connect the data with other data sources and so on.
At the end I was doing everything with IT. Data science, development, IT support, system administration and more. The reason it become like this, at least what I think, is because I had a sufficient grasp on most domains and tools so I just continued to get more stuff to do. When I finally quit, I actually realised that I was not feeling that great. I could feel the stress inside me slowly diminish.
Deep has the advantage that when specialists are in demand, you're really in demand. It's good to have someone on the team who knows absolutely everything about the thing you do. The downside is that when technology or your career moves on, you know nothing. You're stuck doing that one thing, and may have a harder time getting into something else.
And broadness has a specialization of its own. Knowing multiple things is particularly valuable if you know how to connect those things. If you can develop front-end with an eye on what's easier for the back-end, if you can design the graphics that you will need, rather than having to wait for someone else to get around to it. Knowing different unconnected things is less valuable, but even there you may find unexpected connections. But for the deep technical stuff, you may find that you'll have to ask a real expert.
Are you planning on going into startups? In which case jack of all trades does very nicely!
The key is to be very good at some things but to also keep your eyes open and learn things outside your comfort zone - you never know where your new found knowledge can take you and often times it can make you better at whatever you chose to specialize in.
So senior architects who write APIs - for fucks sake (showing my background here!) - write the prototype client library - it will improve your API design skills.
Backend devs should write a front end or two or at least do some pair programming with the front end guys.
Bottom line - be very good at some things - but be open to learning new things and getting out of your comfort zone.
Personally, I like having a variety of skills. I want to be able to dip in anywhere on a project and be productive.
You'll naturally have focuses, or drips of paint, which I see is referenced in another post. Your focus really can only be on one thing at a time, and presumably you're not just learning for its own sake, you will be learning to accomplish some goal, which will drive the learning.
I'd rather work with a well-rounded engineer than one that is a poor communicator, tool user, etc but has very excellent skills in a very specific area.
YMMV. There is lots of value in having deep skill sets. There is also a difference between being a "dabbler"/"knowing enough to be dangerous" and being a competent engineer.
For your (potential) employer: be great at one thing, that they are willing to pay you a bundle for. Then use that money to buy all services you need to be happy.
"You ask me if I keep a notebook to record my great ideas. I've only ever had one."
"It's not that I'm so smart, it's just that I stay with problems longer."
At the same time:
"The important thing is not to stop questioning. Curiosity has its own reason for existing."
"I have no special talent. I am only passionately curious."
So I say follow your curiosity. If it wants to go deep go deep. If it wants to go broad go broad.
I believe this article popped up on HN a couple of years back:
The important part is not to stop when you're finished. Pick up the next thing and do the same. After you go through a few phases you will have enough general knowledge to apply in many areas.
In this way you start a specialist and become a generalist. You'll know fully well what your tools and technologies will be capable of and you will be able to give reasonably accurate estimates.
As far as I can tell, unless you have an eye for design, it's generally easier to start on the back end and move to the front end. This way you can be productive and are able to move between companies. Front-end is still changing a lot. But there are a lot of promising releases/tools in the works that are making getting started a lot easier.
Last time I was looking for a job, the recruiter came back to me and said "I can find lots of jobs that need your skills, but none that will pay the salary you want."
So we discussed what my skills were. I was looking for a SW dev job, but I have degrees & experience in EE, SW, lots of time working with integrating SW, EE, and Mechanical motion control, more experience working with biochemistry and understanding how various physical movements can affect the way a reaction proceeds, and the repeatability, etc. of the output.
Finally she says, "hmmm, you're really a Systems engineer with a Software engineer title." Then a new set of job opportunities (that wanted to pay what I wanted to be paid) showed up.
And somehow I ended up taking a position as a software engineer/Manager... go figure.
In the personal domain, the situation is the opposite. It's just not possible to outsource being healthy, financially sensible, romantic or a good friend to someone else. If you're really struggling with one of those areas of life, it's worth it to work on fixing up your weaknesses rather than just further developing your strengths.
I see myself as an IT generalist, but in the workplace I have to specialize. Currently I focus on making Single Identities work across systems for large Corporates. It's quite niche, and at times monotonous work (the design is pretty much the same wherever you go), however in order to be GOOD at whichever specialism I'm pitching at the time I heavily draw on the cross knowledge I've gained over the years. This extra knowledge has ended up being invaluable in separating myself from the herd in the recruitment marketplace.
So in short. Early on you should generalize and learn as much about stuff that interests you; later on (10+ years) start to specialize based your preferences (or mortgage size, or whatever).
Once you have your small niche in a firm grip, you can expand outwards.
Now I'm a person that talks to many specialists and brings ideas together to create new research paths to go into. I talk a lot, I write a lot and do some programming. According to tests I'm an extroverted person with a short attention span who is motivated by frequent changes. My current position requires this of me.
If you prefer to just focus on getting a single, (complex) job done, introverted, away from other people, you're better of specializing imho. Me, I get new ideas by talking with others and can enjoy meetings. Many of my colleagues can't, they just want to get their current task done ASAP.
I am not sure if this submission is tongue in cheek or not.
It can make you seem like a generalist, when in fact you are just a transcendent specialist.
The problem with going deep is picking the right discipline. Since you may pick wrong initially, going broad first allows a chance to pivot to a different skill to go deep on.
The first skill is the ability to learn in a fast organized manner.
There are things only specialists can do and things only generalists can do.
There are people who are equally interested in a lot of things and people who are particularly fascinated by a single topic.
Which are you?
Extreme specialisation seems to be correlated with unhappiness so it might be better to be good at many things if you want to have a happy life.
If you're going to "learn" something, make it universal. Learn to communicate (written and verbal), make friends, have experiences and learn to be empathetic and check your ego at the door.
The truth is, life is short and you will never master anything let alone become great in many things, so why try? What's so bad about being technically "decent" and exude the universal skills listed above? I'd hire that person any day.
Be mediocre at many things and specialize to some extent on few things.
Compare the IP address from when the account was created / last accessed with the one for the password reset request. IP addresses are easy to spoof though so even if the IP addresses match you should be very cautious.
If you have the user's physical address, you could send a letter with an authentication code.
Definitely something we handled on a case by case basis and declined to do if we weren't comfortable.
Alternatively, there are many situations where a new email address could simply mean the site requires creating a new account.
All that said, to answer your question in brief, you have the right idea - even within the device driver layer you have various levels of abstraction. Whether you ultimately choose a certain level of abstraction is really specific to what you would like to do. If you find that an existing kernel module that provides a easy to work with interface via a device node, just make a userspace tool or library to suit your needs, if not, create your own kernel module.
This project is big, it's definitely not your average webapp express node.js you see these days.
From my experience in projects this big with a big team, there's absolutely no better solution than reviewing code carefully and caring about quality.
I was in the same situation as a consultant a few years back and the rule to leave code better than you arrived at it is a real trigger to most people that respect what they do.
I'd say that the VP ENG should be involved in the process and set some rules for what is acceptable quality and what isn't.
One more thing
Everyone knows a smell, every single member of your team has some piece of code he/she saw that doesn't make sense.Keep a document with all of these and just make sure you scratch them off EVERY single day.
Stuff like: * User Creation is using LOCK on table_x and it shouldn't* Form submit code is too complex, need to be better* Extract component X into a microservice
If you go through a list like this and fix things one by one, you'll be better off in a short amount of time.
Don't try and take it all at once, create manageable consumable pieces that your team can relate to, understand and get behind.
So how do you go about making code quality improvements:1) See if you can remove unused code/dependencies/features. Less code means less code to support, and faster compile and testing times. Look at metrics like code removed
2) Focus on the most problematic areas of the code and eliminate errors and bugs. If you can eliminate a significant source of unplanned work/firefighting, you'll have more time to spend on planning development instead of just reacting to work. These problematic areas are where tests will be most useful
3) Add static analyzers and linters to easily detect simple problems (like unused variables, style problems, problematic constructs such as if(foo = bar). As you develop your coding guidelines, implement the rules in these tools to automatically find these minor problems. This will allow your code reviews to focus on the big picture instead of nit-picky implementation details.
4) Do things to close the feedback loops for development. Consider running testing throughout the day. Maybe try to increase release cycles. Maybe add UX earlier in the cycle
Going from top to bottom:
> Our company builds a java openGL CAD/CAM application suite for windows desktops
If it's an application suite then, from my understanding, you'll be building a main set of libraries and then a set of tools that all use these libraries. Have you considered a hierarchical plugin design? Have a main application that starts and setups all of your main rendering and CAD/CAM magic. Then go from there to working out a simplest of APIs to what everything actually needs access too.
Your main application basically just manages UIs/drawing to an OpenGL port. From there you can load modules to do other things. If you abstract what is needed then each module should only need to define How a functionality is executed, not where and what a functionality should look like in the UI. For instance refactor your code to follow such a structure:
Master UI System (Exposes: "Options", "Renderables", "Views") -> Drafting Plugin (Exposes: "Models", "Collision", "Faces") -> CAM Plugin (Exposes: "Routing Paths")
Drafting Plugin needs to know about Master UI but nothing about CAM Plugin.
CAM Plugin needs to know about Master UI and Drafting Plugin.
That's what I would try and do if this was a new project but this isn't one and uprooting your entire (or even any recognizable percentage of your code base) is unreasonable.
> We have a couple tens of million LOCs, with ~50 projects and 1000s of packages
If you've got that many packages then you might want to find out what sort of abstractions are being used, not working correctly, and remove them/replace them with simpler solutions. How much of these packages are filled with Interfaces/Abstract Classes/Implementations of interfaces
> After ~10 years of neglection we need a strategy to increase the code quality (lots of dependencies, feature envying inheritance hierarchies, spaghetti code, similar problem are solved in myriad ways, all that jazz).
One at a time:
> lots of dependencies
Slowly replace dependencies by either abstracting features further, replacing with new standard library features, or by implementing other solutions to the same problems. Every dependency is an added layer of complexity in my book so it's best to avoid this as much as possible.
> feature envying inheritance hierarchies
This comes as a side effect of not knowing what a level of abstraction is actually meant to be doing. Have a team meeting and ask what each team thinks the actual problems that are needing to be solved are. The people knee deep in crap will have a better idea of what's the correct or natural abstraction for these cases if the ones currently being used are unnatural. It may just be that the code base has had too many large scale changes or even just have had too many features pushed in at once (which for a CAM/CAD tool is definitely not unheard of, this is a very specialized and hard task)
> spaghetti code
Get some sort of static analyzer. I remember one group I worked with used Sonar. Also remember that the best code quality tool is a good agreed upon set of standards. Somethings that have worked for me on some group projects I've worked on has been: Avoid complicated constructors, always default a variable to final, avoid complicated logic statements always exit early rather then filter before in a for loop, use all the up-to-date constructs to aid with code clarity (try(stream), for(var:set), and more).
> similar problem are solved in myriad ways
If there is one problem that exists in two places this is an opportunity for you to pull the part out, abstract it, and use it as a library. This is a double edged sword since these two parts actually need to contain the same problems which some times is not the case.
Now to the nitty gritty:
> How do you measure code quality? How do you interpret the metrics?
(How many times does the code result in an error) * (The time in hours that it takes to debug the code).
Larger number is worse. Keep a notebook/log of these times, graph them, and use that as a map to decide what is worth refactoring. If a piece of code "just works" but looks ugly it can wait to be refactored if there is another piece of code that looks "visually appealing" while still causing daily side effects in the active development of the project.
> What are good tools for a windows/java/eclipse dev environment?
I've always managed ANT scripts for my group projects since they are very very cross platform. Maven works great but I'm not a fan of the complexity of install for non-linux users. Also check out IntellJ for built-in maven support.
> How do you act on the metrics and actually improve code quality?
Change your code by coming at it from a different perspective. If that perspective yielded a more promising piece of code (that is easier to understand, causes less side effects, and uses less external/non-standard functionality) then you keep it. A lot of my code I write is code I throw away. This is much harder to justify to business people but it's an important part of the process to sketch up what you think might work even if the attempts aren't always fruitful.
> Can you recommend any resources of success stories on how companies managed to increase code quality of a big, tangled system?
Check out the U.S. Digital Service for the only recent success story that comes to mind .
If anyone knew the secret sauce they wouldn't give it out for free. The ability to "Fix" all the "Broken" projects isn't an issue on the scales that we think they are. A large portion of all technology-related projects fail . If anyone could prove they where able to reliably fix these issues they'd be billionaires over night.
 - http://www.zdnet.com/article/study-68-percent-of-it-projects...
 - http://www.theatlantic.com/technology/archive/2015/07/the-se...
Edit: Removed "What do you mean by thousands of packages?"
Looking forward to what you think of all this.
Source is here: https://spideroak.com/solutions/semaphor/source
Open source FTW
1. Spectacle (https://github.com/FormidableLabs/spectacle), Presentation Library
2. Victory (https://github.com/FormidableLabs/victory), Graphing Library
3. Radium (https://github.com/FormidableLabs/radium), Component Styling
"debugger.html is a hackable debugger for modern times, built from the ground up using React and Redux. It is designed to be approachable, yet powerful. And it is engineered to be predictable, understandable, and testable.
Mozilla created this debugger for use in the Firefox Developer Tools."
There are simple components, and then more complicated concepts like higher-order components and factories. It has very good documentation, and is under active development.
Work in progress: https://github.com/Cloud-CV/cvfy-frontend
It is a platform to build pipelines to showcase machine learning models on the web. You select input components, output components, and use the cvfy-lib python client to connect all these.
The code is also open source: http://github.com/nylas/n1
(I work at Nylas)
Source Code: https://github.com/codemy/invoiced-ui
Contains documentation and unit tests, plus a few neat react tricks (like a custom React-router Route component and an accumulator saga), documented there:
* http://marmelab.com/blog/2016/09/20/custom-react-router-comp...* http://marmelab.com/blog/2016/10/18/using-redux-saga-to-dedu...
They are also accepting of new contributors.
All I know is that it written in react and by what seems to be three, very passionate, brothers.
"MASAS.fm is going to be a platform on which all of an Artist's needs, from creating music, to getting it discovered, to selling it and playing at live events, can be met, for free. Thus eliminating the need for all the vicious middlemen that have placed themselves between Artists and their fans. Together, we can build that platform, one that will truly help all Artists, without ripping them off of their music rights!"
Just leaving this here for reference and as a resource.
It even has user interface guidelines for the components.
A Guild Wars 2 Armory. Fairly impressive. You can view it live too https://gw2armory.com/
check it out here https://github.com/desklamp-js/desklamp and feel free to make pull requests and submit issues.
good luck in your tech journey
Also: I would highly recommend getting familiar with both npm and Babel/ES6/ES2015 -- even if you're not a node developer.
I found that understanding the tech was one thing, but when I actually started building my own projects I sought out community help with specific questions I had.
It has just two reducers, uses redux-promise-middleware to make one ajax call, and uses Semantic-UI for the UI.
GitHub: https://github.com/ayxos/react-cellarWeb: https://react-cellar.herokuapp.com/
Provided by Airbnb.
React Native, but same idea. There's also an excellent set of posts at http://makeitopen.com/ which run through how it was built and why.
It's responsible for a lot of my 'aha' moments about Flow type-checking and Redux.
Updates are slower to roll-out to the hackintoshes, major OS upgrades can be quite a bit slower to come. This can include security fixes too.
I ended up installing Linux and never looked back. It turns out most of what I used on macOS was just the unix-like subsystem. Having Linux was just as good, if not better than being on macOS.
Of course this doesn't help if you're doing iOS development, or need to use Xcode. I've moved away, myself, but have talked to others who have used a Mac Mini as a build machine. You could also install OS X in a Virtual Machine under Linux and use it for development, which requires its own set of hacks but fewer.
Linux distributions I would recommend:
* Solus, I really like where this project is going and it's my daily driver now.
* Arch, allows/forces a truly custom setup, you end up learning a lot about your system, but might be too distracted with your system to get work done ;)
* Antergos, an Arch alternative w/ batteries included.
* elementary OS, it's the Linux distro made by the folks who loved macOS. It's beautiful and you might like it more than macOS itself.
For a better SNR than browsing Tonymacx86 forums, try https://reddit.com/r/hackintosh
The closest you can do, is to install Darwin (opensource), and GNUstep (opensource).
Then you can develop Openstep/Cocoa applications on your non-Apple laptop legally and in total freedom.
If you have customers who would want a MacOSX executable, you would then give them your sources, they would download Xcode, and they would compile them. This is why the GPL has been invented (or other licenses such as BSD, MIT, etc).
Now of course, GNUstep doesn't track the evolution of Apple Cocoa very closely. Your application will be compilable for MacOSX if you take some care to write it portably, and you won't be able to take advantage of Cocoa specific features, only the most vanilla and plain Openstep features. Depending on the kind of application, this may be more than enough.
Save your sanity and money - you can get some nice specced refurbished/used MacBooks that can just run the latest Apple stuff for a good price and save a lot of frustration with foreign hardware issues now and down the road.
Things will "just work" and you will really appreciate it.
Doing the whole hackintosh thing has improved from previous years. Before it was an absolute nightmare. It's still a lot of pain. Just less. So you have that option as well. Just remember it doesn't play nice with all hardware and you will have to fiddle a lot. Every update you will have to do your research and pray to the god of moving bits that it's a smooth transition.
then choose your osx version...
Pretty much every mailing service will let you send plain text emails.
Google calendar allows email notification on events. You can also do Facebook group email notifications. There are many other services that have that.
Here's a free idea for you:
Deleted Wikipedia. Show me the stuff that got deleted (as in edited out) from a given article.
The keyboard on the MB takes some serious getting used to (actually, in the ~8 months that I used that computer, I never became fully used to the keyboard), but the screen and physical size of the MB was better than the MBA. (Of course, the processor was noticeably slower... so YMMV.)
So IMO, they did the right thing, there was too much overlap between models. The MB still needs to get faster and come down in price, but I do think it will be just as ubiquitous as the MBA within a few years.
I agree with others that the current line up is sorely lacking an affordable laptop, but that will likely change (slowly; hopefully) as manufacturing & component costs come down.
Apple should have a mid priced laptop for casual users.
Iirc I read research showing that no physical activity can compensate for sitting. We need to sit less and move more often, something like every 20-30 min.
As for stretches I'd second physical therapy. For the pain I'd also recommend Feldenkrais as well as Yoga.
Based on my experience I'd also recommend seeing one in a private practice, not attached to a large hospital, but ymmv. Hospital centers I went to would only treat one thing at a time for insurance reasons even though I had two problems.
Anyway, I think good professional guidance will help you recover faster and more completely because they'll be able to identify problems, design solutions, and give you feedback & knowledge more effectively than if you DIY.
I have fallen in love with the material from Eric Goodman. His company is called Foundation Training, and he has a lot of freebies on YouTube.
I would say, with no hyperbole, his simple exercises have changed the way I walk, stand, and move in general, and they have been the antidote to my hours at a desk.
Maybe it will be valuable for you!
Stand up and walk for a minute every fifteen to thirty minutes can help a lot, and also is an opportunity to reflect on the work you just did. Not typing isn't a synonym for not working.
Anyway, this is just as much a case of discrimination as not hiring women or not hiring men. Every time you make a hiring decision based on the sex/gender of the applicant or the aggregated sex/gender statistics of your team, you discriminate on the basis of sex/gender. Discrimination goes both ways. Hiring someone BECAUSE they're a "minority" is still discrimination. "To discriminate" is not a negative per s. It just means "to take something into account".
Advertising ones own federal offenses is kind of stupid.
Hiring women for the sake of hiring women is repulsive. Some people don't get it but its not easy for someone to cope with learning that they got hired because there was a quota to fill vs. a belief that they actually are the best for the job.
This company takes it a step further and just declares everyone quota fodder. Not just the occasional black guy or woman. Just everyone. Apply to lever and you roll a non-zero chance of being hired based on the fact that there was open quota for your specific set of tangibles.
Beyond being sexist, I just don't think that's what a company should be focusing on.
Even if the statistic didn't carry over to every department - which I get the feeling it doesn't - I still think that would be wrong.
With that selling point, it's not hard to see why their job ads are continually up.
Unless they hire in gendered pairs which would be... well, an interesting approach.
- Conditional breakpoints!
- Avoid "Pause On Caught Exceptions" if you are working with date libraries... unless you blackbox them.
- Using the profiler to identify unknown bugs is effective sometimes. This can be initially overwhelming.
- Ctrl+p for fuzzy finding loaded resources.
- Get comfortable with Continue, Step Over, Step In and Step Out.
- $0-4 in the console store the value of the last selected nodes in the inspector. e.g $($0) would provide you with a jQuery wrapped node
- "Long Resume"
I also recommend you enable capturing async stacktraces and the setting which disables cache when the tools are open.
In addition, Apple controls Lightning completely so when you buy an accessory that uses Lightning, as long as it isn't counterfeit, it has been tested by Apple and is guaranteed to work. They can't guarantee that with USB-C.
That said, it's an awkward situation. Overall I'd like USB-C on my phone however if they were going to do it, surely it would have been with the iPhone 7. It wouldn't be great if they announced it with the 7S after people had gone out and bought Lightning headphones.
(I'd actually love it, I use a MacBook and a iPhone. One charger would be great).
IMHO it's an anti-feature not to use USB-C on iPhone.
The joke is it's a bash comment.
Were you a worker bee in the back office that had nothing to do with the scandal? You should be fine, and will have a good story about your ethics for why you are seeking other employment.
Were you a high-ranking employee with direct responsibility for any of the factors causing them to be in the current mess? You might have a tougher time because you'll need to explain yourself.
These are also things that you might want to consider tackling in a cover letter.
1) Maybe more than 4 months to be an employable junior developer, but certainly under a year if you're willing to put the time into it.
2) "Front-end development" is very broad. You could work for anyone making anything doing that. And that could easily be a feasible first step towards a career in development, especially as it'll give you paid opportunities to practice. But
3) You have 12 years of professional experience. Capitalize on it. Are there applications that would help in those niches? Are there solutions that could be provided? Maybe not an application, but the synthesis of several to create better workflows and environments for workers in non-profit project management/fundraising.
What were your pain points in your prior career(s)? What did you see organizations struggling with? Create solutions or find solutions to fill those needs, and then market them (you have a marketing background, should be helpful, and industry connections, even more important). If you aren't interested in doing a startup or consulting yourself, maybe look for existing companies that are trying to fill these needs.
EDIT: Also, for anyone else reading this, particularly from technical backgrounds in other engineering/science disciplines, I highly recommend considering that 3rd statement. You have a great breadth of technical knowledge, unless you just hate the field or have a true passion for something else, no reason to abandon it.
Maybe I could show how much I care about the cause, by volunteering at an event. Or helping out running a fundraiser.
I'd ask yourself the same question for engineering.
I think a good answer would be something like: "I thought building cool web frontends was a really interesting problem, so I taught myself the basics (books, online courses, classes) and built (INSERT THING HERE) to build the kind of thing I would love to see in the world."
I'd say get your feet wet by learning Python and some basic algorithm knowledge first to see if you're actually interested in programming. Also, learn a lot before trying to Stack-Overflow your way to an app. That approach is exponentially harder the less you know about software development.
To answer your questions:
1. Is it possible to do in 4 months? Certainly, but you will have to work your ass off, and also work very efficiently.
2. How is it possible? Work 60-70 hour weeks (easy if you love programming and can finance yourself without a job, hard otherwise), and have a super efficient curriculum.
3. What path should you take? I'll give you my advice below. To do so I'll have to make lots of assumptions about your situation, but here goes anyway:
- Avoid bootcamps. Assuming you're more motivated than the average person in your class, they will only slow you down. (One of my friends started a bootcamp against my advice, regretted it, and quit halfway through. The pace was too slow. Very few of the graduates got jobs afterwards.)
- Give up on being full-stack. Four months is not long enough. You will need to strategically cut corners, and this is a big one.
- Buy a Mac, ideally a MacBook Pro. Get one used if you have to. Don't try learning on a PC.
- Right off the bat, start using the Terminal for everything: downloading files, installing programs, opening programs, navigating the directories on your computer, copying files, deleting files, etc. When you don't know how to do something, Google it. It will be painful at first, but you will get good eventually, and it will save you pain later.
- In general, remember that learning new things (everything below) will often involve lots of pain and frustration, but push through it. Once you start to develop mastery in an area, it tends to get much more fun.
- When learning, you want to "see saw" between reading and doing. Too many people try to read and memorize everything, but that's impossible. Reading is just to orient yourself so you can figure out where to start. Doing is how you learn and remove confusion. Then you read some more to answer specific questions. Repeat.
- Start with HTML/CSS. Find cool website screenshots on Dribbble.com and try to build rough versions of them from scratch. Don't neglect to learn flexbox. Do this regularly for a cpl weeks and you'll get good.
- When you are good with HTML/CSS and familiar with JS, it's time to combine the two. Learn about the DOM and learn about jQuery. You'll see how JS can make your pages interactive. Work on small projects, the first of which should be a portfolio that you can showcase your subsequent projects on. Use Git and GitHub for these projects.
- When you do get a job, don't stop learning. Everyone I've taught stopped (or significantly slowed) their learning after landing their first job. They regretted it later and eventually resumed learning.
Since you have studied in France, I assume you have done one or several internships (usually 6 months) or even one or several years of apprenticeship (really common here in IT)?
If yes, did you try to get a job in the same company? Did you ask for references to your manager, your product owner, your team members, your CTO?
If no, you should start with an internship I think. Unfortunately, what your learn at school is rarely useful in your daily job. I don't know any company that hire candidates without some real xp.
Which might be a factor in my situation.