A deep dive into OpenAPI support in ASP.NET Core| blog.safia.rocks
Communication is important. This is a point so obvious and indisputable that I won’t dive into here. Being able to communicate effectively with romantic partners, co-workers, family members, contractors, doctors, and even the people you’re not in the mood to talk to is key to existing as a person on the planet.| Bug Repellent
It’s the end of the week.| Bug Repellent
Is it Wednesday already? I guess it is. To be honest, I pretty much write these blog posts on auto-pilot, so the time passes by really quickly.| Bug Repellent
As mentioned in my last blog post, I’m hoping to do a thorough analysis of the strace for curl in the next couple of blog posts. I started looking through the stack trace in the last blog post, but I quickly realized that it would take more than one blog post to look through everything so here I am.| Bug Repellent
It’s the end of the week! Woohoo! I’m very excited for the weekend. It’s the only time I have these days to get lots of coding done on Zarf.| Bug Repellent
One thing I’m sure everyone has done on the command line is to use the !! shortcut to run the command run previously with sudo.| Bug Repellent
You know what Mondays mean. A new blog post!| Bug Repellent
Another Friday, another blog post! Can you believe I’ve written around 50 blog posts in the last four months? I certainly can’t! I feel like it gets easier every time, so the adage is true: practice does make perfect.| Bug Repellent
In the last blog post, I decided to look into Unix redirection. Towards the end of it, I ended up being perplexed about an aspect of the stack trace and stated that I would look into it later.| Bug Repellent
One of my favorite Linux features is redirection. Redirection gives you the ability to send the output of one command directly to another. For example, here’s how I would copy the contents of a file into my computer’s clipboard using a pipe redirection.| Bug Repellent
It’s time for another edition of whatever the heck this is! After the deep dives I took into the Git code base, I no longer have the energy to craft up interesting names for these code anthropology moments.| Bug Repellent
Oh my gosh. Can I really keep up with this? I’m gonna be honest with you, fair reader, working a full-time job and maintaining this blog is proving to be quite the challenge.| Bug Repellent
Another Monday, another blog post!| Bug Repellent
In the last blog post I wrote, I learned how curl maintains the configuration details for different operations. In this blog post, I’d like to figure out how curl executes these operations. Specifically, I’d like to dive into what is going on in the segments of code outlined below.| Bug Repellent
In my last blog post, I started diving into the code base for the curl command line tool.| Bug Repellent
Randomly the other day, I was wondering (when is anything I wonder not random?) how browsers work. Correction: I was wondering what happens when you enter a URL into your browser and hit “Enter.” I wasn’t wondering about the DNS resolutions or TCP connections or other networking related aspects around the Internet. I was wondering how a browser connects all of this into a single application. I’ve learned about these concepts before, but I’ve always wondered how they are all connecte...| Bug Repellent
One.| Bug Repellent
Earlier this week, I was trying to figure out how to export authentication data from Firebase to another database. As it turns out, Firebase provides a command line utility that allows users to export authentication data from Firebase. As I was reading through the documentation for this tool, I came across a description of the hashing algorithm that Firebase uses to secure passwords: scrypt. I thought it would be interesting to dive into the codebase for this encryption technique. As it turns...| Bug Repellent
Lately, I’ve been getting a few messages and emails from folks who are interested in learning more about how I developed a habit of consistently blogging and also published my first book.| Bug Repellent
I was initially planning on writing another blog post in the “initial commit” series, but this particular topic has been on my mind for a while so I figured I might as well write about it.| Bug Repellent
Another Wednesday, another blog post! I’m now entering the fourth month of consistently blogging three times a week. That’s a little over 36 blog posts in 3 months. Woohoo! I think at this point it officially counts as a habit?| Bug Repellent
In my last blog post, I traveled to the past and checked out the code associated with the first commit of the Redux code base. It’s a different style of code reads for me, but it turned out to be quite fun and interesting. I figured I would do the same things this time. for the Node code base.| Bug Repellent
My friend, James Powell, recently texted me to recommend that I do some sort of “code archaeology” style code reads. In essence, I would check out a code base, go to the initial commit, then build up the story of the project by navigating through the commits on the project.| Bug Repellent
Over the past couple of blog posts, I’ve been doing a lot of digging into what happens, from a source code perspective, when someone runs git commit at the command line. I realized that I should probably look into what happens right before a commit is made when changes are staged. What happens when someone runs git add at the command line?| Bug Repellent
So, in my last blog post, I looked into the data structures used to represent commits in the Git code base. In this blog post, I’d like to look a little bit more into what actually happens when you run git commit inside a Git repository.| Bug Repellent
So in my last code-reading blog post, I decided to realign my exploration of the Git codebase and try to figure out how a commit is made. Essentially, I wanted to know what is going on under the hood when I type git commit.| Bug Repellent
So, this week was my last week at college.| Bug Repellent
So it’s 11:09 PM on a Sunday night. I’ve been spending the past couple of hours working on implementing a routing table in C for one of my networking classes. It’s the last programming assignment of my college career, which makes me feel some type of way (relieved).| Bug Repellent
OK! So I am continuing this Git series. I should probably make a tag or something for it at this point, but you can just see the other posts related to this topic by going through my archives.| Bug Repellent
In one of my last blog posts, I started digging into how git-status works. I ended up going into a little bit of a rabbit hole. As it turns out, the git-status command intersects with the Git differ and the way that state about the current working tree is managed. I ended up setting aside two specific questions to answer in my blog post.| Bug Repellent
In my last blog post, I started digging into how git-status works. I ended up going into a little bit of a rabbit hole. As it turns out, the git-status command intersects with the Git differ and the way that state about the current working tree is managed. I ended up setting aside two specific questions to answer in my blog post.| Bug Repellent
The Git shennagins continue!| Bug Repellent
So over the past couple of days, I’ve been enjoying digging into the Git codebase and Git internals. I share my posts on Twitter and for the most part (thankfully!) people enjoy them. Recently, someone commented on my last blog post, that I could’ve just read the docs to answer my questions instead of going around exploring the codebase and configuration files. I figure this would be a good chance to highlight why I’ve been writing these blog posts.| Bug Repellent
So, in my last blog post, I got a little bit into figuring out how git init works. The central point of the functions associated with git init was creating the files that are stored in the .git directory. I figured that the logical next step is to take a look at what kinds of things are inside the .git directory and figure out what they are required for. To do this, I started by initializing Git inside an empty directory.| Bug Repellent
So, ever the easily-distracted squirrel that I am, I’ve gotten curious about yet another thing.| Bug Repellent
Oh hey there! It looks like I’m on this little streak where I get way into implementations for command line functions. In my last few blog posts, I dove into the code for sudo and cd. Today, I thought I would look into another oft-used command in my development toolkit: ls.| Bug Repellent
So, what the heck happens when you sudo?| Bug Repellent
Howdy! So I’ve really been enjoying writing these blog posts where I write answers to questions that I often get from folks at conferences, in direct messages, through email, and more. Today, I thought I would answer some of the questions I often get about… productivity.| Bug Repellent
Note: this blog post contains spoilers for the film Black Panther. If you haven’t seen it yet, don’t read this blog post. But also, go see it!| Bug Repellent
When it comes to the web, we have no idea what we are doing.| Bug Repellent
I was recently presenting a keynote at a conference where I shared the story of how I made my first contribution to open source and the journey since then. Afterwards, I got a couple of questions from folks about contributing to open source. I’ve been getting these questions for a while and figured I would just create a blog post where I answered a couple of the questions that I’ve gotten.| Bug Repellent
So, I recently announced on Twitter (as one does) that I had accepted a job offer at a company called Tock and would be starting my first official job as a software engineer in April. Woohoo!| Bug Repellent
Three’s a magic number. Don’t you think?| Bug Repellent
So the other day, I was poking around the documentation for Node.JS when I accidentally clicked on something in the navigation bar titled “Async Hooks”. I was intrigued. I scrolled quickly through the documentation to see if I could get anything from a cursory glance at it and made a mental note to learn more about it later.| Bug Repellent
When I first started getting involved with tech, I had a lot of heroes. Most of them were completely unlike me. I looked up to characters like Bill Gates and Sergey Brin. In them, I saw something that I wanted to see for a long time: a bunch of nerds, who despite all the bullying and teasing and feelings of isolations, had “made it.” When I first learned about these men (and they were all men), I found solace in the fact that they were too smart and too odd and had yet been successful. Th...| Bug Repellent
So, recently someone sent me a Twitter direct message with some questions about public speaking. I get asked a lot about public speaking via email, direct message, and in person; so I figured I would just post my thoughts and perspectives on the matter here for anyone to read.| Bug Repellent
Another Wednesday, another blog post!| Bug Repellent
So, I’ve been running around reading codebases for a while now, and I thought it would be a good time to compile some of what I had learned about how to read and understand a codebase. I should note that these tips are specifically related to reading a codebase with the intention of learning how it works. They might come useful when reading a codebase with the purpose of modifying it, but your mileage may vary when implementing these lessons for that pursuit.| Bug Repellent
So, I know I said I wanted to take a break from these code reads for a little bit but curiosity got the best of me.| Bug Repellent
I have a confession to make.| Bug Repellent
I taught myself HTML and CSS when I was 11 years old. Two years later, I sat down at the same family computer where I learned HTML and CSS and taught myself Python. Four years after that, I learned back-end web development with Node with the help of a mentor. Two years after that, I learned React with the help of a friend in the open source community. And so on and so on.| Bug Repellent
So, I’ve been reading through the Node codebase for a while now and I’m starting to get a decent good sense of how the Node main process works, how different modules work, and the interactions between the C++ and JavaScript portions of the codebase. Emphasis on the “decent” here. The Node codebase is pretty darn complex and I’ve been doing my best to get acquainted with it.| Bug Repellent
Addendum: After I published this blog post, I got some feedback from one of Node’s maintainers about some of the things I mentioned. In the post below, the things that I and the code refer to as “built-in modules” are actually bindings, which are JavaScript objects created by C++ that represent a module. It appears that due to some legacy reasons, they are referred to as “built-in modules” in the actual code. In reality this blog post should be titled “How does Node reigster modul...| Bug Repellent
OK! So in one of my previous blog posts, I tried to figure out how the Node main process is initialized. I ended up not being successful in that endeavor. As it turns out, the slide deck I was using as documentation to guide my code reading was a little out of date and referenced some parts of the code base that were moved. Thankfully, one of Node’s maintainers (@Fishrock123) clarified this for me on Twitter and guided me towards the correct file. So now I know the right place to start!| Bug Repellent
So, I got pretty in the weeds with some C++ code in my last Node-related blog post and I figured I would get back into my comfort zone with some more JavaScript reading.| Bug Repellent
An alternative title for this post is: Going Down a V8 Wormhole. Wondering why? Read on!| Bug Repellent
Time for another Node module deep-dive!| Bug Repellent
Hi there, friends!| Bug Repellent
Oh, hi there!| Bug Repellent
Tomorrow, I’ll be launching Zarf v2.0.| Bug Repellent
So it’s December 29th. I’ve been seeing a lot of people write up “year in review” posts. I figured I would throw my hat in the ring for this, despite how weird it is for me. I don’t usually mark my years, goal and accomplishments-wise, by the start of a new year in Georgian calendar. I actually center most of my career and personal goals around my birthday. I make intentions like “On my 22nd year on Earth, I want to X, Y, and Z.” It makes the whole experience a little more perso...| Bug Repellent
Earlier this month, I posted a tweet about my methodology for improving an app once its base functionality has been implemented.| Bug Repellent
I’ve owned a smart vibrator for a little over a year now. For those of you who might not be familiar, smart vibrators are vibrators that can be controlled by an app via a Bluetooth connection. Often times, the app is connected to the Internet so a remote user can control the vibrator via the app. In that case, the remote user sends a message to the app and the app relays that message to the vibrator via Bluetooth.| Bug Repellent
Howdy there! Time for another installment of my Node module-deep dive series! This week, I’m diving into the Buffer object in Node. I’ll admit that when I opened up the file for an initial look-through I freaked out a little bit. It’s a whooping 1,599 lines of code (give or take some for the lines that consist of comments). But you know what? I’ve done enough of these read-throughs to not be intimidated so onwards I go.| Bug Repellent
My grandmother passed away today.| Bug Repellent
Howdy there! Yep, it’s another Monday. That means it’s time for me to head over to the good ol’ GitHub dot com for another Node module deep-dive. If you’re new around here, I’ve been going through and reading the Node code base over the past few weeks. My goal is to learn more about what goes on under the hood in the Node standard library and to learn some new code patterns. This week, I’m diving into the console module. At this point, we need to take a break and give some well-de...| Bug Repellent
Here we go again! I’m doing another Node module deep-dive on the ol’ bloggity blog today. I figured I would dive into the WriteableStreams object. WriteableStreams expose methods that allow you to write to a stream. They expose multiple events like close, drain, and pipe and several functions like cork, end, and write. Before I dive into the WriteableStream object, it helps to provide a quick primer on the concept of streams.| Bug Repellent
Open source provides the framework for a lot of innovative work happening in the tech industry. Despite this, open source is not as well funded as some startups that have emerged in the tech industry. As a result, open source maintainers need to explore alternate avenues for generating funding to support their work. I’ll share a few of the more lucrative funding opportunities that open source projects can pursue to fund their work.| Bug Repellent
Another Monday, another Node module walkthrough! For the second installment of this multi-part series, I decided to take a look into the path module in Node. The path module gives the developer the ability to work with file and directory paths. You might’ve used it to do things like determine the base of a path or to join multiple paths together. This code snippet below shows a sample of how the path module works.| Bug Repellent
Since I’ve been working on Zarf over the past few months, I’ve done a lot of research and formed a few opinions on the future of web content. I’m going to put them all in a little ramble for the sake of preservation here.| Bug Repellent
So, I figured I would start a new series here on the good ol’ blog. For a while, I’ve wanted to do code walkthroughs of standard libraries and popular packages in the Node ecosystem. I figured it’s about time that I change that intention to action and actually write up one. So here it goes, my first ever annotated code walkthrough.| Bug Repellent
An open source project’s issue board is where many interesting discussions and ideas can emerge. If handled improperly, it can be a hostile and inaccessible space. To ensure that a project’s issue board is a space for productive and mutual discussion, it helps to put in place some guidelines in place to ensure that the discussion is productive.| Bug Repellent
Long-lasting open source projects require a strong community around them. Although communities can emerge organically, project evangelism is a great way to accelerate and sustain community growth. Evangelism (in the technical sense) is the process of building a critical mass of support for a particular open source project. So what things should you keep in mind when outlining an evangelism strategy for your open source project? From my experience, I’ve narrowed it down to four key tips.| Bug Repellent
Since I’ve been in the open source ecosystem for a while, I get a lot of questions from individuals and companies about how to join the open source world. Some individuals are interested in making contributions to an open source project. I’ve written and spoken about this extensively, so I’ll discuss another form of involvement in open source. Many individuals and companies are interested in making previously closed-source work available in the open.| Bug Repellent
I tweet a lot about the actions that open source maintainers and contributors can take in order to make their open source projects more inclusive, welcoming, and healthy.| Bug Repellent
I’ve got a confession.| Bug Repellent
In July, I started thinking about how people can be incentivized to take small actions to improve their community. I had an elaborate idea for a crowd-sourced game around kindness called A Kind Thing A Day. It was really elaborate. Probably more than I could handle at that time. I went as far as making a Twitter account, and like many other projects, abandoned it.| Bug Repellent
Originally published on OpenSource.com.| Bug Repellent
One of my biggest struggles involves channeling my excitement and energy for my different projects into successful execution. It’s difficult to channel the youthful vigor I have towards my startup and the community I organize into actionable goals and effective executions. I get really excited about my passions and over time I’ve come to learn some techniques for channeling that passion into productivity.| Bug Repellent
I think a lot about how to build effective communities for software developers and software users. It’s personally important to me to connect and empower people and I figured it would be a good time to write up some of the things I have learned about building community since I’ve been involved in the technical community as an organizer/leader for about three years. Ready? Here goes!| Bug Repellent
Recently, I have had to deal with several tough decisions in both my professional and personal life. While working through these decisions, I was given some advice that didn’t sit well with me and that I eventually had to turn down. Thus, I felt it was as good a time as any to write up my thoughts on bad and good advice, what you need to know about yourself and your goals before taking advice from other people, recognizing who your best advisors are, how to turn down bad advice, and how to ...| Bug Repellent
Originally published on OpenSource.com.| Bug Repellent
Occassionally, I’ll send out a Businesswoman Tip tweet that relates to a tough decision I had to make that day or a business tip I would like to share. This blog post is simply an aggregation of those posts in chronological order. Enjoy!| Bug Repellent
What do you want to do when you graduate? Where do you see yourself in ten years? Why are you trying to start a business at such a young age? What are your goals in life?| Bug Repellent
I’m an accomplished and intelligent young woman.| Bug Repellent
For the past year, I’ve been heavily involved with PyLadies Chicago as a co-organizer and ChickTech Chicago as the Lead of Mentorship and Volunteer Initiatives. It’s been exciting to be involved with the launching and growth of these organizations, but like all things it’s time to move on.| Bug Repellent
I often get asked how I got into tech. And I often have a different answer every time I am asked. The truth is, technology has been such an integral part of my life that I can’t distinguish when I really got into tech. After my recent (and first of many, hopefully) podcast interview with Renee for the Becoming A Data Scientist podcast, I figured I should dig deep into the cobwebs of my memory and write the definitive story of how I got into tech. Ready? Here goes.| Bug Repellent
I have a daily ritual that trains my mind, my body, and my soul. And interestingly enough, it refines my so-called “entrepreneurship skills.” It’s a routine that I’ve started recently but that has shown great results thus far.| Bug Repellent
I’m sitting in bed, taking a break from debugging a particularly tough software bug, while listening to Pretty Pimpin’ by Kurt Vile. My mind wanders to dsfa, the small but bold professional services startup aimed at providing data science services for small businesses I embarked on launching a year ago. For all its successes and failures, the startup has forced me to learn a lot about myself from various discussions with mentors and founders and friends. I figured I would collect a list o...| Bug Repellent
A deep dive into endpoint filters in ASP.NET Core 7| blog.safia.rocks
In .NET 6 RC1, we shipped support for a new feature in Minimal APIs that allows developers to set the optionality of request parameters by using nullable annotations and default parameters to indicate which values are required and which aren’t. For example, let’s say you had an endpoint that generated a random number based on a seed, like so:| Bug Repellent
This blog post is a detour from the typical content I’ve been writing about Blazor, but it is still one that is compelling to cover.| Bug Repellent
This is the second blog post in a mini-series on the internals of rendering and components in Blazor. By internals, I mean that we’ll be doing one of my favorite things: reading code and figuring out what it does. As a preface, this blog post assumes that you’re familiar with Blazor.| Bug Repellent
This is the first blog post in a mini-series on the internals of rendering and components in Blazor. By internals, I mean that we’ll be doing one of my favorite things: reading code and figuring out what it does. As a preface, this blog post assumes that you’re familiar with Blazor.| Bug Repellent
A while back, I posted a response to a user issue on the ASP.NET Core repo explaining the inner workings of routing in Blazor. The response was pretty good, but I wanted to take the opportunity to flesh it out a little bit more in a blog post.| Bug Repellent
Continuing on with the trend of exploring esoterically named sorting algorithms, I bring to you a blog post on….smoothsort! I’m gonna be real with you. I was sold on the name the moment I learned about this algorithm.| Bug Repellent
Another day, another Advent of Code challenge! As per usual, you can read the problem statement for today’s challenge here.| Bug Repellent
It’s Day 2 of the Advent of Code 2018 Challenge. Once again, I’m blogging through the solution here. Before getting started, you should read the day’s challenge.| Bug Repellent
Oh gosh, I’m blogging again| blog.safia.rocks