Search for ^([^\s]*)(\s)
Replace with $1 AND_WHAT_EVER_STRING_YOU_WANT
Here is an example of searching for first space in a line and adding “',” to the string

Search for ^([^\s]*)(\s)
Replace with $1 AND_WHAT_EVER_STRING_YOU_WANT
Here is an example of searching for first space in a line and adding “',” to the string

Thanks for this great nugget from Sumama Waheed
Many a time, you get some data as a CSV file and need to copy some of that data and include it in a SQL statement. For instance one of the rows in the CSV was first name in the format below
employee_id 1234 8765 9808 1235 8734 6723
And you need to put it in a SQL statement as below
SELECT * FROM employee_table WHERE employee_table.employee_id IN (1234, 8765, 9808, 1235, 8734, 6723)
That’s a lot of adding commas (,) at the end of every line. You can do it quickly in Notepad++ (you can do the same in any editor that supports regex) using the regex capability in search and replace using ($) as the search string and $, as the replace string.

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
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!!
Great guide by Michael Bazzell on freezing your credit and removing your personal data from data consolidation sites. A good project for the entrepreneurial and capable to build a service for removing your personal data from all the sites listed on Michael’s guide.
Been dabbling in go recently and I was surprised that the default install doesn’t setup the $GOPATH environment variable.
If you are running it on a Linux box, here is how your can set the $GOPATH variable
Add the following lines to ~/.bashrc file
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
Great slide deck by Uwe Friedsrichsen on resilient patterns to use when designing applications
Good blog post by the engineering team at Stripe on using Kubernetes to run a distributed cron scheduler
https://stripe.com/blog/operating-kubernetes
Over the last week, I moved this blog from a LAMP (Linux, Apache, MySQL, PHP) stack to LEMP (Linux, Nginx, MySQL, PHP) stack. Have a blog post in the works with all the gory details, but wanted to quick document a quirk in the WordPress + Nginx combination that broke permalinks on this site.
Permalinks are user friendly permanent static URLs for a blog post. So for example this particular blog post’ URL is
https://kudithipudi.org/2017/02/24/how-to-configure…press-permalinks/
instead of
https://kudithipudi.org/?p=1762
This works by default in Apache because WordPress puts in the required rewrite rules.
To get it work in Nginx, you have to add the following config in the Nginx site configuration
Under the / location context, add the following
try_files $uri $uri/ /index.php?$args;
This is essentially telling Nginx to try to display the URI as is, and if it fails that, pass the URI as an argument to index.php.
We ran into an issue at work recently, when trying to deploy a spring boot based micro service. The application included some libraries that were downloaded by the application using maven during runtime.
The environment that this application was running in had controlled access to the Internet. We configured the jvm parameters using the following parameters
-Dhttp.useProxy=true -Dhttp.proxyHost=PROXY_SERVER_NAME -Dhttp.proxyPort=xxxx
when running the application, we were getting failed dependency errors that stated something like this
Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: Could not transfer artifact com.xxxxx.boot:xxxx -boot-autoconfigure:pom:0.0.1-SNAPSHOT from/to central (http://repo1.maven.org/maven2/): Connection refused at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:444) at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:246) at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:223) at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:334)
Lot of head scratching, because the server running the application had connection to the proxy server and the JVM parameters were accurate.
Finally, we figured out Maven doesn’t use the JVM startup parameters and had to have proxy access configured specifically. There are two ways to do this
set MAVEN_OPTS= -Dhttp.proxyHost=PROXY_SERVER_NAME -Dhttp.proxyPort=xxxx
<proxies> <proxy> <id>genproxy</id> <active>true</active> <protocol>http</protocol> <!--username>proxyuser</username--> <!--password>proxypass</password--> <host>myproxy.mycompany.com</host> <port>8080</port> <nonProxyHosts>*.mycompany.com|127.0.0.1</nonProxyHosts> </proxy> </proxies>
Command parameters for varnishlog to view the backend server that is processing the request. In this particular case, I wanted to see the request URL and backend server for any responses with HTTP code 401 (unauthorized access)
sudo varnishlog -i BackendOpen,BereqURL -q "BerespStatus == 401"