Then for overall curriculum, I'd suggest:
1. start with basic machine learning (not neural networks) and in particular, read through the scikit-learn docs and watch a few tutorials on youtube. spend some time getting familiar with jupyter notebooks and pandas and tackle some real-world problems (kaggle is great or google around for datasets that excite you). Make sure you can solve regression, classification and clustering problems and understand how to measure the accuracy of your solution (understand things like precision, recall, mse, overfitting, train/test/validation splits)
2. Once you're comfortable with traditional machine learning, get stuck into neural networks by doing the fast.ai course. It's seriously good and will give you confidence in building near cutting-edge solutions to problems
3. Pick a specific problem area and watch a stanford course on it (e.g. cs231n for computer vision or cs224n for NLP)
4. Start reading papers. I recommend Mendeley to keep notes and organize them. The stanford courses will mention papers. Read those papers and the papers they cite.
5. Start trying out your own ideas and implementations.
While you do the above, supplement with:
* Talking Machines and O'Reilly Data Show podcasts
* Follow people like Richard Socher, Andrej Karpathy and other top researchers on Twitter
Good luck and enjoy!
* Jeremy Howard's incredibly practical DL course http://course.fast.ai/
* Andrew Ng's new deep learning specialization (5 courses in total) on Coursera https://www.deeplearning.ai/
* Free online "book" http://neuralnetworksanddeeplearning.com/
* The first official deep learning book by Goodfellow, Bengio, Courville is also available online for free http://www.deeplearningbook.org/
Introduction to Statistical Learning http://www-bcf.usc.edu/~gareth/ISL/
Elements of Statistical Learning https://web.stanford.edu/~hastie/ElemStatLearn/
* Book: Hands-On Machine Learning w/ Scikit-Learn & TensorFlow (http://amzn.to/2vPG3Ur). Theory & code, starting from "shallow" learning (eg Linear Regression) on sckikit-learn, pandas, numpy; and moves to deep learning with TF.
* Podcast: Machine Learning Guide (http://ocdevel.com/podcasts/machine-learning). Commute/exercise backdrop to solidify theory. Provides curriculum & resources.
For AI specifically, MOOCS on Coursera, edx, and Udacity will give you plenty of options. The ones by big names like Thrun, Norvig, and Ng are great places to start.
It really helps to already be comfortable with algorithms. Princeton's MOOCs on Algorithms by Bob Sedgewick on Coursera would be a great place to start.
Disclaimer: I work for Insight
Although this recommendation doesn't really fit the requirements of the poster, I think it is easy to reach first for modern, repackaged explanations and ignore the scientific literature. I think there is a great danger in that. Sometimes I think people are a bit scared to look at primary sources, so this is a great place to start if you are curious.
If you're into python programming then tutorials by sentdex are also pretty good and cover things like scikit, tensorflow, etc (more practical less theory)
 https://www.coursera.org/learn/machine-learning https://pythonprogramming.net/data-analysis-tutorials/
Just Q&A - no presentations. Study from whatever books (http://amlbook.com/ and http://www.deeplearningbook.org/ are popular in our group) or courses (Andrew Ng's are also popular) you like throughout the week and then show up with any questions you have. We've been meeting for a couple of months now and new folks are always welcome no matter where you are in your studies!
HN thread: https://news.ycombinator.com/item?id=14764700
Since then, I've used Wikipedia and Mathworld when work had needed it. Regression, random forest, simulated annealing, clustering, boosting and gradient ascent are all on the statistics/ML spectrum.
But the best resource was running NVIDIA DIGITS, training some of the stock models, and really looking deeply at the visualizations available. You could do this on your own computer, or these days, rent some spot GPU instance on ECC for cheap.
I highly recommend going through the DIGITS tutorials if you want a crash course in deep learning, and make sure to visualize all the steps! Try a few different network topologies and different depths to get a feel for how it works.
It is quirky, funny and above all very short and crisp and gives you a quick overview of things. Most of his videos are related to AI/ML.
This week in startups - I am big fan of Jason and his work
Startup for the rest of us - no ads , pure useful content
Montley Fool Monday - great weekly update about the market , a lot of talk about tech
Planet Money is well produced and entertaining.
Crypto-Gram - a monthly security-themed digest podcast (it is actually an audio version of the identically titled Bruce Schneier's newsletter):
And, of course, "Hardcore History". It's just teriffic, Dan Carlin has a talent in painting live historical pictures using just words.
Film Sack - Film reviews of bad, strange or unique movies. They only do movies that are currently available via streaming sites and encourage their listeners to watch the movie before the episode.
Judge John Hodgeman - Two people, usually a couple, call in to the show with a disagreement. John Hodgeman will listen to both sides and cast his judgement. Both sides agree to abide by whatever he says.
The host and a panel of professors talk about subjects ranging from ancient history to nuclear physics.
The Joe Rogan Experience
TRAIN BY DAY JOE ROGAN PODCAST BY NIGHT, ALL DAY!
2) Planet Money
3) The Daily
4) 50 Things that made the modern world
5) The inquiry
8) Pessimists archive (should be called Luddites archive)
9) More Perfect
10) Science Vs
Everyone Hates Marketers - Louis Grenier
How I Built This - NPR
Late Night Linux
Chemistry World Podcast
[0a] Giant Bombcast and [0b] Giant Beastcast (Note I'm a premium member)
The Giant Bomb staff discuss the latest video game news and new releases, taste-test questionable beverages, and get wildly off-topic in this weekly podcast.
 Thirty, Twenty, Ten
A pop culture time machine that examines TV, movies, music and video games from the 80s, 90s and 2000s.
The original classic gaming podcasts continues its endless quest to explore the history of video games, one game at a time.
 The Talking Simpson's (Note I still love The Simpson's)
Join your friends at the Laser Time Podcast Network for a chronological and cromulent exploration of the greatest show ever made!
 Game Informer
No description available: Weekly podcast about video games. Professionally produced and in depth and I highly recommend listening to the episodes where they discuss the origination and founding of Funcoland/Gamestop/Game Informer and the current episode about Game Freak the developers and creators of Pokmon.)
 8-4 Play
Bi-weekly podcast about Japan video games, culture, and everything Japan that's making the news. They also run a video game translation business and have ported many popular games.
 Laser Time
Laser Time is a show featuring folks in the video games industry, although not necessarily about video games.
 Game Dev Club
The Dev Game Club looks at older games and plays through them in a form similar to a book club!
 Player One
Join ex-game journalists Chris Johnston (ex-EGM), Phil Theobald (ex-GameNow), Greg Sewart (ex-EGM) and their buddy Mike Phillips as they talk about console/portable/PC games, babies, and the meaning of life.
[9a] Radio Free Nintendo and [9b] Famicast
No Description Available: Podcast about all things Nintendo, old and new. It's very well done and balanced. The Famicast comes out less often and is mostly Japanese focused.
 Genesis Gems (I was a Nintendo kid.)
