Monica Lent's Website
https://monicalent.com/
Recent content on Monica Lent's Website
Hugo -- gohugo.io
en-us
© Monica Lent 2020
-
How My Paid Community Made $5K in Its First Week
https://monicalent.com/paid-community-launch/
Wed, 25 Nov 2020 11:05:05 +0200
https://monicalent.com/paid-community-launch/
Who’s got two thumbs and shipped her first of 12 startups in 12 months on schedule? That’s right, this girl.
In its first week, the Blogging for Devs Community reached $5K in revenue through a combination of lifetime deals, subscriptions, and my first ever Bitcoin transaction (thanks, Nico!).
A profitable first week isn’t what makes this a success in my book.
I’m thrilled at all the cool members who decided to join.
-
Let's go! The 12 Startups in 12 Months Challenge Starts Now
https://monicalent.com/12x-startup/
Fri, 09 Oct 2020 11:05:05 +0200
https://monicalent.com/12x-startup/
What would you do if I gave you $1 million today on the condition that you invest it entirely in the stock market?
First off, you’d probably find someone who knows way more about investing and get some professional advice.
But in lieu of that, you’d divide your money among a variety of bets:
Stable companies with a history of profitability, growth-stage companies with a high tolerance for risk, and maybe a few companies you just personally believe have potential.
-
How (and why) you should tag subscribers to your tech blog
https://monicalent.com/blog/2020/05/04/tag-and-segment-convertkit-hugo-gatsby/
Mon, 04 May 2020 10:39:01 +0200
https://monicalent.com/blog/2020/05/04/tag-and-segment-convertkit-hugo-gatsby/
Let’s be real: most developers decide what to blog about on a whim.
Our blogs cover tons of topics, and there’s a good chance that the only person interested in ALL of them is, well, us.
That’s just one reason it’s handy to tag and segment subscribers to your email list.
Basically this means assigning tags to people based on what blog post made them decide to subscribe.
You can use tags and segments to:
-
How to update a pull request from a fork with Git
https://monicalent.com/blog/2020/05/03/update-pull-request-from-fork-git/
Sun, 03 May 2020 15:26:24 +0200
https://monicalent.com/blog/2020/05/03/update-pull-request-from-fork-git/
If you maintain an open-source project, there’s a good chance the pull requests you receive need a little bit of work before they’re ready to merge.
Here’s a quick step-by-step guide for how to modify commits on a pull request when it’s coming from a fork of your repo.
In this guide, we’ll assume the following:
Your repo: github.com/your-username/your-repo-name Your contributor: their-username Their PR’s branch: bugfix-branch Step 1. Add their fork as a remote You can name the rew remote whatever you want to (in the example below it’s called “anything”, but I’ve been using the contributor’s username in practice):
-
My first npm package: A Gatsby theme for knowledge bases
https://monicalent.com/blog/2020/04/28/gatsby-theme-help-center/
Tue, 28 Apr 2020 11:45:36 +0200
https://monicalent.com/blog/2020/04/28/gatsby-theme-help-center/
After dragging myself out of what I’m dubbing the quarantine slump (namely, playing 100+ hours of Animal Crossing, re-watching Children of Men, and concluding that I’m probably not inside a simulation), I finally published @mlent/gatsby-theme-help-center.
It’s the first time I’ve published my own npm package, not connected to work!
Well, it’s kind of connected to work because I built this theme because I needed it for my own SaaS product. But you know what I mean.
-
7 Software Developer Resume Tips to Help You Stand Out
https://monicalent.com/blog/2020/04/21/software-developer-resume-tips/
Tue, 21 Apr 2020 11:00:41 +0200
https://monicalent.com/blog/2020/04/21/software-developer-resume-tips/
I’ve read thousands of resumes and CVs during my 3+ years as a hiring manager at a high-growth tech startup.
It’s the same at many companies:
Most applications land in the bin at the stage where your resume or CV is all the company knows about you.
The reason for this is more or less mathematical: It’s simply impossible to speak to every single applicant. The time of hiring managers, tech recruiters, and everyone involved in any given hiring process is finite.
-
7 Absolute Truths I Unlearned as Junior Developer
https://monicalent.com/blog/2019/06/03/absolute-truths-unlearned-as-junior-developer/
Mon, 03 Jun 2019 16:58:41 +0200
https://monicalent.com/blog/2019/06/03/absolute-truths-unlearned-as-junior-developer/
Next year, I’ll be entering my 10th year of being formally employed to write code. Ten years! And besides actual employment, for nearly 2/3 of my life, I’ve been building things on the web. I can barely remember a time in my life where I didn’t know HTML, which is kind of weird when you think about it. Some kids learn to play an instrument or dance ballet, but instead I was creating magical worlds with code in my childhood bedroom.
-
The Best Management Books Developers Should Read, Too
https://monicalent.com/blog/2019/02/26/best-tech-management-books/
Tue, 26 Feb 2019 21:44:06 +0100
https://monicalent.com/blog/2019/02/26/best-tech-management-books/
I’ve grown a lot over the last year at my job. Things are never really the same for long, and I’ve had a ton of different challenges to tackle – both on the technical side, but in a growing proportion on the side of people management and technical leadership, too.
So I wanted to share some of the books I’ve loved over the last year, which I would recommend even to developers who aren’t currently managing people or projects.
-
Responsive Images With Nginx on Ubuntu
https://monicalent.com/blog/2019/01/06/responsive-images-with-nginx/
Sun, 06 Jan 2019 10:22:42 +0100
https://monicalent.com/blog/2019/01/06/responsive-images-with-nginx/
I started looking into this topic because, as you’ve probably heard, Google changed its pagespeed insights tool (and search ranking algorithm) to focus on mobile-first. I’ve got an image-heavy blog that does pretty well in Google, but my pagespeed score was somewhere between 75 and 80. One of Google’s biggest complaints to me were that my images were not resized properly.
The only problem is I have hundreds of images on that blog, and there was no way on earth I was going to actually create mobile-friendly versions of every single image.
-
8 Excellent Technical Talks That'll Change How You Think
https://monicalent.com/blog/2019/01/01/favorite-programming-talks/
Tue, 01 Jan 2019 13:50:02 +0100
https://monicalent.com/blog/2019/01/01/favorite-programming-talks/
It’s not that often that I go to a conference or watch a talk on YouTube that truly changes the way I think about programming or software development.
Even though I’m someone who does frontend development for a living, most of the talks that were most illuminating for me are technical talks that are either language-agnostic or unrelated to my daily work.
Here are a few of the best talks I’ve ever seen on programming or the field of technology (in no specific order!
-
Deploy static sites to Digital Ocean with Travis CI
https://monicalent.com/blog/2017/12/21/deploy-static-sites-digital-ocean-travis/
Thu, 21 Dec 2017 20:15:08 +0100
https://monicalent.com/blog/2017/12/21/deploy-static-sites-digital-ocean-travis/
This blog is written with Hugo, a static site generator written in Go. I also have a second blog that uses Hugo as well - and while I love the speed and simplicity of this system, it’s still a pain to deploy by ssh-ing into my remote machine, pull updates, and build manually. Even when I can authenticate via YubiKey ;)
So over the Christmas holiday, I automated the deployment of this blog whenever I push to the master branch.
-
Set up 2FA on Ubuntu with YubiKeys
https://monicalent.com/blog/2017/12/16/ssh-via-yubikeys-ubuntu/
Sat, 16 Dec 2017 12:06:04 +0200
https://monicalent.com/blog/2017/12/16/ssh-via-yubikeys-ubuntu/
What’s a YubiKey? A YubiKey is basically a tiny device that plugs into your USB slot and pretends to be a keyboard. When you tap the little golden disc, it types out a One Time Password (OTP). Through the Yubico API, you can easily validate this password, and use it in combination with another method of authentication (such as a password or ssh key) to achieve two-factor authentication (2FA). Many popular websites like Google, Facebook, and Github allow you to enable 2FA via YubiKeys.
-
Writing Haskell with Vim
https://monicalent.com/blog/2017/11/19/haskell-in-vim/
Sun, 19 Nov 2017 12:06:04 +0200
https://monicalent.com/blog/2017/11/19/haskell-in-vim/
Getting started writing any new language is easier with the help of your editor. In the case of linters, they can teach you the language’s idioms and best practices while you write your first lines of code. Here’s how to set up a new project in Haskell and configure vim for Haskell.
Basic vim setup for Haskell What you’re going to need:
Vim 8 Your .vimrc A vim package manager (here I use vundle) Airline (Vim status bar) ALE (Linting engine) ghcmod-vim (Reveal types inline) Haskell / ghc Stack ghc-mod, hlint, hdevtools, hfmt This tutorial assumes you already have Vim 8 installed.
-
How to manage or eliminate React state without Redux
https://monicalent.com/blog/2017/07/23/manage-state-in-react/
Sun, 23 Jul 2017 14:29:42 +0200
https://monicalent.com/blog/2017/07/23/manage-state-in-react/
When I started writing React – I made a big mess. Many of my components took too many props, or my component had an immense amount of state. Doing simple things required a lot of data manipulation, and ultimately led to a lot of bugs. It didn’t take long for simple tasks to become extremely tedious.
I think this happens to a lot of people who start out with React. It’s almost too easy to write a lot of code, when in reality, the answer may be that less is more.
-
Converting an Angular.js app from Require.js to Webpack
https://monicalent.com/blog/2015/08/03/converting-angular-js-app-from-require-js-to-webpack/
Mon, 03 Aug 2015 18:29:56 +0000
https://monicalent.com/blog/2015/08/03/converting-angular-js-app-from-require-js-to-webpack/
I’ve recently converted my webapp at work from Require.js to webpack, and although the initial setup was a little tricky, it clearly offers numerous benefits to make the switch when it comes to performance, loading times, and development workflow. In this post, I will only cover a basic switch from Require.js to Webpack. In a following post, I’ll go into lazy-loading with webpack and ui-router.
Possible Require.js setups, and their pitfalls In essence, there are two basic setups you can have for your Require.
-
Karma tests with AngularJS + RequireJS
https://monicalent.com/blog/2015/02/11/karma-tests-angular-js-require-j/
Wed, 11 Feb 2015 15:53:00 +0000
https://monicalent.com/blog/2015/02/11/karma-tests-angular-js-require-j/
Setting up testing is usually a little painful – but setting up testing when you’re using some kind of weird Angular + Require setup is even worse! Furthermore, the Karma documentation is a little bit terse, so it’s hard to tell exactly what combination of configuration settings will get you your intended result. Here’s how I accomplished this.
File Hierarchy Here is a typical, sample hierarchy. My top-level directory is something like /opt/some-app.
-
Django Tastypie: Tips, Tricks, and Troubleshooting
https://monicalent.com/blog/2014/10/31/django-tastypie-reverse-relationships-filtering/
Fri, 31 Oct 2014 17:54:27 +0000
https://monicalent.com/blog/2014/10/31/django-tastypie-reverse-relationships-filtering/
Tastypie is one of the most popular REST API frameworks for Django, and surprisingly easy to get up and running if you’re already working with Django’s Models. It can, however, be a bit difficult to debug, and produce some cryptic error messages. Here are a couple of tasks I’ve had to figure out while working with this framework, tips for troubleshooting, and some general reflections.
Table of Contents Adding Fields to a Resource Mapping Attributes of an Object through a Reverse Relationship Filtering via Through Relationships Self-Referential Resources Adding Fields to a Resource It seems simple enough – and it is – but there are really a number of ways to do it, so you have to decide which is most appropriate for your use case.
-
Internationalization with Django, Backbone, Underscore templates, and Sass (LTR and RTL languages)
https://monicalent.com/blog/2014/08/10/internationalization-with-django-backbone-underscore-template-and-sass-ltr-and-rtl-languages/
Sun, 10 Aug 2014 12:02:59 +0000
https://monicalent.com/blog/2014/08/10/internationalization-with-django-backbone-underscore-template-and-sass-ltr-and-rtl-languages/
Let’s be honest: No developer wakes up in the morning and thinks, “Oh goody! Today I get to internationalize my giant website with tons of content and files. I bet supporting right-to-left languages is going to be a blast.”
However, I’m here to tell you that it’s not nearly as bad as you would expect.
In fact, Django makes it downright easy to do. Unfortunately, there’s not a lot of information on the web about internationalizing (also known as i18n) in Django besides the official documentation.
-
Building a Parse Tree Editor in d3 with Tree Layout (Pt. 1 - Display)
https://monicalent.com/blog/2014/06/15/parse-tree-editor-d3-editable-tree-layout/
Sun, 15 Jun 2014 12:21:41 +0000
https://monicalent.com/blog/2014/06/15/parse-tree-editor-d3-editable-tree-layout/
"In this way, the Athenians came to the circumstances under which they grew in power." The first sentence from Thucydides' [Pentecontaetia](http://en.wikipedia.org/wiki/Pentecontaetia). This is a long post and chances are you only need information from part of it. Here’s a table of contents:
Background 1. Trees: In Linguistics and in d3 2. Our Incoming Data 3. Dependencies Base Code 1. Our HTML 2. Our Main for Require.js 3. Our JS Base Key Functions 1.
-
Install Node.js on Debian Squeeze
https://monicalent.com/blog/2014/06/13/install-node-js-on-debian-squeeze/
Fri, 13 Jun 2014 09:39:46 +0000
https://monicalent.com/blog/2014/06/13/install-node-js-on-debian-squeeze/
I had some issues with libraries installed via npm (such as d3 and jsdom) causing segmentation faults in Mocha tests. Ultimately I realized that it wasn’t a problem with these node modules so much as it was with my node install itself. I had installed from source following this guide, but it wasn’t quit enough to get my node install right on Debian Squeeze.
Install Node.js Dependencies Pretty standard stuff – make sure you’re up to date on these.
-
Set up Nginx and uWSGI
https://monicalent.com/blog/2013/12/06/set-up-nginx-and-uwsgi/
Fri, 06 Dec 2013 16:03:09 +0000
https://monicalent.com/blog/2013/12/06/set-up-nginx-and-uwsgi/
When browsing the web, I often read that setting up nginx with uWSGI is incredibly easy to set up and get running. I absolutely did not find it so, as I had to deal with a lot of configuration issues. So here’s how I finally got these components working together on an instance of Ubuntu 12.04. I ultimately hook this up to Django, but I’m sure the general principle would apply to other python frameworks with a WSGI interface.
-
Custom event for detecting fetch errors in Backbone.js
https://monicalent.com/blog/2013/07/29/using-a-custom-event-to-detect-fetch-errors-in-backbone-js/
Mon, 29 Jul 2013 11:59:40 +0000
https://monicalent.com/blog/2013/07/29/using-a-custom-event-to-detect-fetch-errors-in-backbone-js/
One of Backbone’s major strengths as a javascript MVC framework is the way it helps you do event handling. By extension, it’s also great for handling errors that result from failed AJAX calls. As you can see in the Backbone.js documentation, the error event is triggered when a model’s attempt to save fails server-side. However, there is no Backbone event that detects when the fetch event fails. Since a fetch from the server is the first thing that happens when a page is loaded, you would need to know if it fails because that could indicate that the API is down or some other server error.
-
Quick Tip: Use jQuery to Complete an Arbitrary Number of AJAX Calls Before Firing an Event
https://monicalent.com/blog/2013/06/28/quick-tip-use-jquery-to-complete-an-arbitrary-number-of-ajax-calls-before-firing-an-event/
Fri, 28 Jun 2013 16:40:14 +0000
https://monicalent.com/blog/2013/06/28/quick-tip-use-jquery-to-complete-an-arbitrary-number-of-ajax-calls-before-firing-an-event/
Somewhat recently, I encountered an issue where my expected user input is an arbitrarily long list of words. While I could get the word count, I had no reliable way to know whether all of the ajax requests had been completed before firing an event that created a list of definitions for each word. I had several realizations in my quest:
I could do the entire process synchronously. However, this meant that one bad ajax return or error could cause the entire process to hang.
-
Avoiding the OOM Killer by limiting the number of Apache2 processes and clients
https://monicalent.com/blog/2013/03/27/avoiding-the-oom-killer-by-limiting-the-number-of-apache2-processes/
Wed, 27 Mar 2013 02:23:36 +0000
https://monicalent.com/blog/2013/03/27/avoiding-the-oom-killer-by-limiting-the-number-of-apache2-processes/
Prologue Last week I had the following mortifying experience: I tried to ssh into my box hosted at RackSpace and nothing happened. It simply hung, and never prompted me for my password. Commence panic. I determined that port 22 was, in fact, open, and I was connecting to the machine at some point.
nc -zw3 monicalent.com 22 Connection to monicalent.com 22 port [tcp/ssh] succeeded! telnet monicalent.com 22 Trying 198.
-
About
https://monicalent.com/about/
Mon, 01 Jan 0001 00:00:00 +0000
https://monicalent.com/about/
Hi, my name is Monica. I’m an American software engineer and former engineering manager living and working in Berlin, Germany.
I started coding before the age of ten, and haven’t stopped since. In my 10+ year technical career (not including coding as a kid 😉), I have worked in a wide range of domains such as cloud services, natural language processing, e-learning, and fintech.
My roles have ranged from individual contributor to technical lead and manager.
-
Contact
https://monicalent.com/contact/
Mon, 01 Jan 0001 00:00:00 +0000
https://monicalent.com/contact/
Thanks for your interest in getting in touch!
The best way to reach me is by email at [email protected].
NOTE: I do NOT accept guest posts or do link insertions. Paid or otherwise. Ask me for one of those things and I will mark your email as spam 😇
If you’ve got a more casual question, the best place to get in touch is on Twitter @monicalent.
-
Impressum
https://monicalent.com/impressum/
Mon, 01 Jan 0001 00:00:00 +0000
https://monicalent.com/impressum/
Last updated: December 8, 2020
Monica Lent, c/o Factory Works GmbH, Lohmühlenstraße 65, 12435 Berlin
Disclaimer This document contains the information required for an Impressum. For more information about how your data is used, collected, and stored, please read the privacy policy.
Liability for content The content of this website was created with great care. I do my best to it ensure that it is accurate, but it is possible that it is or becomes outdated.
-
Privacy Policy
https://monicalent.com/privacy-policy/
Mon, 01 Jan 0001 00:00:00 +0000
https://monicalent.com/privacy-policy/
Hello, welcome to my website. I use a very small number of third-party services, configured in a privacy-friendly way.
Third-party services and data collected Google Analytics – GA is configured with all advertising, IP tracking, and demographics collection features turned off. No personal data is shared with Google Analytics. ConvertKit – ConvertKit is my email service provider. If you sign up for the email list, your personal data like email address, name, and IP address will be shared.
-
Projects
https://monicalent.com/projects/
Mon, 01 Jan 0001 00:00:00 +0000
https://monicalent.com/projects/
.post-full img { border: 1px solid #444; border-radius: 3px; } Projects Affilimate : Unified Affiliate Dashboard and Content Analytics Affilimate aggregates affiliate commissions from different networks into a single, unified and user-friendly dashboard.
It also enables scalable, automated attribution through dynamic subid tracking on a site, page, link, and link-occurrence level.
This includes click-tracking, heatmaps, audience analytics, and tracking by revision.
Behind this, it’s powered by Firebase and BigQuery and runs on GCP with Google Cloud Functions.
-
Speaking
https://monicalent.com/speaking/
Mon, 01 Jan 0001 00:00:00 +0000
https://monicalent.com/speaking/
Conferences / Podcasts / Interviews
Conferences These are conferences I will or have spoken at, as well as summaries of the talks I’ve given.
Please note: I am no longer accepting conference or meetup speaking engagements since I’m 100% focused on growing my SaaS business. This includes talks I’ve previously given. Thanks for understanding!
Conference Date Location GOTO Berlin October 23-25, 2019 Berlin, Germany React Not a Conf May 11, 2019 Sofia, Bulgaria React Finland April 24-26, 2019 Helsinki, Finland FrontCon April 3-5, 2019 Riga, Latvia JS Kongress March 11-12, 2019 Munich, Germany Agent Conf February 21-22, 2019 Dornbirn, Austria React Day Berlin November 30, 2018 Berlin, Germany BrazilJS August 25, 2018 Porto Alegre, Brazil Talks Building resilient frontend architecture (Slides) Change is inevitable.
-
Welcome, my friend!
https://monicalent.com/thank-you/
Mon, 01 Jan 0001 00:00:00 +0000
https://monicalent.com/thank-you/
Thanks for signing up for my newsletter 💌
I hope we’ll have some good conversions and learn something from each other.
If you have questions or feedback for me in the meantime, I’m always available on twitter too @monicalent 😊
Keep rockin’
-
Work with me
https://monicalent.com/work-with-me/
Mon, 01 Jan 0001 00:00:00 +0000
https://monicalent.com/work-with-me/
My core values are empowerment and empathy, and I thrive on helping teams building sustainable technical solutions that take into account the human element of software.
I love building collaborative teams, sharing my knowledge, and mentorship.
I’m also a nerd for content/email marketing, search engine optimization (SEO), and bootstrapped startups.
I’m always interested in learning about new opportunities, and am also available for consulting.
If you’re curious about working together, please contact me.