Starting to slowly pull all my sites under a simple traefik + docker-compose deployment scheme on a new VPS instance. So far it has been relatively simple and pain free.
traefik interests me, I have always reached for nginx at first but am doing a similar server move and looking at docker-compose + nginx/traefik in order to make future migrations a bit easier (40+ domains, 50+ subdomains)
I’m wondering what Joel’s interest is in this? He has always been a great marketer of his own products but this a standard and not a product. Is this his “retirement” gig after making a gigaton of money from selling Trello (and FogBugz)?
It’s seems to be created by hash.ai, which he’s affiliated with. I’d assume they are interested in getting more functionality (i.e. widgets) for document authors/users for free.
I decided to play it safe and I went with Ubuntu 20.04, which was the latest release at the time. Historically I preferred Arch Linux and Fedora, but I wanted to minimize the setup efforts.
Over the years, I have settled on a similar approach.
For personal use I have a Void Linux installed, and I love it. It is minimal and tailored to my needs.
For every company that I work for, I am installing a fresh system. It used to be Ubuntu, but in my opinion Ubuntu degraded, and now I am sticking to Linux Mint. I am replacing mate with i3 and copy all dotfiles. I want a minimal effort system that just works.
I use Ubuntu with Regolith (https://regolith-linux.org/) for both work and personal project use. My work laptop is a Dell XPS 13 that came with Ubuntu pre-installed and my personal box is a System76 Merkat which also came with Ubuntu pre-installed. In both cases it “just works” (so far). I don’t have time anymore to debug OS issues.
I was not aware of regolith, it looks great! I always wanted to use whatever comes by default configured, because I use mostly terminal. The only must-have is i3 and so far this required me to configure a lot after switching session from gnome/mate/xfce to i3.
I’ve had to do close to zero configuration for regolith other than changing the default gap between tiles to fit my personal taste. It has a nice shortcut dialog (super-shift-?) for seldom used keybindings. After using it for a couple of years it is hard having to occasionally use an overlapping window system when I used other machines.
Interestingly, while I also want to forget about OS, my path was exactly the opposite:
I started with Ubuntu, and there things were always broken for unknown reasons.
Switching to Arch was better: now things were broken, but because I had broken them. Finally, I switched to NixOS, and, after spending considerable time learning the thing, I’ve reached the state where everything works, I can’t break it, because the root is read only, and I can always rollback after update by choosing a different boot entry. For the past 4 years or so, I have been essentially running the same system which outlived a handful of machines. This is very different from all my previous experiences, where I had to re-install stuff to unbreak things couple of times a year.
If you work for a lot of different companies and need to rebuild new environments with the same configs, why not use NixOS or Guix? It seems these are better suited to rebuilding from working stable states and sharing declarative configuration setups.
That is a good question.
I never considered it or thought about it. A new setup happens once or twice a year and takes less than 2 hours. I am not sure if investing in any of those would pay back.
True. If traveling through their learning curves for your build systems and CI isn’t seen as side benefit, learning curve may not be worth the investment.
Working on a desktop (Windows & Mac) Go + React app for secure file and password storage. The Go app runs in the taskbar and when clicked it opens a browser tab pointing at the React app hosted by the Go app. The React app lets you create and edit plaintext, richtext, binary and password “virtual files” that are stored by the Go app on your local machine in a single encrypted file (using scrypt + aes-256-gcm). I plan on building out a Chrome & Firefox extensions that talk to the Go app for password retrieval and storage.
My goal is to have a beta ready by the start of the new year. I’m going to give it away for free (in binary form, not open source except for the core file encryption library which will be open source) to test if a market is there for a paid self-hosted team-based version that would run on a remote server.
Sounds to me like “Rick” piled a huge amount of architectural and technical debt upon himself and probably was too afraid/proud to own up it. One guy that both owns the architecture and is coding furiously in isolation sounds like a circus performer spinning plates on the end of sticks - in the end its not going to end well for anyone.
Rick was a symptom of the larger disease. It boils down to not enough people saying “No, this cannot be delivered by the date you fantasize about” (including Rick, Rick’s manager, and the guy who wrote the original article).
Sure, maybe there was some delay and issues due to custom libs and tools and other things (raise your hand if you’ve never eschewed an existing library that solves your problem), but the real problem is that too much work got through the dam, and Rick was not in a position to stop the flood that landed on him.
The fix wasn’t letting Rick go, the fix was saying “We’re only delivering this realistic set of work by this realistic date!”.
I think the core reason was Rick probably got lucky in that early architecture decisions made adding features super quick which made him look like a rockstar. As more features were shoehorned in and it turned into a big ball of mud he started slowing down and stopped communicating as he was too afraid/proud/depressed to let people know his grand vision was breaking down. I’m sure we’ve all been there.
he was too afraid/proud/depressed to let people know his grand vision was breaking down
That’s what a burnout looks like, compounded by working in an environment where people that are no longer useful are kicked out of the company and out of medical insurance with all the blame placed firmly on their heads so they can no longer find another plantation to work on.
These days going directly to the hotel’s site is usually the same price or cheaper, especially if you’re booking way in advance. I’ve just been through a big booking spree for my trip through South America and I was amazed - even non-chain boutique hotels are sometimes 30% under the price of the aggregators.
My usual process now is momondo -> google the hotel’s site.
I’m working on a soon to be beta Electron app (http://www.serverwrangler.com/) and I have to say all the recent hate on Electron has me a little concerned. However I think the tradeoff between cross-platform development speed and runtime “bloat” makes the choice of Electron worth it. With Electron I can deliver a lot more features in a much shorter amount of time than I could writing a native app, much less a native app for each platform.
As for the comparison to Flash its more appropriate to compare it to Abobe AIR. I wrote quite a few AIR apps in the past (mostly educational research games used in unreliable network-connected elementary schools) and I still think the AIR platform is a better experience since it uses a single runtime and allows for installs via the web. I expect someone will try to reinvent the AIR single runtime for Electron using some sort of process isolation between running apps.
Can you tell something more about your project? The screenshot makes it look like a terminal multiplexer (ala tmux) as an electron app (which would be way overkill in my eyes). I assume there are some specifics that made you choose Electron for this?
Apart from performance I share concerns posted by qbit in this comment. I also had the chance to look under the hood of Chrome (while porting Dart), it’s a very large and complex code base. With each electron app you ship you are bundling up a full copy of that with no easy ways to distribute security patches for a code base that gets regularly hunted down for security issues (see how frequently Chrome releases sec. patches). On top of that it’s not running on OpenBSD, and knowing what it takes to port that I doubt it ever will without upstream efforts.
That’s just a very early screenshot with the ssh app running in each pane – really just a placeholder for now until I go into beta.
The idea for the app is that its a desktop gui with multiple tabs & panes that lets you connect (ssh), transfer (sftp), monitor (graphical realtime dashboard combining a lot of /proc files like cpuinfo, uptime, loadavg, meminfo, net/dev, and disk stats from df), manage processes (graphical process manager), provision (aiming to support all major VPS apis) and deploy (both a built in Ansible IDE and graphical runner). Sort of like a desktop cpanel on steriods without the security concern of installing any software on your servers.
I have a lot of ideas for “applets” within the app but I’m probably just going to go into beta with the ssh and dashboard applet enabled.
The reason I chose Electron is mostly for cross platform support and because the stack I’m using (TypeScript+React) enables me to build graphical apps much faster than if I used platform native controls. I’ve built a lot of native apps over the years on a lot of platforms and I really appreciate the development experience that Electron provides.
Taking the risk of sounding like a spammer I’ll just re-use my comment from above.
The idea for the app is that its a desktop gui with multiple tabs & panes that lets you connect (ssh), transfer (sftp), monitor (graphical realtime dashboard combining a lot of /proc files like cpuinfo, uptime, loadavg, meminfo, net/dev, and disk stats from df), manage processes (graphical process manager), provision (aiming to support all major VPS apis) and deploy (both a built in Ansible IDE and graphical runner). Sort of like a desktop cpanel on steriods without the security concern of installing any software on your servers.
The 3 hosts limit is to allow for hobbysts and students to use the full program for free. Once I have provisioning and development working well in the app I’d like it to become the app you recommend to people when they say they need to setup a server on Linode, DO, etc. The app will come with a lot prebaked Ansible playbooks to securely setup a server with an initial frontend like puphpet.com that then lets you drop down in an Ansible IDE for tweaking and later editing.
That page is just a placeholder and I’ve really only mentioned it on this site. I plan on adding to the site soon once I get out of “friends and family” alpha stage. Thanks for the feedback!
I like this idea of using a standardized set of verbs at the start of a commit message.
My colleague pointed me to the Lean conventions, where they also include a scope. I find that redundant, because that information should be easy to deduce from the diff or just the paths in the diff.
I like the idea of adding the <type> at the beginning, particularly because of the benefits when bisecting. Pedantic me is slightly annoyed that feat (feature) is abbreviated but refactor isn’t - I guess it’s because people add features more often than they refactor?
the Lean conventions […] include a scope. I find that redundant, because that information should be easy to deduce from the diff or just the paths in the diff.
Their definition ‘module or directory name’ is a bit restrictive, but I want to interpret their ‘scope’ as meaning ‘concern’, which should after all correlate strongly with modules/directories. A commit log that starts every commit subject with a single-word description of the concern is pretty damn awesome to read.
Here is the commit log of a major project that uses this style: Mercurial’s history. Nice, no?
I picked this practice up from another developer a few years ago and used it for a while. Its nice when you use git’s short log format to see if it is a [BUGFIX] or [CHANGE] or [FEATURE] but I found that the number of tags grow and morph over time into an unmaintainable mess when you bring in other developers. I think if you keep the list maintainable it can work well.
Heh, the “makes noise” reminded me of the odd squeak the hard disk in my first PC emitted, particularly when it was being defragged. Ah, my Seagate ST-225 - I remember it fondly :)
I had a 10MB hard drive “card” for my Tandy 1000SX that often sounded like furniture being dragged across a floor. It also made the most satistiying “chunk!” sound when you ran the park command.
The idea behind Simulscript is to run a set of commands in a script in lockstep across a set of target hosts for both configuration management and adhoc tasks. I plan on having first class support for remote command execution via bash over ssh for Unixy hosts and via WinRM for window’s hosts. I’m building it in TypeScript.
Around 1990 while I was in college a friend of mine and I met with a guy that ran a very small credit union in town that was looking to replace the IBM mechanical accounting machine they were still using to keep records (something like this - but it looked a little more modern like it was built in the 1960s). We ended up not working together with him but it was neat to see that machine in action.
One nice thing not mentioned with the export HISTCONTROL=ignoreboth:erasedups setting is that along with ignoring duplicates (ignoreboth is shorthand for ignoredups and ignorespace) anything you type on the command line with at least one leading space will not be saved in your bash history - this is useful when you have to enter sensitive information like passwords as an option to a command.
I’ve been running a Dell XPS 15 9550 laptop with the 4K display option for about a year. Windows 10 works well for me (I’ve been using Windows since 2.1 so I may have Stockholm Syndrome).
The barebones version will be a single page app with an explorer tree on the left, a search bar on top and the main workspace for viewing code. Each symbol in the code viewer, when clicked, opens a search result under the line it on which defaults to the current file and can be expanded to any part of the tree with a breadcrumb path interface. The search bar would show results for the search in the main workspace.
The beta will be “demo mode” only meaning I will pick a bunch of popular git repos and the system will only run against them. If it gets traction I’ll open it up to user defined public and private git repos using the same pricing model as GitHub - free for public, pay for private. Beyond that, I have lots of other ideas for business models to sustain development and lots of ideas of where to go after version 0.1 - mostly around it customizing its UI or search behavior based on the project type and also how to annotate and publish explorations of code.
I actually built a Windows app very much like it in 1996 that generated static html files but never released it (I called it “HyperCross” because in 1996 “Hyper” was cool) and a few years ago I built an online version called sherlockcode.com but its interface was too kludgy. I’m hoping the 3rd time is the charm or maybe I’m just proving the definition of insanity.
Starting to slowly pull all my sites under a simple traefik + docker-compose deployment scheme on a new VPS instance. So far it has been relatively simple and pain free.
traefik interests me, I have always reached for nginx at first but am doing a similar server move and looking at docker-compose + nginx/traefik in order to make future migrations a bit easier (40+ domains, 50+ subdomains)
The integration with docker labels makes bringing up a new site pretty much automagic.
I can’t find the blog post I used as a jumping off point but the traefik site has a basic example here:
https://doc.traefik.io/traefik/user-guides/docker-compose/basic-example/
It is pretty easy to add middleware on top of that for letsencrypt, removing www, etc.
I’m wondering what Joel’s interest is in this? He has always been a great marketer of his own products but this a standard and not a product. Is this his “retirement” gig after making a gigaton of money from selling Trello (and FogBugz)?
It’s seems to be created by hash.ai, which he’s affiliated with. I’d assume they are interested in getting more functionality (i.e. widgets) for document authors/users for free.
Over the years, I have settled on a similar approach. For personal use I have a Void Linux installed, and I love it. It is minimal and tailored to my needs.
For every company that I work for, I am installing a fresh system. It used to be Ubuntu, but in my opinion Ubuntu degraded, and now I am sticking to Linux Mint. I am replacing mate with i3 and copy all dotfiles. I want a minimal effort system that just works.
I use Ubuntu with Regolith (https://regolith-linux.org/) for both work and personal project use. My work laptop is a Dell XPS 13 that came with Ubuntu pre-installed and my personal box is a System76 Merkat which also came with Ubuntu pre-installed. In both cases it “just works” (so far). I don’t have time anymore to debug OS issues.
I was not aware of regolith, it looks great! I always wanted to use whatever comes by default configured, because I use mostly terminal. The only must-have is i3 and so far this required me to configure a lot after switching session from gnome/mate/xfce to i3.
I’ve had to do close to zero configuration for regolith other than changing the default gap between tiles to fit my personal taste. It has a nice shortcut dialog (super-shift-?) for seldom used keybindings. After using it for a couple of years it is hard having to occasionally use an overlapping window system when I used other machines.
Interestingly, while I also want to forget about OS, my path was exactly the opposite:
I started with Ubuntu, and there things were always broken for unknown reasons. Switching to Arch was better: now things were broken, but because I had broken them. Finally, I switched to NixOS, and, after spending considerable time learning the thing, I’ve reached the state where everything works, I can’t break it, because the root is read only, and I can always rollback after update by choosing a different boot entry. For the past 4 years or so, I have been essentially running the same system which outlived a handful of machines. This is very different from all my previous experiences, where I had to re-install stuff to unbreak things couple of times a year.
For work I still use Void - just works.
If you work for a lot of different companies and need to rebuild new environments with the same configs, why not use NixOS or Guix? It seems these are better suited to rebuilding from working stable states and sharing declarative configuration setups.
That is a good question. I never considered it or thought about it. A new setup happens once or twice a year and takes less than 2 hours. I am not sure if investing in any of those would pay back.
True. If traveling through their learning curves for your build systems and CI isn’t seen as side benefit, learning curve may not be worth the investment.
Working on a desktop (Windows & Mac) Go + React app for secure file and password storage. The Go app runs in the taskbar and when clicked it opens a browser tab pointing at the React app hosted by the Go app. The React app lets you create and edit plaintext, richtext, binary and password “virtual files” that are stored by the Go app on your local machine in a single encrypted file (using scrypt + aes-256-gcm). I plan on building out a Chrome & Firefox extensions that talk to the Go app for password retrieval and storage.
My goal is to have a beta ready by the start of the new year. I’m going to give it away for free (in binary form, not open source except for the core file encryption library which will be open source) to test if a market is there for a paid self-hosted team-based version that would run on a remote server.
Sounds to me like “Rick” piled a huge amount of architectural and technical debt upon himself and probably was too afraid/proud to own up it. One guy that both owns the architecture and is coding furiously in isolation sounds like a circus performer spinning plates on the end of sticks - in the end its not going to end well for anyone.
Rick was a symptom of the larger disease. It boils down to not enough people saying “No, this cannot be delivered by the date you fantasize about” (including Rick, Rick’s manager, and the guy who wrote the original article).
Sure, maybe there was some delay and issues due to custom libs and tools and other things (raise your hand if you’ve never eschewed an existing library that solves your problem), but the real problem is that too much work got through the dam, and Rick was not in a position to stop the flood that landed on him.
The fix wasn’t letting Rick go, the fix was saying “We’re only delivering this realistic set of work by this realistic date!”.
I think the core reason was Rick probably got lucky in that early architecture decisions made adding features super quick which made him look like a rockstar. As more features were shoehorned in and it turned into a big ball of mud he started slowing down and stopped communicating as he was too afraid/proud/depressed to let people know his grand vision was breaking down. I’m sure we’ve all been there.
That’s what a burnout looks like, compounded by working in an environment where people that are no longer useful are kicked out of the company and out of medical insurance with all the blame placed firmly on their heads so they can no longer find another plantation to work on.
Are there any decent alternatives?
I just use Google (which has full integration with these sites), hotel tonight, or the hotel’s website/phone line (they’ll usually price match).
These days going directly to the hotel’s site is usually the same price or cheaper, especially if you’re booking way in advance. I’ve just been through a big booking spree for my trip through South America and I was amazed - even non-chain boutique hotels are sometimes 30% under the price of the aggregators.
My usual process now is momondo -> google the hotel’s site.
If you’re traveling to/within Asia, Agoda is the best option.
hotels.com maybe, but I think they use similar techniques.
trivago seems ok?
They are the same company, just different domains: http://www.expediainc.com/expedia-brands/
Never knew that, very interesting.
I’m working on a soon to be beta Electron app (http://www.serverwrangler.com/) and I have to say all the recent hate on Electron has me a little concerned. However I think the tradeoff between cross-platform development speed and runtime “bloat” makes the choice of Electron worth it. With Electron I can deliver a lot more features in a much shorter amount of time than I could writing a native app, much less a native app for each platform.
As for the comparison to Flash its more appropriate to compare it to Abobe AIR. I wrote quite a few AIR apps in the past (mostly educational research games used in unreliable network-connected elementary schools) and I still think the AIR platform is a better experience since it uses a single runtime and allows for installs via the web. I expect someone will try to reinvent the AIR single runtime for Electron using some sort of process isolation between running apps.
Can you tell something more about your project? The screenshot makes it look like a terminal multiplexer (ala tmux) as an electron app (which would be way overkill in my eyes). I assume there are some specifics that made you choose Electron for this?
Apart from performance I share concerns posted by qbit in this comment. I also had the chance to look under the hood of Chrome (while porting Dart), it’s a very large and complex code base. With each electron app you ship you are bundling up a full copy of that with no easy ways to distribute security patches for a code base that gets regularly hunted down for security issues (see how frequently Chrome releases sec. patches). On top of that it’s not running on OpenBSD, and knowing what it takes to port that I doubt it ever will without upstream efforts.
That’s just a very early screenshot with the ssh app running in each pane – really just a placeholder for now until I go into beta.
The idea for the app is that its a desktop gui with multiple tabs & panes that lets you connect (ssh), transfer (sftp), monitor (graphical realtime dashboard combining a lot of /proc files like cpuinfo, uptime, loadavg, meminfo, net/dev, and disk stats from df), manage processes (graphical process manager), provision (aiming to support all major VPS apis) and deploy (both a built in Ansible IDE and graphical runner). Sort of like a desktop cpanel on steriods without the security concern of installing any software on your servers.
I have a lot of ideas for “applets” within the app but I’m probably just going to go into beta with the ssh and dashboard applet enabled.
The reason I chose Electron is mostly for cross platform support and because the stack I’m using (TypeScript+React) enables me to build graphical apps much faster than if I used platform native controls. I’ve built a lot of native apps over the years on a lot of platforms and I really appreciate the development experience that Electron provides.
What is your application going to deliver that ConEmu or ITerm2 + tmux don’t? The 3 hosts limit, in particular, seems kinda strange.
Taking the risk of sounding like a spammer I’ll just re-use my comment from above.
The 3 hosts limit is to allow for hobbysts and students to use the full program for free. Once I have provisioning and development working well in the app I’d like it to become the app you recommend to people when they say they need to setup a server on Linode, DO, etc. The app will come with a lot prebaked Ansible playbooks to securely setup a server with an initial frontend like puphpet.com that then lets you drop down in an Ansible IDE for tweaking and later editing.
Ok, that makes more sense. That actually sounds kinda cool. You should mention those things on your site, instead of just showing the SSH shells.
That page is just a placeholder and I’ve really only mentioned it on this site. I plan on adding to the site soon once I get out of “friends and family” alpha stage. Thanks for the feedback!
Working on getting my first private beta release ready for my Electron-based remote Linux server admin tool (http://www.serverwrangler.com/).
Interesting. I subscribed even though I managed all my servers via ssh cli
I like this idea of using a standardized set of verbs at the start of a commit message.
My colleague pointed me to the Lean conventions, where they also include a scope. I find that redundant, because that information should be easy to deduce from the diff or just the paths in the diff.
I like the idea of adding the
<type>
at the beginning, particularly because of the benefits when bisecting. Pedantic me is slightly annoyed thatfeat
(feature) is abbreviated butrefactor
isn’t - I guess it’s because people add features more often than they refactor?Their definition ‘module or directory name’ is a bit restrictive, but I want to interpret their ‘scope’ as meaning ‘concern’, which should after all correlate strongly with modules/directories. A commit log that starts every commit subject with a single-word description of the concern is pretty damn awesome to read.
Here is the commit log of a major project that uses this style: Mercurial’s history. Nice, no?
I agree that a concern tag like “py3” is useful. It is definitely not a verb.
I picked this practice up from another developer a few years ago and used it for a while. Its nice when you use git’s short log format to see if it is a [BUGFIX] or [CHANGE] or [FEATURE] but I found that the number of tags grow and morph over time into an unmaintainable mess when you bring in other developers. I think if you keep the list maintainable it can work well.
Heh, the “makes noise” reminded me of the odd squeak the hard disk in my first PC emitted, particularly when it was being defragged. Ah, my Seagate ST-225 - I remember it fondly :)
I had a 10MB hard drive “card” for my Tandy 1000SX that often sounded like furniture being dragged across a floor. It also made the most satistiying “chunk!” sound when you ran the
park
command.Haha! I remember having to park the heads - mine probably made a very similar sound to yours when I parked them. Those were the days :)
Fleshing out the runtime for Simulscript, a new language I’m working on (https://github.com/simulscript/simulscript)
The idea behind Simulscript is to run a set of commands in a script in lockstep across a set of target hosts for both configuration management and adhoc tasks. I plan on having first class support for remote command execution via bash over ssh for Unixy hosts and via WinRM for window’s hosts. I’m building it in TypeScript.
Around 1990 while I was in college a friend of mine and I met with a guy that ran a very small credit union in town that was looking to replace the IBM mechanical accounting machine they were still using to keep records (something like this - but it looked a little more modern like it was built in the 1960s). We ended up not working together with him but it was neat to see that machine in action.
One nice thing not mentioned with the
export HISTCONTROL=ignoreboth:erasedups
setting is that along with ignoring duplicates (ignoreboth
is shorthand forignoredups
andignorespace
) anything you type on the command line with at least one leading space will not be saved in your bash history - this is useful when you have to enter sensitive information like passwords as an option to a command.I’ve been running a Dell XPS 15 9550 laptop with the 4K display option for about a year. Windows 10 works well for me (I’ve been using Windows since 2.1 so I may have Stockholm Syndrome).
Contract work on Monday and Tuesday and then off to a conference Wednesday to Saturday (Double Your Freelancing Conference in Norfolk, VA, USA).
I put up a landing page for a project I’ve been noodling on off-and-on for close to 20 years: http://www.browsethesource.com/
I plan to work on it this fall and release a beta.
What’s this gonna be, like Google Grok?
The barebones version will be a single page app with an explorer tree on the left, a search bar on top and the main workspace for viewing code. Each symbol in the code viewer, when clicked, opens a search result under the line it on which defaults to the current file and can be expanded to any part of the tree with a breadcrumb path interface. The search bar would show results for the search in the main workspace.
The beta will be “demo mode” only meaning I will pick a bunch of popular git repos and the system will only run against them. If it gets traction I’ll open it up to user defined public and private git repos using the same pricing model as GitHub - free for public, pay for private. Beyond that, I have lots of other ideas for business models to sustain development and lots of ideas of where to go after version 0.1 - mostly around it customizing its UI or search behavior based on the project type and also how to annotate and publish explorations of code.
I actually built a Windows app very much like it in 1996 that generated static html files but never released it (I called it “HyperCross” because in 1996 “Hyper” was cool) and a few years ago I built an online version called sherlockcode.com but its interface was too kludgy. I’m hoping the 3rd time is the charm or maybe I’m just proving the definition of insanity.