Genesis Gems is a retro gaming podcast focused on the Sega Genesis console. Family friendly, fun, and goofy!
I have others, but these are the podcasts I look forward too every time they pop up in my feed. If you can't tell, I like pop culture, video games, and listen for fun and to escape. That work life balance thing.
- Sam Harris
- Joe Rogan
1. Figure out how many of the 2M and 1M members are actually engaged (reading emails as opposed to just opted-in).
2. From the engaged audience, who are they and what keeps them interested in the newsletter? What do their lives look like and is there any value that you can bring?
By knowing who your audience is and what they potentially need, you can deliver more personalized content. You could also think about promoting content from partners that go beyond straightforward ads (i.e. discounts, exclusive offers, developer bundles, Amazon AWS credits, affiliate links, etc.)
You could also find authors who are looking to promote their books, and charge them for adding their ad to emails.
Also I'm sure there are plenty of software/info-product companies and startups looking for audience in this niche.
If you can segment books by niche, it should be even more awesome and profitable. Send programming books and courses to programmers(a lot of them have affiliate programs), business books to business people, etc.
If it's not a secret, can you share with us what you did to build this list? The more details the better, it would be incredibly useful!
2.'If you enjoy our content, support us via PayPal'
3. And once in a month or bimonthly sharing your expenses and asking for support.
4. Contacting relevant youtubers for traffic or brand campaign where you can embed their videos along with the newsletter.
5. Finally, Checking with Book Publication to add relevant new releases as Sponsored.
However, if you're already doing books, what about Amazon affiliates or even, depending on the topic of these books, selling related products? If someone is interested in finance, business, or home improvement, for example, there's a lot of items they might buy beyond books. You can recommend them and make some money off each sale.
Why is your content all free? Have you tried to directly monetize the content? Why not have the first x,xxx downloads free, then monetize the content and split revenue with the author & publisher? Or have a graduated cost based on popularity, similar to what pinboard did? Something like this may have the side benefit of creating a sense of urgency and anticipation for your newsletter.
You have the attention and trust of a LOT of people. Figure out what they need, what problems they have.
In your shoes, I might attempt to break the newsletters up further into more easily monetizable niches. You can track which links are clicked by different subscribers, segment them, and then start sending slightly different emails. Or just straight up create new mailing lists and ask your readers to subscribe to those occasionally.
Just spitballing here.
P.S. You might consider asking on the Indie Hackers forum, too: https://www.indiehackers.com/forum. Lots of people there have monetized various apps and mailing lists.
Bit like parties as Netflix do if they release some new series they strongly think you'd like. It feels more like a 'reminder' then an ad, but its an ad of course.
I'm looking at https://www.reddit.com/r/books/ and it looks like there's so many different things that 'book people' are interested in.
What do you think?
It's free but you could place it behind your own paywall.
http://ipfessay.stavros.io/ - Publish uncensorable essays on IPFS
https://www.eternum.io/ - Pin IPFS files with a nice interface
https://www.pastery.net/ - The best pastebin
https://spa.mnesty.com/ - Fuck with spammers
https://www.timetaco.com/ - Easily make nice-looking countdowns
And this is just the last two months or so? Also, lots of hardware stuff:
My project/uBO filter list removes the "annoying" elements noted above as well as other "features" of websites (e.g. social share bars, cookie notices, etc) through a filter list that works with uBlock Origin.
I update the list often, and admittedly am probably entering into an arms race but I'm just really sick of websites hijacking (what I think) the web was built for (information).
Feel free to subscribe to the filter list by pasting the URL below into the 'Custom' section under the '3rd-party filters' tab of uBlock Origin.
This filter list also works on mobile Firefox for Android with uBlock Origin installed.
 Project Homepage https://github.com/yourduskquibbles/webannoyances
