
Software Sessions
Practical conversations about software development.
Latest episodes

Jan 15, 2020 • 1h 34min
Bringing GeoCities Back with Kyle Drake
Kyle is the creator of Neocities a free web hosting site that encourages people to build creative personal websites in the spirit of GeoCities. He's currently working on restorativland where people interested in the history of the web can discover websites originally hosted at places like GeoCities and Myspace Music.Kyle DrakePersonal Site@kyledrakeProjectsNeocitiesrestorativlandOther LinksYahoo! Geocities - WikipediaWhat is BGP?What is Anycast?Vultr (Neocities hosting provider)Timestamps[00:00:50] What GeoCities was[00:06:45] Why the old web failed[00:15:06] Reasons to create Neocities[00:21:04] Fighting phishing, spam, and DMCA takedowns[00:27:17] Purchasing an IPv4 address block and building an Anycast CDN[00:43:28] Why create your own CDN? (Takedown requests come directly to you, reduced chances of hosting provider shutting you down)[00:51:09] The costs of running a CDN ($130 a month)[01:07:11] Restorativland (Curating and archiving old internet communities)[01:11:53] The staying power of HTML vs modern apps (You can still open sites from the 90s)[01:14:21] Categorizing old webpages and the problems with current recommendation algorithmsMusic in this episode is VHS s k y l i n e by Crystal Cola.

Jan 1, 2020 • 60min
Rebuilding Fathom Analytics on Serverless Infrastructure with Jack Ellis
Jack Ellis
Personal Site@JackEllis
Fathom Analytics
Fathom Analytics (SAAS version, Affiliate link with $10 discount)Fathom Lite (Open-source, original Golang version)We rebuilt Fathom Analytics from the ground up and moved to Laravel VaporHow we built a GDPR compliant website analytics platform without using cookies
Laravel
Laravel (PHP web framework)Laravel Vapor (Serverless provisioning and deployment tool)
Hosting Providers
Digital Ocean (Host for Open-source version)Heroku (Host for 1st rewrite)AWS (Host for 2nd rewrite)
AWS Services Used
ElastiCache (Redis)Elastic Load Balancing (Handles web requests and triggers Lambda functions)Relational Database Service (MySQL)Simple Queue Service (Message Queue)Lambda (Run functions without managing a server)
Other Links
Things you should never do (Post Jack mentions on never rewriting software)
Timestamps
[00:00:58] What's Fathom Analytics and how is it different from Google Analytics?[00:03:35] When was the project started?[00:06:00] Limiting what we know about our users[00:08:11] Tracking unique page views without cookies[00:11:50] The original Open Source Golang version of Fathom[00:14:06] The case for rewriting Fathom[00:17:46] The process of rewriting Fathom[00:20:49] Migrating from individual SQLite instances to multitenant MySQL[00:24:10] Working with DNS Caching, running the old and new application simultaneously while migrating[00:26:40] Moving from Digital Ocean, to Heroku, to AWS (using Laravel Vapor)[00:34:07] What's Laravel Vapor? (Provisioning and deployment tool for AWS serverless offerings)[00:37:06] Comparing how Fathom used Heroku vs AWS (Heroku Redis -> ElasticCache + SQS, Web/Worker Dynos -> SQS + Lambda functions)[00:40:25] Moving from Heroku Web/Worker dynos to Lambda functions[00:42:25] Using Elastic Load Balancer instead of API Gateway[00:44:01] Tracking load, downtime, maintaining availability[00:51:22] Walkthrough of what happens when a user visits a site running Fathom[00:52:50] Dealing with the AWS lambda cold start problem[00:54:04] Why serverless was a good fit and when to use it
Theme music is 12:30 AM by Crystal Cola.

Dec 19, 2019 • 54min
Creating Static Sites in Rust with Vincent Prouillet
Vincent is the creator of Zola (Formerly Gutenburg), a Static Site Generator built with Rust and Tera, a Jinja2-like template engine.If you create a site with Zola, Vincent would appreciate you adding your site to the EXAMPLES file in the repository.You can also take a look at the source for this website which is currently built with Zola.Vincent ProuilletPersonal Site@20100ProuilletZolaZola WebsiteZola ForumTools/Crates used by Zolapulldown-cmark (Markdown)syntec (Syntax highlighting using Sublime Text definitions)rayon (Parallel computation)heaptrack (Memory Profiler)Static Site HostsGithub PagesNetlifyCrates for Web ApplicationsjsonwebtokenBcryptValidatorCompiled Template EnginesaskamamaudhorrowshowRuntime Template EnginesTera (Jinja2-like HTML template engine)ramhornsrust-mustacheStatic Site GeneratorsHugoJekyllPelicanOther linksForestry (WYSIWYG CMS for Static Sites)Keyword Arguments RFCkickstart (Scaffolding tool)Timestamps [00:00:19] What's a static site generator? [00:03:12] How easy is it to build and edit a site? [00:07:18] Why create a new static site generator? [00:11:55] The Tera template engine and Vincent's experience building it [00:17:13] Creating filters and tests to use with Tera [00:23:49] What's a taxonomy? [00:25:08] Mapping content to URLs [00:30:13] The experience of being an open source maintainer [00:33:17] Rust crates and features used by Zola [00:36:17] How the Rust ecosystem ensured fast performance [00:39:55] Is Rust ready for web applications? [00:42:45] What applications are best suited to Rust now? [00:46:10] Issues or things you wish existed in Rust? [00:50:28] Helping out with Zola

