Over time I got 60k+ downloads and sold it for $8.5k :)!
Original link: https://news.ycombinator.com/item?id=7950866Story: http://www.germanespitia.com/habit-streaks
I still get a regular stream of traffic now, and there are tons of others making sounds for UI. So, hopefully it helped kickstart that market a little.
I'm in the process of creating a second set of sounds now to try and keep the interest alive.
-  https://news.ycombinator.com/item?id=13170837
-  https://www.robinwieruch.de/the-road-to-learn-react/
By now largest streaming search engine in the world at Alexa/Similarweb Top ~#4700 global with around 12 million unique visits per month. Not too shabby all around.
Launch post: https://news.ycombinator.com/item?id=9005641
Paying customers now include consultants, journalists, realtors, insurance companies, and others! There are few developers who use it because it saves them time, but they're the exception.
Since then I have released version 2 which has the ability to add fx to the instruments, use MIDI devices and lots more. It gets a few sales a week with traffic still coming from those music sites.
It was up for a nice 24 hours and while I got a huge amount of traffic (10,000 page views) it resulted in only 100 accounts.
I'm not giving up though - I'm still constantly improving it and it has come quite far since the first Show HN version :)
We got some awesome customers (including some big names) from our HN launch, and it kickstarted out growth. If I remember correctly, we finished out the week at about $4k MRR... nothing compared to now, but at the time it felt awesome to be making money.
We've come a long way since then, but our Show HN was a great way to kick things off!
Project: http://symbolflux.com/projects/tiledtext [video]
Original Show HN: https://news.ycombinator.com/item?id=5306155
My actual most visited website is one that has hit the front page, but not because of my "Show HN".
It helped us realize that a web-based version of our "CodeAcademy for Excel" product wasn't going to cut it. We built an integrated version that actually lives inside of Excel and won a contest with Microsoft.
I talk a little more about what happened here:
The project: https://urlroulette.net/
I actually wrote a post about being on the HN front page: https://hackernoon.com/urlroulette-24-hours-on-hacker-news-e...
I submitted a Show HN the other day for a natural language chatbot that gives harm reduction info about drugs and it pretty much went nowhere fast. Got way more traffic from being on the front page of reddit r/drugs (and arguably a more useful demographic)
To the people asking, I definitely think there is a high amount of luck getting anything on the front page of HN. Just has to be right time, right place, but it's inspiring to read about people who have seen their businesses launch, in part, from that brief exposure.
When it was first posted it hit front page, then hit reddit, melted my machine. I started moving to static files, but not in time! HN removed it from the homepage.
- They got me around ~3000 subscribers for hugobots.com which I have been promoting through my repositories (it would have been much more; unfortunately, I forgot to put the link on the first day while the repository was on the first page. I put it on the third day and the emails that I got were mostly from the traffic from the people sharing the post on twitter/facebook/reddit etc)
- One of the project (developer roadmap) got me two sponsors paying me around ~1000$ each every 6 months for just putting their links in the project readme.
- Follower count on my github profile was around ~100 at that time; now it is about 2.3k
- Had been approached for freelancing gigs and was able to make connections.
Not even one upvote though. Do any of these posts get on the homepage organically?
LE: 2nd (and last) try: https://news.ycombinator.com/item?id=14841172
Led to a large traffic spike, and attention from a company that would acquire it roughly 18 months later. The team has grown from 3 to 100+, with over 1m registered users. Although the domain has changed and it looks like nobody bothered to keep the original registered ()
It's also available to read for free online (https://leanpub.com/the-tao-of-tmux/read).
tmuxp (https://tmuxp.git-pull.com), a tmux session manager, gained over 1k stars over the years.
vcspull (https://vcspull.git-pull.com), a repo sync tool, compare to myrepos. Received a lot of valuable feedback on documentation that I ported to other projects.
933 HN users are signed up and have received 38109 email notifications so far.
2. Show HN: A date range picker for Twitter Bootstrap ( http://daterangepicker.com )
5-year-old open source code that averages 3000 visits per day and 750 git clones per day.
Show HN Link: https://news.ycombinator.com/item?id=6046227
Status: Still growing, almost 100k users, vibrant leaderboards
Project 2: CLMapper Chrome Extension (https://chrome.google.com/webstore/detail/clmapper/omonmigal...)
Show HN Link: https://news.ycombinator.com/item?id=4324884
Status: Unmaintained. Reached peak of over 4k users, now under 2k and decreasing
It was on the homepage for around 24 hours I think. We had ~500,000 unique sessions during the first month after the launch. Hacker News played a big part in that.
We stopped actively working on the project, but it's still being used by more than 100,000 people every month.
I wrote a little case study about the whole thing here - http://codetree.co/case-studies/movieo
Besides the traffic increase, the repo trended on Github and now we have +1,400 stars.
The traffic bump and feedback was motivating and helpful to know I was on the right track with my content. I also learned there are some comments you just need to ignore and focus on your own vision :)
edit: my traffic was lower than I originally remembered, it was ~5k per month, not 25k in mid-2014
tl/dr: HN provided a nice boost, but websites don't grow if you don't feed them.
Backstory: ~5 years ago I started driving a taxi, for fun & adventure & freedom. And to support myself, while trying to figure out how to finish recovering from a head injury . After 8 days I made an account on kuro5hin.org (k5) & started blogging about my experiences.
At first I was just trolling k5 user "Zombie Jesus Christ", who had grand ambitions to help people, but was handicapped by a history of mercury poisoning -> mental illness. My point in being 'TaxiCabJesus' on k5 was to show that it's the little things that count. After a 3.5 years I'd learned a lot about what people actually experience (which I hadn't appreciated due to my upper-middle-class upbringing), and was forced into retiring from the taxi driving gig...
One day kuro5hin.org went away. K5's absentee founder Rusty hadn't prepared for a datacenter move, and the site was lost. I posted in HN submission RIP kuro5hin that my story "Electronic Taxi Dispatch, v1.0" was last to post , and one of you responded that you appreciated my k5 submissions & encouraged me to re-post them at a site of my own.
I still intend to write a Taxi Wars trilogy: A New Hope, The Vultures Strike Back, and Return of the Drivers. I also have some other stories to tell. Retrospectively I realized that I was learning about the various 'predicaments' that people find themselves experiencing. Draft titles include:
The Predicament of 'old people' / Ordinary Rendition: The Public Servants' Quagmire / the predicaments of doctors and patients
I joined Toastmasters several months ago. Recently I gave a speech that's based the 'predicaments of doctors and patients'. It went over pretty well, which was motivation to work on my little site...
Here is the HN post :
I have just under 900 people signed up for an email list of hand-picked talk recommendations - about 200 of these were from HN, and a couple people sign up every day.
Based on the feedback I got, I'm working on an add-on to send email alerts with talks based on people's interests (if you want in, contact me, I need a few beta users)
We are consistently getting a good rating in Play Store  and thanks to HN we now have around 50 daily active users playing 75-100 games. Meanwhile, we are developing the features that were suggested in the comments and we felt are required.
 https://play.google.com/store/apps/details?id=com.buildmyvoc... - Two-Player Vocabulary Game
Show HN Link: https://news.ycombinator.com/item?id=13983085
Summary: A new diff algorithm
Result: About 50,000 visits to the web site, which then averaged about 1000 visits a day. Not much repeat traffic from those visits, but the daily traffic is now about 1200 visits a day.
Synopsis: Elm arch. in Haskell, but supports isomorphic js
Show HN link: https://news.ycombinator.com/item?id=14685677
Status: Still kickin', ~17k views, top 15 repo globally on GH (for a day)
I still make good money on Ghostnote and is working on new features plus a new SAAS service.
This one is alive but not really active. Around 8K users on a mailing list. If anyone want to take over this project pm me.
This was fun to do but just a project we did for fun.
Subscribers increasing slowly but steadily. ShowHN didn't lead to any direct sales as far as our reporting shows but doing a "ShowHN" is something of an internal milestone for us and the comments have been interesting a good motivational boost. Hopefully have more to Show HN in the future!
My Show HN (https://news.ycombinator.com/item?id=14778497) made it to the homepage, but I don't think its what you're asking about. My site is just a personal site with random content so its no different than before my post.
MindMup (https://www.mindmup.com), an online mind mapping tool appeared in 2013, and got a nice traffic bump that day, it took about two years to reach that level of regular traffic. the site now gets between 400 and 500k visits monthly during busy school periods (seems to be mostly used by educational users), and grows around 5% per month.
ClaudiaJS (https://claudiajs.com) is an open source tool that helps deploy Node.js projects to AWS Lambda and API Gateway easily. Originally built for MindMup, we decided to spin it off as a separate open source tool. It appeared on HN about a year ago, and according to NPM stats now has roughly 85K downloads.
I had around a 30% increase in users and around $500 in sales over the following couple of weeks, which was pretty great.
The traffic spike, remained a spike and didn't continue long. But it gained a few regular users. I run my own blog with HexoPress (http://hexopress.com).
Posted in November 2016. Got a ton of traffic for about three days (~20k users/day). Now DAU is around 10-15. More a side-project type site, never was intended as a business.
Read https://news.ycombinator.com/showhn.html. Point users to something they can try out for themselves. Don't require signups or permissions that aren't obviously needed. Avoid popups. Avoid overly slick website design and (especially) marketing language: HN users tune all that out and in fact it hurts you. Text and text-based layouts are good. Information density is good. Avoid super-large fonts and excessive pictures, they make you look lightweight. Put intellectually interesting details up front. If you're launching a company, corporate branding is fine; otherwise it's a negative, so tune it down.
Add a first comment to the thread with the backstory of how you came to work on this and explaining what's different about it. This tends to seed better discussion.
Make it easy to tell what the product/project is; otherwise the discussion will consist of "I can't tell what this is". Link to any relevant past threads.
Your primary mission is to engage intellectual curiosity. If you try to sell HN readers on your stuff, you'll evoke objections. Engage their curiosity and they will sell themselves.
Mention areas you'd like feedback about or open questions. Surprising or whimsical things that came up during the work are also good--they are unpredictable and that makes them interesting.
A little humor is ok; more than a little feels presumptuous. Don't be chummy, just answer straightforwardly. Don't address other users by their usernames (it's not the convention on HN and feels out of place). Don't introduce yourself more than once.
Don't say nice things about yourself or your work. It invites comeuppance. Instead, be humble or even mildly self-critical; then readers will look for nice things to say, and even when finding fault, won't make as big a deal about it.
Don't ask for upvotes. Our software ignores most promo-votes, plus HN users notice them and get mad. Especially make sure that your friends don't post booster comments or softball questions. HN users sniff that out a mile away and then we have to kill the thread.
Email us a link to your submission when it's up and we might be able to give you some help or make sure it doesn't get flagged.
This originated as advice for YC startups but I always liked the pg/yc tradition of giving the same advice to everybody.
Wasn't the question about business applications?
Redeeming answers: ERPNext, Odoo, OpenERP, OpenERM
Nginx has a lot of respect on the market for handling high concurrency as well as exhibiting high performance and efficiency.
I don't even have to speak about the Git architecture. It speaks plainly for itself.
There's a series of books called The Architecture of Open Source Applications that does justice to this topic
Frappe also lets you build extensions (apps), add hooks to standard events, has a built in RESTAPI and more. Here is a quick overview https://www.slideshare.net/mobile/rushabh_mehta/frapp-framew...
Disclaimer: see my bio
None of this is arguing that one or the other style of architecture is "better" per se, but rather the architectures are different because they were in the end optimized for different kinds of development organizations.
Most business applications remain fundamentally a three-tiered architecture, with the interesting stuff today tending to happen in how you slice that up into microservices, how you manage the front end views (PHP and static web apps are pretty different evolutionary branches), and critically how you orchestrate the release and synchronization/discovery of all those microservices.
(None of which is directly an answer to your question, but is more meant to say that lots of the most interesting stuff is getting harder to spot in a conventional github repository because much of it is moving much closer to the ops side of devOps)
Spree has a clean API, clear models, front end and back end, extensions, and command line tools.
Especially take a look at the models:
It's part of the book, "Architecture of Open Source Applications", which has many such essays. This one is freely available -- and quite good.
Graphite is used for the business purpose of simple & fast real-time analytics for custom metrics inside an organization. It was built inside Orbitz and is now widely used at many startups, including my own.
Graphite is now a vibrant open source project with a community around it here:
They use a lot of interesting stuff, like FRP, lenses, etc.
But this chapter is great: http://www.aosabook.org/en/500L/an-archaeology-inspired-data...
Something that's expandable by multiple departments, expandable business-specific logic, modular, plug-in infrastructure, the ability to work with multiple authentication schemes, etc....
Take a look at Liferay Portal: https://github.com/liferay/liferay-portal/
Edit: fixed all my typos.
If you dont want to do youtube case studies there are also books to read about distributed systems. Also reading about cloud architecture can help.
Anyway, here are some projects which I can recommend by its source code:
* OpenBSD. Also the other BSDs. Plan9. And the BSD tools. Linux is a bit bloated but maybe it has to be. I don't recommend the GNU tools.
* WebKit. Also Chrome. Firefox not so much, although maybe it improved.
* Quake 1-3, as well as other earlier id games. Really elegant and clean. Also not that big in total. Doom 3 has become much bigger in comparison but again maybe it has to be.
* CPython. Anyway interesting also for educational purpose.
* TensorFlow. Very much not Theano.
I really enjoy reading the source code of most projects which I used at some point. Some code is nicer, some not so nice, mostly judged by how easy it is to understand and how elegant it seems to be. In any case it really is rewarding to look at it as you will gain a much better understanding of the software and often you will also learn something new.
OpenERP, now Odoo, is written in Python.
OpenEMR is written in PHP. It dates from a while ago, but has been mostly updated to the latest PSR standards.
Might also try OrangeHCM, but not sure what those guys are doing these days.
The learning curve to go from I've never heard of them to reading about them, to installing them and using them was very small at least for Consul, Nomad, and Vault.
"On January 16, 2008, MySQL AB announced that it had agreed to be acquired by Sun Microsystems for approximately $1 billion"
Edit: sorry, missed the question entirely. I thought OP said "open-source businesses worth studying"
And we run tests on 3 flavors of Hadoop (HDP, CDH, and IOP), each of which is broken down into a flavor-base image with most of the packages installed, and various other images derived from that, which means we have a dependency chain that looks like:
base-image -> base-image-with-java -> flavor-base => several other images.
Enter make, to make sure that all of these get rebuilt in the correct order and that at the end, you have a consistent set of images.
But wait, there's more. Docker LABEL information is contained in a layer. Our LABEL data currently includes the git hash of the repo. Which means any time you commit, the LABEL data on base-with-java changes, and invalidates everything downstream. This is terrible, because downloading the hadoop packages can take a while. So I have a WIP branch that builds the images from an unlabelled layer.
As an added bonus, there's a graph target that automatically creates an image of the dependency graph of the images using graphviz.
Arguably, all of the above is a pretty serious misuse of both docker and make :-)
I can answer complaints about the sins I've committed with make, but the sins we've committed with Docker are (mostly) not my doing.
The idea is if you want to use the library, you just include the makefile inside your project makefile, define a TARGET values and you will automatically have tasks for build, debug, etc.
The key is a hack on .SECONDEXPANSION pragma of GNU make, which means it's only work in GNU/Linux environment.
Edit: ah, turn out I write some documentation about it here: http://kilabit.info/projects/libvos/doc/index.html
- make test : run the entire test suite on local environment
- make ci : run the whole test suite (using docker compose so this can easily be executed by any CI server without having to install anything other than docker and docker-compose) and generate code coverage report, use linter tools to check code standards
- make install-deps : installs dependencies for current project
- make update-deps : will check if there is a newer version of dependencies available and install it
- make fmt : formats the code (replace spaces for tabs or vice-versa, remove additional whitespaces from beginning/end of files etc)
- make build : would compile and build a binary for current platform, I would also defined platform specific sub commands like make build-linux or make build-windows
The shell script generates a Makefile and the Makefile runs the hadoop commands, so that the parallel dep handling is entirely handed off to Make.
This make it super easy to run 2 parallel workloads at all times - unlike xargs -P 2, this is much more friendly towards complex before/after deps and failure handling.
It was quite simple really, but really powerful to be able to tweak/replace a dataset hit make, and have a fully updated version of my thesis ready to go.
- Compilation of papers I am writing (in LaTeX). The Makefile processes the .tex and .bib files, and produces a final pdf. Fairly simple makefile
- Creation of initial conditions for galaxy merger simulations. This I obtained from a collaborator. We do idealized galaxy merger simulations and my collaborator has developed a scheme to create galaxies with multiple dynamical components (dark matter halos, stellar disks, stellar spheroids, etc.) very near equilibrium. We have makefiles that generate galaxy models, place those galaxies on initial orbits, and then numerically evolve the system.
Even though Make does not have built-in support for arithmetic (as far as I know), it's possible to implement it by way of string manipulation.
I don't recommend ever doing this in production code, but it was a fun challenge!
http://www.oilshell.org/blog/ (Makefile not available)
and build a Python program into a single file (stripped-down Python interpreter + embedded bytecode):
Although generally I prefer shell to Make. I just use Make for the graph, while shell has most of the logic. Although honestly Make is pretty poor at specifying a build graph.
Using a Makefile allowed someone to quickly drop in new keys/certs and have all of the output formats built in a single command. Converting and packaging a single certificate requires one or more intermediate commands and Makefile is setup to directly handle this type of workflow.
tmux: ln -s $(CURDIR)/.tmux.conf $(HOME)/.tmux.conf tmux source-file ~/.tmux.conf reload-tmux: tmux source-file ~/.tmux.conf gitconfig: ln -s $(CURDIR)/.gitconfig $(HOME)/.gitconfig
It probably will require quite a few changes, but if the /proc file system exposed running processes by name, and contained a file for each port that something listened to, one _could_ run make on that 'directory' with a makefile that describes the dependencies between components of the system.
Useful? Unlikely, as the makefile would have to describe all hardware and their dependencies, and it is quite unlikely nowadays that that is even possible (although, come to think of it, a true hacker with too much time in hand and a bit of a masochistic tendencies could probably use autotools to creative use)
Point being that autoconf is often overkill for smaller C projects.
Well, I have "make encrypt" and "make decrypt" commands that will iterate over the files in an ".encrypted-files" file. Decrypt will also add a pre-commit hook that will reject any commit with a warning.
This is tons easier than trying to remember the ansible-vault commands, and I never have to worry about trying to remember how to permanently delete a commit from GitHub.
We gradually swapped them out in favour of our own DAG-runner written in Rust, called Factotum:
* a source code download, * copying IDE project files not included in the source, * creating a build folders for multiple builds (debug/release/converage/benchmark, clang & gcc), * building and installing a specific branch, * copying to a remote server for benchmark tests.
I use one to build my company's Debian Vagrant boxes: https://app.vagrantup.com/koalephant
I use one to build a PHP library into a .phar archive and upload it to BitBucket
My static-ish site generator can create a self-updating Makefile: https://news.ycombinator.com/item?id=14836706
I use them as a standard part of most project setup
A personal wiki and resource catalog. The only thing delivered is the makefile, which uses existing tools, and a small convenience script to run it.
make seems to be easier to install/get running than the myriad of non packaged, github only projects i have found.
It has much of the same functionality, but I already know (and love) ruby, whereas make comes with its own syntax that isn't useful anywhere else.
You can easily create workflows, and get parallelism and caching of intermediate results for free. Even if you're not using ruby and/or rails, it's almost no work to still throw together the data model and use it for data administration as well (although the file-based semantics unfortunately do not extend to the database, something I've been meaning to try to implement).
Lately, I've been using it for machine learning data pipelines: spidering, image resizing, backups, data cleanup etc.
Instead of bloated autotools I also call a config.sh from make to fill some config.inc or config.h values, which even works fine for cross-compiling.
What you can do, however, is make it hard so that the vast majority of developers can't do it (e.g. My tech crawl billions of pages, but there was a whole team dedicated to keeping it going). If you have money to spend, there's Distill Networks or Incapsula that have good solutions. They block PhantomJS and browsers that use Selenium to navigate websites, as well as rate limit the bots.
What I found really affective that some websites do is tarpit bots. That is, slowly increase the number of seconds it takes to return the http request. So after a certain amount of request to your site it takes 30+ seconds for the bot to get the HTML back. The downside is that your web servers need to accept many more incoming connections but the benefit is you'll throttle the bots to an acceptable level.
I currently run a website that gets crawled a lot, deadheat.ca. I've written a simple algorithm that tarpits bots. I also throw a captcha every now and then when I see an IP address hits too often over a span of a few minutes. The website is not super popular and, in my case, it's pretty simple to differentiate between a human or bot.
Hope this helps...
I remember working hard on a project for a year, then releasing the data and visualizations online. I was very proud. It was very cool. Almost immediately, we saw grad students and research assistants across the globe scraping our site. I started brainstorming clever ways to fend off the scrapers with a colleague when my boss interrupted.
Him: "WTF are you doing?"
Me: "We're trying to figure out how to prevent people from scraping our data."
Him: "WTF do you want to do that for?"
Me: "Uh... to prevent them from stealing our data."
Him: "But we put it on the public Web..."
Me: "Yeah, but that data took thousands of compute hours to grind out. They're getting a valuable product for free!"
Him: "So then pull it from Web."
Me: "But then we won't get any sales from people who see that we published this new and exciting-- Oh. I see what you mean."
Him: "Yeah, just get a list of the top 20 IP addresses, figure out who's scraping, and hand it off to our sales guys. Scraping ain't free, and our prices aren't high. This is a sales tool, and it's working. Now get back to building shit to make our customers lives easier, not shittier."
Sure enough, most of the scrapers chose to pay rather than babysit web crawlers once we pointed out that our price was lower than their time cost. If your data is valuable enough to scrape, it's valuable enough to sell.
The only technological way to prevent someone crawling your website is to not put it on a publicly-facing property in the first place. If you're concerned about DoS or bandwidth charges, throttle all users. Otherwise, any attempts to restrict bots is just pissing into the wind, IMHO.
Spend your energies on generating real value. Don't engage in an arms racw you're destined to lose.
There's a nice Github repo with some advice on blocking scrapers:
Finally, you could use a plugin in your Webserver to display a CAPTCHA to visitors from IP addresses that cause a lot of requests to your site.
There are many more strategies available (up to creating fake websites / content to lead crawlers astray), but the CAPTCHA solution is the most robust one. It will not be able to protect you against crawlers that use a large source IP pool to access your site though.
You really can't protect against this unless you start making the experience of regular visitors much worse.
Imagine if everyday they changed? It would make things a lot more difficult.
There would be disadvantages to actual users with this method like caching wouldn't work very well but maybe this alternative site could be displayed only to bots.
The crawler could get smart about it and only use xpaths like the 6th div on the page so maybe in the daily update you could throw in some random useless empty divs and spans in various locations.
It's a lot of work to setup but I think you would make scraping almost impossible.
Otherwise, your best bet (hardest to get around in my experience) is monitoring for actual user I/O. Like if someone starts typing in an input field, real humans have to click on it beforehand, and most bots won't.
Or if a user clicks next-page without the selector being visible or without scrolling the page at all. Not natural behavior.
Think like a human.
For example, a dictionary site. Someone tries to crawl your site after triggering your "This is a bot" code, serve bad data to every 20 requests. Mispell a word, Mislabel a noun as a verb, give an incorrect definition.
If you combine this with throttling then the value of scraping your site is greatly reduced. Also, most people won't come up with a super advanced crawler if they never get a "Permission denied, please stop crawling" message.
Both worked, both worked well with http downloads and selenium (and common techniques). Neither worked against someone dedicated enough - but there are the usual tricks for bypassing them (which we used, to test our own stuff).
We also developed something in-house, but that never helps.
This is for Drupal sites. It has a strong firewall (csf) and it has a lot of crawler detections on the nginx configurations. It checks the load and when on high load it blocks the crawlers.
simple demo: http://botbouncer.xyz/
I ran it for awhile on some medium traffic websites that were being heavily scraped. It blocked thousands of IP addresses, but IIRC only received one Bitcoin payment.
The company I work for does a large amount of scraping of partner websites, with whom we have contracts that allow us to do it and that someone in their company signed off, but we still get blocked and throttled by tech teams who think they are helping by blocking bots. If we can't scrape a site we just turn off the partner, and that means lost business for them.
For ill-behaved ones, it depends on why you're trying to block them. Rate throttling, IP blocking, requiring login, or just gating all access to the site with HTTP Basic Auth can all work.
Also you can do frontend rendering, it's a bit larger roadblock but you can use phantomJS or something to crawl that.
IIRC there is a php framework that mutate your front end code but I'm not sure if it does it enough to stop a generalized xpath...
Also I used to work for company where they employ people full time for crawling. It will even notified the company if crawler stopped working so they can update their crawler...
- permanently block known anonymizer service IP addresses
- permanently block known server IP address ranges, such as AWS
- temporarily (short intervals, 5-15 mins) block IP addresses with typical scraping access patterns (more than 1-2 hits/sec over 30+ secs)
- add captchas
All of these will cost you a small fraction of legitimate users and are only worth it if scraping puts a strain on your server or kills your business model...
One technique that bothers me quite a bit is constant random changes in class names or DOM structure, which can make it more difficult. Not impossible but more difficult.
1) request fingerprinting - browser request headers have arbitrary patterns that depend on user agent. matching user agent strings with a database of the request header fingerprints allows you to filter out anyone who is not using a real browser who hasn't taken the time to correctly spoof the headers. this will filter out low skill low energy scrapers and create higher costs.
3) do access pattern detection. require valid refer headers. don't allow api access without page access, etc. check that assets from page are loaded. etc.
4) use maxmind database and treat as suspicious any access not from a consumer isp. block access from aws, gcp, azure, and other cloud services offering cheap ip rental.
then Zip bombs.
Most crawlers will make hundreds of requests in five minutes, while legitimate viewers will make be bellow 100.
This article is a great summary that may help you:
These parts specifically may provide key insight:
"Often, psychologists have distinguished between two types of well-being: hedonic well-being (a sense of happiness) and eudaimonic well-being (a sense of meaning and purpose). Although happiness and meaning overlap significantly, researchers suspected that helping others is especially crucial to developing a sense of meaning."
"A recent article published in The Journal of Positive Psychology by Daryl Van Tongeren and his colleagues sought to examine this relationship. In a preliminary study, the researchers asked over 400 participants to report on how frequently they engage in different altruistic behaviors (such as volunteering) and how meaningful their life feels. Participants who were more altruistic reported a greater sense of purpose and meaning in their lives."
I ended up putting down the dog and by my gym was a normal pet store that didn't sell dogs/cats but had a dog rescue event going on. So I went there to donate what stuff I bought. I ended up talking to the founder there on why pet store dogs are so bad.
So that day I signed up to foster a dog. A few months later I was helping with events and then a group of us split from that rescue to start our own that imported dogs from the south that were surrendered up north. It changed my life doing something I felt was good.
Maybe you can try to take some of your time and donate it to some cause you might be interested in. I turned from hating work to thinking of work as a means for me to make money to help a cause I loved.
Based on what you wrote, it seems like you are only focused inward, on yourself. Figure out a way to focus on someone else.
Had an old, wise friend tell me, "You learn to love, by doing for..." i.e. when you tend to someone who is helpless, you are focused on them, and their needs. You gain a whole new perspective on life.
Do _for_ them. Do something that doesn't bring you any gain or benefit. Just to be a good human. Selfless.
Kids make this happen, naturally. But I'm not suggesting you go have a bunch of kids, just for that, I hope you get my drift.
Having material things is worthless unless you do not have any long, deep, and meaningful relationship and belong in a community. We, humans, long for deep connections. None of the material things will make you happy unless you share it.
It appears your work/life balance is lacking. Do you have a significant other? Do you have hobbies you enjoy and/or actively pursue? I have been where you are with the dreading going to work each morning even to the point of being physically sick each morning. I had to find purpose in my work and as a result have just recently formed a startup that I hope will be accepted into Y Combinator.
I would encourage you to find someone you can talk to about the feelings you are experiencing before they become even more pronounced. Success at work is terrific but happiness is not always tied to employment success.
Try new things, break your routine. Life has a lot to offer my friend :)
Get into a romantic relationship or even multiple parallel if that is your thing. (I'm in non-monogamous relationships for 8 years now and started feeling much better)
Start a company or get kids. Having to care for your employees or kids can give you a purpose.
Try to help people in general. Teach some lesser fortunate people your skills, see what they make of it, maybe it helps you to get meaning by lifting others up.
Become a monk, christian or some other religion. They always search for people and the constant work and prayers gave some people meaning. Also the 100% structured daily life lets you age much slower.
Life is about things outside of work, people, loved ones, pets, plants, hobbies.
Set some goals to connect with friends and family. Get a pet, do gardening, volunteer, read. Go hiking, go biking. Play a team sport.
Most people dread going to work, that's why they call it work, btw. Although it is nice if you can enjoy work, short commute, great pay and interesting projects can help with that.
Build other things in your life where you look forward to going to work, but you really look forward to getting off work to pursue the people/hobbies you really care about.
Exercise can help too but sounds like you have that covered. Try something new though. Hiking, Biking, Rock Gym/Climbing. Team sports.
Good luck finding the illusive 'happiness', sounds like you're on the right track.
1. From where you actually came from.
2. What are you here for.
3. Where to go afterwards.
By the way, it started with your first intention, i.e. for what did you worked so hard for all these?
Maybe you need to work on something that helps people.
Maybe your work is the wrong variety. Maybe you need to do work where you shower after your shift, rather than before.
Maybe you need to work for yourself, rather than a company.
Just a few thoughts, maybe one clicks.
Are you dating?
I'd recommend reading "The Way of the Superior Man" . One of the things that's stuck with me from the book is that no one ever feels like they've "made it". Even if you do feel like you get to the point, like you have, you suddenly become miserable as there's nothing left to strive for. We need some driver in our lives that push us forward.
The author also makes the claim where everyone should have an hour per day to focus on something they want to do. It helps give you direction and purpose. I know the times when I've done this, I've enjoyed work and life a lot more than the times where I haven't.
1)Find out what you really want to do even if it's less money
2)Do you need to find someone to share your life with?
3) Do you need to work up the career ladder?
4) if what you want to do won't let you make a living. Use your current job to finance what you want to do. It will give your job a purpose.
5) Talk to a mental health professional.
I would take one of those long vacations and test different things. You'll have to take action. You can talk about it forever and it won't make a difference.
Start meditating :)
As a start, volunteer one hour every week at an organization that interests you. Do the grunt work. See what the effect is after a month and grow from a simple base.
Something has put you near the top of the power pyramid for its own reasons. And the whole of global consumerism is here to service your happiness. Consider all that went into the wealth and influence you have as a rich person. Everywhere you go you can buy approximations of happiness, but your beliefs are preventing that from happening. You worked to get your job that provides your high status. Now you have the right to that level of buying power but your beliefs are holding you back from being a successful consumer at your place in the pyramid scheme.
Upload a video a week. Full complete projects. Post them on reddit.Reply to every comment. Ask for suggestions of next project.
After 3 months or 12 videos. Start posting 3 times a week of projects in progress.
After 3 months start live streaming twice a week.
At the 6 month mark start a Patreon. Even if you don't have any patrons immediately learn the platform and incorporate it into your videos. Set a goal that entices ppl to participate. Maybe one of your projects was a hit.
Hope that helps.
1) One-off mechatronics projects: museum exhibits, cable-cams for filming companies, puzzles for escape-rooms etc.
2) Regional distribution and support for a particular brand of lasercutters.
From what I see, he spends most of the time on first category but most of the revenue comes from the second.
Do you think you can make a kit that parents or other hackers would want to buy, like the build your own robots kits that come in pieces but include all the parts needed?
I know of one guy that got certified on shopbot and the laser cutter, and used that knowledge to get clients. He helps them go from idea to something repeatable.
2. Learn how to make it for a lot less than people will pay for it.
3. Partner with people who can market your projects.
I believe the most important task is to teach your team members those project management skills.
Teach them the skills to recognize unexpected events and know to communicate those bad news proactively. For example, an assigned task turned out to be much more difficult or larger scope than previously thought? Communicate. Uncertainty whether things can get done in time? Communicate. Feeling even the slightest uneasy about anything? Communicate.
Understanding of the business goals? You have to teach it and make it clear. You're not gonna have a textbox, type it in and expect the team to just get it. There's a difference between reading something, and understanding something.
Again, tools are "tools". No tool can allow your team to just be in zombie mode and not use their brain to think. Tools are there as an aid, not to fill in a hole in competencies.
Choose whichever tool that works for you. Observe how your team members are doing and teach them the necessary skills as needed.
At my company we've used simple Google doc, Asana, Trello, and now we're on JIRA. They all have pros and cons, but so far JIRA is working out alright and I think better than Trello.
I know there's also a lot of scorn for agile, but the core tenet is really just writing well-defined stories. Make each ticket the smallest possible feature with incremental value than can be built, tested and deployed. Then stack your tickets in priority order. Everything else about the process is for communication and visibility, but if you write your stories well, they are less important.
A lot of solutions posted so far (post-its, E-mail, whiteboard) work well for 2 person projects, with discipline scale to 20 person projects, are problematic for 200 person projects, and are totally inappropriate for 2000 person projects.
Specialized tools are recommended when projects scale beyond 10-20 people. Formal process helps. You also need to track risks as another poster pointed out. If your project is a part of a larger whole, you need to track dependencies and their schedules (other teams at your company, vendors/suppliers, 3rd party open source dependencies, etc.)
> Know what each other are working on? (progress/blockers)
a. Gantt chart = Asana + Instagantt
- Instagantt is great. It allows you to create a Gantt chart from multiple Asana projects. I have an Asana project for each customer project with the deadlines/milestones. I also have a project for Ops/Refactoring "projects" (changing ORM, dockerizing, etc.), a project for Releases, and a project for Meetings.
- I use to think Github could do everything but business-folk seem to struggle with it, and Asana is more flexible. Assigning tasks to people in Asana is great.
b. Kanban board = Github + Zube
To actually get things built we work in loose two week sprints. We create Github Issues for tasks we are working on usually keeping them quite broad as usually a lot of details emerge once we start working on them.
We estimate time based on Planning Poker with the goal being to become better at estimating time and scoping tasks.
> Know what is currently deployed to production and staging? (heroku)
I've started keeping details of releases in Asana. Could also use Github Milestones. We feature freeze releases to a branch called `release/0.5.x`, when we ship we use a tag called `release-tag/0.5.0`, and then tag our deploys with `deploy/staging`, `deploy/prod`, or `deploy/<on-premise-customer-name>`.
> Keep track of larger goals (milestones)
We use a Gantt chart is visualise this, and usually some high-level strategy docs in Quip.
You can monitor this for basic uptime monitoring and refer to it to sanity check which version is deployed. We do this at my place and it's super convenient.
1. We do all of this from Github using issues, milestones and projects. We have a GitHub Slack integration which can also give a feel of what everyone's working on. We also have a meeting every Monday where everyone says what they'll be working on this week.
2. Master branch is always in production. Staging branch is always in staging. We use CircleCI for CI/CD.
3. Milestones in GitHub.
1. How do we know what each other is working on?
All of us (~15 people, 5 of which remote) participate in the daily at 10 o'clock. The daily takes around 15 min and it is focused on the stories and every one has a good overview on what is everyone doing. Other meetings are usually organized in the daily. Typically like
A) "I have this and that problem with X, I would like to talk with B)"
B) "Okay, let's talk after the daily."
C) "I have also interest in this"
Every day the daily is lead by another person. At the end of daily we ask questions regarding if everyone has enough/to much to do, knows what to do and so on.
2. How do we know what is currently deployed to production and staging?
Version numbers ;) And Bamboo deployments.
3. Larger Goals
Big releases every few months with planning directly after each release.
It's simply to early to think about the solution at this stage.
(With that said I manage a remote team and we use kanban on trello, heroku and slack. We only meet as needed)
We can see what everyone is working on just by looking at the stories in our 'in development' list which show who picked up that story.
We can also group stories into epics and milestones to track progress towards larger goals
Tracking the larger goals is often not well formalized, but I like this podcast episode about levels of planning in agile projects: http://deliveritcast.com/ep33-always-be-planning. It's often included in frameworks for scaling scrum, like SAFE of scrum of scrums.
2. is a purely technical problem. If I remember correctly, stuff deployed to heroku corresponds to git branches, so it should be pretty easy to create some visualization about what's deployed right now from looking at git repos. I could be wrong here.
For example my dashboard I has a 2 column layout, on the left top is my in-progress stuff and down the left side is the other team members in progress stuff. On the right top is my assigned tasks and below is monitored tasks. This layout is useful to me for tracking my work and I get to stay aware what the others are working on. It helps a lot to keep tickets small in scope, so you can rotate them fairly often.
Of course what works depends on the nature of your teams work. Anyways, just some ideas.
The closest thing I've seen to a nice solution to this is to e-mail a brief report of what you've been up to to the manager at the end of the week, who collates into a summary at the start of the following week. Lightweight, avoids superfluous detail (because the coordinator can edit it out), and not so fine-grained that individuals can't sit on a problem for a day or two while thinking it over if that's their preferred style.
Obviously, this doesn't preclude talking about individual issues during the week! But daily check-ins force this too quickly in my view.
For the task spreadsheet, you can have a twice-a-week stand up where everyone goes around and updates their own tasks on a google sheet in turn.
For the milestone spreadsheet, a period between one month and one quarter works well.
Although meetings are often eschewed by software engineers, they really do help to keep projects on track.
Also appoint someone to be in charge of tracking the "health" of various milestones, red = needs course correction, orange = at risk, green = on track, etc.
Start with Trello. You can easily bend Trello to work with any productivity/PM system. Easy to get started and easy to evolve your process over time. Lots of great examples of how people are using it and some cool plugins to extend it.
#1 is extremely easy to implement in Trello. #3 is definitely possible but takes some time and buy in.
I would add that visibility into what everyone else is working on is also super helpful to avoid stepping on other's toes or duplicating work.
Once you've got communication down, you might find one of these tools useful:
1) Team members have to reply to a thread on "What are you working on?" at the end of the day. This keeps everyone informed of progress and blockers.
2) We use the CI dashboard to answer this (any changes to the master branch are auto-deployed to staging, and then staging is manually promoted to production.)
3) We use a Gantt chart to track high-level milestones (usually we go through it once a week to see where we are at).
Trello, jira, aha, whatever won't help if you don't have clear lines of communication and a chain of command
Process is key. Tools should serve the process and the team. First thing I did was to put together a basic scrum process. This had an immediate positive impact that has persisted. Some recommendations:
- Respect your team members. Give them the benefit of the doubt. There have been some good threads on HN about the distinction between being a dev and a manager.
- Short daily standups: no more than 10 minutes, just the three questions: Did? Doing? Blocks? We do them in-person in the office, but I also do them over email with some of our contractors.
- Regular sprints (I like two-week sprints) with focused, structured demo, retrospective, and planning meetings.
- Retrospective meetings with developers and product owners that identify pain points but emphasize fixing the process not blaming or fixing individuals.
- One-on-one meetings every other week with members of my team and with my manager.
- Weekly grooming meetings: product owners and developers together review, size, and prioritize stories.
- Projects are managed in Trello: cards are either user stories or defects with acceptance criteria.
- Issues are tracked and documented (in Github). I set an example for my team by thoroughly documenting issues and emphasizing best practices.
- Developers don't work on anything that doesn't have a Trello card (we have an action item card for small one-off tasks.)
- No burndown charts!
A lot of these practices I carried over from my previous job, where we used scrum but, because of laziness and laxity on a few points, ended up with a pretty dysfunctional team.
My only real innovation was the "No Card/No Work" rule. I think it's essential. It both stops managers and stakeholders from derailing the process. And it provides a record and reference for the team's accomplishments. Coming into an existing team, I made sure I was flexible and accommodating in implementing the new process. But this is the one point on which I told my manager I needed to be firm. We agreed to leave a little bit of room in each sprint for any urgent stories that might come up. It's worked out well.
Finally, my managers support and respect the process. Commitment was one of the keywords that was emphasized when I was first trained in Agile Scrum and I appreciate the significance of it now. Without the investment and commitment of management, this would probably all be futile. For larger goals, we created an Epic board that my manager likes to use with senior management. Trello is great because it visually reinforces the reality that priorities are a queue and if you push some urgent new job to the top, everything else in line is going to get pushed down and delayed. It's funny how easy it is for people on high or under stress to ignore that basic law of nature.
It is very flexible - you can label tickets, assign them and you even have git integration!
For remote teams that run on Slack, give http://www.slash-done.com/ a try - a good friend of mine had this built after missing a simple way of having everyone check in once their tasks were completed.
it is quite interesting to see that no one has yet created one that combines all three in a simple / minimal interface.
I'd rather have a quizz at first install and user account creation that would ask what users want with sane defaults hiding behind an `I don't know` checkbox (ie: don't configure any mail client if people just use GMail). It would definitely ease the adoption from first users instead of throwing a huge pile of shortcuts to their face when they click the apps menu for the first time.
I would also make it very easy to do the most common first things users do: opening an image, browsing the web, playing music. Don't send them to players/viewers with different UI than the rest of the workspace or ask them what pic viewer they want to use among 4 different apps. First impressions matters :).
Email Client: Thunderbird
Terminal: Tilix, Gnome Terminal,
IDE: Visual Studio Code (although it's not a fully fledged IDE)
File manager: Nautilus
Basic Text Editor: Gedit
IRC/Messaging Client: Polari, HexChat
PDF Reader: Evince
Office Suite: LibreOffice
Calendar: Gnome Calendar
Video Player: Totem
Music Player: Lollypop
Photo Viewer: Eye of Gnome
Screen recording: Peek
Example: whatever calendar app you include should work with the calendar in GNOME's panel.
I'd also like to emphasize on the well maintained part since I personally prefer that my core set of applications to not become stale over time or even worse, just have tons of quality of life/paper cut bugs that remain unpatched for years. Whatever is chosen as default should get continued support and help from Ubuntu itself.
If you can do that, I would definitely come back and give Ubuntu another chance.
Web Browser: Firefox. Of the two modern web browsers that are applicable (Chromium being the other), Mozilla and Firefox are more in tune with the free software mentality many users of Ubuntu adhere. It is an excellent browser as well.
Email Client: Thunderbird? Are there mature alternatives that will work for most people that use a standalone mail application?
Terminal: Keep gnome-terminal, it's perfectly fine for most.
IDE: None. Leave this to the user. An IDE need not be present by default, as it depends greatly one the language chosen. For simple scripting Gedit suffices at first, and associating code files with Gedit by default is fine too.
File manager: I take it Gnome Shell still ships with Nautilus?
Basic Text Editor: Nothing wrong with Gedit.
PDF Reader: Evince. Mature and fast.
Office Suite: LibreOffice of course.
Video Player: Something that supports everything you can throw at it.
Music Player: I'm partial to Quod Libet. :)
There are things Canonical does well, I think. Those things are technical. When it comes to trying to be Microsoft/Apple/Google, it misses the mark. In part because it assumes that which PDF reader it ships with matters to users.
1. Replace the default PDF reader with something faster. It takes the default PDF viewer (in 17.04) 10+ seconds to open files that MuPDF can open in 2 seconds. MuPDF is very basic, so it might not be the best option for the default viewer, but hopefully there's something faster than the current default.
2. Allow the software center app to request sudo privileges when installing .deb files from the GUI. When I set up my most recent Ubuntu desktop I downloaded the Chrome deb from Google and then tried to install it by double clicking the file in the GUI file browser. The software center app opened and tried to install it, but instead of asking me for sudo privileges (which I had), it failed to install. My options were A) install it from the command line with sudo or B) install gdebi and use that to install the deb from the GUI.
As someone who is comfortable working in Linux, it's not a big deal for me to install a deb from the command line. The inability to install a deb by double clicking it would be a showstopper/major issue for someone who is brand new to Linux and isn't trying to "learn Linux".
P.S. There's an argument to be made that people should just learn to use the command line, but Ubuntu's slogan is "Linux for human beings". Besides, the worst way to introduce someone to the wonderful world of FOSS software is to give them a headache while they're trying to set up their computer :-)
Email Client: None, users still using desktop clients know what they want and how to get it.
Terminal: No preference
IDE: None, this should be chosen by the user if they want one.
File manager: No preference
Basic Text Editor: No preference
IRC/Messaging Client: None, same situation as email
PDF Reader: No preference
Calendar: Like the calendar the clock opens (no preference) or a calendar you can add events to (does a modern desktop calendar for Linux even exist)?
Video Player: VLC
Music Player: Whatever is least bloated
Photo Viewer: Whatever is least bloated
Screen recording: None, most people don't need or want this.
Photo Viewer: must open quickly. If I want to manage a zillion photos I can download something else, but when I just open a file I want to see it right away.
Terminal: Gnome Terminal or Tilix 
IDE: Gnome Builder
IRC/Messaging Client: N/A
PDF Reader: Okular
Office Suite: LiberOffice Fresh (preferably via a snap to keep updated)
Video Player: Gnome MPV with youtube-dl  or VLC
Music Player: VLC
Photo Viewer: Digikam
Screen recording: N/A
 https://github.com/gnunn1/tilix https://github.com/gnome-mpv/gnome-mpv
It is really interesting from an integration perspective to consider all three:
* Firefox pulls in gtk3 and gtk2 dependencies.
* VLC pulls in Qt and sdl1.
* LO pulls in Python.
Of note, both Firefox and VLC use ffmpeg, which is nice.
But my macro point - the most popular applications for Linux right now all use pretty much entirely different infrastructure. All three pull in at least a dozen library or package dependencies each, there is little overlap, and between them you have the entirety of GTK and Qt. On top of that, they are about 130MB, 50MB, and 400MB installed respectively.
I'm not going to make conclusions about how this relates to the desire to write composable software, or how these various monolith projects are also the most desired. It is just interesting that just from the big three staples you are looking at more space used on installation media than a CD just from them and their immediate dependencies. Qt alone is around 400MB including webengine. Gtk is another 90MB. So you are looking at over 1GB of binaries, libraries, and art assets to run 3 programs, and at runtime they will all be pulling these respective libraries into resident memory with almost no overlap.
As for IDE, it'd be really cool to have Arduino included, but some might consider that spamware \_()_/
Email client: Thunderbird
Terminal: Gnome Terminal
File Manager: Nautilus
Basic Text Editor: Gedit (But can you patch the ridiculous "find next" shortcut key to ctrl + f/enter from ctrl + f/ctrl + g?)
PDF Reader: Gnome default
Music Player: I always felt like Banshee was the superior Gnomish music player but it seems to unmaintained unfortunately. Rhythmbox is the next best basic one IMHO.
Photo viewer: Gnome default
Email Client: Gmail (web), Protonmail (web)
IDE: Sublime Text 3 (non-free), Visual Studio Code
File manager: default
Basic Text Editor: nano
IRC/Messaging Client: HexChat
PDF Reader: default
Video Player: mpv
Music Player: unsure, i would go with DeaDBeeF and Spotify (non-free)
Photo Viewer: ???
Screen recording: none
Extra: KeePass, git, gpg
Email Client: I'm pretty much all web apps, and would actually like not having evolution or thunderbird installed by default. I think email clients are something to leave up to the users to specifically install
IDE: Visual Studio Code. I don't care if it's installed by default, but the ability to install out of the box without a web visit and .deb download would be great.
File manager: I guess I use Nautilus by default, but don't take that as an endorsement
Basic Text Editor: I use vim, but Gedit suffices.
IRC/Messaging Client: Like email, I think this should be left out of a base install these days.
PDF Reader: Evnince it fine, but ePub support in it, or what ever PDF/document viewer is default would be wonderful(bonuse points for mobi too)
Office Suite: Libre Office seems to be the only real option and it's fine
Video Player: I used to install VLC day, one, but actually have kept Totem lately
Music Player: I don't think there's any good options, Rhythmbox is still much better than Gnome Music if you're tempted to go all Gnome with the default DE switch
Photo Viewer: EOG is fine, just don't make a big heavy gallery app the default opener even if one is installed by default.
Email client: ??? Comment: I use mutt but I'm wishing for something better. mutt is too limited
Terminal: Terminology, urxvt
IDE: None; neo-vim is sufficient for programming tasks, don't need most IDE features.
File manager: What ever is the default for the selected DE.
Basic Text Editor: neo-vim
IRC/Messaging Client: irssi and Pidgin
Calendar: Don't know
Video player: VLC
Music player: Tomahawk
Photo Viewer: What ever is default for the selected DE
Screen recording: Open Broadcast Studio
Terminal: gnome terminal is ok
IDE: none. I'm using emacs for all the things. Which standard IDE could handle all languages well? I think this is for developers and we pick our tools. If this is a IDE for learning, I don't know if this is the right way to learn. Maybe vim.
File manager: nautilus is ok
Basic Text Editor: gedit should be ok. I never use it because I don't need a basic editor.
IRC/Messaging Client: no idea. I use my phone for messaging.
PDF Reader: evince.
Office Suite: Libreoffice from their PPA. The distro is usually way too behind. This is a general problem with many packages not in the core of the OS. Maybe it's time to give up on trying to be current and let developers package their stuff in any sensible format.
Calendar: I use the offline calendar on my phone.
Video Player: VLC, Gnome Video is just too basic.
Music Player: YouTube :-) Seriously, I use Rhythmbox and it's kinda ok, when it doesn't mess with the metadata of a full directory of files. I'm chmod 400 my mp3 to make them safe.
Photo Viewer: eog? I used shotwell and its predecessor (fspot?) and I lost all labels migrating among versions and computers. I'm not wasting my time anymore with sw that organize picture collections. If at least they had import / export to / from csv.
Screen Recording: I liked to use Green Recorder https://launchpad.net/~mhsabbagh/+archive/ubuntu/greenprojec... but how about adding a video editor too?
Email Client: Evolution
IDE: No IDE by default. Most users aren't developers
File manager: Files/Nautilus
Basic Text Editor: Atom
IRC/Messaging Client: Nothing, let user install their own.
Office Suite: I don't really like it, but LibreOffice is probably the best option right now. Personally, I'd almost prefer an option to just have LaTeX and TeXStudio pre-installed.
Calendar: No Preference
Photo Viewer: No preference
Screen recording: No preference
I had been using Ubuntu for years before realising that this amazing improvement over mplayer exists. And it has everything: GPU decoding, excellent UI, keyboard shortcuts, it's fast, and never fails. Of the software I use regularly, this one is by far the closest to perfection.
File Manager: Thunar File Manager
Completely unrelated, but having Ubuntu work well on a Mac (and retaining habits learned on a Mac) with the external Apple Magic Trackpad would be great. It's a huge source of frustration and annoyance for me for various reasons, right after the keyboard shortcuts. Native to Ubuntu, I will also miss Unity not being developed further or not being developed with the focus that existed before.
Another one, though not a desktop default app. Please add a well maintained and working VNC server (or make it available). I tried a few, gave up and went with TeamViewer (which is a commercial product, but free for personal use). Not being able to screen share with a mostly headless machine has been very frustrating.
My basic suggestion would be to keep it simple, so stay with the GNOME apps where you can.Also it might make sense to make a distinction between what people feel is a good choice of software and which of those should be included in the default install.
IMHO stuff like and IDE, e-mail client, IRC client, messaging client, office suite and screen recording don't have to be included in the default install as long as it's easy enough for everyone to add them later (or customize during install).
Regarding specific items:- Terminal: gnome-terminal, but if possible look into make the tabs a bit less tall and fix the search dialog so it can be closed by pressing escape
- File manager/photo viewer: nautilus, but look into fixing the preview (spacebar) so that it allows opening the preview window once and then allow navigating through all files in the chosen directory using the arrow keys
- Calendar: gnome-calender, but make sure you use gnome 3.24 or later so it support dark mode
- Screenshots: gnome-screenshot, but please fix it so it's possible to take multiple screenshots in succession. Right one has to close and open it to do so.
- Video player: Technically mpv, maybe with the gnome-mpv GUI. Though mpv might be too difficult to use for some users?
- Music player: Imho none of them is really good enough :( Elementary's noise might be at some point
Email Client: Fastmail web, Gmail web
Terminal: konsole, terminator
Basic Text Editor: Gedit, Gvim
IRC/Messaging Client: Slack web, Signal web
PDF Reader: Chromium, Firefox
Office Suite: LibreOffice, GSuite web
Calendar: Google Calendar web
Music Player: Google Music web, Clementine
Photo Viewer: eog, shotwell, gimp
Screenshot tool: Shutter
Sound source switcher: indicator-sound-switcher
Clipboard Manager: glipper
PDF Annotation: xournal
Markdown Viewer: ghostwriter
Markdown Editor: ghostwriter===
Web Browser: Firefox, Opera Email Client: Geary, Thunderbird, pantheon-mail (when the new version is ready) Terminal: gnome-terminal, pantheon-terminal IDE: ??? File manager: Nautilus, Thunar, pantheon-files Basic Text Editor: gedit, scratch-text-editor (from elementaryOS) IRC/Messaging Client: Telegram PDF Reader: envince Office Suite: Libre Calendar: gnome-calendar (please please please with Caldav support for posteo) Video Player: totem, mpv (gnome-mpv) Music Player: audacious Photo Viewer: gnome-viewer Screen recording: ???
IDE: IntelliJ, Eclipse
File manager: Double Commander
Basic Text Editor: Vim
IRC/Messaging Client: Pidgin
PDF Reader: Evince/MuPDF
Video Player: Vlc, Kodi
Music Player: Audacious
Screen recording: Simple Screen Recorder
 - https://github.com/gnunn1/tilix
 - https://doublecmd.sourceforge.io/
 - http://www.maartenbaert.be/simplescreenrecorder/
Chrome and Vivaldi each have their own apt repository, so why Ubuntu would bundle or package them, I'm not sure but give the option of adding an entry to sources.list. I mainly use Chrome for websites requiring flash support and letting Google manage that rather than the FOSS Chromium is simpler.
Basic Text Editor: Geany. Decent feature set and it has support in Windows and I prefer cross platform tools.Video Player, Music Player: VLC. Again it works on multiple operating systems and with few dramas.Office Suite: Libreoffice, again it's cross platform. I have written a couple of things in Lyx but it's niche.PDF Reader: NOT Okular - it's very versatile but chokes when rendering image-heavy 40 page film festival brochures. Atril or whatever the Gnome version is called are snappier.
Email Client: On linux, I use webmail. Too many hoops to jump through in getting Office365 and Gmail working seamlessly without typing in a bunch of IMAP/SMTP settings voodoo - lack in patience and too lazy in 2017 for that! Would revisit if something worked out of the box.
The rest? Well you've committed to Gnome and the default apps would suffice.
Email Client: Evolution, Thunderbird if you really don't want to pick Evolution. Do install one by default.
Terminal: GNOME Terminal.
File manager: Nautilus.
Basic Text Editor: gedit.
IRC/Messaging Client: none, Pidgin, Polari, HexChat.
PDF Reader: Evince.
Office Suite: LibreOffice; LibreOffice Base should be excluded.
Calendar: GNOME Calendar.
Video Player: Totem, not VLC.
Music Player: Rhythmbox, perhaps GNOME Music in a future release.
Photo Viewer: Eye of GNOME, maybe include Shotwell too.
Screen recording: GNOME Shell's built-in recording.
Also include file-roller, gnome-calculator, gnome-characters (not gucharmap), gnome-clocks, gnome-disks, baobab, gnome-documents, gnome-font-viewer, gnome-system-monitor, yelp, gnome-logs, bijiben, seahorse, gnome-screenshot, gnome-software, and gnome-weather, and consider including gnome-boxes, devhelp, gnome-dictionary, gitg, gimp, gnome-maps, gnome-tweak-tool, and deja-dup.
This is almost exactly identical to Fedora Workstation's default apps. In general, I have a strong preference for embracing the GNOME apps and GTK+ 3. The only exceptions are Firefox instead of Epiphany and LibreOffice instead of AbiWord and Gnumeric.
It doesn't notify user if some foreign process changed or removed file.
When ever a user types in a bracket, parentheses..., It does mean that he/she is going to close that (most probably).
Indentation, only God can understand what it means for source code files.
Only one thing which I like in gedit is, cobalt.
I don't use Ubuntu, because I need a feature-rich desktop, not the opposite.
I could've used Kubuntu, but I hate it because of apt (for being too slow)
What I like in Ubuntu is better power management.
I could've used Fedora, but I hate it's package manager, for being inconsistent, and this text like Microsoft, "please wait while your system is being updated", "reboot to update your system".
Rather than feeling the pain everyday, I take pain for few hours and install Arch Linux, with KDE.
Having the best feature-rich DE, with latest and up-to-date packages, a package manger which just works out of the box even in worst network conditions, for having every application in one place...
I literally forgot what's the name for, including those community or independent developers application, URL into main repositories, which will most probably break the system.
I don't know why you guys choosed GNOME, everything is damn slow. I accept that it provides simplicity for its users.
Email Client: Thunderbird. (Note: I'm a bit worried about the future of TB, with Mozilla cutting back its support of the project. Since it's been the default email client in Ubuntu since forever, it would be great to see Canonical pitch in to support it more.)
Terminal: GNOME Terminal
IDE: Does Ubuntu need to ship with an IDE?
IRC/Messaging Client: Does Ubuntu need to ship with an IRC client?
Calendar: GNOME Calendar, Lightning
Music Player: Clementine
Photo Viewer: No opinion
Screen recording: No opinion
Basic Text Editor: Gnote
IRC/Messaging Client: No!
PDF Reader: Whatever
Office Suite: No!/Libreoffice
Photo Viewer: Whatever
Screen recording: No!
Email client: Gmail
IDE: Atom, Emacs, Visual Studio Code
Basic text editor: Atom, gedit, nano, Emacs
PDF Reader: Chromium, evince, Adobe Acrobat (non-free)
Office Suite: Google Docs, LibreOffice
Calendar: Google Calendar
Video player: Totem, mplayer
Music player: Totem, mplayer
Photo viewer: Eye of GNOME, Shotwell
Screen recording: RecordMyDesktop
And a category that's been traditionally missing from Linux distros and really shouldn't be:
Simple raster graphics editor (like Microsoft Paint): GNU Paint
Email Client: <web>
Basic Text Editor: GEdit or Sublime Text
IRC/Messaging Client: none
PDF Reader: Firefox
Office Suite: LibreOffice, but in a work environment use MS Office, and even MS Office 2007 (at work) is light-years ahead of LibreOffice in terms of how I use Office. I do like the pop-out right column for editing, but find I have to go through menu after menu for simple things like formatting a text box in Impress. Calc table functions lack MS Office in all aspects.
Photo Viewer: Whatever the default is. Is good enough to not notice what it is.
Screen recording: Ctrl+Alt+Shift+r. Mainly record screen at work (Windows) where ShareX produces nice quality and file sizes.
Email: Anything simple and lightweight
Terminal: Default GNOME Term.
IDE: Shouldn't be in a default install
File Manager: Anything simple and lightweight + tabs (Nautilus)Basic Text Editor: vi
IRC/Messaging: Pidgin or Empathy
PDF: Default GNOME Viewer
Calendar: Default GNOME Calendar
Photo Viewer: Default GNOME
Screen Recording: Something full featured?
Maps: Anything supporting OSM (GNOME Maps)
Software Center: GNOME's Software Center
Email Client: Gmail web
IDE: IntelliJ, Atom
Basic Text Editor: Atom, VIM
IRC/Messaging Client: Gitter, Slack non-free
Office Suite: Google Docs web
Music Player: Spotify non-free
Screen recording: Google Hangout non-free, Floobits non-free
Games platform: Steam non-free
Source control GUI: GitKraken
Email Client: YahooMail, Gmail
IDE: Visual Studio Code, Atom
Basic Text Editor: Vim, Gedit
IRC/Messaging Client: Telegram
Office Suite: LibreOffice, WPS Office
Video Player: VLC, MediaInfo
Music Player: Lollypop, Spotify, EasyTAG
Photo Viewer: Shotwell
Screen recording: Simple Screen Recorder
Bitmap Image Editor: GIMP
2D Vetorial Image Editor: Inkscape
Email Client: Thunderbird (altho would prefer a modern alternative)
IDE: IntelliJ family
File manager: ???
Basic Text Editor: vim
IRC/Messaging Client: irssi/pidgin
PDF Reader: Atril/xpdf
Office Suite: Abiword/Gnumeric
Calendar: Thunderbird + Lightning (altho would prefer a modern alternative)
Music Player: deadbeef, Clementine
Photo Viewer: feh, eom
Screen recording: open broadcaster software
Web Browser: IE6
Email Client: Outlook Express
IDE: MS Studio
File manager: Explorer
Basic Text Editor: Notepad
IRC/Messaging Client: Skype
PDF Reader: Adobe Acrobat
Office Suite: MS Office
Video Player: RealPlayer
Music Player: Winamp
Photo Viewer: Cracked copy of Photoshop
Screen recording: Print screen key
I don't use alternative programs to the above, I don't write Word docs or need to as communication has changed. I don't have an email client.
My point is that this list of defaults is stuck in the past, we use computers differently and need an updated list of default applications. There should be a default app for your phone and what happens when you plug it in. There should be built in IoT apps too, so your computer can be at the heart of gadgets you get for the home.
Web Browser: Chromium / Firefox / EpiphanyEmail Client: Evolution / Mutt / ThunderbirdTerminal: gnome-terminalFile manager: nautilusText editor: geditIRC: weechat / polarisOffice Suite: google docs / libreofficeCalendar: google calendar / gnome calendarVideo Player: Totem / mpvPhoto Viewer: Shotwell (I wish gnome-photos would work but its reliance on Tracker makes it unusable for me (what is with tracker not following symlinks?? please fix that).Screen recording: I wish the gnome-builtin one did sound, since it doesn't I use SimpleScreenRecorder)
Caveat.. not a ubuntu user here per se... But left because of some of the bloatware/opinonated stuff and it crashed a lot. Plus I like Antergos with i3-gnome better than anything I've ever used before... Much better performance, less crashes/bugs...etc..
Basic text editor: gedit. Search has been a lot less usable since it moved to the top right bar. Keyboard sequences like control-f + part of a word + escape do strange things like sending you back to where you started. I'd like to be able to pilot to different parts of the code using control-f, down/enter/tab, up/shift-tab, and escape.
Also searching a huge file hangs because it stops to highlight every instance of the first character before processing the second. It should never be faster to open a terminal, find the file, and run grep. Also the entire app hangs to do syntax highlighting on giant xml files.
Terminal: Tilix, gnome-terminal
IDE: Atom, gnome-builder
Basic Text Editor: gedit
IRC/Messaging Client: telegram-desktop
Video Player: gnome-mpv, smplayer
Music Player: gnome-music, Spotify (non-free)
Photo Viewer: gnome photo viewer (don't know the name)
Screen recording: don't use
Photo editing: Darktable
Note taking: QOwnNotes
Research source organization: Zotero
Web Browser: Firefox
Email Client: don't care, I coded my own
Terminal: tilix (integrates better with GTK3 than GNOME-terminal)
IDE: Builder is good (I use vim)
File manager: Nautilus/ranger
Basic Text Editor: Gedit/nano/vim
IRC/Messaging Client: I use irssi
Calendar: GNOME calendar, but update it
Music Player: mpv
Photo Viewer: mpv
Screen recording: the one thats built into gnome, but make it better (adjust FPS/quality/convert size/etc).
The main reason I use xubuntu is because it offers a xubuntu-core package that comes with the desktop, apt and /nothing else/.
When I installed unity version of ubuntu, the install was always followed with about an hour of uninstalling shite I didn't care about. The new unity uninstall dialogue never worked correctly, and uninstalling 5 things in a row would cause it to lose track of what was installed and start duplicating entries. When I install a fresh system, I really want it to be fresh.
IRC/Messaging Client: Pidgin, Thunderbird
PDF Reader: evince
Email Client: Geary
Terminal: Gnome terminal
IRC/Messaging Client: Empathy/Polari
Office Suite: Libre Office
Calendar: Gnome calendar
Music Player: Gnome music
Photo Viewer: Shotwell (definitely not Darktable or RawTherapee, far too complicated)
Screen recording: Built in Gnome screen recorder
further elaboration provided here: https://news.ycombinator.com/item?id=14006747
Email: None, Thunderbird
IDE: None, Qt creator, Visual studio code
File manager: Thunar, Nautilus, for terminal Midnight commander
Basic text editor: Mousepad, for terminal vim
IRC/Messaging Client: Empathy, Pidgin, none
PDF Reader: Okular, Firefox (integrated)
Office suite: LibreOffice
Calendar: Gnome native
Video player: smplayer (or any Mplayer version with GUI), for terminal ffplay
Music player: Clementine, for terminal cmus
Photo viewer: Ristretto
Screen recording: xfce4-screenshooter, OBS Studio
Password manager: Keepass, KeepassXC
Task manager: htop
Other: Numlockx, git
Basic photo editor similar to picpick/mspaint on windows: Pinta (guess is closest to that)
(currently xubuntu 16.04 user)
Email Client: No Email Client.
IDE: No IDE.
File manager: Nautilus/ Thunar. (I was looking for something with dual panel view but no good solution seems to exist right now)
Basic Text Editor: Gedit/ Sublime.
IRC/Messaging Client: No IRC/MEssaging client or Hexchat.
PDF Reader: Evince/ qPdfViewer
Office Suite: Libreoffice (But do we have an alternative?)
Calendar: Gnome Calendar seems fine.
Photo Viewer: gThumb
Screen recording: OBS/ Kazam.
Calendar: Lightning (Thunderbird add-on)
P.S. Thanks for working on autoremoving old kernels from /boot!
My only wish is OpenVPN (+GUI integration).
IDE: Atom, VS Code
IRC/Messaging Client: None
PDF Reader: None
Office Suite: Libreoffice, Openoffice
Music Player: None
Photo Viewer: None
Screen recording: Recordmydesktop (Kali recorder)
Dash to Dock is another good one as are several other nice GNOME extensions.
bumblebee / gfx support would be nice :-)
Tiling Extensions as well.
The GNOME screen recorder works fine built in. :)
But after looking at the 17.10 image, it absolutely needs dash to dock. Gnome is unusable to a lot of people without it. Ubuntu is supposed to be user friendly, remember.
Also, improving the look of GDM is a must. It looks fairly ugly by default.
Every day I get more and more comfortable. It hasn't been without frustration, and often I've wanted to give up and go back, but so far I've stuck to it.
Web Browser: Google Chrome
Email client: None since I use gmail and Office 365, and not much will cooperate with O365 except OWA.
Terminal: default preinstalled app
IDE: Not a developer
File manager: default preinstalled app(Nautilus?)
Basic text editor: gedit, or the non-gui version of emacs. I know I know.....
IRC/Messaging: Google voice and Slack web pages, via Google Chrome
PDF Reader: Evince or Google Chrome. Not really because I prefer either, just the first ones I found and they were 'good enough'.
Office Suite: Preinstalled libreoffice has been 'good enough' for me. Also Google Sheets(via Chrome)
Calendar: Don't use one, probably would if O365 integration worked better.
Video Player: Default preinstalled player because it usually works, but VLC occasionally if I have something the built-in won't play.
Music Player: None -- Pandora/Soundcloud/Youtube/DI.FM/Google Play, all web, via Google Chrome.
Photo Viewer: default preinstalled has worked pretty well for me. I think I like it better than the Windows Photo viewer that MS took away from me with 8/10
Screen recording: None. I make heavy use of the preinstalled screenshot utility, though I wish it was a bit more like the windows snipping tool. It's fairly annoying to use it to grab multiple screenshots when you're trying to just select an area, though I like that you can grab a quick succession using the prt-screen and save them all.
Other apps I use often:Steam
Remmina, though I wish it had more features for RDP. Seems sessions are much slower than when using a MS rdp client.
Occasionally Gimp, though it's pretty annoying to use in 16.04 because of the way it creates multiple separate windows.
Email Client: thunderbird
File manager: nemo
Basic Text Editor: gedit, sublime text 3
IRC/Messaging Client: hexchat
Office Suite: libreoffice
Video Player: mpv, vlc, smplayer
Photo Viewer: eog
Screenshot taker: shutter
IDE: Emacs / Sublime Text 3 / Geany
File Manager: Thunar / PCManFM / Caja (Anything but Nautilus they stripped to many features after 2.32)
Basic Text Edtor: Gedit
IRC / Messaging Client: Hexchat / Pidgin
Video Player: VLC / SMPlayer
Music Player: Deadbeef / Audacious / Rhythmbox
Photo Viewer: EOG
Screen Recording: ???
IRC/Messaging Client: Messenger for desktop
PDF Reader: Default on old version
Office Suite: WPS office
Video Player: TOTEM
Music Player: Evince
Music Player: Rhythmbox
Photo Viewer: shotwell
Screen recording: default on old version
Email Client: ???
IDE: VIM + plugins, Visual Studio Code
File manager: 16.0 default
Basic Text Editor: VIM
IRC/Messaging Client: ???
PDF Reader: 16.04 default
Office Suite: LibreOffice, markdown + pandoc -> pdf
Music Player: ???
File manager: Gnome Files
IRC/Messaging Client: Polari
Video Player: Gnome MPV
Music Player: Lollypop
Photo Viewer: Gthumb
Screen recording: Peek
Web Browser: chrome (close source)
Email Client: web gmail/web outlook
Terminal: ubuntu default (gnome terminal?) (I don't like it)
File manager: ubuntu default (gnome file manger?) (I don't like it)
Basic Text Editor: sublime text (close source)
IRC/Messaging Client: slack (close source)
PDF Reader: ubuntu default
Office Suite: libreoffice (hate it!)
Calendar: ubuntu default
Video Player: vlc
Music Player: ubuntu default
Photo Viewer: ubuntu default
Screen recording: shutter
My answer to all of the other questions, though, is "nothing that's suitable for noobs". To this end, please make it easy to clean out the gunk and bring in power user tools.
Basic Text Editor: Leafpad, gedit
Screen recording: OBS Studio
Email Client: dont include one
Terminal: stable one with wayland support
IDE: vs code
File manager: mate's
Basic Text Editor: no gedit for sure
IRC/Messaging Client: dont bother to include one
PDF Reader: smallest and stable one
Office Suite: dont include
Calendar: no good apps are there
Photo Viewer: include only one, no need to photo manager
Screen recording: include the stable
File manager: Nemo
Basic Text Editor: Anything except Gedit. For example Geany is fine.
Messaging Client: Telegram, Pidgin
IRC client: Hexchat
Calendar: Thunderbird's built-in
Music Player: Spotify non-free, VLC
Screen recording: SSR (ppa:maarten-baert/simplescreenrecorder)
System monitor: htop, gnome-system-monitor
I use Kodi for videos and music and sublime text to edit texts, and I don't see any reason to force complex or proprietary software as the defaults.
From what I know, we can't even install to a F2FS partition using the default installer.
Email Client: Thunderbird, mutt
Terminal: Gnome Terminal, Terminator
Basic Text Editor: vim, gVim, gedit
IRC/Messaging Client: Pigin, Hexchat
Calendar: NextCloud web
Photo Viewer: Shotwell I guess
File manager: nautilus
Basic Text Editor: gedit (but actually neovim)
Office Suite: Libreoffice
Calendar: Lightning (thunderbird plugin)
Music Player: Totem/None
Screen recording: I don't use them frequently enough to remember one I like.
Email Client: Thunderbird, Web GMail
IDE: IntelliJ IDEA Community, Eclipse
Basic Text Editor: GEdit
Office Suite: LibreOffice, Google Drive
Calendar: Thunderbird Lightning, Google Calendar
Music Player: Spotify webapp, Spotify client non-free
IRC/Messaging Client: Whatever supports Slack and Discord I guess.
PDF Reader: Current choice is fine.
Video Player: I prefer SMPlayer to VLC for simple playback
Screen recording: Kazam
IRC/Messaging Client: Polari/??
PDF Reader: Evince (gnome-documents?)
Video Player: Totem/VLC
Music Player: rhythmbox (gnome-music?)
Photo Viewer: gnome-photos/eog
Screen recording: ???
IDE: VS Code
IRC/Messaging Client: xchat
Office Suite: Office360 web, LibreOffice
Calendar: Gnome Calendar, Google Calendar web
Video Player: smplayer
Music Player: cmus, Spotify non-free
* Email client
* IRC/Messaging Client
* Office Suite
Only absolute necessities in a default install. I still don't understand why Linux distributions insist on shipping so much stuff by default.
Terminal: Gnome Teminal
PDF Reader: Document Viewer
Photo Viewer: Image Viewer
Music Player: Amarok
IDE: Webstorm (several)
IRC/Messaging Client: pidgin/hexchat
Music Player: Rythmbox
Bonus: htop, KeePass2
Email Client: gmail
IDE: Sublime / VSCode
File manager: terminator
Basic Text Editor: Sublime
IRC/Messaging Client: irssi
PDF Reader: Chromium plugin
Office Suite: Libre office (I'd prefer Microsoft one)
Calendar: Google calendar
Music Player: YouTube :D
Photo Viewer: basic gallery
Screen recording: -
Email Client: unity-mail
Calendar: Gnome Calendar, Google Calendar
Video Player: VLC, YouTube
Photo Viewer: Gnome Image Viewer
Screen recording: None
IDE: vim, emacs, Atom
File manager: Dolphin
Basic Text Editor: kwrite, gedit
Calendar: Lightning Thunderbird Plugin
Music Player: Clementine, cmus
Photo Viewer: Gwenview
IDE: Qt Creator, Eclipse, Geany
File manager: Thunar
Basic Text Editor: Mousepad
IRC/Messaging Client: Riot, Gajim
PDF Reader: Evince, Zathura
Video Player: VLC Media Player, mplayer, mpv
Music Player: DeaDBeeF
Music Player: vlc
Photo Viewer: evince
Screen recording: never use one so I dont really have an opinion
Web Browser: Chrome
Music Player: GTK3 frontend of Audacious
Email Client: None
File manager: fman (non-free)
Email Client: mutt
IDE: jetbrains stuff, vim
File manager: ranger, nautilus
Calendar: cal, webshit
Video Player: mplayer,vlc,totem
Music Player: clementine
Photo Viewer: feh
Email Client: emacs
File manager: emacs
Basic Text Editor: emacs
IRC/Messaging Client: emacs
PDF Reader: emacs + epdftools
Office Suite: n/a
Video Player: n/a
Music Player: emacs
Screen recording: n/a
Email Client: none
Terminal: gnome-terminal, terminator
File manager: DE default
Office Suite: Libre office
Photo Viewer: DE default
Web Browser: Chromium
Terminal: xfce4 terminal
Basic Text Editor: neovim
IRC/Messaging Client: google hangouts web
Calendar: google calendar
Photo Viewer: ristretto
Screen recording: xfce4 Screenshooter
Basic text editor: Geany
Office suite: LO
but allow users to select defaults at install or at any other time
File manager: Gnome default
PDF Reader: Gnome Default
Office Suite: None
Photo Viewer: Gnome default
Screen recording: Gnome Default
File Manager: nemo
IRC/Messaging: Hex-Chat, Empathy
Screen recording: obs
mpv player and SMPlayer
Geeqie image viewer
Caffeine (to turn the screensaver off)
IDE: GNOME builder
would be great to add those to the repos for Ubuntu server / command line:
Email Client: -
File manager: GNOME Files
IRC/Messaging Client: -
Calendar: GNOME Calendar
Music Player: GNOME Music
File manager: anything but default gnome manager
Music player: audacious
Basic Text Editor: vs code
Calendar: Gnome Calenar
Video Player: SMPlayer
Photo Viewer: -
IDE: Sublime text
Web Browser: Chrome, Firefox
Office Suite: google apps
Music Player: Spotify, non-free
Photo Viewer: default
Video Player: Vlc
Screen recording: Obs
Get with a modern Product Management philosophy, and quit begging the community for ideas.
Crossposting to Reddit, Slashdot and HN on the same day smacks of utter desperation.
For video player, definitely VLC.
Email Client: Various web clients
IRC/Messaging Client: Slack, Discord
PDF Reader: Chrome, Evince
Office Suite: Google drive web
Calendar: Google calendar web
Photo Viewer: The default one
Basic Text Editor: gEdit
photo viewer: shotwell
Email Client: Gmail web, Emacs
Terminal: xterm, fish shell, Emacs
File manager: default, Emacs
Basic Text Editor: Emacs
IRC/Messaging Client: Emacs
PDF Reader: whatever that default one is, Emacs
Photo Viewer: whatever the default is
Screen recording: OBS
I'm not joking with that Emacs thing. Please, oh please, ensure Ubuntu has always a recent Emacs version.
Email Client: Mail.app
File manager: Finder.app
Basic Text Editor: NeoVIM
IRC/Messaging Client: Messages.app
PDF Reader: Preview.app
Office Suite: Pages.app/Numbers.app/Keynote.app
Calendar: Fantastical 2.app
Music Player: VOX.app
Photo Viewer: Preview.app
Of course, this is for a real world usable operating system, not ubuntu utopia.. If Linux, Gentoo is nice ;)
IDE: Vim ;)
File manager: pcmanfm
Basic Text Editor: vim/gedit
IRC/Messaging Client: pidgin
PDF Reader: mupdf
Photo Viewer: nomacs
Screen recording: don't know
At the most important: Init System => OpenRC
Anyways, here's my request list:
Web Browser: Firefox, Vivaldi (people keep claiming it's open source, so look into it)
Terminal: GNOME default
(Serious answer is VSCode since it seems to be a nice in-between for a full IDE and a simple text editor)
Calendar: Thunderbird, No preference
Music Player: RhythmBox, Spotify (maybe just a downloader program - don't include the full install out of the box)
Games: Include Steam out of the box?
This list also comes with the usual stuff like dump Systemd, continue working on MESA drivers/networking drivers/drivers in general, etc.
Hope to see some great stuff in 17.10!
Yeah, and the experiment went horrible wrong :(
The last thing the community wanted was a plain Gnome 3 shell for 17.10.
The older Unity was great, the latest Unity and Gnome3 are crap! (ugly as hell (macOS UI clone for the cheap), and worse usability than older Unity and macOS) So you single handled destroyed the default Ubuntu with some weird decisions. And this systemd trainwreck is still on board.
* Web Browser: Chromium (with sane privacy default settings)
* Email client: Gnome Evolution
* File manager: Unity 7 file manager
* Basic Text Editor: GEdit (older version with menu bar, from Ubuntu 14)
* Office Suite: LibreOffice or Callibri
* Calendar: Evolution
Your past experiences don't really matter. My best advise is for you to memorize as many algorithm problems as you can and to make your Resume look like you'd be someone who could easily crack a "technical" interview. They usually look if you've already worked for one of these companies in the past, if you've graduated from a prestigious institution, with an excellent GPA, if you've won a hackathon and things like that. Forget about buzz words, technologies, prior projects and open source stuff. We all do that by default. Unless you're someone like Guido van Rossum, they don't really care.
That doesn't mean a ridiculously over-engineered side project with distributed micro-services, BTW. Most of the top-tier companies don't actually fall for the bullshit that makes up most of the tech industry hype cycle.
It could mean investigating an interesting data-science problem with publicly-available data, building a model with some predictive validity, and publishing your findings & code via blog & GitHub. Or it could mean building a side-project for some local organization of importance to you, but really going the extra mile on user-experience so it's not just a CRUD screen, and you collect data in unobtrusive ways that don't bother the user. Or it could mean working on a hobby programming language and delivering a working compiler.
I too am a developer with 7 years of experience, probably a bit more if I count freelancing during university. I studied at a not-so-great university in the UK where I studied Computer Science, and most of my experience is either in a non-tech startup or digital agencies. In terms of agency strength I currently lead projects for a big UK agency in a satellite office. I'd say I'm a decent developer. Not the greatest in the world, but typically one of the better developers in most places I've worked. I've also got some open-source work behind me, and some user group talks, although primarily to do with content management systems.
Over the past decade I've applied to Google and Microsoft a couple of times, and every time I've been quickly rejected by email. Whether it's for a college internship, grad scheme, as a recent graduate, or after a few years of experience, I've received a rejection email after a week of applying. I've had recruiters from Amazon and Microsoft contact me on LinkedIn in the past, and after sending over my CV I've heard nothing back.
My thoughts match yours, in that I think it's because I don't have the "right" experience. It's probably a mixture of me being a .NET developer (and the stigma that comes with working on Windows), and primarily working with Content Management Systems. It's been a negative at jobs I've applied to in the past, so I can only guess that it's the same for the larger companies. I have a CS degree, and a public repo full of C# implementations of various data structures and algorithms, so I doubt it's to do with a lack of knowledge. Outside of me being put on some kind of top four blacklist, I can only guess it's because neither company wants to hire a .NET dev.
Apologies if my reply isn't that helpful, but I thought I'd wade in as someone with a CS degree who feels that they are in the same position as you.
I didn't plan that. I was trying to get a different job when a relative suggested I apply. But I knew people at the job who had spent years trying to get good enough to qualify.
Get a copy of "What color is my parachute?" and read up on the section concerning informational interviews. See if you can get a few information interviews. The point is a fact finding mission to get some idea of what it really takes to get into the company in comparison to where you currently are.
Do some googling online and start a folder to compile information on your target companies. Try to get some insight into what they are looking for.
Try to find out what the application and interview process is like. Big companies tend to have very formal processes. Insider connections will generally be less useful to you than in small shops like you have been working at.
I would do some basic legwork before asking further questions of this sort. I got a job at a big company and I can't really tell you how to make that happen. I had several years college and I had the math and language skills they wanted. I ended up qualifying for two positions and picking which one I wanted, this after more than a year of getting nowhere in my job search while going through a divorce. But there are people who are talented at job hunting (my sister is one such person) and my impression is they do a lot of research before applying.
I'm a full stacker too, so I sort of know what you're going through.
> but the response has always boiled down to "we don't think you have the relevant experience"
This has been my experience but as a guy one year out of school. And I live in the Seattle area, so you would think that I should have ample opportunities.
In my extremely limited experience, "relevant experience" can literally mean anything in this context. It might be true that they were looking for other technical knowledge. It could also mean that they were looking for another trait and wanted to let you down on a more neutral note. Basically, it's an HR term meant to avoid opening a can of worms on both sides.
>figuring I don't have the strongest resume
You have five years of full stack work. That's an incredibly strong background.
What languages did you write in? Platforms/programs/operating systems? What software patterns did you use?
Since you worked on a very broad area of software development, your resume is fine as long as you fine tune it a bit more to emphasize your knowledge on certain languages and frameworks, as well as the fact that you should have a good idea on how a software project evolves over time.
> Do I work on brushing up my algorithms and data structures knowledge in a lower-level language (and blog about it)?
You could try that. But that still doesn't guarantee that you'll get an interview. You could literally do this for a full year and still not get a code screen because someone will ask you "why did you only study this stuff for a year? where are your projects/work experience/meetup talks/OSS contributions/the holy grail/etc etc etc?!!!"
> Or do I spend time on MOOCs (and blog)?
Since you say you've graduated, I'm assuming you have a formal college degree. A MOOC would be a waste of cash at this point. You have the experience and education already. You don't need another diploma just to satisfy some HR drone.
> Or build a ridiculously over-engineered side project with distributed micro-services just to prove I can do it (and blog)?
Again, this is something that might get you in the door. It might not. Either way, I wouldn't recommend trying to write anything too specific. As the old saying goes, don't put all of your eggs in one basket.
And, once again, even if you're successful in building it, whoever replies to your application could still give you the "we don't think you have the relevant experience" jargon for literally any reason they feel like.
> move to a more opportunities-rich location, networking on the ground?
Only move once you have another job lined up. All those stories we hear of people moving for work reek of Survival Bias. We don't know how much they saved prior, if they had family/friends in the new location that could help them out, if they borrowed money, if they had their parents pay for it, etc. Moving anywhere is a huge time and money cost, so only do it if you have the cash and resources to do it. Reliable housing comes first, networking second.
But, then again, I do not know where you live.
Basically, my big points are
1. Don't do a MOOC if you already have any sort of professional programming experience (especially full stack). You already have the tools and knowledge necessary to learn almost anything related to modern programming on your own.
2. Don't move just to network. Networking won't necessarily get you a job, let alone an interview.
3. Don't read too far into those "I did it, so can you" articles. They're full of Survival Bias.
4. Companies can reject your application for any reason they feel like and get away with it by telling you something purposefully broad like "we don't think you have the relevant experience". It's total BS, but it's next to impossible to challenge it from outside the company.
5. It might be time to consider starting something new if it doesn't already exist in your town. If you know 3-5 people that have good business skills, you might want to consider talking to them.
6. There are a lot of over achievers in tech right now. Looking at them as you are right now can lead to phycological problems. You might want to consider talking to your doctor and/or a psychologist.
If you have any further questions or just want to talk/vent, feel free to give me a buzz at firstname.lastname@example.org.
What I think happens is this: most people simply don't care that much about making contact. Not so much because everything can be found on the Internet, but rather because they are turning into less of a social animal than, maybe, we as a species used to be in the past.
In a way, I would argue that the fact that we can be more independent because BosnianBill on YouTube teaches you how to pick locks without you needing to ever leave the house, means that you feel like you don't need other people to be around in order to get answers or learn some cool skill.
To be completely honest, while I don't have any experience of living in any city that can be considered even remotely big, I have a hunch that, ironically enough, living in a huge city such as NYC is a bit alienating. I said "ironically" because I would guess there are more social happenings than you could partake in even if you could do it as a full-time job.
Ultimately, I think it boils down to trying not to forget that the Internet is valuable, but a good number of people are more valuable. Be it for their knowledge, for their humor or just their kindness. As with everything else, I believe one should find some sort of equilibrium between online resources and human interaction.
Easier said than done, though. The big likes are instant gratification, while maintaining a good friendship is a lot of hard, long term work. And today "long term" is a word we tend to dislike when it comes to getting gratification.
I don't know if any of this makes any sense, as I basically just jotted down my thoughts as I went.
This is actually bad, because we are slowly losing our face-to-face interaction skills and become worse at reading expressions/reactions.
People say that it's no different from the 80's and show a photo of people reading newspapers on a bus, but I've yet to see photos of people reading them on their 1st dates.
And, if someone recommends a book called Code Complete, quietly begin to question some of their life choices.
I can't imagine any situation where you need an NFC chip and don't carry along your smartphone. Ok, there's one: You are swimming in a swimming pool and need to open the locker afterwards.
To those who believe it will never become mainstream - the same could have been said for tattoos and piercings a mere few decades ago. I remember a time when visible tattoos were a sign of a counter culture, not a normal part of life.
Heck, Google Glass was shunned for its camera, but the Snapchat Spectacles are actively embraced only a few years later.
Never understood why people associated "biohack implants" with sticking a magnet or NFC chip in your finger.
From my understanding (as a non-lawyer), trademarks in the US are domain-specific, so someone having a trademark for a Foobar loan company might not prevent you from getting a trademark for software called Foobar, assuming your software has nothing to do with loans or finance and there would be no confusion between the two products.
A lawyer could tell you if you should try to register a trademark for your product under the Foobar name.
Is your product an HR product? If it is and they obtain the trademark registration of that product name for their HR product, they will have every right to prohibit your use in order to avoid unnecessary confusion. If it is only in the application process you can submit information to the USPTO showing that you have been using that name prior to them (the key here is proven prior use). That does not necessarily mean you will be able to prohibit their registration but if you can show prior use of the same name then the USPTO may allow you to continue to use that name, but that is not likely a wise course of action on a new product you hope to grow. You would subject your project to confusion and it does not sound like this is the type of business you would want your customers to think you are affiliated with or worse, you and that company are one in the same.
It would be wise to talk to an aiP attorney but you can do a great deal of online research regarding these types of conflicts. Unfortunately your situation is not that uncommon and the end result will probably be that you will need to change your name if you also have a HR software or a software product.
The best sources are KBs of AntiVirus vendors. The catch though is that malware "names/labels" are not standardized - so each AV vendor names it differently.
Try these to start with: 1. Symantec KB: https://www.symantec.com/security_response/landing/azlisting...2. McAfee listing: https://home.mcafee.com/VirusInfo/?ctst=1
AFAIK, VirusTotal had some way of giving out virus definitions but not sure now... I need to check.
Some legwork is needed before getting the right info - thanks to the proliferation of SEO tactics, letting marketers float to the - without necessarily any solid content in there.
If you get a project out there, people interested in it will start to help out. Gradually, this turns into that person becoming a contributor to a project.
You still need a core team to drive a project.If you want contributors you'll need users.
People have a finite amount of time in a given day.They aren't going to contribute because you want them to.They want to get something out of it. It could be learning something, fixing a bug that affects their day job, an interesting side project for a weekend (some folks pick random projects to contribute to)
Open sourcing something also has different incentives.Many successful projects are either run by foundations or companies with the hopes of attracting talent.
Try to understand what the incentive structure is for people and contributors follow from that.
You still need to do project promotion as well.That's a whole separate topic though.
The link I have posted only covers the mozilla servo project and I can see this concept working with multiple projects/languages/etc.
Of course one would need to heavily moderate the submissions but I think this idea is great. Anyone know if something like this exists ?
The README is so clear and welcoming new contributors, by telling how exactly they can start contributing. In fact that encouraged me to start contributing to opensource. Now I'm doing Google Summer of Code under the same organization.
A) Just start contributing, sure in the knowledge that they aren't missing some piece of background that others would consider obvious.
B) Go off and search for a good book/course to learn about X, where X is a googlable phrase that your contributing.md just told them.
I think it works better to focus on a) making sure to create a welcoming or inviting atmosphere and b) leaving the door open logistically.
It needs to be apparent to other people that new contributors are welcome and it also needs to be apparent to other people where and how they can go ahead and step up to bat. These can be tricky things to pull off. It is much, much easier conceptually to just think "I know! I will actually literally invite people!" (aka ask them to contribute) and this means you may be asking people who have no interest in the project or not ability to effectively contribute or both.
I am still working on solving this piece for my own projects. Trying to be inviting without literally sending out invitations is tricky. But I think that is what works best to make it possible for those who have both interest and ability to get involved on terms that work for them.
Here is the project : https://learn-anything.xyz/
And here is the article we link to : https://learn-anything.github.io/2017/06/15/contributing.htm...
It saves quite a lot of time as we try to cover all the ways in which one can help with the project there.
Too bad I don't have the time to maintain or update such website, nor to actually keep reasonable docs at the pace things are changing.
I had the aspiration to create a truly contributor friendly project. It turned out to be way harder than I expected, at least for a small team like ours.
Typical background: Major in business/finance, or CS/engineering; whichever side you don't do, get some exposure to the other side - teach yourself to code or take an accounting basics class.
Get involved in the local startup ecosystem - volunteer at a demo day or a local tedx event, intern at a startup, something like that. Get to know a lot of people in this world. Maybe write a couple blog posts with insights about some upcoming markets.
Generally, you want to show that you get both tech and business pretty well, and also seem like someone who's eager to work hard to prove themselves and that lots of people seem to know.
You already are "important".
Core engine programming is no joke either, let alone on a commercial engine used by half the industry.
Maybe AirBnb & Netflix?
I'd guess Stripe, Palantir and AirBnB would be up there too.
If you prefer a graphical user interface consider backintime.https://www.howtogeek.com/110138/how-to-back-up-your-linux-s...
Otherwise check out duplicity.https://help.ubuntu.com/community/DuplicityBackupHowto
Duplicity supports a bunch of protocols / target services (SFTP, dropbox, google drive, amazon S3 ...)
Duplicity uses asymmetric encryption (via gnupg)so the backup commands can be run unattended.(Your private key is not required for encryption during backup)
Ranger is an highly customizable file manager that can be controlled by using the keyboard only.
File management (searching, copying, moving, renaming...) takes considerably less time since I switched from windows-explorer / nautilus / nemo to ranger.
I can't imagine going back.
Getting started with ranger:https://github.com/ranger/ranger/wiki/Official-user-guide
its a super useful tool to execute tasks using all cores of your machine. A simple example https://vidanp.wordpress.com/2016/11/04/paralelizando-en-lin...
* RetroArch - for all your emulation needs in one package.
* ripgrep - better and faster than ag (The Silver Searcher).
* mpv - very nice video player, it can also be used together with youtube-dl for streaming from various websites, including youtube, etc.
To site admins: stop marking my comments as dead for no good reasons, my suggestions are valid.
It's a cross-platform messaging client that combines, Whatsapp, Facebook chat, Slack etc. into one application.
Its a wonderful CLI app when you calculate things with units.
Eg:You have: (1000W * 5 hour)/(24V100A)You want: min 125
Or:You have: 10 km * 6L/100km * 1.3 EUR/LYou want: USD* 0.837486
You should try it !
If you're feeling adventurous, you could experiment with different window managers, such as bspwm, awesomewm or i3.
Check out some examples in https://www.reddit.com/r/unixporn/
Here's a good demo of bspwm https://github.com/windelicato/dotfiles/blob/master/why_bspw...
OpenOffice or Libre office; for all your Office needs, it can also output to Microsoft formats.
Screen; for multi terminal windows within one terminal. Also very handy when working remotely.
I like the Clementine music player.
Being able to hop into the command line to process text is neat. You might want to do a toutorial on grep, awk and sed.
Gimp is nice for photo manipulation, I use Inkscape for vector graphics.
Opera is a nice second browser (chrome is a memory hog) it also has built in vpn and Adblock.
Matrix is federated (I suppose XMPP is federated too). You can send an email from Gmail to Yahoo, Outlook to Protonmail, etc.
Once you understand style, either try for style they mostly talk about in that book (classical style), or if you want practical style then Revising Prose or Style: Toward Clarity and Grace are good.
Thinking in Style, Pinker
Revising Prose, Lanham
Good Prose, Kidder
For example: if you spend 48 hours writing 10,000 lines of code, and then I produce same functionality in a normal 16 hours of work, with just 1,000 lines of code. Who is more productive?
So instead of focusing on writing lots of code, focus on solving problems. The less code it takes to solve a problem, the better off you are, because that's less code to maintain.
This attitude (explained in more detail here: https://codewithoutrules.com/2016/08/25/the-01x-programmer/) then leads inevitably to the idea that working long hours isn't actually useful, nor is working at 2AM a good idea. The best way to be productive is to think, and that is easier when you are well rested, and works better if you take breaks and go do something else (https://codewithoutrules.com/2016/11/10/work-life-balance-so...).
These days I'm trying to "stretch out the binge", so it's less extreme ups (and downs), rather a more long-term sustained focus and interest.
I'm in no position to give advice, but part of your solution may be emotional and intellectual engagement with the process of programming, the tasks at hand and the problems to be solved. Also, as a programmer, you might enjoy building such a system as Scrum/XP/etc. that suits your situation best.
It depended on that seemingly random lightning bolt of inspiration combined with almost manic mental energy to work crazy hours to get it done. If you've ever worked through the night, met someone who _expects_ future crunch times (aka. binges), or put off working on something important because you just weren't feeling it right now, then you know what I'm talking about.
The closest analogy I've found is writing. Experienced professional authors most commonly give out the advice to work on it consistently, every day, whether you're feeling it or not. I feel like that heavily applies to programming too. If you care about a project, for work or for your self, you've got to make it part of a routine. Pick your days and time that you're going to work on it, then sit down and work whether you're super excited and have 'flow' or not. I think that after a short amount of time each session, you'll find you are creating the inspiration rather than waiting for it to find you.
Which would you prefer? A programmer that knocks out am untested Italian food stuff thousand line function or a programmer that takes care to structure the code such that it's well tested and factored?
The script optimized the placement of samplers in a building, in order to maximize the probability of detecting airborne pollutants, or to minimize the expected time required to detect. The rewrite cut the runtime down from 2-3 days to sub-hour.
Some of the speedup was intrinsic to the interpreted/compiled divide. However most of the speedup came from the greater control Fortran gave over how data got mapped in memory. This made it easier for the code to be explicit about memory re-use, which was a big help when we were iterating over millions of networks.
Re-using memory was helpful in two ways, I think. First, it avoided wanton creation and destruction of objects. Second, and more importantly, it allowed bootstrapping the work already invested in evaluating network `N` when it came time to evaluate a nearly-identical network `N+1`. Of course, I could have made the same algorithms work in R, but languages like C or Fortran, which put you more in the driver's seat, make it a little easier to think through the machine-level consequences of coding decisions.
That experience actually taught me something interesting about user expectations. When the Fortran version was done, my users were so accustomed to waiting a few days to get their results, that they didn't run their old problems faster. Instead, they greatly expanded the size of the problems they were willing to tackle (the size of the building, the number of uncertain parameters, and the number of samplers to place).
At my current employer's a big part of the codebase is in Perl and the boss is a fan of the language, so we keep using it. The problem is, Perl is pretty much dead, and most of the packages out there on CPAN feel like they've been built 10 years ago. Not to mention, the language itself lacks what I would call essential features like exception handling, classes, etc (which has to be tacked on by using "shims" from CPAN like Moose or Try::Tiny)
At some point I had a particular issue in one of our apps where it would be making tons of DB queries and we need to cache them. In Python land there are plenty of packages that give me transparent caching at the ORM level. In Perl land? Oh yeah this post on a mailing list from 2007 about someone having the same problem, and a bit of untested code that may or may not work.
I gave up on that particular issue and it'll probably never get fixed, but let's just say that have we been using an "alive" language things would've gone much smoother.
Yes, you should write unit tests to cover this in interpreted languages with weak or no types, but this depends on the developer a) doing it, and b) not missing any cases - PRs/code reviews are not a catch-all. Especially in the case of factoring common logic out or some other form of refactoring, a strongly typed language is my best friend.
More recently, we've replaced Python, Ruby, and Java based systems with golang based ones. Not having to lug around a VM and associated other parts (jars, gems, ...) is a huge win. Performance is better across the board, and we've reduced the amount of hardware needed. There's also much better understanding of the code across the whole team.
Unless you have a problem that fits a specific technology really well, my experience is that your time to market will be minimized by using the tools you know best.
This mostly due to the inherent complexity in Spring and the fact that Spring developers are also Spring experts. When the main developer behind the application left, we struggled to add new features or even fix bugs because the team lacked the Spring expertise.
The rest of the business mostly dealt with Scala, so it was almost a no-brainer to go with Play.
The outcome has been very surprising. The application has better performance overall, is better suited for streaming and we have much more expertise in-house to add features and fix bugs.
The re-write was not without pain though. Spring is a well-supported and very rich framework. It probably does a bunch of things that the casual web developer will likely forget.
This has been a big win in terms of the readability of the code, which has in turn made me more aggressive about adding features.
After switching to AngularJs the development time became 20% and it became super easy to maintain. Not to mention programming became super fun again. I've tried react and angular 2 and vue but that just didn't click for me. We're are a small team of two so we don't follow the industry best practices, just whatever works for us and gets the site launched as quickly as possible, so i guess my comment is highly opinionated.
After a few months slogging through an unfamiliar language, the company decided to switch to java. Productivity went up, surprise!
This until I discovered Vue.js which changed my life. This and lodash made me actually like JS and front-end programming.
So this is an example what a framework did not help to improve code but actually made me choose in something else than the language I was using so far (coming from a background in C, then Perl)
Our main concern is concurrency, and for that Go excels. Additionally, post re-write, that code base is easier to follow, easier to extend and maintain, easier to deploy, easier to control lower level aspects, and much, much more performant. It was years ago at this point, but I believe our improvement was something like 120x.
Since then, at work, we've moved to Go as our main language for services. This has provided even more wins as we continue to move legacy Perl/AnyEvent code over. With new rewrites (and new projects), we are taking the opportunity to also redesign systems, enabling our software to scale even further. We have lots more to do and we are hiring :)
I'm actually in the process of writing a book about the key differences between the two frameworks, enabling people to shorten the time it takes to get the hang of Laravel. It'll document the differences and similarities between the two frameworks so that you can use your CodeIgniter knowledge to learn Laravel.
I.e. the difference between routing methods in CodeIgniter vs. Laravel, and how migrations work in one vs the other.
Almost everything to do with migrations still has to be done manually, for the most part. I.e. having to create your own controller (https://stackoverflow.com/questions/9154065/how-do-i-run-cod...) in order to run a migration in CodeIgniter vs the more slick 'php artisan migrate' command in Laravel.
If you want to know more about it, you can add your email here: Book info (it's a google form) https://goo.gl/forms/gCAT33rl1h6JbQsw2
tl;dr: Dont build your app on top of a pile of crap in-house framework.
Unfortunately Ernie didn't work as well as it advertised, had many edge cases, and in the end it was a big bottleneck (it would have been faster to ditch Erlang and use plain Ruby).
In the end we wrote everything in Erlang. It wasn't that hard in the end, and the reason why we went down the Ruby route in the first place was because the platform was over-engineered to be as generic as possible (which wasn't needed), so we didn't actually lose anything.
1 month working with OpenLazslo and PHP it became clear I would not be able to finish in time. I started searching for alternatives and was unable to finish the Rails tutorial - but after 30 minutes I had a basic CRUD app done using Django.
I ditched the RIA thing, rewrote everything in Python/Django, was able to finish that project in time and this stack is paying the rent since then.
It was really worth.
Dynamic tracing all the things has reduced the time to solve bugs by an order of magnitude for us.
I wanted to build a database in a dynamic language. While others have succeed to do so by layering their DB on top RDBMS (like EdgeDB or Datomic) I went lower level and built a datomic like DB with GNU Guile Scheme using wiredtiger (now mongodb storage engine). The reason for that is that Guile doesn't have a Global Interpreter Lock (GIL). Using the same design in Python would simply not be possible. I did not benchmark, but I don't think it's possible for a single thread DB to be faster than multithread DB. In this chance changing language made the project possible.
Usually the use prerequisite situation is "this script processes strings and is getting too big and unwieldy for bash"
Another example: same language, new framework: In a Python web app, we needed to have websockets. But at that time Django had no real websocket support. But there is future proof framework that does: aiohttp! Also one might argue that you can use old django with websocket using another process. But it leads to a more complicated architecture. We want to keep monolith the app as long as possible/sane.
I have done a lot of business/enterprise development (a very hostile space to innovation and working solo or with very small teams), and have done small-to-largeish (from my POV) rewrites in several languages.
- Fox 2.6 to Visual FoxPro. A breaking change in a lot of ways, a total win in the process. Not just because the app was native windows now.
- From Fox to Delphi. Now I discover the beauty of Pascal and improve the app and deployment scenario. Static types is a net win overall. My other love is python, probable code faster on it, but have FAR LESS trouble with strong type systems.
(However take a me some years in note how bad all languages are aside the DBase Family in talk with databases, but other wins distract me from that...)
- Visual Fox to .NET (1.0, 1.1 with both Visual Basic and C#) was a total net loss. A Massive increase in code size, yet the (desktop) apps were way slower than Visual FoxPro, even more than Delphi (but my boss not let me use Delphi).
The web was also terrible in performance and complexity. Sadly back in the day I was unaware of how do web properly and drink all the MS KoolAid on this.
This sink the project and almost the company. Only saved returning back to full FoxPro.
- To Python. I move several things to python, mainly .NET stuff. How boy, how big was the win. The net reduction in code size and the clarity of the code!
Also, (web) apps way faster. Take .NET some years in learn the way here, so...
- To RDBMS (Heck, even sqlite): Still big wins when someone else try to use a nosql/desktop datase (in my space, NOBODY is Facebook. With no exception, step-out of a RDBMS is one of the biggest mistakes)
- To F#: I return to .NET past year (because MS do a lot of the right moves to fix old mistakes!!!) and again a lot of reduction in code size, removing of problematic logic obscured by years of OO-only code. Still not happy about the way lower quality tooling, but enduring it even in Xamarin Mobile because I see the benefit.
I wish I could use swift for Android, so F#/.NET is my only sane option left...
Mainly, move from a lang to another that is not similar, help in see the problems with the old one. Learn new or better ways to solve stuff, and get access to different toolsets and mindsets. This payback when returning back to the old, too, when this ideas are migrated.
My first game server was hand crafted with php/mysql. It did work and was able serve players, however moving to Erlang allowed two order of magnitude more players onto the same box, while the code maintainability increased as well.
tl;dr Don't use SQL for recursive conditional logic.
Probably not a useful example huh?
PHP's dynamic typing combined with Laravel's magical approach makes discoverability hard. A developer can't trace through a request by starting from a controller method and navigating through a codepaths with the support of their IDE. Our application code uses typehints almost exclusively, which helps. But whenever the code you're debugging drops into the framework (or PHP), you'll need to break out your browser and spend time a great deal of time reading documentation to understand how to use the function. For example, certain functions in Laravel accept no arguments in the function signature, but the function body calls PHP methods to dynamically parse function arguments.
We spend a fair amount of time documenting all the framework and language-level magic constructs. If we've dropped the ball on documentation (which happens often) a new developer is at the mercy of coworkers to explain where the framework (or language) magic happens.
On the plus side, Laravel's batteries-included approach significantly speeds our time to MVP.
Scala's category theory approach to functional programming is not easy for new developers to understand at first glance. While most of our code (framework or otherwise) is now easily navigable with an IDE, developers now need to spend time understanding concepts such as for comprehensions, monads and ADTs. However, most functional concepts are understandable without the help of coworkers, which means a new dev can rely on Google to help understand a concept, rather than relying on a coworker.
Once knowledge of syntax has been attained, Scala's strong type system makes development far easier. We can communicate semantics through types and monads (such as Either, Future, Option and domain-specific ADTs), and incorrect code is immediately flagged by the IDE. A new developer making a change to a database schema may now change a database column name, recompile, and be presented with a list of every bit of code they've broken.
Using types to represent the semantics of our domain has been incredibly powerful, and makes potential bugs much easier to spot when reading the code. For example, rather than checking a user's subscription status inside a method, we can require a "SubscribedUser" type in our method signature. With this type in place, a new developer can no longer accidentally call that method with an "UnsubscribedUser".
Perhaps most importantly, the long term benefits of Scala's strong type system are incredibly valuable. We're a software agency, so our large projects experience development in phases. It may be 6-12 months before our team circles back to a large project for major development. In that time, we've forgotten all the quirks and gotchas of that particular framework and language, and Scala's strong static type system significantly decreases regressions during the new development effort.
In summary, new developers have a similar learning curve for each language/framework. And in the end, Scala's long term maintainability is more valuable than Laravel's speed to MVP.
Ruby/Rails isnt bad as such, but its slow and promotes a very convoluted & interdependent monolith by default.
Very happy with the change.
Suggestion, if you are the programmer find a marketing partner and you'll do great.
I hate to use this as an example but look at the kim kardashian app. It make lots of money yet there's nothing really special other that the marketing power she brings along to the app. Do you think she programmed it or even that she had the initial idea? The reality is that some smart programing firm offered her some cash plus a big chunk of the apps revenue in exchange for the marketing. Brilliant!
And I personally would suggest the iOS app store first, because people tend to spend more money there.
Finally think about splitting up your $5k goal across several apps which solve niche problems. They're easier - in my opionion - to market, maybe just make $500-$800 monthly but that adds up.
Best of luck for your journey.
Edit: My wife is the cofounder of our life and family together, and I have yet to find a business opportunity that could ever compete with how she makes me feel.
Maintain perspective. Life is short. Maximize for happiness.
Like everything else, this kind of relationship has good and bad points.
The best thing was the degree of understanding. I've never been in a relationship with someone with such an incredibly innate understanding of my career. It was truly magical.
But, then there was the bad. Until you've been in this situation, you can't understand how deep the conflict of interest can get. Sometimes, co-founders need to have frank conversations about performance. When you're in a romantic relationship, frank feedback can create deep wounds. Then, in our case, once the magazine died, our relationship died too. The double whammy of a failed startup and failed relationship was unlike any other breakup I've ever experienced.
All that said, I'd do it again in a second. The relationship was so good while it lasted and Stacey is still one of my closest friends.
First, make sure you have clear founder agreements, focusing on the case where one of the founders leaves (this usually implies vesting of some form). If you enter a relationship and then break up, the odds of one of you leaving at some point is increased.
Second, if you have investors, a board, and/or other key stockholders, you should consider disclosing a serious relationship (should it get to that point, for some definition of "serious").
Some will say, "it's none of their business!" but it kind of is. Most companies of any size have a policy on workplace relationships, and the minimum is usually that they must be disclosed. Even if you're too small for an HR department, the issues around potential conflicts are the same.
You never, ever, ever want to be in a situation where you date, break up, one departs, the company is compromised, and an irate investor later says, "you never told me!".
With that said, while I can't speak from experience, if you are equal founders I say go for it. If one of you is in a position of authority over the other it becomes much more tricky.
The only down side I can see is if you two break up and it gets messy. In which case, having a good board of directors that can be neutral and think about what is best for the company is important.
Edit: a little bit from personal experience though. If your startup hits a rough place and you need to sacrifice things like pay, it can be helpful when your significant other has a stable job. And if you both work for the same startup that is not an option. Money is what breaks up most relationships and if there is one thing startups are good at, it is creating money problems.
Yes, it rarely ends well.
If you end up in a long term relationship or even get married, then the boundaries between work and home get blurred, and on top of that, if you have vested interests in the success of your work (which is your company) things could easily get out of control - clashing egos, 1 partner feeling the other is not doing enough at work, or at home, or both.
I've seen 2 of my close friends end up like that. Doesn't mean that's the norm, but things get ugly over a few years...
That doesn't mean you should not pursue the romantic relationship, just saying be cautious and don't over-commit too soon. Wait for the "honeymoon period" of the relationship (if you do end up moving forward) to pass and see how thinks look. In "normal" relationships, this period is usually anywhere from 6 months to a year or two...
To be quite honest, I think it's difficult to avoid getting attracted to your co-founder. You'll be going a lot of places together. I've shared the same hotel & bedroom with my co-founder for months. And you tend to share all secrets together, very much like a married couple, if not more so.
This may be a little old-fashioned, but I'd take a serious look at getting married before seriously dating. You already know each other well and trust each other, and it appropriately signals the seriousness with which you're approaching things.
So some things to consider in no particular order:
Shame about being lonely drives people to feel more lonely. Don't let that trap engulf you.
Take steps to explore your psyche and see if the roots of your loneliness are based in issues like self-esteem. Don't take this lightly. It's easy to dismiss, but if those forces are present in your life, they'll be very difficult to see clearly.
Are you religious? Go to church (or sangha or whatever). Got an addiction? Go to a 12 step group meeting. Like board games? Find folks that like to play and hang out with them. Seek out opportunities to interact with people preferably in the flesh, but online can work too.
Get a therapist. Or a spiritual guide. Whatever, as long as they understand how the human psyche works, and that you're there to work. If that suits you.
Don't underestimate loneliness. There's a reason why our most feared punishment is isolating people. Because it's terrible.
Learn to relish solitude. Don't let an idea about solitude trick you into thinking that being alone is good.
Humans are social animals. Not being part of the herd represents an existential threat to us. This is a major cause of suffering in our species.
Humans are solitary animals. Being part of the herd can be a major stressor for us. This is a major cause of suffering in our species.
Best of luck.
Trekking has become a major part of my life in the recent years. It allowed me to discover myself in more details, how my mind works. I also briefly met people along the way, and slowly realised that their mind worked the same kind of way. They were travelling alone too, for most of them. Yet we were instantly friends. Didn't keep in touch, because that's life, but it's alright.
Try this: take a weekend for yourself, away from civilisation. Take a tent, go get lost in the woods (well, not actually lost), spend the night. Forget about your phone, your emails. Just tell one trustworthy person where you go, roughly, just in case.
Take that time look at the trees, the insects, the clouds, the Earth. Maybe you'll see a fox, maybe fireflies, maybe you'll only hear birds.
And if you're not willing to spend a night just yet, then wake up early, and be there at sunrise. Have a breakfast, have a lunch. Walk, or not, whatever works for you, but just take your time.
Then stop for a moment. Anchor yourself to the ground. Why not walk barefoot? Imagine your feet are rooted deep down into the earth, all the way down to the burning core. Feel the wind on your skin, hear the birds in the distance, see the trees shiver in the wind, enjoy the silence.
I'm afraid I haven't yet found a cure for loneliness myself. But this above, my friend, is what makes my life worth living!
Good luck, you'll see better days :)
What loneliness tells you is that you haven't gotten the sort of stimuli you'd expect out of having a position in a social group. Experiencing it sucks because this is the sort of thing that is extraordinarily dangerous.
So, how do you get "I am part of a larger group that accepts me" signals? Go and do stuff. If you're not naturally inclined to stay on top of things, get organized about it. Texting/IMing your friends/acquaintances is a good choice. Volunteering somewhere could also help. Regular hobbies are great - I do social dancing. Swipe on a few Tinder profiles and see if you can strike up a conversation. It really doesn't matter what you do, so long as you use your planning faculties and organization to compensate for your lack of socialization drive.
That aside, you've received some excellent advice in this thread. I won't reiterate any of it. Instead, I just want to say that you're very brave to come here and make a post like that.
I wish you the absolute best. Feel free to email me if I can be of any help.
1) Toastmasters. This is like alcoholics anonymous for people that are addicted to shyness. And very likely there will be some people there that are even more quiet and introverted than you are.
2) Social dancing. I'm guessing you are male, in which case you will be in high demand. Even if you are overweight & ugly as sin, if you can keep a beat then the girls are gonna want some. If you are as intelligent as you sound then this is also a big plus: the smart people end up being the best dancers. And it's not about talking or being interesting, it's about the mechanics of space and time (physics and music). I would recommend tango: this is where all the real nerds end up.
Getting over the fear is not going to happen on its own. Instead I would suggest finding something where you are more excited than afraid.
Also, I love dogs (probably more than most people). They're loyal, do not judge (unless you have a treat), and live in the moment - what more could one ask for?:) Animals can provide a lot of companionship.
I went through hell with a series of offensively noisy and aggressively inconsiderate neighbors. So, I avoided home. And I didn't invite people over. And, as the months wore into years, my home took on aspects of neglect.
I was "trapped" at first by some circumstances I didn't deal with well. Then more thoroughly by the self-reinforcing nature of this decline.
Basically, if I'm not comfortable at home, I do not have people over. I lose a big part of my control over my interactions as well as my ability to reciprocate.
Further, since these circumstances stress me so, I don't feel well about myself -- including my inability to more effectively deal with the situation -- and this also causes me to engage less.
And as this is self-reinforcing, so is the attendant, resultant loneliness.
When I do get away from it, I enjoy interacting with people and seem to do reasonably well at it. Well, the "cool" people are still too self-absorbed to accept me. Fuck them -- a lesson too long in learning.
I'm not saying I have "the answer." But my intuition, of many years now, has not changed: I need to get the hell out of here and to somewhere I'm simply more happy and at peace with myself.
Otherwise, half my mind is always at least subconsciously worrying about the monster behind the door. Like neighbors with sub-woofers who would rattle my windows for hours on end.
- Try Meetup.com. Endless options there. Don't be afraid to be awkward. Read about social skills and practice them.
- Be a better friend and initiate contact with people you know - don't wait for them.
- Also make a list of all people/friends you know local or non-local. Refer to that list and keep in touch. This is harder than it looks but is important. I was surprised how many folks I had a good connection with but did a sucky job of keeping in touch with.
- Attend workshops, classes etc where you have the chance to meet others in a like minded setting. Especially overnight ones. There are always group events happening in urban environments. Seek them out.
- This is going to sound dumb - but try to interact with people via social networks. It teaches you a bit of initiative and also leads to in person quality time in some cases. But be careful that you don't get swallowed by it.
- Have something interesting at your home - like board games, gaming , good list of movies to watch. That way you can feel comfortable inviting people over to hang out at your place and have a good time. It feels nice to say "I have a really cool board game - why don't you guys come over and let's have some fun, along with some beer/drinks"
- Be interesting - if you are passionate about 1 or more interesting topics outside work, and talk about it with folks you meet, they will remember you. It could be AI, self-improvement, meditation/mindfulness, running, fitness, music and so on. But learn to talk about your passion intelligently. It leaves a mark.
You are not looking to make a connection.
The goal is to get bored with what ails you. After telling about why you feel bad 20 times to 20 different people your brain gets bored with this narrative. Then it moves on to more interesting things and you stop feeling bad.
This strategy helped me get over post rejection loneliness in few short months.
Remember, loneliness is not being alone. It's feeling bad about it.
Bonus: I also look and feel great now thanks to working out.
The de-facto approach is drinking. Drinking is a great way to meet people but it is often skewed toward young to middle aged people without family so can get old/tired/irritating/self-destructive. The good thing is it's easily available all the time and there's a ton of venues, so if you don't like one just browse for another.
As others have said there is no substitute for social groups... there are many options here. One good one is dancing, there are quite a few cool social dance groups in many cities now, swing/salsa/tango/etc, and in general talent is firmly not required! The younger me would have said it's not my thing, but now that I'm in my mid 30s (and married with kid) I think it's an awesome scene and regret never getting in to it! Seriously, check this stuff out.
There are also a few good team water sports with big social elements .. things like sailing, rowing, outrigging, dragon boating. Sailing is good because you can do the social side but also get some self time, while being part of a wider community. If you want more team stuff, you can sail larger vessels where it's total commitment. The other options (paddling style) are pretty full on social and may be a bit much, depending on your personality.
You can join a low level (or high level if you're competitive) dodgeball team, or soccer, or basically whatever strikes your fancy, then meet some new friends. It also gets you out of the house once a week or more with some new faces.
But you're right; we're social animals and will never get away with complete solitude. It sounds that you do enjoy your own company, but need the occasional 'break' from yourself. You mentioned that you have a handful of friends? Focus on them, even though you may feel that it's tedious.
I know that "going out and meet new people" is cliche but it's so true that it's a great first step. Try meetup.com to find out events that you might be interested in. Don't just go for tech, try a new crazy thing, oh and hiking ;) Sunning your face and relaxing your eyes over vast expanses can do wonders to the soul, I find.
I believe human relationships and social interaction are the key to happiness and the lack of it is a major source of suffering. However, at the same time, we also have our individual characteristics that define us. Balancing both our need to be an individual and our need to be social relates to being in harmony with life.
I try to help as many people as I can feel less lonely so I'm happy to have a chat if you'd like.
This is the first few part of the friendship formula. Proximity and frequency.
with a sociable pet you get company at home; and for instance with a dog there are usually local dog parks where fellow owners _eventually_ meet eachother and while not becoming friends always can be a social event with your peers.
I've been working out at a gym for many years (semi-social, makes easy conversations possible with like minded people, though you have to worry about people with ear-buds whom don't want to be disturbed), karate (very social, good strong local friend group now ... go to dinner with them, go to events with them, all help each other).
I had in the past done various meetups (many years ago), to get conversations going.
I recommend getting a nice friendly dog; labrador breeds are great. I have a Chesapeake Bay retriever mix as as a rescue ... wonderful companion, and excellent conversation starter when I walk him. Very friendly, rarely barks ... he's a rescue, and had a terrible life before we adopted him.
The dog part is tremendously helpful BTW. When my wife and daughter are out, I can sit on my couch reading a book, and he'll hop up next to me for comfort. I'll talk to him, and happily, most of the time he doesn't answer ... though he knows enough words (treat, cheese, bone, walk, trot, outside, play), that I'm rarely really ever alone.
I recently joined a hiking group on Meetup.com and it looks promising. Being out in nature with other people who enjoy being out in nature, being active, seems like a good way to meet new people in a more relaxed setting (that is, not a loud bar or work event). Then the onus will be on me to stay in touch with at least a couple of them, but even if I don't there will always be the next hike where we could catch up.
I find it still really hard to make male friends as a male. I've even gotten numbers from other guys who I've met at a bar and had a blast with all night, but it's still just a little bit weird to call the guy afterwards. In order to make male friends, I think it takes a shared interest in something and repetition. Maybe through a meetup or a weekly rec-league dodgeball game or something that you wouldn't hate dragging yourself to.
Making that first step _is_ tough though. Good thing is that it's usually the toughest.
2. Bluegrass jam, or any casual music circle thing. The people you meet are also people you might spend a weekend camping with because you end up at music festivals together. Gotta learn an instrument, though. And one one will occasionally run into the gotta be better than everyone else and make sure they know it asshole, but rarely. Usually a pretty mellow bunch, and the good ones let their playing, not their mouth, speak for their skills.
3. Some kind of sport, like running or cycling, or even beach volleyball I guess. Caution: could be assholes aplenty if you get in the wrong group. I prefer runners, as theyre generally a more laid back group. Try trail running if you like it so laid back youll smell pot smoke before a race.
Those are the three things I regularly participate in where me might meet people (including a romantic partner), and generally nice people at that. Extrapolate to your own tastes and interests.
People speak about thoughts, emotions and actions as if they knew what they are or how they are gestated. "I AM mad!", "Because I THOUGHT that ...", "I do FEEL alone", etc.
They think they are behind their thoughts, emotions and actions, that they ARE what they think, feel and do, and nothing could be further from the truth and it is the easiest thing in the world to evaluate it because they couldn't stop thinking for a minute even if their life depended on it.
And this is the gravest error we commit, to believe we are in conscious control and therefore solving problems seems abstract or even impossible to us. As they've said in older times "if you know not that you are asleep, you cannot wake."
See once for yourself the reality of how unconscious awareness leads to chains of thoughts running completely on their own without the involvement of will or participation, leading to mechanical emotions and mechanical action.
See this happening and something is evoked, the capacity to act against yourself or the inner urge that drives you to behave in a certain way, the unconscious machine that merely reacts to impressions outside and inside. It becomes possible to act free of constraints where otherwise you would merely re-act according to how you think or feel or are accustomed to.
Philosophy called it the paradox of free will. From there on problems actually can be solved because inner change is possible and feasible. If you understand that the outside is merely the reflection of your inner state, everything can change radically.
There's an interesting lesson in there as well about pair dancing, in that you can have wildly different experiences with each partner, similar to relationships.
The way I am learning to overcome my loneliness and social anxiety issues, is be forcing myself to go out with people when I am invited, and to exercise (perhaps to the extreme) with cycling, climbing, swimming, running, etc.
Remember however that loneliness is not something that anyone else can solve other then yourself. You may need to change your situation, and surround yourself with people similar to yourself, and understanding kind people if possible.
As others have said loneliness is a problem of situation, and lack of contact with others. Your absolutely doing the right thing by reaching out and talking about it however!
We all help each other, which can be handy to bounce tech problems off too
In my case, I have stopped thinking about it. Admittedly, some days it's not so easy, but the next day it's gone. What can I say. Some people like parties, others like strange things, and we like to be alone.
I am an introvert, and meetups are a good way for me to control the circumstances and volume of socializing in my life.
You could look for groups to participate in that involve some established interest of you, such as a book club. You could also put the word out that you are looking to widen your social circle and find some means to signal to existing acquaintances that you would appreciate it if they kept you in mind or pointed you in the right direction. Just letting people know you are open to introductions can help foster them. Introverts are often basically giving off "Go away!" signals without really being aware of it.
You have to put yourself out there and do the work. That means make friends or even friends of friends. Find a hobby? Join a coed team sport (softball?)... bowling league? meet ups? Take a cooking class... anything with other people and in some subject you would enjoy.
You can accept the emotion and recognize it for what it is as a passive observer. Take things one day at a time.
I find it hard too.
What I do right now is:1. Suck it up. This kind of works quite well for me, since I've also done meditation retreats in which you'll be forced to learn to deal with it.2. If you don't have much time to go outside, then make it more of a point to call people.3. Find something to do. Changing your attention to something else in which you can get engrossed in is definitely a good thing :)
Some people are personable and extroverted and are surrounded by people that want to be around them. For the rest of us it doesn't come naturally. I would suggest just becoming comfortable with it.
Just kidding. One thing I've learned to avoid depression: keep yourself occupied. While you're finding your solution it'll help you stop getting any worse.
The easiest way to develop friendships or make connections with people is to show up regularly to a scheduled event. Even if you are the shyest, most social awkward person in the world, if you keep showing up to a regular event you will help combat loneliness.
My first suggestion is physical activities. If you're not already doing something active start there. Doing something physical will wear you out and help keep your mind from focusing on being alone. It is also a great way to meet new people and have something to talk about. Join a gym, a running club, start going to a rock-climbing gym, join a hiking Meetup group, find someone at work or a neighbor that likes to bike and go for rides, join a sports club or team, play airsoft/paintball, go geocaching, etc. There is something physical for everyone of all body types and abilities. Lets say you like lifting weights. Start going to the gym 3 times a week. Maybe after a few weeks you see a free yoga class and are interested, take it. Say hi to someone. Later on that person may need a spotter, or have a question. Boom, you've made a (sort of) friend.
Once you have a physical activity built into your routine, find one or two non-work (and non-video game!) hobbies that you enjoy. Chess, tabletop games, fishing, walking around the city, going to museums, fixing cars/machines, restoring furniture, painting, drawing, old electronic restoration, going to bookstores, -- literally anything you could see yourself spending 1 or 2 hours of free time on per day or every few days. Start doing this regularly. Don't worry if it's alone. Being occupied with something you like will make your mind too busy too care. PLUS once you need to drum up small talk with a friend/co-worker/whoever you will have something to talk about.
Don't be afraid of "looking lonely". If you enjoy going to bars/coffee shops/dinner/whatever once in a while, go to one! If you can invite someone great, if not, go anyway. You'd be surprised how many people do things alone. If you have the gift of gab, chat them up. Maybe you won't have a new friend, but it will be some interaction. Sometimes all you need is to physically be present around people to help cure the loneliness.
Also, and this one was the biggest change that affected me, say yes to things! If you are lucky enough to get invited to do stuff (by family, coworkers, anyone), say yes. Even if you can only show up or do the activity for 30 mins, go. Saying yes has a snowball effect, the more you say yes the more you will be invited. If you absolutely need to say no, have no interest, etc, offer a counter-invite to a separate activity and then follow up. Also, invite people to do things. Even if it sounds boring/lame/mundane. Have errands after work? Invite someone. People are more willing to do boring stuff then you would think.
You mentioned "fear" in context of reflecting on your situation but it is possible that it is some sort of "fear" that is keeping you from extending your social wings.
For me that means meeting people via activities. Ive additionally found Im happier when Im a bit active so a lot of the specific examples lean that way but the general principle is the same.
Structured activities where the whole group is 20 people or less I can almost always handle especially if the activity itself is solo and the group socialization part can be dropped into and out of easily. My favorite activities like this are target shooting or archery: cant handle people for a bit? Go shoot targets no one will disturb you. Feel like interacting? take a break and go to the water cooler ask for a tip on your form, compliment someones grouping etc and a conversation naturally starts up. But as soon as you are getting overstimulated its easy to go I should really go practice see you in a few rounds and drop out of the conversation.
Classes where we have to partner up so Im interacting with a person or several people within the class, but one on one, with a known end time, work really really well for me. On days I can handle more interaction the door to chat a little during class and usually there is some conversation that happens just after. On days I dont feel up to socializing there isnt an obligation though. And because the interaction is structured around a skill I dont ever have to stress out about carrying a conversation. For me boxing worked well, as did dance classes (which after I had done for a while so I felt comfortable and less like I was going to step on my partners feet led to social dancing). Language learning classes and meet ups were tougher but still worked well.
The final thing I did took some work but Its really paid off in terms of expanding the people I know: I actively tried to turn myself into a social information hub. I have become a person who knows what is going on in my city in any given week. What are the beer festivals? What community events? What operas or plays in town? What fun runs are happening? What concerts are coming up? I dont go to 95% of the things I know about but it means I can immediately make myself valuable to a new acquaintance by going Hey you expressed an interest XYZ did you know $eventRelatedToActivity is happening? Seems like something you might be interested in which firstly shows them I listened to them which everyone likes and makes them like you more and secondly tells them Im a good person to maintain contact with because I can point them to things they enjoy.