Overall hardware platform:
4 pcengines alix boxes for openbsd router/firewall appliances
3 supermicro Opteron servers with KVM/corosync/Sheepdog/csync2 for hosting all VMs
PF + CARP + pfsync + OpenBGPD for routing
Unbound + NSD + Bind for DNS
SSH/OpenBSD ipsec/apache Guacamole for roaming and permanent site-to-site VPN (pcengines ALIX hosted at my inlaws in Japan)
Apache + Lets Encrypt + awstats + relayd for serving web pages and analysis
ZoneMinder for video monitoring. Tied into legacy security system for automation
Postgres for database work. Some mysql/redis
NetDisco + Nagios + NagVis + NFSen + MRTG + Smokeping + PNP4Nagios + NUT + Splunk + Racktables for monitoring. All configs are dynamically generated from netdisco db
OpenSMTPD + Citadel (webcit) for email delivery and webmail
Minetest server for kids. We use this tons as a family, and the kids spend lots of time modding. TW2002 server. TShock server.
OpenELEC for diskless netboot KODI machines around the house
Samba4 Domain controller + NFS for sharing files in different applications
SVN for source control and Config diffs for all servers/tools/network devices
Asterisk via FreePBX / NCID for all phone/CallerID services, including remote handsets at VPN locations
And that's just the ones that I really enjoy using off the top of my head. I hope to find lots more things to try in this thread. Metabase already looks like an awesome candidate!
Rancher (to control Docker stacks, set up HTTPS with Let's encrypt, etc): http://rancher.com/
GitLab (git repositories): https://about.gitlab.com/
Rocket.Chat (internal chat): https://rocket.chat/
Sentry (production code error handling): https://sentry.io/welcome/
Metabase (DB analytics and graphs): http://www.metabase.com/Mailu (email server): https://github.com/Mailu/Mailu
Mailtrain (email marketing, using Mailgun or SparkPost): https://mailtrain.org/
KeeWeb (password storage and handling, kind of "self hosted", offline app): https://keeweb.info/
Does Plex count? If so, Plex. I love it, and don't remember how I lived without it.
Definitely suggest giving a try! I'd absolutely love it if the same functionality were available with git/github.
It's basically self-hosted Dropbox, with clients for all mayor Desktop and Mobile OSes. I set it up for a little team project. Just one account, and a shared folder where people with a password could upload. I think we will move to individual accounts at some point.
But it supports much more. It has a calendar similar to Google Calendar and I've switched to it. It also has plugins for image galleries, contacts, LibreOffice in the browser, collaborative editing like EtherPad, and so on. I was very sceptical, but it is really well done.
After getting tired paying GSuite/GMail $5/mth per user I figured it's time to get my own email server running again.
Runs on a single $10 Linode instance, pretty easy to setup, super-easy to maintain, does a great job making your emails _not_ end up in the Spam Folder.
Dokku - Heroku-like Docker env for Ruby on Rails development
It basically runs almost every service I use:
- Plex. I tried to use XBMC, but Plex just kills it with their mobile app as well so I can just continue watching on the iPad. It's like having your private Netflix.
- OwnCloud, a self-hosted Dropbox/Google Drive. I keep my password database (KeePass) here and it nicely syncs across my devices. I also store non-essential photos there.
- cgit, a simple Git server. I used to run gitlab, but this is much more elegant and simple for archiving repo's and hosting my personal repo's, I don't need much.
- OpenVPN Server, in case I am in a country where there are certain restrictions to what I can access and what not. Also useful in case I need to access some stuff I don't expose over the internet.
- Henk, my personal home-automation system. I've automated various parts of my home, such as lighting, air conditioning, heating, roller blinds etc. It's a bit too exhaustive to outline here. In short, some micro services hooked up over Kafka. I have multiple instances of those services running in some EC2 machines on Google Cloud in case something happens to my home-server. This is probably the most important piece of software I have running. It's fully automated, so if it goes down, I'll lose the comfort of the AC turning on when I am on my way home.
- Camera security system. I used to work at a camera security company. I run their software to monitor my home.
- Transmission, torrent client. I've written some scripts for post-processing downloads. When a move finishes downloading, it moves it into the right location, looks up subtitles on OpenSubtitles.org and adds it to Plex.
- Nginx + LetsEncrypt for all of that. All of those services have web-interfaces. I run the web servers locally and use Nginx's reverse proxy to expose them on a subdomain. LetsEncrypt certificates for all of it.
I've considered renting dedicated machines, but I don't really feel comfortable not having this on my own servers.
Other tid bits:
- I live in Romania, 1Gpbs/down costs about $5/month here. Same goes for electricity, that costs about $15/month for the entire home.
There's also Gitea which is a fork of Gogs after some contributors became concerned with the bus factor, very slow feature development, and occasional disappearance of the maintainer of Gogs. I haven't use it but that's probably what I'd try first now.
- Webmin for admin and monitoring (better than Nagios imo). http://www.webmin.com/
- Postfix + OpenDKIM for self-hosted email sending & forwarding.
- SFTP/Samba/AFP for my fileserver.
- Ikev2 VPN https://github.com/jawj/IKEv2-setup
- Wekan (Trello clone) https://wekan.github.io/
- Taskwarrior + Taskserver (Todo lists) https://taskwarrior.org/
- Syncthing (File sync) https://taskwarrior.org/
- The Lounge (IRC client) https://github.com/thelounge/lounge/
The "Awesome Selfhosted" GitHub repo is a decent place to discover things: https://github.com/Kickball/awesome-selfhosted
Self hosted BI tool.
Saves me a lot of money vs using something like MailChimp.
I always wanted to have the habit of taking lots of notes, but I didn't really like having to carry around a physical notebook. I set up etherpad and now I constantly use it to take notes. It has saved me so many times!
- GoCD - https://www.gocd.org/
Works on OpenVPN clients and had zero problems connecting multiple users for many months.
Awesome home media library solution. I finally broke down and bought the lifetime license so I can download media to my tablet and watch it offline.
But even without the license the software is rock solid and amazing.
Other than that my list resembles other lists.
pcengines apu for home router
gitlab (I actually found that gitlab was overkill for personal use so I either use gitlab.com private repos or just git+ssh at home)
nextcloud for family pics
siptrack for password and inventory management
openvpn to access my LAN
I have a kvm hypervisor at home with a homebuilt nas for setting up testing and PoC virtually.
the nas is fedora+zfs+iscsi with one 4x2.5" SATA 5.25" bay in an external cradle connected with eSATA and one internal 5.25" bay with 6x2.5" sata disks. all disks 1TB, two separate zpools with raidz.
Technically it's an email client but since it works in your browser anyway, you can run it on a server as a personal webmail. It can work with a local MTA or regular accounts at other providers for which it provides automatic configuration with ISPDB. It supports all the basic functions and GPG.
I plan to start self hosting a copy of five-filters rss, which scrapes full text from rss feed articles. It is basically the ultimate ad blocker / AMP replacement.
I'm having 5 dedicated servers at Online.net + Small VPS at Scaleway & OVH; + some backup boxes at friends behind an ADSL.
Tinc for the private network
Proxmox & CBSD for VMs/FreeBSD Jails
Gitlab. Used gogs in the past but it missed features I needed
nginx + dehydrated (let's encrypt client)
PowerDNS + PowerAdmin
Modoboa (email stack. postfix/amavis/web interface/)
Rainloop (email web client)
Cloud-Init with No-Cloud
pgsql, mysql, redis, riak, elasticsearch
:) self-host is <3
edit: typo & forgot minio
portainer for nice docker mgt ui
discourse for forumswordpress w discourse sso
netdata for health monitoring
actionherojs for microsvcs
cocalc for notebooks
looking at nextcloud if i can get libreoffice to behave w ssl
KeeWeb (for accessing KeePass database) - https://github.com/keeweb/keeweb
I wish it had a proper API, though.
nginx deserves particular mention for handling a HN frontpage crowd on a single-core VM without even blinking.
Does Syncthing count as self hosted too?
I've started to use QueryClips for all of my simple querying and sharing. It's got some advantages over Heroku Dataclips, like the ability to invite your colleagues, support for MySQL, etc.
Website: nginx + Let's Encrypt + Piwik (analytics)
Blog: Pelican static site generator
File sharing: Seafile
There is probably more.
Aria2c for torrents and other downloads.
Wireguard for vpn.
- Koel (Web-based music player; https://github.com/phanan/koel)
- Aria2 (generic downloader; https://aria2.github.io/)
- GPodder (podcast downloader; https://gpodder.github.io/)
- PiHole (mostly for curiosity, I now use full-blown DNS & DHCP servers; https://pi-hole.net/)
- OpenVPN (https://openvpn.net/)
- Pritunl (OpenVPN failover; https://pritunl.com/)
- PlexPy (Plex monitoring; https://github.com/JonnyWong16/plexpy)
- BIND (DNS server; https://wiki.debian.org/Bind9)
- ISC-DHCP (https://wiki.debian.org/DHCP_Server)
- Smokeping (connection monitoring; https://oss.oetiker.ch/smokeping/)
- Ansible (central host with playbooks; https://www.ansible.com/)
- Graylog (log aggregation; https://www.graylog.org/)
- Wallabag ("read it later"; https://wallabag.org/en)
- Home Assistant (home automation; https://home-assistant.io/)
- Bookstack (documentation; https://www.bookstackapp.com/)
- Observium (network devices monitoring; https://www.observium.org/)
- PfSense (firewall & permanent VPN for some containers; https://www.pfsense.org/)
- Rancher (Docker orchestration; http://rancher.com/)
Rancher (Cattle environment):
+ ELK stack (https://www.elastic.co/)
+ Concourse CI (just to experiment, I prefer GitLab's CI; https://concourse.ci/)
+ Dumpster (my own temporary file upload platform, with additional YubiKey support; https://github.com/nmaggioni/dumpster)
+ Own Telegram bot (talks with ELK)
+ Let's Encrypt renewal daemon
+ FaaS (either https://github.com/iron-io/functions or https://github.com/alexellis/faas, even though I'm actually waiting for https://openwhisk.incubator.apache.org/)
+ Private Docker registry
I may have left something out, some more services/containers/VMs are disabled due to low usage.
EDIT: Oops, wrong definition.
Code reviews have an outsized impact in the organizations I've worked in. More people understand more of the code. Quality goes up not only because the bad code is spotted, but also the reviewers can learn good practices too. You also get better at reading code. This is a fundamental, critical skill.
For this reason, I'm a fan of having developers of all skill levels be reviewers. However, code reviews are a skill and take an investment for people to learn how to be effective.
So if you're really, really having to pick, do code reviews. Use the code reviews to drive sensible, smart adoption of unit testing.
Not every piece of code needs to be high quality. Instead, you should indentify the parts of your system that need higher quality and spend real time reviewing code and writing appropriate tests (not just unit tests, also do performance tests and integration tests of key components). Especially in an environment with tight deadline and changing requirements, focusing on key areas will save a lot of effort.
Once you have both product and engineering (or whatever forces are at play) on the same page about reasonable expectations, I'd recommend using both. Code review and automated testing both serve distinct yet important roles.
Two developer number is important on the reviews to keep everyone honest and to keep everyone interested.
Code reviews and unit tests are only as effective as the developers who participate though, can't escape that.
My understanding is that the H1B visa does not allow you to do any work for anyone apart from your visa sponsor. If a co-founder were to spend his evenings working on his startup which has been incorporated, I'm not sure if that would conflict with the above regulation, and if so, how to work around this.
I'd be happy to contact you privately if you prefer that.
The odds are kinda small and there are restrictions but I know at least three people who got their green card this way.
As a skilled software developer with a relevant UK university degree (3 years BSC) and work place experience, interested in working in the US - What is the ballpark range of costs and wait time involved in getting a visa to allow me to work for a US company.
What's the general procedure, - get offer from job, then -talk to immigration lawyer, or the other way around?
I have otherwise a great record and have set up multiple companies employing approx 100 people here, including many awards and recognitions.
What are my chances of being able to move to the US?
If things don't go very well and I decide to relinquish the green card and return, will I be subject to any kind of exit tax?
Also, I'm having a lot of trouble setting up an address to receive the physical card. A PO Box or mail aggregator is not acceptable and I can only change the address up to the point of entry. This is a major concern for me because I don't have anyone in the USA that could receive it on my behalf.
Is it possible to use "General delivery" near my arrival airport to get the card? I ask because up to 2 weeks ago I didn't even know about that concept so I'm still exploring that possibility.
Thank you for your time.
Is it legal to be a co-founder (and own equity) in a startup other than the employer who sponsored my H1B? If yes, what I need to do? Thanks.
I'll finish my PhD in ECE around May 2018 and look for employment in the Bay Area. Do you think I should apply for NIW (I have over 300 citations and 10+ peer reviewed publications) or go through the process with H1B?
My wife and our son are on F2 visa right now. My wife is a computer engineer and was not allowed to work on F2 visa during my PhD. Can she work as an H1B dependent? Do you think it is worth to spend $10K to obtain NIW?
Question 1: Can I qualify for an O-1 visa if I'm part of a company as a co-founder/CXO that's been accepted in Y-Combinator or similar programs? (does that satisfy the "attained membership in associations that require outstanding achievements....."?)
Question 2: In the mean time, if I want to register a company in the US (for liability reasons) to release a free app in the app store, can I do it under my current visa status (change of status from H1 to F1) if there are no plans of monetizing the app in the near future?
YC says that they accept 10+ non US companies for each batch, do you know what visa they use while in the US?
I'm in US on a TN visa and started a company (no revenue/no employees) to list apps on app store. When I went to renew my TN status, Immigration officer gave me a bit of a hard time saying I needed approval to open this business from Homeland Security. Is this true?
I'm currently on an H1B, but I'd like to set up an ecommerce store with a friend. I understand that itself may not have enough grounds to get an O1 visa. Is there any other workaround for this scenario?
Because Peter is probably too modest to self-promote, let me do it for him: working with him is great, it was completely friction-free and we got our employee's visa situation handled very, very quickly. Highly recommend.
Indian Citizen here. I have a startup incorporated via Stripe Atlas. If it reaches $1 Million in annual revenue, can I qualify for EB5 green card?
Or if I have around $500K in revenue and raise $250K from investors, does that help with EB5?
If I want to enter the US under the TN visa, do I have to get a job offer that says its only for a period up to three years (the max TN term)? What should the job offer letter say about the period of employment, if anything at all?
Is there a way she can be in US, with me, while she waits for her permanent residency?
Things we had considered: a) she can stay in US and work with a US company (unlikely) b) she can stay in US and work remotely with her company outside US. c) she stays in US and takes up studying d) she stays in US and just waits.
Thanks for your advice.
I was told to wait for 2-6+ months for a response and crossed my existing visa that expires end of the year.
If my visa expires before hearing back, does that mean I lose my job in the US? It's a European company so they might offer me to transfer back to the UK.
Do I have any rights in such a situation? like ask for a reason for this, or perhaps a severance pay? can I still visit my spouse (in MA) on an ESTA given this is considered a visa rejection for now?
My BA major is a field called "Performance Studies', which is an obscure interdisciplainry sub-field of Social Sciences and Humanities. My specific research is directly related to my job - experiential marketing in nonprofits, and my employer considers this a "related field" to Marketing, Communications or Public Relations major.
My issue is that my employer does not want to list "Performance Studies" as a required major in the minimum requirements, but my lawyer is recommending we do this to avoid a denial. What are my chances of approval if we list minimum requirement as "BA degree in Marketing, Communications, Public Relations, or related field" - with Performance Studies + my specific research as the 'related field'? I'm finding it hard to get advice from peers as most people I speak with applied for their GCs as engineers or mathmatics majors - your thoughts are much appreciated!
Context: naturalized Canadian citizen (Indian born) on a TN Visa working in the states.
From what I have read, green card applications are determined by country of birth, and for India are upwards of 3 years. So, I would like to know if an application for a green card would jeopardize future TN Visas at the border.
Thanks a lot for doing this AMA, Peter!
I'm curious about last sentence in subsidiary definition:
"(parent) owns, directly or indirectly, less than half of the entity, but in fact controls the entity."
What are possible examples of control without ownership?What legal documents can be provided to prove such relationship?
My address changed, and I never got a letter asking for proof of funds. The USCIS didn't recognise the letter from my parents' bank.
I petitioned to reopen the application when I found out it was denied. I waited for months, and eventually was given 30 days to leave the country because I didn't have $25,000 cash in my own name (I was 19 years old. I still don't have that much money now). Thankfully I was already scheduled to leave 7 days later - the process had taken the entire year, so I finished my exchange programme.
I think that means the US kicked me out, and I can never get a visa to go back. I did travel there as a tourist once, over land from Canada just in case.
Is it worth ignoring any opportunity to work in Silicon Valley because of that bad experience? I'd rather work in New Zealand or Canada or (stay) in Taiwan anyway.
- Does Premium Processing I-140 actually decrease the total time to green card for concurrently filed cases? (i.e. does USCIS really do work on 485 even before 140 is fully adjudicated?)
- How early would it be "safe" to quit job and start a tech startup after green card is issued for a software engineer at a bigco?
If a recent college grad is on OPT, and lets say they majored in actuarial science (STEM), are they allowed to make money selling crafts and art that aren't related to the major? I know there's a clause for jobs unrelated to your major, but I wasn't sure if this applied to selling art or having art showings. How does this work?
I was told by Mr. Perera, that it was one of the first cases in this field and he was always proud to have been involved in it.
However, the day I intended to resign my current work I got a notification of interview from the USCIS (to take place in the next month or so).
The interview I'm told may result in getting the greencard on that da, or they may need up to 5weeks for additional review.
What happens if I do follow through and change jobs in the days prior to the interview, does that have any affect?
I am Indian citizen on H1-B with GC EB2 priority date of 4/2011 and approved I-140. I've been with same company ever since in US. Is there a way to make my GC processing go any faster? A lot of my friends are in similar situation and are eager to star a company. Many thanks!
I recently got another offer from Company C in the US. Does Company C need to apply for a new H1b, or can they simply transfer the current H1b I have? Note that my current H1b (that was sponsored by Company B) expired in May 2017, but I still have 1.5 years that I can use on it before the 6 year limit, as far as I understand. I hope my question makes sense.
Also I made a web app to make it easier for people to write recommendation letters for me. If anyone here has critique, I would greatly apprecate
HN PLEASE DON'T POST IT, I PLAN ON MAKING A SHOW HN NEXT WEEK. But you're welcome to recommend me and share the fact that you recommended me via email/twitter.
What are the steps towards citizenship after one got Green-Card via H1B -> Green-Card route under the current administration's laws? Are there any changes and new restrictions, etc.?
Could you please comment about changing employer after obtaining employment-based Green Card?
It's considered to be safe to work for current employer for at least 6 months after getting GC. However there is no such legal requirement and there's the AC21 Act. Also I've heard about 2-year period after getting GC: if applicant worked less than 2 years for sponsored employer, he/she should prove his intent to work permanently. After 2 years USCIS should prove lack of intent.
However it's still looks like a grey area.
Now, I am an undergraduate student in the UK. I am also finalizing the contract with the same company for remote part-time work (20 hours/week) during my final academic year (around 9 months of work). I would be on the EU Payroll of the same company.
Could this remote part-time work count for a L-1 visa?
My question is: What is the process after submitting DS-260 and supporting documents on Immigrant Visa / Consular Processing. My interview should be scheduled in Tbilisi, Georgia for which I believe visas are current. I would appreciate if you could advice with approximate time frames for each step.
Also, if someone is on H1B and ends the visa (eg. break in employment), do future H1B applications have to go through the lottery again?
1. If a startup sponsors an O1 for a founder, will there be any issues with 1/ the O1 founder having the CEO title 2/ the O1 founder owning between 30-50% equity in the company? Is it effectively the same as if I was on a green card?
2. If the startup that sponsors the O1 substantially pivots to a new idea, what are the implications for visa status? Does it require an entirely new application?
Thanks so much!
Background is I showed the consulate all my sales reports. I'm in a niche where almost all worldwide sales are in the us. So about 85% of my sales are from there.
They're not considering the documents. They want a report from an accountant or an auditor. I'm producing that, but given their extreme skepticism so far, I'm wondering if there's something else I should be doing.
The visa doesn't allow me to work in the US so I'll go back to Vietnam in the next four months to work on the product. But when I go back to school, what is the best way for me to work legally? I know I can apply for OPT but it would take me up to three months to get approved. Is there a better solution?
How should that person enter the US for the 2 months trip? Under an VISA waiver B or O1 part-time?
Thank you so much for your time.
Many thanks in advance!
How do these types of situations typically resolve for dealing with note holders, when there is no longer any expectation of another raise or liquidation event?
I'm currently a student on F-1 visa. I had two questions re: immigration.
* If I apply to and get into YC, what would be needed on the visa/work authorization front? Will I have to apply for pre-OPT/CPT?
* When considering someone for post OPT, does USCIS check for 12 months including pre OPT and CPT or is it just 12 months of CPT?
Our System and Network Mamager is Canadian PR but I will like for him to work in US for time to time. He is a Russian Citizen. What kind of VISA we can apply for him to be to work in US?
I am from India and I want to know the options that I have to come to valley.
I don't have graduate degree but I have learned Computer Science from sites like edx and coursera.
If needed I can pay a little fee on those sites and get the certificate of complications that they provide.
What are available options?
I really appreciate you taking time to do this ama. Thank you
It seemed unlikely I'd get a H1-b w/o the bachelors, what other options do I have?
I've thought on going back to Brazil for a year, then coming back on a L1 as a last resort.
Most papers by Jon Bentley (e.g. A Sample of Brilliance) are also great reads.
I'm a frequent contributor to Fermat's Library, which posts an annotated paper (CS, Math and Physics mainly) every week. If you are looking for interesting papers to read, I would strongly recommend checking it out - http://fermatslibrary.com/
- Reflections on Trusting Trust (Annotated Version) - http://fermatslibrary.com/s/reflections-on-trusting-trust
- A Sample of Brilliance (Annotated Version) - http://fermatslibrary.com/s/a-sample-of-brilliance
Others in this thread have already mentioned papers or opinionated essays that quickly came to mind, including "Reflections on Trusting Trust" by Ken Thompson, "A Mathematical Theory of Communication" by Claude Shannon (incredibly well-written and easy-to-follow given the subject matter), and "Recursive Functions of Symbolic Expressions and Their Computation by Machine" by John McCarthy.
I would also mention "On Computable Numbers, with an Application to the Entscheidungsproblem" by Alan Turing, "On Formally Undecidable Propositions of Principia Mathematica And Related Systems" by Kurt Gdel, and "The Complexity of Theorem Proving Procedures" by Stephen Cook, but in my view these papers are 'unnecessarily' challenging or time-consuming to read, to the point that I think it's better to read textbooks (or popular works like "Gdel, Escher, and Bach" by Douglas Hofstadter) covering the same topics instead of the original papers. Still, these papers are foundational.
Finally, I think "The Mythical Man-Month" by Fred Brooks, and "Worse is Better" by Richard Gabriel merit inclusion here, given their influence.
This is by no means an exhaustive list. Many -- many -- other worthy papers will surely come to mind over the course of the day that I won't have a chance to mention here.
There are many other good recommendations elsewhere in this thread, including papers/essays I have not yet read :-)
Time, Clocks, and the Ordering of Events in a Distributed System. Leslie Lamport.
My first introduction to time scales as a partial ordering. Very mind opening.
The first half of the paper is a spot-on critique of so many things that go wrong in the process of designing and implementing large-scale software systems. The second half, where the authors propose a solution, kind of goes off the rails a bit into impracticality... but they definitely point in a promising direction, even if nobody ever uses their concrete suggestions.
programming properly should be regarded as an activity by which the programmers form or achieve a certain kind of insight, a theory, of the matters at hand. This suggestion is in contrast to what appears to be a more common notion, that programming should be regarded as a production of a program and certain other texts.
"Generic Top-down Discrimination for Sorting and Partitioning in Linear Time" ->
(if you're daunted by an 80 page paper as I am, there is also a talk on it: https://www.youtube.com/watch?v=sz9ZlZIRDAg)
It is possible, with some proper insight and approaches, to sort general datastructures in linear time on modern computing hardware. The speed limit of sort is O(n) with some extra constant cost (often accrued by allocation). It works by decomposing and generalizing something akin to radix sort, leveraging a composable pass of linear discriminators to do the work.
There's a followup paper using this to make a very efficient in-memory database that one could easily generalize under something like kademelia and with care I suspect could make something like a better spark core.
I keep submitting and talking about this but no one seems to pick up on it. This paper is crazy important and every runtime environment SHOULD be scrambling to get this entire approach well-integrated into their stdlib.
Unsurprisingly, Kmett has already implemented it in Haskell (it generalized neatly under the dual of the applicative+alternative functor): https://hackage.haskell.org/package/discrimination
As collected by the SIGBOVIK group:
"Following the popularity of MapReduce, a whole ecosystemof Apache Incubator Projects has emerged that all solve thesame problem. Famous examples include Apache Hadoop,Apache Spark, Apache Pikachu, Apache Pig, German Sparkand Apache Hive . However, these have proven to beunusable because they require the user to write code in Java.Another solution to distributed programming has beenproposed by Microsoft with their innovative Excel system. Inlarge companies, distributed execution can be achieved usingMicrosoft Excel by having hundreds of people all sitting ontheir own machine working with Excel spreadsheets. Thesehundreds of people e combined can easily do the work of asingle database server."
PS: This thread is great, i'm bookmarking because here there are good (serious) papers.
C. Shannon, "A Symbolic Analysis of Relay and Switching Circuits" (1940): https://dspace.mit.edu/bitstream/handle/1721.1/11173/3454142...
Shannon's master's thesis, which introduces boolean algebra to the field of digital circuit design.
R.W. Hamming, "Error Detecting and Error Correcting Codes" (1950): https://ia801903.us.archive.org/1/items/bstj29-2-147/bstj29-...
In Hamming's own words: "Damn it, if the machine can detect an error, why can't it locate the position of the error and correct it?"
J.T. Kajiya, "The Rendering Equation" (1986):http://cseweb.ucsd.edu/~ravir/274/15/papers/p143-kajiya.pdf
Kajiya introduces the integral rendering equation, which is the basis for most current techniques of physically based rendering.
I know Thompson's "Reflections on Trust" and Shannon's "Communication" papers are more famous but I believe BCS's "Correctness" paper has more immediate relevance to a wider population of programmers.
For example, I don't believe Ethereum's creator, Vitalik Buterin, is familiar with it because if he was, he would have realized that "code is law" is not possible and therefore he would have predicted the DAO hack and subsequent fork/reversal to undo the code.
Seriously, if you read BCS's paper and generalize its lessons learned, you will see that the DAO hack and its reversal as inevitable.
Can programming be liberated from the von Neumann style? - John Backus's Turing lecture - http://dl.acm.org/citation.cfm?id=1283933
 - http://www-formal.stanford.edu/jmc/recursive.html
It concerns randomized algorithms, which are algorithms that try to overcome worst case performance by randomizing their behavior, so that a malicious user can't know which input will be the worst case input this time.
The principle states that the expected cost of a randomized algorithm on a single input is no better or worse than the cost of a deterministic algorithm with random input.
Yao proves this is the case by constructing two zero sum games based around the algorithms' running times and then using game theory (specifically von Neumann's minimax theorem) to show that the two approaches are equivalent. It's a really neat approach!
State in Haskell. John Launchbury and Simon L. Peyton Jones
I read it multiple times and still don't quite understand it all.
There are more great papers i read but this one comes back to mind more often then others.
This paper, written during WW II (!) by someone who had around to 20 years of computing experience at that time (!!) introduced the world to the ideas like hypertext, and citation indexes. Google's PageRank algorithm can be seen as a recombining of ideas from this paper.
This is worth reading to see how much was understood how early.
Not only for the historical value of changing the world, and for the fact that it's very interesting and readable; It has personal value to me: the first CS paper I've ever read and it inspired me and changed the course of my life, literally.
Also, it has some very amusingly naive (in hindsight) stuff in it, like: "Google does not have any optimizations such as query caching, subindices on common terms, and other common optimizations. We intend to speed up Google considerably through distribution and hardware, software, and algorithmic improvements. Our target is to be able to handle several hundred queries per second"
Programming with Agents: http://alumni.media.mit.edu/~mt/thesis/mt-thesis-Contents.ht...
Here is a short paper with a clear description of an ingenious idea.
Engineered Robustness by Controlled Hallucination: http://web.mit.edu/jakebeal/www/Publications/NIAI-2008.pdf
I like the simplicity of it. Most CS researches seem to be afraid of describing things that are simple, even if those things are non-obviosu and valuable.
it's a book though: https://www.amazon.com/Sparse-Distributed-Memory-MIT-Press/d...
No Silver Bullet, by Fred Brooks http://worrydream.com/refs/Brooks-NoSilverBullet.pdf
The original STL documentation https://www.sgi.com/tech/stl/table_of_contents.html
Weirdly, the paper isn't much discussed alongside the usual contenders. (WOOT, Logoot, RGA, LSEQ, etc.)
Jeffrey Ullman & John Hopcroft: Formal languages and their relation to automata 
Ted Codd: A relational model of data for large shared data banks 
C.A.R Hoare: Communicating Sequential Processes 
Full tail recursion scheme implementation by never "return" in C
Which documents the invention of rsync, it's a good read.
... a completely lock-free operating system optimized using run-time code generation, written from scratch in assembly running on a homemade two-CPU SMP with a two-word compare-and-swap instructionyou know, nothing fancy.
Which (necessarily) undersells by a very large margin just how impressive, innovative, and interesting this thesis is.
If youre interested in operating systems, or compilers, or concurrency, or data structures, or real-time programming, or benchmarking, or optimization, you should read this thesis. Twenty-five years after it was published, it still provides a wealth of general inspiration and specific food for thought. Its also clearly and elegantly written. And, as a final bonus, its a snapshot from an era in which Sony made workstations and shipped its own, proprietary, version of Unix. Good times.
James W. Cooley and John W. Tukey
Mathematics of ComputationVol. 19, No. 90 (Apr., 1965), pp. 297-301
I think this paper is very cute and also technically interesting.
I'm not sure if it was the fact that I was just a kid when I read it, but it was just so obvious and simple but so complicated and amazing at the same time.
"Copycat is a model of analogy making and human cognition based on the concept of the parallel terraced scan, developed in 1988 by Douglas Hofstadter, Melanie Mitchell, and others at the Center for Research on Concepts and Cognition, Indiana University Bloomington. Copycat produces answers to such problems as "abc is to abd as ijk is to what?" (abc:abd :: ijk:?). Hofstadter and Mitchell consider analogy making as the core of high-level cognition, or high-level perception, as Hofstadter calls it, basic to recognition and categorization. High-level perception emerges from the spreading activity of many independent processes, called codelets, running in parallel, competing or cooperating. They create and destroy temporary perceptual constructs, probabilistically trying out variations to eventually produce an answer. The codelets rely on an associative network, slipnet, built on pre-programmed concepts and their associations (a long-term memory). The changing activation levels of the concepts make a conceptual overlap with neighboring concepts." -- https://en.wikipedia.org/wiki/Copycat_(software)
'The Geometry of Innocent Flesh on the Bone: Return-into-libc without function calls' by Hovav Shacham
1) 1990 http://cife.stanford.edu/node/599
2) 1993 http://faculty.cs.tamu.edu/ioerger/cs631-fall05/AOP.pdf
I read it first as a normal CS paper, but later started seeing it as a commentary on an extremely busy work life.
Right there in the first paragraph: "... receive livelock, in which the system spends all its time processing interrupts, to the exclusion of other tasks..."
Does this remind you of anything?
Why it was important: you can't build big complex systems without these principles.
Some people say he was instrumental in stopping the Star Wars program, he argued it would be impossible to test outside of war (and therefore doomed).
The article provides a safety checklist for use during the analysis of software requirements for spacecraft and other safety-critical, embedded systems.
Immediately useful for anyone measuring compiler transformations performance!
Human-level control through deep reinforcement learninghttp://www.nature.com/nature/journal/v518/n7540/full/nature1...
It's not world-changing or even particularly novel, but it's such a simple concept explained very well that really changes how you see the typed/dynamic language divide, as well as language design in general.
This shows how you end up "differentiating" datatypes in the context of strict functional programming, in order to do things like "mutate" lists. It is essentially the same as what mathematicians call "combinatorial species".
Focusing on the flow of data between operators and greedily executing a linear program is what an out-of-order processor is.
"On the Translation of Languages from Left to Right", by Knuth, I found much clearer and more illuminating than any of the secondary literature on LR(k) parsing.
This paper explains a beautiful algorithm for matching regular expressions with a Socratic dialogue.
As an architectural lighting guy, seeing realtime global illumination look this good in a game engine was fantastic. Parts of the algorithm I can understand, parts go over my head still, but the results are amazing.
A big part of what I do at work is radiosity simulations in AGI32 which is of course more accurate (because it's trying to accurately simulate real world lighting results) but much much slower.
Proof that the busy beaver function is not computable.
This paper develops a precise model for internal iteration of a data structure, such that exactly the necessary information is exposed and no more.
It's a fantastic exploration of improving a well-known design space with justified removal of details. I keep its lessons in mind whenever I am facing code that seems to have a lot of incidental complexity.
It's just such a cool result and the paper is very well written. Further, the dynamic optimality conjecture at the end is still an open problem.
I'll need to go with
Gilbert, E., & Karahalios, K. (2009, April). Predicting tie strength with social media. In Proceedings of the SIGCHI Conference on Human Factors in Computing Systems (pp. 211-220). ACM.
In grad school, it was the paper that kept on giving. I think I cited it every semester for a paper or project. There's a lot of other papers and books that really inspired me, but this one was magic.
One of the best practical "How can this improve our business?" technical papers, and an excellent introduction to reading papers.
Great writing style!
Finding the k Shortest Paths by D. Eppsteinhttps://www.ics.uci.edu/~eppstein/pubs/Epp-SJC-98.pdf
It's not technically a CS paper, but well worth the (very short) read regardless.
Some of the others that have already been mentioned on this thread:
- Time, Clocks, and the Ordering of Events in a Distributed System
- Paxos Made Simple
One might argue this is not CS, but it's something everyone should read and understand.
Growing a Language by Guy Steele (co-inventory of Scheme). Brilliant speech about how to grow languages and why it's necessary. Languages that can be grown by the programmer, like Lisp or Smalltalk are better than languages that fixed like most others, this is why.
The most simple and most effective hash table scheme, and nobody is using it, or even knows about it. Fastest and least memory, but not thread-safe. After 12 years there's still nothing better on the horizon.
Though the CheneyMTA paper is also brilliant, a typical Baker paper.
If the company considers a move from a individual contributor to a people manager a promotion then it is disfunctional.
Ignore this whole concept you have of 'playing politics right', you have wayyyyyyyyyyyy more important things to deal with. 8 devs will keep you very busy with 1:1's, career guidance, mentorship along with day to day running and long term more strategic less tactical planning.
Reset your expectations on the problems you will face and have to consider; your entire world is about to change (if you want to be a decent manager).
More seriously I think you need to realize that there are two politics in management:
First theres managing and interacting with your direct reports. This requires a different set of skills/interactions than the other more politicy element of managing interaction with other teams and higher ups. The latter effects and is effected by where you want your career to go.
The first step for me was recognizing that these two roles are completely different.
You can easily find out those that empire build because they will throw you and even their own team under the bus.
If you are growing your employees, look for others that do so. Follow what they do.
There are a lot of professional development courses that you can take to learn more, but a lot of it is on the job training.
I love tech, but I found the fact that people are always changing a much more fulfilling role to me.
Unsolicited advice, but I highly suggest following Elad Gil's posts both on what kind of CTO would be good (http://blog.eladgil.com/2010/02/hiring-first-5-engineers-wha...) and also doing extremely intense reference checks (if it doesn't feel too thorough, you've not reference checked enough) - Elad has a good guide on that too. http://blog.eladgil.com/2013/03/reference-check-candidates.h...
> In Submissions
> Please don't do things to make titles stand out, like using uppercase or exclamation points, or adding a parenthetical remark saying how great an article is. It's implicit in submitting something that you think it's important.
Markdown docs in a git repo, throw gollum in front of it and you have a wiki anyone can browse and technical people can keep offline copies, even edit offline and push changes later.
Could be better
If you are less serious, then scouring the job boards can be a great way to learn about what skills are in demand, what companies are hiring, and, possibly salaries. (You should do this if you are seriously looking too.) This helps you build context. Also, if you see a great company or an interesting position, this can give you some focus. You can research on linked in, or install an applicable open source project, or write a blog post about tech the company uses or the business they are in.
But I think that @eadz's comment about knowing what you are looking for is spot on. That is the first step to prepare for finding a new job. Don't just say 'I want a tech job', as that won't differentiate you or guide you at all. Instead, say 'I want to be working on a small, local team doing ecommerce websites, preferably on .NET' or 'I want to work on big data processing at scale, in a large company, and am willing to relocate'. That "mission statement" will help you shape your resume, your networking, and your after work job hunting pursuits.
So as I already arrived at my 5th full-time job, I have all the nice keywords on LinkedIn and headhunters contact me on a regular base. When I look for a job, I basically start answering them again. Also I'm looking on typical job websites, so for me that would be right now indeed.com and possibly berlinstartupjobs.com. I must admit I don't have the tightest network of other developers in the region, so I don't communicate much on LinkedIn besides to headhunters ("job consultants").
Actually im not always on lookout for a new job because I find communication with recruiters too stressful and time consuming. I try to keep every full-time thingy for 2 years, so I don't look like a job hopper. :)
Another way I've done it is by finding jobs on job boards, searching for one of (or the) manager of a team that you're interested in working for and sending them a (short!) message on LinkedIn or email expressing your interest in a job. By short, I mean:
- Hi, I'm <name>
- Your group's responsibilities seem interesting and I'd like to join.
- I'm good at and can help you with <x, y, z>
- I've done projects like <x, y>
- Do you have time for a phone call next week to learn more about me?
They will either not respond (most likely), forward you to a recruiter or talk to you directly. I've gotten better responses from LinkedIn than via email, since some managers have admin assistants who read their email and are good at ensuring this spam doesn't get back to them.
This can sometimes even work if you message a member of that team instead of the manager directly, especially if their one of the top contributors on that team. That can even work better since they'll be more likely to talk to you and can help short-circuit your resume to the right people/their manager. It's a little trickier, though.
Another good way of finding jobs if you're in a big enough city is by checking out local tech Meetups and meeting people. This is a slow way of doing it since you don't want to be "that person" that's fishing for a job at an event that "clearly isn't for that" (most of them are), but it's a good way of expanding your network and finding opportunities that you definitely won't get with recruiters (startups, by and large, don't use recruiters; too expensive).
What's most important is to be clear about yourself, what your skillsets are and what you can offer to the company. You should also have a good sense of what you're remotely interested in or looking for even if you're not 100% clear yet. Also, think about what skillsets you would like to grow and whether you want to deepen your skills or broaden your skills - You are the master of your growth/development.
2. Put your self in the shoes of a hiring manager for that role
3. Edit your CV to emphasise the skills and experience that makes you a good match.
For tech roles, recruiters are everywhere, and uploading your CV to job sites will get your phone buzzing if you have the right keywords.
For professional roles a vast majority of recruiters use LinkedIn, and the site has a setting for "looking for work" which will boost your profile to hiring managers and recruiters.
I'm currently in the process of moving cities* so going through this process myself, and this approach has worked for me.
*Melbourne here I come!
Look instead for people (founders/senior executives) you can help.
You can find them at meetups and conferences. Relevant to your search - how to find hidden jobs > http://www.pbs.org/newshour/making-sense/ask-headhunter-can-...
I've actually never looked for a job per-se, instead I've looked for companies that I've found interesting and then figured out how to get a job at those companies. This usually involves networking.
I would start by creating a list of companies that you think wow that would be a cool place to work. Then start figuring out if a job opened up who you need to speak with.
I've never landed a job by submitting a resume to a job board or to the HR department of the hiring company.
In fact, I already had an offer from my last job before HR even saw my resume.
So, how does anyone work on their CV?
Phone didn't stop ringing after uploading my CV.
That said, I've been playing around with Kubernetes lately and trying to move a lot of our infrastructure onto Kubernetes. The use of Dockerfiles kind of nullifies the need for a full fledged configuration management tool for me and I've been relying on bash scripts and distributed kv stores to manage state and environment variables (using 12 factor approach and managing environment variables with consul and secrets with vault)
The point being I'd try to get as far as possible from any server configuration. Just limit it to setting up the platform as a service. So engineers can just push containers to that platform.
I'd also consider serverless architecture.
Long story short, limit server configuration to bare minimum. And for that minimum I'd use terraform and ansible if needed (but kubernetes can be deployed just with terraform and cloudinit files imho).
When I first started using Chef, it was for work and I wasn't a fan at all. But, it's grown on me to the extent that I replaced all my Ansible-maintained infrastructure with Chef and I now maintain my own personal Chef server.
It can definitely be overcomplicated in some scenarios, but I'm comfortable using it and and I feel of the tools I've tried, it allows me to be the most expressive. I'd much rather write a Ruby Chef recipe than a YAML Ansible playbook.
The fact that Chef's Management Console UI is available for free (for small deployments) while Ansible Tower's pricing starts at $5000/yr also factors into my choice. It appears that Red Hat has plans to make a free, open source version of Tower but there's nothing there yet. Looking online, it looks like Saltstack maintains a GUI management console of some sorts, but it's only available for Saltstack Enterprise.
On the other had we did make autoscaling work with chef. Not sure how any of the others would fare since a relatively static server list was a pretty safe assumption until about 6 years ago.
Salt can also run agentless, and is much, much faster than Ansible, and has excellent support for both Docker and Kubernetes, which is a huge plus for us. Everything that can't be put in a Dockerfile gets run through Salt
- live in a tech hub with high demand for programmers. The best places are NYC/SF and probably Seattle
- switch companies every ~2 years, and negotiate for ~25% comp increases when you do. There are some tips that can help you achieve this, but it's a blog post in itself
- work for a lucrative brand-name employer like Google/FB. First, you'll make a ton of money there. Second, having them on your resume will boost your future prospects and compensation offers
- in order to accomplish the above, get really good at interviewing skills. Practice topcoder, cracking the coding interview, fundamental algorithms and data structures, communication and presentation skills, etc etc. Whatever it takes to ace the interviews, no matter how dumb you may think it is
- be good at your craft. Read expert books, work on your own small side projects, push yourself to build high quality code, and not just barely functional junk. Do everything you can to become an expert in your area
- be a great coworker. Leave a positive impression with your manager and colleagues. You don't have to be their friend, but you want to be someone they respect and would recommend to their friends
That also implies the way to break $200K: join a company whose stock is rising, perform well for them, and negotiate a generous equity grant.
1. Learn soft skills. If we look at the modern business exec they do a few things very well. They can speak to large groups of people with conviction. They can make tough decisions. They can articulate their thoughts through a variety of mediums. These skills are learned. They come from practice and experience. One of the first things I would recommend you do is join an organization like toastmasters and learn the basics of public speaking.
2. Depending on your situation in life, take risk. Risk is what allows people to propel themselves into those 400k+ annual comp. A lot of these suggestions cite going into consulting, which is high billable if you're good. What they lack though is the necessity to win clients, build good relationships and grow your business. This is mitigation of risk + soft skills.
Relevant reading. https://www.theatlantic.com/magazine/archive/2014/11/crackin...
One reason is tax. After 200k almost half of what you earn is going in tax (Assuming US/California here). So going to 250k seems like a jump, but it's going to have a much less increment on your lifestyle.
So you may be better moving laterally/zig-zagging than continuing to optimize on the path you're on. Perhaps a smaller org that can still pay well, but gives you equity or leadership opportunities.
But 'the system' is set against > 200K in compensation. You get taxed to the point of regret and even in the zone of 'getting better' you eventually realize you can't keep it up.If you are a social butterfly and watch for opportunities maybe you can make it to 500K by killing your friends, but that is what it takes.
- Decide how much more you want to make? Is it purely a greed or do you really need that much money. You alway have to pay some cost to increase your income beyond certain point, it could be your time, safety, health. Calculate those factors in. Earning $50k more then if you end up spending that much on health would not be a good idea.
SDE III (a promotion up from new grad) has typical total comp in the 210 - 240 k$/yr range.
Consulting can bring you closer but you have to move up the food chain in the type of strategic consulting you do.
For G Suite (personal) - I use gmail web client.
For Office 365 (work) - I use Outlook.
For my own mail server - I use Thunderbird or forward to gmail.
Can you prove that you exist?
How do you trust every line of an open source package without auditing it yourself?
In your hierarchy of risk/trust, this one is pretty small.
How can you trust any app that has access to your data?
Your concerns should be the following:
1 - will this stack get the job done, and at a reasonable velocity
2 - will you lose time because you need to ramp up on a technology you're not familiar with
3 - how maintainable will this be for developers who come after you?
Spend time figuring out what you'll need to accomplish for this project, and then decide which framework will work best for it.
If you're still not sure what to go with, it can be really worthwhile to do a quick proof of concept that covers the areas you feel most uncertain about. I did this before choosing Elixir for a recent project, and it helped me feel a lot more confident in that choice.
Outside of your freelancing, I'd encourage you to spend time using new tools are frameworks. That way, you'll know the strengths and weaknesses of each before you need to pick one for a project.
- If the project is for a new client that I have no connection beforehand, I only work on a problem domain that I'm familiar with, and I use a stack that I'm confident in.
- If the project is in a domain that I've no experience, but I know the client, I go with the tech stack than I know I can get the job done.
- If the project is for a client I know, and I have experience with the problem domain, I let myself to choose a new stack to learn if there is one that's suitable for the project.
I'm having great success with this strategy. Obviously these are just general guidelines, and the specifics of the projects can affect my decision, and common sense always applies.
So, your goal should be: "How I can develop (and maintain) this product in the most efficient way?".
Step 1 : Get stable grounds
Pick a language that can solve most of common challenges that you will tackle.Make yourself proficient in it.You need to minimize time spent on thinking "how I can do it in X language?".(You've got Java/C# skillset so most of your web skills should be around here).
Step 2 : Optimize
You've got another web project? That's great!You just need to pick up template with all boilerplate (like: logging, monitoring, deployment, auth etc.) from last project and fill missing features.
Step 3: Extend
Now, you can finish most of your projects in seconds.It's time to find new clients. Search for new domain - like: mobile, embedded or machine learning.This time you can decide if your existing toolset is enough for new problems or rather, adding new one will be more beneficial to you. Like: You can do a lot of ML stuff in C# but Python is the place where all important stuff happens.
IaaS vs PaaS
Here is question for you:
Do you like to do more admin stuff for low cost hosting?
Or do you like to focus on coding and spent a bit more money and let cloud do most of admin work for you?
It's a your time vs money optimization.
Personally, for small (scale) project I'am running with IaaS - but I already have knowledge how to do it.For big ones - it's better to stick with PaaS - even very skilled DevOps can't single-handedly deal with big scale.
For you I would advise using PaaS since you don't have experience with neither PaaS nor IaaS.PaaS is a lot easier to learn and you can always migrate your code to IaaS as a Step 2 :)
Good luck and have fun.
If you're taking over another project, make sure the client has docs before you take it on. Otherwise, there's a good chance that you won't be able to deliver what they want. Best to avoid those customers initially (if you can).
PaaS is much simpler for you as a developer, assuming your desired stack is supported. Caveat is it will likely cost your client more. Although, it may not if you account for billable hours saved by not having to deal with IaaS. Depends on the project's scale and resource usage. With a small scale project, PaaS may be a wash or even cost less.
Obviously it's good to expand your horizons learning new technologies. Doing so while under deadlines on someone else's dime, perhaps not as much. It's at least something to consider if there's very lax deadlines. How to bill it ethically is up to you and likely depends on a ton of factors.
Using modern frameworks in languages you already know does seem to be a good compromise. Your learning curve there should be drastically lower than learning an entirely new stack from scratch. This is probably the safest route, and if you choose it I'd suggest learning new stacks on your own time regardless.
It also depends on your clients, they will most likely be making the call based on the tech they already are using in their current stack and their tech employees. So when they bring in a consultant they will want to keep in line with their in-house tech stack not to complicate future maintenance and hiring.
I'd also go with Spring because they have a huge market share and many projects require Spring knowledge.
By knowing Spring you are expanding the circle for possible clients.
Play/Dropwizard are nice frameworks but they don't bring you any value as a freelancer because nobody will require knowledge/experience in those frameworks.
It builds the core of project using spring boot and also generates docker and kubernetes files.Entities are easy to create and the 'business glue' is auto generated.
It even integrates Kafka which allows us to plug-in machine learning framework via Apache spark
Overall very happy with the framework
So, I think better design is the goal, and fewer LOC is a natural side effect. I personally find that essential for evolving a large project. Some managers are ok with ever-increasing tech debt, which I associate with increasing job dissatisfaction.
This for me is a bad idea. I always have it in the back of my mind about reducing a modules footprint but as someone else mentioned on here. There's an art to it. Sometimes it's a bodge, followed by another fix in another part of the code base a month later which then frees you to delete.
Quite often it's like that actually. Patience is key.
I'd also like to add +1 for duplicating code. I see lot of devs just unwilling to dupe code at the cost of readability and speed of development.
Perhaps that code could be refactored down the line or more often the act of making it "neat" gives up 1 or more niceties that made you write it like that in the first place.
make it work
make it right
make it fast
Getting to the point where you can remove LOC takes mastery.
Sometimes, the most readable solution is quite long. Other times, it's short and compact. But, if it's always readable, chances are high that it is not only well designed, but it will be easy to maintain.
You're right, but that's not always true. In any sufficiently large project, there are thousands of LoC that can be removed by changing libraries, writing DRYer code, etc.
However, turning it into a competition probably isn't going to stay within the lines of "good" lowering of LoC.
And, in some cases, increasing LoC can make the code better. For example, breaking up a huge method into several, well-named methods will slightly increase LoC, but also increase readability.
LZW compression tries to remove as many bytes as possible from text, but it does not help readability. I know, you wouldn't LZW compress the source and then try to compile it. You can move in that direction, though, if you try to shorten the source too much.
Remove needless duplication. Remove lines where it improves clarity or structure. Absolute shortest source code is not a worthwhile goal.
I don't know if they support Linux, however.
I'd be happy to learn more about what you're working on and see if there's more specific advice I can give.
"How Organizations Develop Activists: Civic Associations and Leadership in the 21st Century", Hahrie Han
The book is a write-up of a sociological study in which the author accompanied various local groups of two large activist organizations in the USA. Her aim was to find out what differentiated high-achieving groups from low achievers, measured by the number of people they were able to mobilize and keep engaged.
Though she is not concerned with technology per se, she does talk quite a bit about its potential in activism, as well as the pitfalls of an overreliance on it.
I haven't finished reading the whole book yet, but it is certainly thought-provoking and if you are trying to get people involved in a civic group of any kind, I strongly recommend it.
Rapid iteration - throw ideas out there, see what sticks. Also, you can perpetually broadcast different, even slightly conflicting takes on the same general idea. Very powerful when combined with targeted advertising.
For example, I only learned there was such a thing as the pirate party last year! I wish I had known so much sooner.
On the other hand, I lack the personal insecurity to just browse around looking for ways to label myself, I'd rather find groups by causes.
"party for people who pirate music" would suit me just fine.
"party for people who start indices at 1 where they belong"
"party for people who think significant white space is gross"
"party for people against semicolons"
"party for people who actually use their turn signal"
Maybe a service that psychoanalyzes you and shows you which groups' members are most similar to you?
When searching for a business to buy, make sure you do your due diligence. There's a lot of junk out there and many "brokers" just make up their numbers/claimed legitimacy to win business. Once you've got past that, you then need to do due diligence on the business itself.
Passive businesses are not impossible to find, but it does depend on your definition. You can't buy any business and do absolutely nothing (truly "passive"). Even something low maintenance will require 1 hour a week, especially if you want it to last for years. Expect to pay a premium for businesses like this but be very cautious around claims from a seller. Number of hours worked is the easiest to misrepresent (and the hardest to prove). Almost every seller claims to work "2 hours a day" but IRL I've never met a business owner who works less than 10 a day :)
To answer your question directly, don't just look at marketplaces, check out brokers and advisors too. If you're upfront with what you're looking for and budget, most will send you options that are a good fit.
Good luck with your search!
It's not a marketplace per se, but it might be what you're looking for.
Having said that, finding a true "passive income" business that is profitable and someone wants to sell is challenging. Most of them (that I have found) end up being scams. Do your due diligence and scrutinize their income and expense reports, traffic figures, etc. I can usually "smell" when something isn't right.
The fact that they're a true broker, though, means it's not worth their time to sell sites with lower earnings, so I haven't seen anything much below $2k/month in revenue.
Also, from talking to them, it sounds like they have a network of buyers that they can privately pitch your site to if you're looking to sell quickly and are willing to take a slightly lower multiple of earnings (in exchange for a quicker, easier selling process, it seems).
I jumped into the branded domain aftermarket thinking it is the perfect passive income business to support my primary project. After a building a retail site and acquiring a bunch of quality domains the sales trickled in. So did the inquiries and customer support tickets. As sales increased so did the demand on my time. Now I have to choose between a fledgling/growing passive side business or (more likely) flip it and focus on my main biz.
The lesson is its hard to serve two masters, no matter how easy the math looks. Unless your Elon Musk.
A lot of (business) users who are willing to spend money. A lot of ratings/reviews you can improve on to make a better product and a big ecosystem.
Buying and growing a business can be just as hard as starting one. If you want to own a business, you have to be able to sell/market their product. If you can't sell to one or two people to start a business, what makes you think selling to 100s in an established business is a good idea?
If you already have a stock portfolio and need to diversify. Look to real estate. Even then it's not completely passive, but hey you can at least hire a management company.
If you still want to passively own a business, specifically a web business. Take the $3,000 or whatever you want to use to buy a site and instead launch your own site. Spend the money on ads to drive traffic to your site and learn the valuable lesson that you can't just buy your way to success...
I would not suggest either due to the # of scams.
Really it doesn't take more than a year to make a website profitable. 2-3 to get it into hundreds or thousands. Do your keyword research with adwords to determine avg. cpm, or if you are selling products build out a social media following.
We need to know the motivations in order to be able to answer.
Are you looking to buy a turn key passive income business?
Are you looking to sell?
If you are looking to sell what are your skills?
Can you, for example, write a Wordpress theme or would you do you want to sell physical goods using a drop shipper?
If you update the questions I'm sure some people will be able to help.
E.g. I have a passive income business that I could sell given an interesting offer.
But your comment doesn't substantiate what isn't modern about HN UX; anything other than lack of an advanced editor with live preview?
Which has its pros and cons
https://github.com/sindresorhus/awesome is a good starting point.
Depending on various factors the time between 13. and 14. could very well be between 3 to 20 years (15 years to obtain GC and 5 years after that to obtain citizenship).
- I joined as a senior software engineer among the first 3 employees (seed round) and got 1.8%. Junior engineers got ~0.5%
- At series A (30 employees), senior engineers got ~0.5% and junior ~0.1%
- At series B (70 employees), senior engineers got ~0.2% and junior ~0.05%
- At series C (100 employees), senior got ~0.1% and junior ~0.01%
When I think latency I think really fast. The nice thing about that domain is that each piece is quite important. Even just getting the data from Reddit in a timely/efficient/optimized manner is an interesting puzzle in its own right. Personally, I'd focus on those components, work out what makes them really fly, write some interesting stuff.
Note the differences between 'soft real time' and 'hard real time'.
Embedded controllers are another fruitful avenue of research, as are systems that are hybrids, for instance very tight control loops in FPGA driven by conventional processors.
I like the idea. But this is a hard problem and I doubt there exists a functioning version of this.
If they had an API (which, they do not), somebody could build a TTS + voice recognition wrapper for this functionality, creating the experience you mentioned.
Not saying it's not a good idea but there's a lot more to think about when it comes to payments.
Can you even verify if the transfer really happened based on this csv info?
1) Install a new Chrome extension they've never heard of
2) navigate through their bank's website
Will be the much higher than payment processing fees.
Also, it sounds like you are storing bank account numbers on your machine.
Can work if buyers are incentivized in some way to do this (too much friction).
"Free payment gateway" is enough for a lot of businesses to get started.
Right now I have a script to searche eztv for tv shows but it is very limited (assafmo/DownloadMyEpisodes)