Dec 7, 2019 • 47min
Load Balancing and HAProxy with Daniel Corbett
Daniel is the Director of Product at HAProxy Technologies.This episode originally aired on Software Engineering Radio.Theme music is 12:30 AM by Crystal Cola.LinksHAProxy Community EditionHAProxy Technologies Blog@danielcorbett_KeepalivedLinux Virtual ServerNginxEnvoyTimestamps and Transcript are coming soon.

Nov 21, 2019 • 41min
Choosing the Right Job with Cassidy Williams
Cassidy is a developer and instructor at React Training and the Director of Outreach at cKeys, a Seattle based organization that promotes learning electronics through mechanical keyboards. She previously worked at Amazon, CodePen, L4 Digital, Clarifai, and Venmo. However, she's probably best known for promoting diversity in tech, creating cool mechanical keyboards, and making memes.CassidyPersonal Website@cassidooCurrent WorkReact TrainingcKeysKeyboardsFollow your dreams (literally): How I designed and launched the Official Scrabble KeyboardAstrolokeys (Collaboration with Amy Wibowo)Notes AppBearResources for new conference speakers@CallbackWomenYou've got this!Theme music is 12:30 AM by Crystal Cola.Timestamps[00:36] Organizing and completing side projects[05:08] Choosing and quitting jobs[09:03] Joining React Training[12:31] Why Amazon was a poor fit and figuring out what's important[17:46] Leaving a company with a smooth transition[20:38] Sharing knowledge with your team[22:39] Working at an agency and asking the right questions[29:56] Teaching and learning React[38:29] How to start teaching and conference speaking

Nov 6, 2019 • 1h 30min
Building Scalable Systems Safely in Ruby with Samuel Williams
Samuel is a member of the Ruby core team. He's working on making it safer and easier to write scalable applications in Ruby.Conference Talks:Fibers are the Right SolutionThe Journey to One MillionPosts:Asynchronous RubyFibers Are the Right SolutionEarly Hints and HTTP/2 Push with Falcon2019 Ruby Association GrantSource with comments on why the Global VM Lock existsRuby gems:AsyncFalconContact:@ioquatixSamuel's websiteTimestamps:0:51 - What's concurrency? What's parallelism?5:49 - Piping commands between Unix processes provides easy parallelism6:58 - Some types of applications abstract out threads/processes,9:27 - Many Ruby gems have thread safety issues10:44 - The CRuby Global VM Lock hides thread safety issues11:24 - The problems with threads and shared mutable state13:58 - Examples of mutexes causing problems in Ruby gems.19:09 - What a deadlock is and how it causes problems19:51 - Running separate processes to get parallelism and using an external database to communicate21:01 - Lightweight process model used by Go and Erlang vs threads in Ruby23:50 - Why async was created24:38 - What is Celluloid? (Actor based concurrency for Ruby)26:29 - Problems with shared global state in Celluloid27:12 - Lifecycle management problems (getting and cleaning up objects)28:19 - Maintaining Celluloid IO, issues with the library29:43 - What's async?32:00 - What's an event loop?35:20 - How tasks execute in an event loop37:29 - How IO tasks are scheduled with IO.select39:41 - The importance of predictable and sequential code41:48 - Comparing async library to async/await45:23 - What node got right with its worker model47:10 - How async/await works48:35 - Fibers as an alternative to callbacks51:10 - How async uses fibers, minimizes need to change code56:19 - Libraries don't have to know they're using async1:04:55 - Reasons for the CRuby Global VM Lock1:07:13 - Guilds as a solution1:09:14 - Sharing state across threads1:11:33 - Limitations of Ruby GC at 10-20K connections1:12:00 - Sharing state across processes1:13:12 - Handling CPU bound tasks with threads and processes1:17:42 - Which dependencies are messing with state? (Check memory allocations, sockets closed)1:25:00 - Async in production1:27:17 - Wrap up