This lets public transit passengers answer questions like:
- "My train is getting later and later, is it actually moving?"
- "My train is getting later and later, has it actually STARTED its journey?" (sometimes the answer is "no", sadly)
- "Is it just my train, or are many trains running late?"
- "What was the on-time performance of this train like yesterday? 2 days ago? 7 days ago?" (Some trains tend to be chronically late)
It may come as a surprise that the backend of the system is actually not a database, but Splunk (http://www.splunk.com). DBs are nice, but Splunk is fantastic when it comes to data analytics and reporting.
I'm currently waiting for Splunk to make some of their machine learning modules available for free so that I can start pulling in weather data, train the machine learning component against both that and the train data, and use that to predict the likelihood of any given train becoming late.
If I didn't have some creative work I would be much less happy.
But then somewhere along the line my projects started making me money and then I start reading all these marketing books and my perception changed. Now if I'm creating a site I'm usually more focused on SEO, list building and crippling my software so that I can extract more money from my users. I am making more money but the joy of doing it is gone. I feel bored writing software and generally browse HN and reddit and generally force myself to work.
Maybe it's time to go back to the basics and work on stuff just for sheer joy of doing it :D
It used to cost me under five dollars a month using Twilio but its usage has taken off dramatically (completely organically) and now it cost me closer to $50 a month but I keep paying it because its fun.
I also built and ran an implementation of Cat Facts several years ago until that was shut down by my provider because people are abusing it too much.
It's a wiki of all the info you need to drive your own vehicle around a country, continent or the world.
Border crossings, paperwork, insurance, gas prices, camping, drinking water, safety... it's all in there for a massive number of countries in the world.
I'm driving around myself, and it occured to me there is so much info out there but it all slides off the front pages of blogs and forums or is buried in facebook posts. Every three months people re-write and re-post the same stuff because they couldn't find it in the first place. The idea is not for WikiOverland to contain all the info, but at least link directly to it.
I've always wanted a good Arabic root-based dictionary with vowelling, plurals, etc (basically Hans Wehr online). I also wanted the structured dataset for some linguistic "research".
It was a fun project - I built out a web interface for reviewing and updating entries and put in a lot of hours of manual correction (just to get all the entries to validate - I still have a lot more corrections/fixes to make...). I'm a little burnt out on it at the moment, but I plan on:
- fixing those mistakes and a few other bugs
- cleaning up the UI/display
- moving onto a "real" server framework
- writing up some blog posts about those short linguistic investigations I'd like to do now that I have the structured data
- making an API?
Notably lacking is any plan to promote it... I posted it on reddit and I'd love it if people stumble upon it and find it useful, but I did it mostly as a labor of love and something that I personally find useful!
The biggest item in my portfolio is xi-editor, and I confess I'm wrestling with some of the questions raised in this thread. I think it has the potential to be a serious player in the editor space, with extremely high performance goals (including fast startup and low RAM usage) yet a modern feel. It also has a great little open-source community around it who have been contributing significant features.
Yet it's at the point where it's _almost_ done enough to use for day-to-day editing, and I'm hesitating a bit before pushing it over the line. I think I'm scared of having lots of users. It's also the case that I'm very interested in the engine and the core of the UX, but the complete product needs a plugin ecosystem and along with that ways to discover, upgrade, and curate the plugins (including making sure they are trustworthy, lately a fairly significant concern). That's potentially a huge amount of work, and it doesn't really line up with my interests.
I'm wondering if it's possible to focus on the parts I care about and try to foster the community to take care of the rest, but I'm not quite sure how that would work.
If this were a business and I had some way of making a few coins from every user, then my incentives would be lined up to make the best overall product possible, including the less fun parts. But that's off the table; among other things, there are a number of good free editors out there, and the niche for a better but non-free editor is also well occupied.
Maybe the HN crowd has some ideas?
Yeah, I know it's not particularly fancy, nor does it involve any clever coding tricks or interesting features. However, it's literally the only community on the internet dedicated to the series, and one I've decided to run for a minimum of two decades to make sure said franchise finally builds a decent fanbase.
Is it going to make money?
Probably not, given how the franchise it's based on sells about 2 million copies worldwide at most, and hasn't gotten a new game since either 2013 (WarioWare) or 2008 (Wario Land).
But it's one with a passionate audience that up until recently had nowhere online to discuss the series nor anywhere specifically dedicated to their favourite franchise. So I decided to change that by setting up and promoting a community based on it, with the guarantee I'd keep it open for decades in the hope that eventually a community at least the size of the Earthbound one comes about here. With the hope that eventually I won't need to run the forum because there'll be enough sites about it to sustain a decent fandom.
It's a little like SSLlabs server test, only much faster (5 seconds instead of 2 minutes), plus the tests are recurring every day, and you receive the diff if any.
It's always been a joy to receive thank you emails from users, or adding new features for users.
SSLping also allowed me to learn React and Redux. I'm still working on it, adding new features and refactoring what I don't like.
If I ever have to stop hosting it, I'll open source the whole thing. Or maybe I'll open source it anyway. If I could find a deal with a security company, I would work on it fulltime.
I consider it's a success, even if the numbers are not as high as I'd like.
It's quite compatible and brought me a lot of fun. Blog post describing it:
A somewhat interactive GPIO pinout for the Raspberry Pi.
Not so much out of sheer joy, but because I needed it.
It started as a basic way to explore each pin and its available alt-functions.
Listings of add-on board pinouts were added later for people who want to use multiple boards- or perhaps connect them to a different host.
I've also made CbrConverter: https://github.com/timefrancesco/cbr-converter
Coverts pdf to cbr and vice versa.
And then there are a bunch of other small projects like:
- Ebay Search Scheduler (schedule Ebay searches with custom parameters)
- Twitter Time Machine (download and browse your twitter timeline) https://itunes.apple.com/us/app/tweet-time-machine-2/id83212... - windows version also available
- Autosleep (put the windows down for good) https://github.com/timefrancesco/autosleep
And many others I really enjoyed making and using.
It's a Chrome extension/homepage that shows you a new book every time you open a new tab, plus a special hand-picked idea that teaches you a new perspective/fact/concept.
I'm evaluating a couple different paths to make it profitable, but it's not currently making anything since Amazon cut me off its affiliate program.
ETA: On the development end this has been a pretty great project for my fiance and I. He built (and I'm learning from his efforts) a database for processing requests, filtering by priority, etc., and then an integration that allows those we want to send to be exported to a file we can pull into our stamps.com account, and that creates drafts of the Wordpress posts that power our map of sent friends. The database is pretty big (we're sitting at about 21K requests right now on a shared hosting platform) so some of the work has been to load the requests asynchronously so you're not waiting for 21,000 rows before you can manage requests...
and make video tutorials about it:
Computer graphics is still by far the most fun hobby I've ever had, I absolutely love it, it's like the most engaging computer game you can imagine times 100.
There's not much profit in making art(unless you want to do it professionally), but it's an awesome way to spend my free time, and sometimes it generates some ideas I like to share on youtube.
If you want to get into it, I highly recommend checking out SideFX Houdini. It's a bit technical, but extremely powerful and well designed 3D software, kinda like emacs of CG applications.
https://f5bot.com - Social media monitoring. It can email you when your keyword (e.g. company name) appears on Hacker News or Reddit. I don't have any plans to monetize it. I just made it as a small fun project.
Also, like many here, I've made a bunch of open source software for no reason other than the joy of it. Don't ever see that changing. https://github.com/codepleahttps://github.com/tulipcharts
I also built news aggregator 10HN  with throttling (ten best articles every morning and every evening). I use it daily and it helped to fight my procrastination a lot. It's also interesting to watch the data how stories evolve and get popularity.
 http://www.plainemail.com/ http://10hn.pancik.com
It'll never make money, but it has been a good project for me to modernise my web development skills which had gone rusty over the preceding decade. I also took the opportunity to learn NGINX and a few other things that I hadn't really been exposed to beforehand.
Long ago, when Sun workstations were new and exciting, I wrote a simple Roman numeral digital clock, which just showed the time in Roman numerals.
My friend, instead of admiring my cleverness, said "But that's not how the Romans told the time" - which is true. The Roman day started at dawn and finished at sunset, which meant that day and night length were different every single day, as well as in cities at different latitudes.
Several decades later I did something about it, and wrote it up as a mobile app which showed either the modern time or optionally the Roman time.
Then I made it use the Roman calendar, where you don't have individually numbered days of the month, but count instead how many days until the next Kalends (start of the month), Nones (fifth or seventh day) or Nones (thirteenth or fifteenth day), even if it occurs in the next month.
Then I thought I might as well go all the way, and spent more money than I would ever earn from it on having the help text translated into Latin, just in case any ancient Roman time travellers wanted to use it.
A waste of time and money, but one which made me happy.
It's definitely not making me any money. I would say the motivation is a little bit "joy" / learning, but also frustration that shells are so old, unintuitive, and work so poorly.
I've been going for about 16 months and it's still fun, so that's good. I think that seeing progress is what make things fun.
I have very loose plans to monetize via a paid subscription for syncing with other devices / phones, but there will always bee a free / open source version as well.
Started off as a 'find a tennis partner' forum however getting traction was difficult. Chicken and egg problem. Slowly migrating to solving problems of league and tournament management. Will drop the forum one day. Long transition to do part time.
Now working on a mobile version with cordova. Testing it on the league I am managing. Saves us a lot of time since it automates lots of tasks and avoids the use of Excel.
I don't expect to make money. Market is small and problem is tough to solve. UX intensive. However fun to do on spare time.
My objective is to launch on the app store in 2018. Then I hope lots of leagues around tue world will use to simplify their lives.
A few months ago I ended up scratching an optimisation itch for weeks, trying to figure out ways to make the lz-string library faster and smaller. Near the end I went a bit nuts with trying out what works, methinks (nested trees built out of arrays and such), but I had a lot of fun.
It's not even my library, nor did my PR request get accepted/rejected yet. It did however make the compression up to 2x to 10x faster, depending on how well the data compresses.
And hey, I now have an intuitive understanding of LZ compression that I never thought I'd have!
Since a few days I've been working on writing a component for idyll that lets you embed p5js sketches. Progress here.
I've started to get into Ethereum and Solidity recently, but mining even a few coins just to have gas money costs more in electricity than they're worth. I'm letting my desktop mine anyways, but when I reach my pools payout threshold in a week or two (it's got a 3-year-old GPU), I'll probably kill the mining. (I know I could just buy some ETH with USD, but that's probably even more expensive and somehow feels different.)
(To be fair it hasn't been all negative - I bought a copy of the game Portal with the first bitcoin I ever earned, and a Kindle with the second bitcoin. But looking at it from a strictly money perspective, I'm definitely in the hole. In theory, it will be positive eventually.. but I'm still not sure exactly how.)
Not only do I not make money on the project, it actually costs me money! :)
I have seemingly undying motivation to work on it, knock out bugs, release patches, catch cheaters, etc. The community being so active and excited helps keep me going. I probably spend 30-40 hours of week on the project.
Based around an idea of IO pipes with minimal semantics (duplex, reliable, ordered) that they can then extend to implement other traits like IO buffering, atomic send, packetization, compression, encryption, etc. 
This then allows merging together pipes of different types (by attaching the output of one to the input of another), which combines their traits and yields, for example, a reliable datagram carrier with in-flight compression.
With this it also becomes possible to write a simple IO bridge  that relays both data _and_ operational state between two pipes. The bridge in turn can be used to implement all sorts of interesting things, e.g. proper TCP relay, SSL tunneling proxy, TCP trunking proxy, etc.
A way to motivate people (including myself) to exercise with a chat bot that tracks your progress.
Originally built it to track how often I worked out, and if I didn't, what the reason was and have that reported back to me regularly. Now I have a bunch of people using it, but as you can imagine, makes me zero dollars. Well, technically it costs me money so it makes me negative dollars.
Here are some things you can do with this software:
1) Research your market, find out your target audience
2) Integrate with analytics tools and understand your users
3) Automate your marketing strategies
4) Maintain a central data warehouse
5) Maintain multi-domain content properties such as blogs, websites, news portals, etc.
6) Host online trainings, build a student list
7) Etc. (read the link: https://news.ycombinator.com/item?id=14785209)
I've been working on it over 3 years now, while trying to jump from one web framework to another. Finally, I've settled down on Phoenix. This project alone has helped me learn so many programming languages and also helped me gain more experience as a programmer in general, while simultaneously being able to integrate new tools and platforms into my pipeline - This is how I learned React, VueJS, Brunch, Google Cloud, etc.
At the moment, I've built this only for myself, just to support and test out my startup ideas. I am thinking of open-sourcing it at some point, at least the core functionality.
But as of now, there's nothing else I enjoy doing on a weekend than working on this project :) (also why I'm still single)
Everything is open source and is MIT licensed, both the search engine and the entire database it searches over.
There are however many things that we can still do to take this idea further. Hopefully more people join to help us with that. :)
I started this as a Twitter game a few years ago; it felt like a compact idea with a good hook. Earlier this year I automated it- so it picks its own words and collates the stories on the website itself (mostly successfully).
It doesn't have a big following, but the people who play are passionate about it. Some people play every day, and the most prolific author has written ~650 of them.
I've seen people get better as writers, some experimental stuff (like an improvised longform story built over many daily prompts), and occasionally I see a microstory that knocks it out the park. That makes it worthwhile.
The site is https://www.pasatrade.com
We make no money off of this, I operate it at a loss, but each and every sale gets more money back to the women who really need it; a few extra dollars here and there can really make a huge difference in Nepal. The interesting part is they make more money on each sale through us than they do locally or selling through Fair Trade channels.
https://www.anfractuosity.com/projects/painting-a-christmas-... - 'painting' the LEDs on my christmas tree.
https://www.anfractuosity.com/projects/optical-magnetic-stri... - optically decoding data from magnetic stripe cards.
https://www.anfractuosity.com/projects/zymeter-simple/ - a rather unsuccessful attempt at measuring specific gravity.
https://github.com/anfractuosity/musicplayer - playing .wav files via RF emissions from a laptop.
Sharing funny kid quotes.
Been going for years, not a whole lot of traffic, but the family loves it (that was the intention). Recently migrated from a severely aging kohana/mysql backend to express/rethinkdb.
Pretty fun, don't get to do much back end stuff so its a learning process. Its creative commons so can't make $ off it but the $10/month digital ocean box is doing fine. About 100 players on at peak and always games going.
I have created a free site containing extracts from OpenStreetMap data. Unlike the metro extracts sites (Geofabrik, Mapzen), my goal is to extract specific datasets such as buildings, schools, hospitals, fast food restaurants etc from OSM rather than standard map/gis data.
My overall goal is to make the extracts available, and then to encourage people who use them and get value to actively update OSM to improve the quality of the data they are interested in. By doing this, the overall quality and coverage of data in OSM should (in theory) be improved.
I have made no money off of this. In fact, I've probably paid hundreds in hosting/domain fees. But I love what I've built so far and use it everyday with my friends. Please check it out, I'd love to hear any feedback!
I'm really enjoying developing Movim on my free time because I'm still motivated to show the world that we can have decent social-networks and IM solutions by using existing standard protocols (and not proprietary silos like today).
I fill out those 'other comments' on order forms with a request for a dinosaur drawing.
We've been generating them for years, they're a pain to store, we've made $0 with it. But I really like the data we're getting. We recently moved a lot of the legacy data into S3 to save our own backup & restore process ( https://wonderproxy.com/blog/moving-ping-data-to-s3/ )
I built it to learn React and brush up my Go skills. I occasionally add new features.
It makes $0 now, but I plan to earn 10$ a month before my amazon free tier expires :)
* Plsm - https://github.com/jhartwell/Plsm - which is an Ecto model generator based on existing schemas * Taex - https://github.com/jhartwell/Taex - A technical Analysis library for Elixir.
Turning this into more of a social experiment now, seeing where he community wants to take this. Publishing download reports and stuff.
Even made a landing page.
It was VERY surprising for me to find out that one of the most popular programming languages offers little variety in terms of BT libs/clients. For a long time, if one needed advanced options like DHT or protocol encryption, his only choice would be jlibtorrent (JNI wrapper for the well-known C++ library). Well, not anymore :)
You can get sucked into to creating a product that your customers love, but which can only be sold at a loss once the cost of acquiring the customer is taken into account. After making something that nobody wants (to pay for anyway), this is probably the biggest mistake made by entrepreneurs.
The main way to do so is to listen to the potential customer and not even mention your idea or that you are working on something. You must first understand their true problems, not your idea of what their problems might be, which many technical people especially do and rush into building a product that people may not even want. Ask them about their problems in their daily life and if you keep hearing the same thing over and over and it aligns with your idea, then build the product. Even if it doesn't, a repeatedly mentioned problem is still one that could have a good solution.
First, pick the target audience you are either part of, or familiar with. In my case, I chose new and aspiring managers.
Second, learn about their pains. Talk to them, see what they discuss on Reddit, Quora, and wherever else they gather. In my case, I see questions about communicating and dealing with difficult people and dealing with various corporate processes.
Third, figure out what they pay for. Some groups buy books. Some pay for SaaS. Some prefer webinars, screencasts or courses. The options are endless, but the focus should be on what the customers already buy, not what we can easily make. In my case, new managers often buy books.
Four, pick one pain and fix it. Now you don't really need validation in the conventional sense of the word because now you _know_ what the people want and you _know_ what they pay for. I picked the communication challenges new managers face because I have studied this topic extensively before.
Five, implement. In my case, I started writing a book, even though I have never written a book before. But I know there are people I can help, so there is a chance that I actually will. My progress so far (shameless plug, accept my apology and please remove it if you consider it inappropriate) https://www.thenewrole.com/
This process is a somewhat simplified version of what a marketing expert Amy Hoy talks about. I suggest you check her website https://stackingthebricks.com/ if you are considering starting a side business.
Hope this is useful! :-)
When I first made it public I submitted it to ProductHunt and tweeted at marketing folks, with large follower numbers on Twitter, to please try it and help promote it. There was traction but not nearly as much as fast as I had hoped. In fact, just the other day I created an Indiegogo campaign to gauge the interest in paying for the service. At this time, there are 3 contributors for $12 each. Without a big surge it obviously doesn't seem poised to stay alive... for the public. However, like I said, I'll continue to use the service privately, freely. So, it's validated and minimally viable for myself; unfortunately not for the public.
Let's say I'm doing some kind of SaaS for accountants. I would meet with dozens of accounts with a sales pitch for "x software". This will quickly help you figure out if what you're planning on building is actually valuable.
Anybody that takes you up on the sale gets to be an early tester.
So I'll implement a quick version of the idea that gets the point across to others and roll it out to generate feedback. People will likely utilize it in ways you didn't expect or point out flaws in concept or execution- this is good because even if it doesn't validate your idea it could point you towards developing something else.
This works for smaller features within a project as well. Just roll out a rough cut of it, get feedback, and refine. The product I'm working on (https://www.jqbx.fm) has a live chat feature so it's easy for me to roll out a feature to a subsection of users and ask them about it directly. But even if it's as basic as sitting behind someone at your laptop it's almost always worth your time.
I liked to tell as many different people about my ideas and get their feedback for if it is dumb or not. In that list of people will at least be a couple who would be in the intended audience.
If the idea is at least positively received, I might make an MVP if it is easy enough, if it isn't, I'll probably abandon it.
If the MVP is stable enough, I'll probably point Facebook or Google Ads at it to drive traffic.
If any traction is gained, I look at the numbers to see if it is worth it to finish building it, or just leave it as it is running.
I'm not sure if the Google/Facebook Ads are still a good traffic driver, but they used to be.
I happen to hate searching for such answers, and end up creating MVPs only to realize not enough people want to use it. But I think even before MVP, one must pursue getting some early adopters excited to try it (even if it is for free). For my next project I plan to be thorough (hopefully).
Step 2: Talk to at least 10 potential customers to assess the idea. Make sure most are people who don't feel obligated to be nice to you.
* Google Adwords Keyword search tool
These two help in calculating demand of a service or product.
* If you've got contacts, Random Sampled Survey
The first case -- the one I hated -- had a) long rows of desks, b) bright overhead fluorescent lights, c) a lot of noise due to being in a large room with sales/marketing, d) a lot of visual distractions due to people walking up & down the aisles, and e) few available areas to go to collaborate away from your desks.
Now, I'm also in an open office, but I find it quite livable, because: a) my desk faces the wall, for fewer visual distractions, b) the room is comfortably lit (ie, not too bright), c) it's a smaller room with only engineering and is generally quieter, d) there are enough areas to go if you need to collaborate.
All this is to say that, while the evidence is that open offices generally suck, there's probably a number of ways to ameliorate their problems to some degree without having to resort to private offices. I don't think I'd prefer an office to my current setup, actually.
 I think this element is underrated. In fact, I'd be curious to know if there's a verifiable correlation between brightness levels and how loud people tend to talk. There's something about a dim room that seems to induce people to lower their voices.
 Small, but not too small. There's a sort of sweet spot. I was once in a room with 3 other people and it was maddening because it was generally quiet but every little noise -- coughing, swallowing, etc... -- was seemingly amplified by the overall quietness to became hugely annoying. (An inverse concept explains why I can work quite well in a coffee shop despite the background din.)
