Really liked this simple explanation on the difference between BDR and BCP shared in a hacker news discussion
tips
Overheard : Leadership
Leadership isn’t about being the hero. It’s about empowering your team to become heroes themselves.
Google Gemini
For folks that are driven, wired to see an issue and tackle it head-on, it is difficult to not jump in and “try” to help your team whenever they run into an issue. But the reality is that most folks are capable, creative individuals. They just need the space to flex their own problem-solving muscles.
If you team has the skills and experience, let them handle it :-).
Overheard : On practice
A quote from Japanese philosophy repeated by Coach Paul Assaiante on practice
You cry in practice and you laugh in competition
HOWTO : Bulk deletes in vi
Use “dG” command, if you want to delete all lines in a file starting from the line under the cursor in vi.
Additional commands to delete lines
- dd deletes the whole line under the cursor.
- xdd deletes multiple (x) lines, starting at the cursor. For example 10dd deletes 10 lines
- d$ deletes to the end of the line, starting at the cursor.
HOW TO : Create free clipart
One can leverage the explosion of generative AI art engines to create your own clip art.
- Create an image in MidJourney (you can get free credits to create up to 200 images)
- You can add “clipart” to any image description to get good results
- Use Removebg to remove any background from the image. (500×500 pixel png images are free)
- enjoy ๐
Here’s a clipart that I created using the prompt “moscow mule drink illustration, clipart”
Private IP Ranges
A self note. List of private address ranges
- Class A: 10.0. 0.0 to 10.255. 255.255.
- Class B: 172.16. 0.0 to 172.31. 255.255.
- Class C: 192.168. 0.0 to 192.168. 255.255.
HOWTO : Query json data in SQLite
A self note for querying json data in SQLite. BTW, I think SQLite is an under utilized and under appreciated swiss army tool for data storage and manipulation. And thanks to Richard Hipp, it is free.
If you have a column defined as a json type in your SQLite database, quickest way to search for the data is json_extract
. A full set of functions available are documented at https://www.sqlite.org/json1.html
If you have a column named family_details
in a table family
with the following json in it as an example
{
"father": {
"name": "dad",
"birthday": "1/1/2000",
"pet_name": "daddy"
},
"mother": {
"name": "mom",
"birthday": "1/1/2001",
"pet_name": "mommy"
},
"sons": [
{
"name": "son_one",
"birthday": "1/2/2020",
"pet_name": "sonny_one"
},
{
"name": "son_two",
"birthday": "1/2/2021",
"pet_name": "sonny_two"
}
],
"daughters": [
{
"name": "princess_one",
"birthday": "1/2/2020",
"pet_name": "princy_one"
},
{
"name": "princess_two",
"birthday": "1/2/2021",
"pet_name": "princy_two"
}
]
}
and you want to print the name of the father, you can use
select json_extract(family_details, '$.father.name') as father_name
from family
json_extract
uses the name of the column and the json node as parameters. In this case, we used $
(which denotes the root), father
and name
(under father) as the json node.
HOWTO : Python string search
Quick self-note ๐
different ways to search for content in a string in python
- Basic (and quickest)
if 'content' in string:
- String.find (second quickest and doesn’t need additional module)
if string.find('content'):
- re.match (uses regex engine, most powerful)
import re
if re.search('content', string)
Good discussion here : https://stackoverflow.com/questions/4901523/whats-a-faster-operation-re-match-search-or-str-find
HOW TO : Configure nginx to use URI for modifying response content
That was a pretty long title for the post :). I love nginx for it’s flexibility and ease of use. It is like a swiss army knife.. can do a lot of things :).
We needed to serve some dynamic content for one of our use cases. If user visits a site using the following URL format http://example.com/23456789/678543
, we want to respond with some html content that is customized using the 23456789
and 678543
strings.
A picture might help here
Here’s how this was achieved
- Define a location section in the nginx config to respond to the URL path specified and direct it to substitute content
location ~ "^/(?<param1>[0-9]{8})/(?<param2>[0-9]{6})" {
root /var/www/html/test/;
index template.html;
sub_filter_once off;
sub_filter '_first_param_' '$param1';
sub_filter '_second_param_' '$param2';
rewrite ^.*$ /template.html break;
}
create a file named template.html with the following content in /var/www/html/test
Breaking down the config one line at a time
location ~ "^/(?<param1>[0-9]{8})/(?<param2>[0-9]{6})"
: The regex is essentially matching for the first set of digits after the / and adding that as the value for variable $param1. The first match is a series of 8 digits with each digit in the range 0-9. The second match is for a series of 6 digits with each digit in the range 0-9 and it will be added as the value for variable $param2
root /var/www/html/test/;
: Specifying the root location for the location.
index template.html;
: Specifying the home page for the location.
sub_filter_once off;
: Specify to the sub_filter module to not stop after the first match for replacing response content. By default it processes the first match and stops.
sub_filter 'first_param' '$param1';
: Direct the sub_filter module to replace any text matching first_param in the response html with value in variable $param1.
sub_filter 'second_param' '$param2';
: Direct the sub_filter module to replace any text matching second_param in the response html with value in variable $param1.
rewrite ^.*$ /template.html break;
: Specify nginx to server template.html regardless of the URI specified.
Big thanks to Igor for help with the configs!!
Overheard : Call to action
I don’t even recall where I heard this :)..ย but it stuck with me for me to write it down
For somebody to do something.. three things much happen at once. The person must want do do it, they must be able to and they must be prompted to do it.
A trigger โ the prompt for the action โ is effective only when the person is highly motivated, or the task is very easy. If the task is hard, people end up frustrated; if theyโre not motivated, they get annoyed.