Oct 24, 2019 • 1h 9min
How the Ruby Runtime Works with Aaron Patterson
Aaron is on both the ruby and rails core teams. He's best known for making puns, teaching others, and his contributions to the internals of ruby. Lately he's been focusing on a compacting garbage collector for ruby.This episode originally aired on Software Engineering Radio.Timestamps:00:40 - What Aaron likes about Ruby04:43 - Interpreted vs Compiled07:00 - Why the ruby interpreter is written in C11:00 - Other good languages to write virtual machines?15:20 - Moving from an Interpreter (MRI) to Virtual Machine (YARV)18:50 - Why there's no manual compilation step in Ruby23:28 - Why compile to bytecode instead of directly to machine code?26:34 - Stack based vs Register based VM28:00 - Differences between Core and Standard Library29:46 - Do you program more in ruby or C as a member of the ruby/rails core teams?30:30 - The Global Interpreter Lock (GIL / GVL)37:40 - Concurrency options in Ruby45:55 - Just in Time Compilation49:29 - Evolution of Garbage Collection in Ruby53:40 - Compacting Garbage Collection61:40 - Building a Compacting Garbage Collector without breaking C Extensions65:20 - Ruby's future, resources for learningLinks:Blog@tenderloveRuby Under a Microscope

Oct 10, 2019 • 58min
Pod Hunt and Side Projects with Mubashar Iqbal
Mubs is an amazingly prolific creator. He's built 85 side projects which are all listed on his website and was Product Hunt's Maker of the Year in 2016. His output is inspiring and he offers great advice on how to approach building side projects of your own.Mubashar IqbalPersonal Site@mubashariqbalProjectsProjectsPod HuntHacker News DayWill Robots Take My Job?Pod Hunt StackLaravelLaravel ForgeTailwind CSSVueJSMySQLTimestamps01:14 - What's Pod Hunt?03:42 - How are people using Pod Hunt?08:42 - Why Pod Hunt isn't a native app yet11:25 - How long to build the prototype?15:50 - Pod Hunt's Stack16:55 - Why Pod Hunt isn't a Single Page Application22:18 - No CDN yet23:24 - MySQL as the datastore24:24 - Laravel Forge for hosting28:13 - What's Hacker News Day?34:06 - Choose a side project that solves your own problem40:43 - The difference between projects for fun vs money50:20 - Will Robots Take My Job?

Sep 27, 2019 • 1h 2min
How to Teach Programming with Felienne
Felienne is an associate professor at Leiden University who brings a unique perspective on programming education backed by scientific research. She also runs the Programming Education Research Lab (PERL) in order to study the best ways to teach programming.Keynote at Strange LoopHow to Teach Programming (and other things?)Related Research PapersHow is Programming Taught at Code ClubsThe Effect of Reading Code Aloud on Comprehension: An Empirical Study with School StudentsCode PhonologyWhy Minimal Guidance During Instruction Does Not WorkCognitive Architecture and Instructional Design: 20 Years LaterPapers by Brianna MorrisonFelienneBlogTwitterPublicationsSoftware Engineering Radio PodcastBonusSt. Louis City MuseumTimestamps00:56 - Spreadsheets as programming04:57 - When do you build software vs use what's already there?10:14 - Direct instruction vs independent learning20:28 - How should you start teaching kids?24:39 - Is teaching kids different than older students?30:15 - Using rote memorization and saying code out loud35:15 - What is the role of Computer Science education?40:42 - Teaching IDEs, Git, Debugging, and Code Review45:43 - Problems with teaching Open Source49:12 - Incorporating live coding into university lectures56:18 - Podcasting and conference speaking

Sep 16, 2019 • 1h 12min
How HTTP Works with Julia Evans
Julia Evans is best known for her zines and blog posts that break down technical topics in a friendly way. She has written educational material on everything from Linux system calls to working with managers.She joins us to talk about what she learned while writing her latest zine: HTTP: Learn your browser's language.Timestamps:0:50 - Why write a zine about HTTP?1:21 - What's a header that could break your site?2:50 - What does HTTP look like?5:58 - What headers are most important?8:39 - Response Codes12:26 - Authentication14:57 - Cookies18:37 - Using browser development tools19:46 - Caching and CDNs25:46 - Referrer Header and Hotlinking images27:34 - Resuming file downloads 30:00 - URLs32:11 - Why webpages show different languages34:34 - Same Origin Policy / CORS43:42 - Compression / GZIP45:58 - Intermediate Programming Education49:35 - Picking topics for blogs and zines57:10 - Picking an audience to write to59:54 - Types of educational material (zines, books)64:03 - Why Julia likes the zine format65:53 - Working on education full timeLinks:HTTP: Learn your browser's languageJulia's blogJulia's twitterWizard ZinesMozilla Developer Networknetcat