However, most of our engineering team is remote and if they're not in one of our locations, we give them pretty much what they'd like to build their own home office or go to a coworking space.
For me, I'm actually nomadic, so I tend to work from wherever I'm staying or end up in cafes a lot of time. I still get the support I need if my work "station" isn't optimal.
TL;DR Stack Overflow provides private offices, but is really flexible, especially given its remote policy.
If I want some noise, I'll work from home (I have a 3-year old.)
The down side is that IBM's management has recently done a 180 on remote working and is now "strongly encouraging" me to move to one of their offices and work in a cubicle.
I'm pretty sure they won't actually fire me for not moving, but any promotion is probably going to be harder to come by until things (hopefully) swing back in the other direction.
Or I'll just retire. The benefit of living in Ohio is that I can save like 40% of my salary and still live comfortably. (And lease an office for $225/month!)
I discussed this a little in my "Notes on Distributed Teams" presentation here:
Here's how my personal home office looks:
(Shameless plug, here are the positions we're hiring for, if you're interested! https://news.ycombinator.com/item?id=14902227)
Immediately prior to this, as a junior member of a non-IT/IS-department rapid development group for a utility company, I was relegated to whatever cubicle they could find to stuff me in, usually on the periphery of the call center area. This is also where they'd stick the COBOL guys they'd had to hire back as consultants, along with others who didn't fit into any of the (many) union contract workflows.
(I was a listed as a line-item in the same cost code group as a rented photocopier or scanner, meaning that for most of my tenure there I had ZERO contact with anyone from HR. It was glorious.)
What's more important is company culture. Does your company expect you to accept interruptions at any time for any reason, no matter how trivial? Is your manager willing to run interference when suddenly every new employee in every department shows up expecting that you'll handhold them?
You can have an office with a bad company culture; you'll find that your office door is always full of lurkers, or you'll find that you can't walk between your office and the bathroom without getting mobbed with "urgent" requests that need your attention immediately.
What's more important is to ensure that management avoids distractions, that newcomers in other departments are trained, and that processes are established and followed when needed. Handholding should not be required from any engineers; instead mentoring and process refinement goes a lot further than a door that you can close.
On the other hand, its good to have open working areas available when they are appropriate. In Bell Labs, we'd often congregate near the railings overlooking the Holmdel atrium while our build finished or downstairs in the large open seating areas.
Is it as simple as that or there's more to it?
It is working well. People mostly are heads down getting their work done. So add Windward Studios to the list where all developers get offices.
My first team started off two-to-an-office (unless you had something like 5 or 6 years of seniority, in which case you'd get your own office), but they moved to open offices when their building got remodeled.
Oddly, I had my own office when I was working in IT at 17, but now it's harder to find.
I'll report back what they say.
I just recently was working in an open office and the difference between daytime and evening (after everyone else left) was dramatic.
In other words, not this fuckin' nightmare...http://workdesign.com/wp-content/uploads/2016/06/Open-plan-o......but more like a range going from this...https://media.glassdoor.com/l/ce/49/d7/6c/intel-office.jpg...to this...http://media.glassdoor.com/m/2d/0e/af/40/desk-with-a-view.jp......and even this...https://media.glassdoor.com/l/17/25/41/7c/intel-office.jpg
Now this: https://www.bizjournals.com/sanjose/news/2017/08/08/apple-pa..."Apple staffers reportedly rebelling against open office plan at new $5 billion HQ"
Glad I wasn't the only coder there who utterly despised the move to the open office design.
PS: Seriously, free coffee is more important to me than an office. I like open working environments.
DDG is excellent for programming questions/how-tos. It shows popular StackOverflow questions inline. For Python, it shows Python/NumPy/SciPy documentation inline as well. It may do this for other languages, but I have not witnessed it.
DDG also has a great inline weather "app" using DarkSky (which is an underrated weather site, IMO). Searching for businesses/restaurants shows a mini map ala OpenStreetMap (or other providers if you choose) and business information from Yelp.
DDG also has a community-driven program to add more search features, called DuckDuckHack. I believe all (at least most) of the features I shared above came through that program. A list of all "Instant Answers" can be found here.
Need to fallback to Google? (I personally never have.) There's "bangs" for alternative search engines and popular sites.
Make the switch. You'll be pleasantly surprised how easy and refreshing it will be.
At the moment I'd venture it's about a 60/40 split with DuckDuckGo staying on top across all types of searches.
This isn't a case where I _know_ I only want 2017 results, and so I do the syntax to filter it down automatically. I want all results, but I want to be aware of the timeline of whatever I'm going to click.
1. Put duck duck go as the default browser on your phone
2. Learn the bang paths. Realize that you still may have to fall back to google .
3. Once you have mastered the bang paths start targeting your search queries
4. Realize you cant live without bang paths
5. You should now be motivated to use duck duck go exclusively .
DDG instant answer are excellent, especially for programming.
In work I sometimes use a shared computer in which the default search engine is Google and get annoyed by the badness of Google with providing good instant programming answers.
Still, Google has some pros:- I find it a bit faster to load. - Hebrew results are much better. - Picture results are better. - You can search similar pictures to the ones you have (chrome extension)
Recently I also find myself going straight to YouTube to search certain things...
So I've installed this extension below for Safari. I use the !bangs in the address bar if I want to go somewhere specific -- !so (stackoverflow), !a (amazon), !y (stock quotes). And, otherwise, it just uses Google search.
"Shoot, I need the docs for the user Ansible module"
> !ansible user
And it goes straight to the page.
I typically give DDG the first try on a search then I turn to Google/Startpage if I don't get good results. It's been getting way better over time.
The only big change is that now every now and then I would double check the search results with !g if I am not happy with DDG results.
Overall I would say DDG or Google is more about habits and comfort zone than anythting else and Google gives better search results mostly because of the search bubble.
1. search (via the browser's URL/search field)
3. press L to return keyboard focus to the browser URL/search field
4. press to move the cursor to the beginning of the text
5. enter "!g" and then to re-execute the search using Google
I really do like the idea of a non-creepy search engine. I periodically give DDG another chance. But even more, apparently, I like finding pages and blog posts responsive to my search.
(EDIT: Wow, I learned from this thread that step 4 isn't necessary; the !g can go at the end of the search query. :-D Still doesn't really change anything, though.)
Give it a go, takes a little time before you feel comfortable being away from Google's excellent search engine but I got fedup seeing adverts for things I'd previously browsed on other sites, so adios Google.
Not the kind of person I want running my "privacy focused crypto anarchist" search engine.
The map integration almost never works. I only see a map if I search for a city name but never when I enter any address. I sometimes try to add "maps" as a keyword, which results in google maps being the first result - but it almost always links to a wrong street! (usually in the center of the city, the street number is the one I entered though)
Commit to switching for a couple weeks and you'll find that you rely on Google less and less.
I find this very annoying. After years (decades!) of training, my eyes know exactly how far one keypress should scroll. Stop messing with the default scrolling mechanism!
I think this is could be a good way to help pay more attention to what you're searching for and results because now that I think about Google searching can be really assumptive and get-the-answer-and-leave at times. Maybe digging deeper than top Y results can be a better learning experience.
I really like the !bangs and the instant answers are good enough. I can find, anythings I looking for, using DDG just as fast (if not faster) as I would using Google.
* Switched from Google Search to DDG or Startpage.com (which is basically a google proxy)
* Moving off Gmail and switching to Yandex.Mail.
my only question though is, why are these bangs so special when google does the same thing with `ebay.com: motorcycle`. Is it mainly the fact that DDG provides more privacy?
I only got a very small decrease in productivity at first, but I went back to normal pretty quick. So I'd say it went better than expected.
On the occasions that it isn't I either append !g, !s, or !sho to redirect the query to Google, Startpage, or SymbolHound, respectively. There are thousands more and they're huge productivity boosters (!w for wikipedia gets used a lot).
I recently did a few queries where I didn't find anything so I tried google and it got the same irrelevant results (as a category, not the same pages)
A friend of mine is using DDG and whenever I'm over and we search for something on DDG, what we were searching for doesn't show up. Maybe it's Murphy's law, but I'm always mocking him with "search for it on Google" and that usually delivers the result we were looking for.
But the rest of the time I use DDG, and I use DDG before trying something else.
I like that Google has like 11 years of my search history saved and can deliver me relevant results. And I don't have to pay anything!
What's there to not like about that?
It really helps that I can just stick !g at the front of my query if I think Google might have better results (which it usually does not).
For programming tasks, I think my productivity is a lot higher than it would be had I stuck with Google. DDG's "zero-click answers" are awesome, and are frequently just Stack Overflow answers. Google has tried to do this, too, but I've found it to be a lot less useful.
Whilst having a poor reference isn't great, many people in tech understand toxic workplaces. Sadly, we've all been there. For a new job, I don't think it's good to dwell too much on negative past experience, but it's possible to frame it up in a way people will get.
It's never been a better time to be a software engineer. Keep positive and show off the passion you mentioned.
Work history matters, but experience more so. It doesn't matter where you get the experience.
Basically look for employers that respect execution, execute, and you will not have a problem.
You can also try doing something for yourself, but if you are concerned about income you probably don't have the financial means yet to risk losing on a failed venture, so just keep it as a back pocket option for the future.
GitHub is good. Make a habit of making your work public. Go to meet ups and talk to people directly: job interview is not the only way to get a job.
Use your writing and your code as your cv. It's better than any other cv.
Don't fixate in this idea that if you don't have a degree then you're not worth a damn . If you were a doctor I'd say , yeah ok. But programming is not that . If you could prove you could do open heart surgery more effectively than most surgeons then why wouldn't I let you operate on me? Such proof outstanding , doctors need degrees. Programmers have very solid proof outside the degree .
Don't give up. Going to be okay!
I've used and seen this approach used to both validate, grow and shut down projects.
Build a list of people. Should be your target audience, but if you can't do that, find people that are adjacent or gatekeepers. Ideally this would be ~10 people, but if it's 3, start there anyway.
Go with a specific question/ask. Interview them. Then get them to ask you questions back. Answer as honestly as you can ("I don't know" is fine, but follow up with your suggested process).
At the end, ask who else you should speak with. If you're on the right track, your network and opportunities will grow. If you're not, it'll shrink to nothing. Repeat.
For the last product, which I shut down due to lack of traction, the most valuable leads I received was when my product got featured in a newsletter without being asked. I had posted a comment on a Blog post which described a complicated GA setup to achieve something that my product could do without effort and the author forwarded it to his subscribers.
I think that sums it up quite well: look for people who have the same problem as you're solving and pitch them your product. Any other marketing effort: paid ads, blogging, events require too much investment and I don't think they should be recommended if you're bootstrapping a small product.
If there's a market for your product, there will be an alternative product for it. Like for me, I had a recipe app. My competitors were recipe blogs, Facebook pages, and groups. If you're building something SaaS, there might be a WordPress plugin doing the same thing.
Your product should be 10x better than the solution they hacked together. If no solution was hacked together, it's possible there's no market for it or that you haven't done enough research before building the product.
There might be some exceptions though, like a note taking app, where the competitor is a piece of paper with no community.
I wrote up a nice narrative a while back  on my two "first" products I built. The first "first" was on accident, and the second "first" was... kind of still on accident.
You have got me curious now lol.
Keep us posted mate, good luck!
For execs who are coming from a technical background - especially first-time CTOs or those who have previously worked on teams where other execs were technical or at least savvy - it can be challenging to learn to communicate about technical topics in a way that non-technical people understand. I'm not saying that this necessarily is you, just that it's a common problem, and an important one to rule out.
Even if you're explaining the situation in a way that the CEO can understand the concepts, you may not be explaining the urgency or the repercussions in a way that makes sense to him, or in terms of stakes he cares about. Alternatively, he may be the sort of person who thinks everything other than negotiating with VCs is below his pay grade and it's really [the COO|the office manager|the CEO's personal assistant] who runs the company and get things done.
Tactic 1) try wrapping up your conversations with something like "in short, we need to do X within Y timeframe or risk losing $Z. What I need from you is to get the Acme contract signed by Friday. Can I count on that?" Then follow up about it Thursday, Friday, and Monday.
Tactic 2) talk to people who have been there a while and try to (not too overtly) work out who it is that really gets things done around here, and how they make that happen.
Tactic 3) find someone who's hungry and has lots of potential and initiative, plus involvement in a broad subset of departments (in a startup, the office manager or a senior person in operations is often a good candidate) and empower them to be the person who facilitates interactions between people and departments, makes sure people have what they need to succeed, and Gets Things Done. So that you don't have to be that person, and can concentrate on your own job. Only do this if you're willing to invest a lot of energy in what's still likely to be a crash-and-burn situation. If it succeeds, this is a huge win for your career, but the chances of success are low.
If that doesn't work and there just plain aren't good people in the company, or everyone at the top is clueless or doesn't care, there's no win to be had here. Get out. Go work with sane people.
Have you been in a similar situation?
I did something akin to this for four years in my marriage (only substitute weekly screaming fights for staring). Then, we agreed to get divorced, at which point I was finally able to implement the plans we agreed to every week which he promptly sabotaged for four years.
Here's some questions to help you decide:
1. Does the CEO communicate down clear objectives for your role or are you having to make up your own? - if no this is a bad sign and they might have pulled a bait and switch on you. Ie you've been hired because someone has to run IT and your role is not thought of as a strategic necessity.
2. Do you have the same comms problem with all non technical staff? - if you do maybe it's you... or maybe th departments are very siloed and speak different languages. You know how corporate PR always comes off patronisingly simplistic. Ever wonder why?
3. Is the office full of "shruggers" (those for whom direction doesn't matter). - companies always have survival functions. if those that stay all have the same characteristics this gives you a strong clue about what the place is like.
4. What is it that you can't communicate? Is it structure and process? - if yes this is also a bad sign. There is a generic meta structure to every department and if you can't talk about pipelines, dependencies and projects then chance are he'll never understand you.
Given that you're not just a coder in a suit that doesn't know how to talk to the softer Cs and you find yourself surrounded by placid types and talking about the basics of processes is met with blank stares then I'd expect more of that for the foreseeable future.
Before you judge anyone, get a proper diagnosis. Arrange for one-on-ones with every member of the team, even the ones who have recently quit if you can.
Get them to honestly talk about their opinions. Especially on why they keep failing at their tasks. Make them comfortable, i.e. nobody is getting fired and you're just trying to fix things. Be open and honest with them. There are problems and you'd like their advice on how to handle them.
If everyone says everything is fine, get the hell out.
Otherwise, you should find a few patterns, and this should at least give you a few angles to move on.
That must be providing them with a financial cushion, must be the source of their indifference and the reason they are lackadaisical about what you want to change or get done.
Not in a work setup, but otherwise each time I have to deal with a customer service.
I'd like to point out that some sysadmins are focused on linux internals while others focus on application in production. So, of course, the list may vary according to the position you're looking to be hired.
1. Troubleshooting and performance analysis. There is excellent site about performance: http://www.brendangregg.com/linuxperf.html I don't know a good resource on troubleshooting, but some tools are the same.
2. Problem can be anywhere including network so the next topic is networks. There is excellent book TCP/IP Illustrated old, but still relevant.
3. Sysadmin often spends a lot of time in a shell so it is good to know it very well (and common shell commands too).
Make your actions reversible (as far as possible). Had learned it in the field, later also saw it mentioned in a sysadmin book.
I can't count the number of times I've seen colleagues just blindly charge ahead and do, for example, non-trivial surgery (a.k.a. edits) on important system config files (in a haphazard, lets-see-if-this-works manner, without so much as making a backup copy of the file), which sometimes resulted in screwing up the system further, sometimes irrevocably (because, you guessed it, no backups - or no current ones, anyway). And yes, on production systems. Got a few stories about that, may mention them some other time.
Systems administration is a huge topic with so many interconnected parts and such vast variety of tools. Even breaking it down to segments can fall apart easily as nearly all topics overlap from user management, to filesystems, etc.
My only advice is this: Get a copy of "UNIX and Linux System Administration Handbook" and read the topics that you work on. It's a reference not something that you can read from cover to cover, but it's I own the 4th edition and it's depth is amazing. On 18 Aug there is the 5th edition coming out. Grab a copy.
My only issue is that I'd love to have *BSD included along Linux, Solaris and AIX (which is hard to find these days...).
- reacting to monitoring alerts and critical messages in logs. First you need to understand what given alert/message mean, and then goes troubleshooting if root cause is not obvious- improving monitoring system settings/thresholds/metrics (if there no separate teem for this)- deployment (but it often performed by developers)- upgrading OS and 3rd party software (if 3rd party software not deployed alongside own code)- performance tuning- learning software used in production (both: 3rd and written in the company)- writing numerous config files and ensuring that all settings adequate to given environment/system- if system is not entirely in cloud - replacing broken hardware and parts (HDD), usually using "remote hands" in datacenter.- managing ACLs / credentials for different systems, e.t.c.
- ssh: you need to know what that means and how to use it
- Difference between ftp and sftp
- cd, ls, pwd (directory stuff)
- scp and rsync (move files from server to server)
- find, cat, grep, sed, awk, head, tail (manipulations and discovery)
- chown, chmod (permissions)
- cp, mv, rm, rmdir, mkdir, touch
- Don't do rm -rf unless you know what you are doing
- Setup aliases on your shell. e.g. .profile file for bash etc.
- top, ps (check processes)
- sudo and su (switching users or running commands as root)
- Know various OS differences like CentOS vs Ubunut.
- Know where to find logs for web servers like Apache or nginx (e.g. /var/log/nginx in Ubuntu).
- Star/Stop services as needed
Most of my clients are pre-rev/pre-money/broke, but the higher priced development work I do, offsets that.
I've also been dabbling in writing, and hiring writers to write for me.
BUT find a hobby that is outside of software development. I do hiking, photography, wood working, and writing. Maybe that will give you something to look forward to after work.
I recommend trying to move to a position where you don't have to code much such as QA, CTO or system architect.
If you're looking specifically for new tech to explore - look into DL and data science, or WebAssembly, or WebVR, or ActivityPub. Those are all the hot exciting cool things that will be in demand, and are super interesting to look into.
Lately just for fun I been working with unreal engine. You can do some really cool stuff quickly and customize in C++.
Now that VR is becoming in bigger and bigger might be marketable some day. That startup magicleap seems to be doing lot of stuff around this area.
Can pair unreal with houdini and do some python scripting / 3d math learning.
edit: Links for the lazy https://bit.ly/ScriptEdSFBAYvolunteer & https://scripted.org
Is their any other way I can contribute or help out?
I don't think anyone has a specific language or platform for crud. Most people pick the one they are most familiar with.
Not sure why Firefox doesn't support it.
For instance, I have one colleague who has a tendency to perfectionism, and will spend months tracking down every tiny possible corner case that we're never going to hit, in a small low-priority feature in a CRUD app that wouldn't destroy anyone's lives if it went down for a week. For him, discipline means checking himself frequently and asking what the actual ROI is of where he's about to spend his time.
I have another coworker who loves to start new projects but getting him to finish them is worse than pulling teeth. For him, discipline is about follow-through.
My own job happens to include a lot of responsibilities other than programming. For me, some days discipline is about letting the Slack conversations around the other projects that I'm responsible for and anxious about slide for an hour or two so I can get in a little flow time with the code. Other days it's about putting down the fun coding project so I can make sure someone else's project doesn't go off the rails.
Discipline is different for each person, and it starts with self-awareness - which is the sort of trait that will serve you well in other ways - both in life in general and in any career.
Here is a short list of a few of his accomplishments:
1) He won the IOCCC twice.
2) He built the TinyCC boot loader.
3) He wrote a fast pi calculator that won a World Record on commodity hardware.
4) He wrote QEMU and FFmpeg.
The list just goes on and on. He is not productive because he has a specific morning routine. I don't know if he follows specific XP practices, but I would doubt that he follows most of them. But I have noticed a number of things he does do:
1) He is relatively paced in his timing. He generally doesn't give crazy time estimates and is very realistic about how long his work will take him.
2) He sticks with similar technologies and has Mastered them. Just like a Master sushi chef can't easily make french pastries and wouldn't bill himself as a pastry chef, a software programmer who has completely Mastered a language like C shouldn't just bill themselves as a Master at Lisp.
3) He is always learning and expanding his Master of his knowledge. It's incremental but very impressive.
4) He has no problem taking calculated risks in his development, and often he can make them pay off.
I would say he has definite patterns. He works and works hard constantly. But I don't think he ascribes to any particular methodology.
Discipline means regular testing.
Discipline means documentation.
Discipline means fixing the bugs - not just the "bad" ones, but the annoying little ones. (Not every bug, though - some bugs truly are not worth fixing.)
Discipline means communicating with your coworkers (including those annoying bosses and managers). It means making estimates, and taking enough time thinking them through that they're actually something close to accurate.
Discipline means thinking about the design before you start coding. (This does not mean that you can't explore before deciding on a design. It also does not mean that you can't iterate the design after discovering some issues with it implementation. In fact...)
Discipline means refactoring the design and code so that changes fit, rather than just being hacked in somehow.
Maybe a summary: Discipline means working like the code is going to be used for the next twenty years, rather than like it's going to be used only for the next week.
If you get into that groove, write the docs first. When you have to explain your feature, write out the command line options, all of that, you have to sort of imagine it all in your head, you start to think about is this the way other commands work, am I being consistent, etc. I find that when I do the docs first I do a better job on the code, especially the UI parts or where it fits with other code.
And tests, regression tests. When I started BitKeeper we did regression tests with every command. So frigging pleasant. It got to a point where you basically couldn't break BK if you passed the tests, or at least you had to be really sneaky.
I agree with twobyfour that it's different for different people, his/her comment that you need to be self aware is a really good point.
me[i+1] > me[i]
Discipline not being discouraged. One of my favorite sayings since I was a child is "Ad augusta per angusta". At one point I was reading about two to three books or equivalent per day. Now I can't do that and it's discouraging. Discipline to push through that and read during commute what amounts to a book or two per week. Pales in comparison, but it takes discipline not to be discouraged by the disparity.
Discipline also to think more about what I read: from compulsive consumption to pondering and trying to learn from what I read to serve my day to day life, instead of merely getting high on "knowledge acquisition". Wisdom vs knowledge, if you will. A great slogan is Wharton's "Knowledge for action". I like that.
Discipline in outsmarting myself. I'm writing code and I know that I'm not as smart as I am, so I leave a trail of thoughts in the comments to take my future self by the hand on why something was written the way it was, and where to go from there. Plenty of TODO detailing the reasons (so they may be changed if the reasons became invalid). My future self loves my past self for being so thoughtful and prescient and patient with him.
Discipline to avoid shortcuts. "Move fast and break things" is bullshitese to me. It's bullshit and I think people who live by that aren't the one fixing the broken pieces. Shitty code is seldom clever and those who shit it seldom refactor it. Discipline to acknowledge the fact that if I think I'm moving faster by skimping on variable names, I'm being a moron and others may pay the price.
Discipline in trying to think hard about my code and constantly refactor it, unbeknownst to my employer who tells me the code is good as it is and not to break it by refactoring it, to which I retort it's as good as it is (or not as bad as it was) because I constantly refactor it. It means writing documentation for imaginary code beforehand and how I would use it, it means once written getting non-programmers to try to follow the docs for an API so if a non-programmer who's never written a line of code can get it to work easily, future maintainers won't have too much trouble. It means to learn new tools to make better docs. Discipline in taking care to write good exception messages that when raised communicate I'm on top so at least the user doesn't panic and knows if there is a detailed message for it, it's okay. A message that explains why it happened and what to do about it (even giving a list of Linux commands to run to narrow down the scope or fix it).
Discipline in consistently trying to learn more about how the mind works (Hebb, Ebbinghaus, LTP, and how these beautiful tentacular beasts we have in our skulls work). It is about triggering a break-point when I have a good idea and dumping the context to know why and how I had it, trying to go as far back as I can. It also works on bad ideas. Discipline in having a pen with me. It's having a pen and a notepad on my bedside so I can note my thoughts right when I'm about to sleep: ever had a great idea right before you gave in to Morpheus and were glad because you'll implement it "tomorrow" only to wake up having forgotten about it? It's happened to me but I know better than to count on myself remembering it.
Discipline in being intellectually honest and not bullshit someone who knows less than me on a tiny specific point. This includes myself (I have a check: do I know what I'm telling myself or am I just bullshitting myself? Can I prove to myself I know what I'm talking about and what are my arguments? Do I at least have a starting point to get the factually correct information? If yes, what am I waiting for to get it?).
Discipline in observation. I'm fortunate to have a wide range of interests (but even that is a fruit of discipline: maintaining the interest I had as a child and not letting it die). Observe other fields and get inspired, borrow things, mindsets, tools, practices, etc.
Discipline in catching myself when I think something is "obvious". Is it really? During sophomore year in college we had a course in Strength of Materials. A very counter-intuitive and beautiful thing is why a pull-up bar is hollow (a tube) and not full. Discipline to have a magnifying glass on "intuition" and guard myself against thinking something is "trivial" because things rarely are.
Discipline to ask why someone wrote a line of code the way they did. It's easy to think we're smarter than the next guy, it's easy to change a weird line of code, but it takes discipline to figure out why it was written the way it was. Chesterton's fence and what not.
Discipline in asking people questions, asking them to explain to me what they do and why they do it. Whether a banker, a shepherd, a soldier, a surgeon, a dentist, a mechanic, an author, an illegal taxi driver.. I care about process, motivations and incentives: what do people do, and why they do it.
Discipline in seeking universal truths. I have a feeling I'm about to have a great insight about something, I don't know which. It's akin to feeling a presence in the dark, you don't know what it is and if there's anything there in the first place..
PS: If you have that universal truth about mind mastery, economics, and happiness.. Please share your secret here. I accept panaceas and silver bullets.
Like others have posted, HR is not your friend. Do not voluntarily talk to them unless they have specific questions or concerns to ask you. If they do that, what you want is to have a strong enough paper trail that any complaints Sarah brings against you are properly rebutted.
One thing I would not do right now is apologize. An apology can be seen as a confession. You want to do what you said you did: assert your innocence in the matter, ask for a retraction, and walk away if none is given.
I have other thoughts on this (e.g., start looking for a new job), which I'd be happy to expand upon if you want, but I think the safest thing for you to do right now is just cease any non-professional contact and document the crap out of everything she says or does to use in case of an inquiry.
> discussion became increasingly heated
Are you sure you don't owe her an apology? I have the feeling she felt hurt for some reason, and just wanted your understanding.
>> she's a physical person and pats or hits me on the arm frequently in jest (I don't reciprocate), and has made a few sexual jokes privately
Is she physical and makes sexual jokes to her other co-workers too or only to you? In the latter case
>> [she] said my remark was "demeaning to say to a woman"
reads like "I want you to recognise me as a woman you dumbass". It's a "women say something and mean the opposit" thing.
Anyhow, listen to the advice of Jemaclus and don't fuck the company!
Remember that just as many thoughtful and considerate men are frustrated because they feel like they're being tarred with the same brush as VCs who abused their power to get away with sexual assault, many women are feeling like they're being told they don't belong in the jobs they've been doing well for years, like their complaints that they have to struggle daily against subconscious bias are being dismissed without even being considered, and like if they want to even pursue their careers they're expected to accept everything from subtle disrespect to outright abuse.
You have a choice to make, and your choice will contribute in a small way to whether the conflict - in your company and in the industry - escalates or de-escalates.
The approach I would suggest depends on several factors:
1) prior to this incident, did you have a good, friendly professional relationship with Sarah?
2) prior to this incident, has Sarah demonstrated a tendency to take professional critique or social/political commentary personally, or does she usually take things in good faith (even if she presents counter-arguments)?
3) do you want to approach this issue in a way that's adversarial, or do you want to repair and possibly further your working relationship with Sarah?
If your answers are 1) "yes", 2) "good faith", and 3) "repair", then I would approach it as follows:
First, ask Sarah if she'd be willing to talk over lunch or coffee or even just to take a walk outside. This sort of discussion is best had in a setting that's public but allows for private conversation and is less formal than the office but is not easily mistaken for a romantic overture.
Tell Sarah that you're sorry that you said something that came across to her as sexist. Without trying to justify anything you said, tell her that a) you didn't intend to say anything sexist; b) that although your initial reaction was to be hurt that she would accuse you of sexism, you c) realize that you may have said something that was hurtful to her without realizing why it would be hurtful; and d) you would like to understand what it was about that interaction that she felt was sexist, so that e) you can learn from this experience and be better in the future.
If she's a decent human being and if you're willing to be sincere and more importantly to really LISTEN, this is the sort of conversation you can learn a lot from -- both about Sarah as a person, and about the sort of subtle frictions and obstacles women face in the workplace on a daily and weekly basis.
If you do this right, and if you mean it, Sarah will learn that you're someone who means well and is willing to make an effort to be a good colleague to the women in your office. The next time you say something that perhaps could be taken the wrong way, she'll be more likely to give you the benefit of the doubt and instead of accusing you of sexism, merely point out that what you said might not have come across the way you intended.
You'll get to understand that she reacted the way she did not because she's an unreasonable person looking for excuses to fly off the handle at her colleagues and get them in trouble, but (probably) because she had a real reason to interpret a situation differently than you did, even if she was having a bad day and didn't handle the situation as well as she could have. You'll discover what it was that set her off in the first place; what the (almost certainly not malicious) reasons were for her interpreting it the way she did; and how to avoid repeating such an incident.
An open and honest discussion like this can add a great deal of strength and trust to your working relationship, in both directions.
If you're not willing to be humble and to listen; or if Sarah is not a person you're willing to trust, then I would do the following:
Document, document, document. Write down your take on what happened. Put a date on it. Do not turn it in to HR. If anything like this recurs, also document it immediately. Then, if and when an accusation or confrontation does occur that does get HR involved, you will be able to show them your side of the story instead of just babbling that you didn't mean to offend anyone.
Have you read Robert Ringer's "Winning Through Intimidation"?
As the name doesn't imply, it's not about winning through intimidation, quite the opposite, it's about how to detect attempts to intimidate, manipulate, and take advantage of you, and what to do about it. It exposes some patterns many abusers use (appeal to honesty, accusations to entice apologies and guilt, etc).
The author talks about many instances where he got screwed and what he learned from his master manipulators.
A good week-end read.
HR doesn't care about you or Sarah, they care about helping the company. If you already have a "case" (ie witnesses) and approach them first, then they will see you as the "safer" party to side with.
If you don't have anything solid to back your story, then it's a bit more risky and it may be a better move to not do anything and hope that she won't take any action.
In the future, you should definitely be very careful to properly document your interactions with her though.
I really like it if I can mess around with visual stuff quite soon when learning a new language.
1) My first mentor taught me everything I knew about developing good code habits and staying humble. However, I think I learned the most about people management from him. He was extremely polarizing as a person. He would go to the ends of the earth for his people, but the moment that he felt he had been slighted, you'd be on his shit list. I learned how to foster loyalty and good rapport with your coworkers and employees from him - and also how dangerous it was to take everything at work personally. I thought he was a great manager in some ways, but he burned a lot of bridges.
2) My second mentor was one of the best engineers I ever worked with. It wasn't because he was the fastest or the best programmer. It was because he knew how to bridge the gap between engineering and product. He also knew the importance of documentation and moving at a steady pace. He cared a lot about developer sustainability and ensured that sprints were always scored and paced correctly. I really wish I had, had more time to work with him.
3) The third mentor I worked with was actually one of the most brilliant engineers I've ever met. He turned me onto a lot of new technologies and stretched me to my limits, because he moved at such a blindingly fast pace. However, I think I learned from him the most in his negative aspects. He thought planning was a waste of time, and would just dole out work as quickly as he could so he could get back to engineering. Working with him also meant toeing the line to burnout. From him, I learned how important it was to foster good relations with all departments in order to get things done, instead of just relying on one or two rockstars to pull things forward by sheer force of will.
I have heard of a few services out there where you are able to book "x" amount of time with someone to talk about work or whatever (basically a mentor).
Since finishing up school I've worked with 2 developers, and both have been great and I've learned a lot.
I don't think these sort of relationships count as "mentors", or at least it just felt like co-working. So, I guess you could say I'm still looking? :)
I would say my thesis supervisor was the best. Taught me the whole process of engineering, how to actually build an epic project. How to break down a huge project into components and how to make sure each component works.