Generated by All in One SEO v4.9.6.2, this is an llms.txt file, used by LLMs to index the site. # Laurence Gellert's Blog Re: Software Is My Life, So Make It A Good One ## Sitemaps - [XML Sitemap](https://www.laurencegellert.com/sitemap.xml): Contains all public & indexable URLs for this website. ## Posts - [Recent Blog Posts](https://www.laurencegellert.com/blog/) - Posts from a senior developer on application development, python, django, databases, javascript, etc. - [Connecting Django to MSSQL as the database](https://www.laurencegellert.com/2025/11/connecting-django-to-mssql-as-the-database/) - Django + MSSQL works really well thanks to the Microsoft sponsored mssql-django package. The 1.0 release dates back to Jul 2021, and the current release is 1.6 from August 2025. So it looks like Microsoft is not doing their usual bait and switch where they support an open source initiative for a short time then - [MacOS Tahoe 26.2 new laptop setup for Python developer](https://www.laurencegellert.com/2026/01/macos-tahoe-26-2-new-laptop-setup-for-python-developer/) - Here are my setup notes for configuring a new 16" MacBook Pro M4 Pro in 2026 using MacOS Tahoe. Each time I setup a new laptop I make a copy of my notes file from last time. As I work through it I make changes as needed to keep it up to date. My goal - [Hitron CODA56 cable modem upgrade - before and after](https://www.laurencegellert.com/2024/10/hitron-coda56-cable-modem-upgrade-before-and-after/) - I recently upgraded my cable modem from a Motorola MB8600 to a Hitron CODA56. Reason being Xfinity was emailing me letting me know I could upgrade to DOCSIS 3.1 and get faster upload speeds. The Hitron CODA56 is the cheapest model on Xfinity's list of DOCSIS 3.1 supported modems. I paid $140 on Amazon. Setting - [How To Make Python Code Run on the GPU](https://www.laurencegellert.com/2023/10/how-make-python-code-run-on-the-gpu/) - As a software developer I want to be able to designate certain code to run inside the GPU so it can execute in parallel. Specifically this post demonstrates how to use Python 3.9 to run code on a GPU using a MacBook Pro with the Apple M1 Pro chip. Tasks suited to a GPU are - [Visualizing Relationships in ChatGPT](https://www.laurencegellert.com/2023/05/visualizing-relationships-in-chatgpt/) - The other day I asked ChatGPT for some recommendations for new piano pieces based on one I had just finished. To my astonishment the list it provided was pretty good and lead me to a new piece I started working on. This got me thinking, it would be fun to build a graph of these - [Getting back lists of data from the ChatGPT API](https://www.laurencegellert.com/2023/05/getting-back-lists-of-data-from-the-chatgpt-api/) - I'm working on a project where I'm trying to harvest lists of data from ChatGPT via its API. This post applies to the gpt-3.5-turbo model called via the API. I don't have access to the GPT 4.0 API yet, but I'm on the waitlist. When I first looked into it, I was excited when I - [How to Stop/Start an AWS EC2 instance using AWS CLI command line](https://www.laurencegellert.com/2023/02/how-to-stop-start-an-aws-ec2-instance-using-aws-cli-command-line/) - In my experience the smaller the AWS EC2 instance the more often it freezes / completely locks up. Something goes wrong inside the AWS infrastructure and poof, no ability to SSH or do anything with it. This is regardless of system load, memory status, the type of application, etc. The frequency of the crash is - [Mac vs Dell for Software Development with Cost Breakdown 2020](https://www.laurencegellert.com/2019/11/mac-vs-dell-for-software-development-with-cost-breakdown-2020/) - My 2015 Mac Book Pro is getting a little old and tired. I recently joined a project that uses a docker-compose configuration that spins up 8 separate containers. It barely works on my Mac. It takes a long time to start and performance is terrible system wide while it is running. So it was time - [Full Stack Developer Skills and Technologies for 2019](https://www.laurencegellert.com/2019/08/full-stack-developer-skills-and-technologies-for-2019/) - Here are the specific technologies and skills that go with being a full stack developer in 2019. Full stack development has two sides, front end and back end. A full stack developer is someone who can work on both sides. This does not imply they suck at everything because they are too general or spread - [Querying Complex Data in Django with Views](https://www.laurencegellert.com/2020/07/querying-complex-data-in-django-with-views/) - Django has a powerful ORM, but like any ORM it suffers when querying data that has complex relationships. Django supports foreign keys and many to many relationships out of the box with ease. Sometimes a report or data feed has half a dozen joins and calls for representing the data slightly differently than the way - [Example Django Model Count and Group By Query](https://www.laurencegellert.com/2015/06/example-django-model-count-and-group-by-query/) - The Django framework abstracts the nitty gritty details of SQL with its Model library (the M in MVC). It is straight forward for standard lookups involving WHERE clauses. 10% of the time I need it to do something fancy like a GROUP BY aggregate query. This required checking the docs to see 'how the heck do - [Basic Git Commands I Use Everyday](https://www.laurencegellert.com/2019/09/basic-git-commands-i-use-everyday/) - My opinion is very strong on this point – if you are using git, you should be using it on the command line. Git is the best and most popular tool for doing source control. There used to be competitors, but why waste bytes listing them... Git was created by the infamous Linus Torvalds (the - [Why is WordPress so Popular?](https://www.laurencegellert.com/2019/09/why-is-wordpress-so-popular/) - WordPress is arguably the most successful "killer app" of the web in the last 10 years. Since it is written in PHP and has a history of security vulnerabilities, most "software brains" dismiss it as a toy. While it is certainly not a monument to computer science, it does its job really well. It has - [ADA Compliance Tips for Web Developers](https://www.laurencegellert.com/2019/06/ada-compliance-tips-for-web-developers/) - After working on projects involving ADA / WCAG compliance I can assure you, the internet sucks for people who are visually impaired. Unless you are on a government website (required by law to be compliant) or a website that is specifically designed for visually impaired users, odds are it is difficult if not impossible to - [Wolfram Alpha Language Coming Soon](https://www.laurencegellert.com/2014/03/wolfram-alpha-language-coming-soon/) - Wolfram Alpha has always been a interesting if not quirky 'intelligent search engine'. It can do things like: Take derivatives - d(ln(x))/dx Generate star charts Show the position of the International Space Station Get detailed nutrition facts Stock analysis (Facebook) Routlette Payoffs Now its creator, Stephen Wolfram, has announced a 'language' that bolts on top of the - [AWS benchmark of MySQL 5.5 RDS vs EC2](https://www.laurencegellert.com/2013/04/aws-benchmark-of-mysql-5-5-rds-vs-ec2/) - MySQL benchmark of AWS RDS vs EC2 with complete results and instructions on how to recreate on your own for under $0.25. Update 9/15/2013 - Added bar charts to compliment tables. I found a couple blog posts with benchmark data specifically about MySQL on EC2 instance vs RDS. http://getasysadmin.com/2011/02/mysql-benchmark-rds-ec2-performance/ http://blog.observu.com/2011/05/rds-vs-mysql-on-ec2-benchmark/ Both posts use a tool - [Bechmark of MySQL with SSL on AWS RDS](https://www.laurencegellert.com/2013/09/bechmark-of-mysql-with-ssl-on-aws-rds/) - Ran a very specific benchmark of MySQL - the native SSL connection performance penalty on AWS RDS. When establishing a MySQL connection there is a way to tell the server to use SSL to encrypt the communication between the client and the database. When activated the database is doing all of its normal work plus - [Software Productivity, Change, and Peopleware](https://www.laurencegellert.com/2011/12/software-productivity-change-and-peopleware/) - Peopleware – Book Review Peopleware 2nd Edition Productive Projects and Teams By Tom Demarco and Timothy Lister Peopleware is a timeless book on the human side of making software. We have all encountered many of the anti-patterns described in the book personally or anecdotally through co-workers. My Grandmother who was a COBOL programmer in the - [Thoughts on MongoDB](https://www.laurencegellert.com/2011/05/thoughts-on-mongodb/) - I introduced MongoDB to a colleague today (version 1.8.1 to be exact). He comes from a RDBMS, 3rd normal form, relational background. Here's what he said. Keep in mind, we have a healthy humor level going at the office. I love it! "Mongo is like taking a kid from a Jehovah's Witness upbringing, driving them - [Workstation Screens and Comfort](https://www.laurencegellert.com/2011/05/workstation-screens-and-comfort/) - I started with one screen, spiked up to 4, and now generally use two. More screens add to developer productivity, but I found there is a limit my mind can handle. If I need to write code, refresh a browser, and tail output, three screens works well. I have found that most of the time, - [Windows 10 Updates Failing with MEMORY_MANAGEMENT due to DiskCryptor](https://www.laurencegellert.com/2018/05/windows-10-updates-failing-with-memory_management-due-to-diskcryptor/) - Having problems updating to Windows 10 1703, 1709 or 1803? If you have DiskCryptor installed the updates will fail with the unhelpful message `MEMORY_MANAGEMENT`. Then you'll be trapped in a kind of Windows Update purgatory: Windows downloads update (30 minutes - 1 hour) Windows installs the update (30 minutes) Windows reboots, chugs for a long time, then the - [AngularJS Review - A Sweet Client Side JavaScript Framework](https://www.laurencegellert.com/2013/11/angularjs-review-a-sweet-client-side-javascript-framework/) - AngularJS makes everything else look obsolete. I'm looking at you Backbone and Ember... It is one of those things where in hindsight the approach appears obvious because it is so elegant. However it took the web a good 15 years to arrive at this point. It makes jQuery look like VHS ;) AngularJS’s biggest strength - [Tech Ignite Presentation](https://www.laurencegellert.com/2011/09/tech-ignite-presentation/) - The Software Association of Oregon (SAO) held its first ever Tech Ignite event last Thursday, September 15th, 2011. My presentation "Building an ePortfolio system for NASA" was accepted! The event was taped and you can watch me in action here: Direct link to video: http://youtu.be/3NXHBtbvNNQ The venue was McMenamin's Mission Theater. I had never been - [Office Dungeon](https://www.laurencegellert.com/2011/05/office-dungeon/) - This was a reality for me and a co-worker for over one year. Note the plunger and the chains on the walls. This was more of a 'lab', my desk was outside this room, but we used to lovingly refer to this as the dungeon. In actuality these were awesome times. We got so much - [The Passionate Programmer](https://www.laurencegellert.com/2010/07/the-passionate-programmer/) - The Passionate Programmer Book Review Creating a Remarkable Career in Software Development, by Chad Fowler - Published 2009 Revised and updated second edition of "My Job Went to India: 52 Ways To Save Your Job" This is a great book along the same lines as The Pragmatic Programmer, by Chad Folwer (no relation to Martin Fowler). The - [How To Break Web Software - Reviewed](https://www.laurencegellert.com/2009/08/how-to-break-web-software-reviewed/) - How to Break Web Software Functional and Security Testing of Web Applications and Web Services, by Mike Andrews and James A. Whittaker Published 2006 Contains recipes for 24 different hacks. Most of them are supposed to be common knowledge in the field by now. They are actually pretty common defects. Frameworks are getting better at weeding out - [Building Spring 2 Enterprise Applications](https://www.laurencegellert.com/2008/10/building-spring-2-enterprise-applications/) - Building Spring 2 Enterprise Applications Interface21, Bram Smeets, Seth Ladd (2007) This book is an excellent nuts and bolts introduction to the Spring 2.0 framework. It covers the core (DI/IoC) container, aspect oriented programming, data access, transactions, and Spring MVC. At work I introduced this as part of our bi-monthly book club topic. If you - [Android Float Picker Widget Launched](https://www.laurencegellert.com/2011/06/android-float-picker-widget-launched/) - Made my first ever open source release tonight! Android Float Picker Widget Float Picker Widget is an open source Android based widget for picking a number using plus and minus buttons, no typing required. Could be used for picking specific scientific values (pH, temperature), AM/FM radio stations, quantity of items to purchase in lots. Several - [Good Source of Icons and Photos for Free](https://www.laurencegellert.com/2011/09/good-source-of-icons-and-photos-for-free/) - There are four-year-olds with better drawing skills than me. Thankfully, there is the Open Icon Library project to take care of all my icon needs. It is full of useful icons, indicators, alerts, flags, etc... The images are professional and polished looking, and there are a number of available themes. Statistics: Total icons: 137,396 Unique icons: 10,787 - [IntelliJ vs. Eclipse – IDEA is my new friend](https://www.laurencegellert.com/2011/12/intellij-vs-eclipse-–-idea-is-my-new-friend/) - Most professional Java developers swear by IntelliJ IDEA. In my new job I use it on a daily basis. I have to agree - it rocks. At $499 it is not terribly expensive compared to other commercial licenses. The free version has restrictions and I cannot speak to what those are since I have not - [Does 0.999… Equal 1 ?](https://www.laurencegellert.com/2012/02/does-0-999…-equal-1/) - For those who want immediate gratification, YES, 0.999… = 1 The dot dot dot (…) means 9’s repeating infinitely, past 2012, past the end of time, FOREVER. That is a lot of nines. It can also be written with a bar over the 9, as 0.9. So what is going on here with 0.999... 0.9 != - [Software Careers for the Future](https://www.laurencegellert.com/2012/04/software-careers-for-the-future/) - Today's topic is success as software professionals. Many important lessons on this subject can be found in an unlikely place - Colin Powell's auto-biography "My American Journey", published in 1995. Hey, what does this have to do with software you might ask? As I keep saying, success in a technical discipline like software increasingly hinges on communication and - [Why do software engineers always complicate things???](https://www.laurencegellert.com/2012/05/why-do-software-engineers-always-complicate-things/) - Last night at dinner the question came up: Why do software engineers always complicate things??? There are two sides to the coin, good intentions, and poor intentions. I think most people end up complicating things because of good intentions. The poor intentions are worth being aware of too, but I don't expect the worst in - [The Three Ways of Setting Breakpoints in JavaScript](https://www.laurencegellert.com/2012/05/the-three-ways-of-setting-breakpoints-in-javascript/) - There are at least three ways to set breakpoints against JavaScript running in the browser. 1) Use Chrome's developer tools or Firebug to locate the line of JavaScript, then set the breakpoint with the mouse. To do it in Chrome, first open the developer tools (Ctl + Shift + I), or go to the wrench - [How to set the Expires and Cache-Control headers for all objects in an AWS S3 bucket with a PHP script](https://www.laurencegellert.com/2012/07/how-to-set-the-expires-and-cache-control-headers-for-all-objects-in-an-aws-s3-bucket-with-a-php-script/) - As of the current AWS API, setting the Expires and Cache Control headers for all objects in an AWS S3 bucket requires a script. It is possible to do it one file at a time through the AWS control panel, but that is tedious if not impossible for buckets with lots of files. I was - [OMSI Maker's Faire Photos](https://www.laurencegellert.com/2012/09/omsi-makers-faire-photos/) - The 2012 OMSI Maker's Faire was a blast to visit. Saw lots of interesting ideas and projects. The range of ideas is huge, and span the centuries of human knowledge. For example there was a guy making traditional leather shoes by hand, a real blacksmith complete with on-site forge, and gladiator style sword fighting lessons! - [Will the Future of Software be more or less 'Free' ?](https://www.laurencegellert.com/2012/10/will-the-future-of-software-be-more-or-less-free/) - When it comes to software, one of the wonderful things about it is, there is generally zero cost to add an additional user to an already built system. The effort that went into the system can be magnified many times over in terms of the value it provides to the world. No wonder software developers - [Discobolus - the best statue of all time perhaps?](https://www.laurencegellert.com/2012/10/discobolus-the-best-statue-of-all-time-perhaps/) - In college, I begrudgingly singed up for an Art History class to fulfill my Arts and Letters requirement. I remember the pleasant surprise one day of being introduced to my favorite work of art - the Discobolus by Myron. The original is lost, but last weekend, I got to see the best Roman copy on display, in - [Notes on my Upgrade To Windows 8 for Software Developers](https://www.laurencegellert.com/2012/11/notes-on-my-upgrade-to-windows-8-for-software-developers/) - I bought Windows 8 and installed it today. My thought was: "Sometimes you have to say: What the ****!" - Miles from the film Risky Business 1983 Windows 8 is required to build apps for the new Windows App Store. These apps can only be created and published with Visual Studio 2012 Express for - [The Art of Spreadsheet-Fu - tips for manipulating data with Excel, OpenOffice, or Google Drive Spreadsheets](https://www.laurencegellert.com/2013/02/the-art-of-spreadsheet-fu-tips-for-manipulating-data-with-excel-openoffice-or-google-drive-spreadsheets/) - This post demonstrates 5 examples of Spreadsheet-Fu to make quick work of menial data formatting tasks. Spreadsheet programs have useful functions built into them for string manipulation (concatenation, search and replace, formatting, etc). It used to be just Excel and Open Office Calc, but now Google Drive Spreadsheets has functions too! The key, grasshopper, is what - [Software Ghettos - A Form of Technical Debt](https://www.laurencegellert.com/2012/12/software-ghettos-a-form-of-technical-debt/) - A few years ago I was talking to a senior Java engineer. He was asking me about Django and Python. Having never used the stack himself, and thinking that 'scripting languages are just toys', he was skeptical of this new framework and its potential. I went on to explain that Django is pretty neat, the - [A Critique of JavaScript MVC frameworks - Beware of Rampant Asynchronous JavaScript Calls](https://www.laurencegellert.com/2013/01/a-critique-of-javascript-mvc-frameworks-beware-of-rampant-asynchronous-javascript-calls/) - Software professionals should be aware of the limitations that come with the current trend of building asynchronous heavy web applications. We are seeing a surge in serious and large scale JavaScript applications at the enterprise level. Here is a list of the top 12 JavaScript MVC frameworks, with the top contenders being Ember.js and Backbone.js. Yes - - [Software Development Heaven - sit stand desk and Herman Miller chair](https://www.laurencegellert.com/2013/12/software-development-heaven-sit-stand-desk-and-herman-miller-chair/) - This year I joined the sit-stand work environment revolution and I love it! When it comes to being a successful software professional, investing in the right tools is important. Many of us overlook ergonomics, especially our desk and chair. In terms of productivity, I would argue our desk and chair are just as important as - [Add Facebook Open Graph (OG) meta tags to your WordPress site with one function](https://www.laurencegellert.com/2017/02/add-facebook-open-graph-og-meta-tags-to-your-wordpress-site-with-one-function/) - See below for a basic WordPress function that adds Facebook Open Graph OG meta tags to your WordPress site. Works with WordPress version 4.7.2 (at this site). Facebook OG meta tags have become a standard way of making embedded links look good in Facebook, Twitter, LinkedIn and hundreds of other sites. The idea is to - [An Awesome Monitor Riser For My Desk](https://www.laurencegellert.com/2017/10/an-awesome-monitor-riser-for-my-desk/) - I always wanted a monitor riser for my desk that looked good, was made of natural wood and had internal shelves. After searching online and coming up disappointed I decided to build my own. Here it is: The extra shelves instantly made my life better. The over organizer in me loves having dedicated spots for - [Laravel Backpack Crud Explained and Reviewed](https://www.laurencegellert.com/2018/01/laravel-backpack-crud-explained-and-reviewed/) - Recently had a project where I needed to get a CRUD admin up and running quick. My go to framework for CRUD is Django Admin. However Python/Django isn’t always an option for various technical or political reasons. In this case it had to be PHP. So I looked high and low for an out of - [Full Stack Developer Retrospect](https://www.laurencegellert.com/2019/04/full-stack-developer-retrospect/) - Back in 2012 I wrote a post What is a Full Stack developer. Somehow it ended up being the top hit in google for "full stack" for a number of years. It has had over 1.1 million views since 2015 when I started tracking analytics. Like it or not the term is sticking: According - [Primal Leadership Book Review](https://www.laurencegellert.com/2011/05/primal-leadership-book-review/) - Nine years later Primal Leadership still stands up as an interesting read on leadership strategies. My boss recommended it to me, part of the coaching strategy discussed below. Although this does not appear directly related to software, I believe that personal effectiveness and leadership skills are key. Soft skills translate into huge gains on software - [Its Over Flash, HTML5 Has Won](https://www.laurencegellert.com/2011/03/its-over-flash-html5-has-won/) - Work ordered me what I think will be my last copy of Adobe Flash ever. My first swf compilation was in 1999 I believe? I must have had 6-8 copies of Flash purchased for me by my employers over the years. There was Flash 4, 5, MX, MX 2004, Flash 8, CS3, CS4, and CS5! - [How to Deftly Handle Pushy People and Succeed on Software Projects](https://www.laurencegellert.com/2016/06/how-to-deftly-handle-pushy-people-and-succeed-on-software-projects/) - Working in the software profession you will often run into a situation where someone is pushing your estimates down, asking for the moon, or increasing scope without adding resources or time. There is no instruction manual for handling that sort of thing. The only thing you can really control in that situation is how you - [Design your own GitHub activity graph, mine is a DNA spiral](https://www.laurencegellert.com/2015/05/design-your-own-github-activity-graph-mine-is-a-dna-spiral/) - I recently turned my github activity graph into an 8-bit looking DNA spiral! By setting GIT_AUTHOR_DATE and GIT_COMMITTER_DATE it is possible to log a commit at any point in time. The tool I wrote allows you to draw a pattern sort of like a mashup of mine sweeper and MS paint for windows 3.1. Then - [ReCaptcha getting hard to read, found streamlined substitute in FatFree](https://www.laurencegellert.com/2014/01/recaptcha-getting-hard-to-read-found-streamlined-substitute-in-fatfree/) - Recently implemented a Captcha field on a signup page. So, to start with I looked around for a good plugin to handle this. ReCaptcha was the first one that popped up. ReCaptcha does support themeing, which is nice since the default red and yellow is a bit loud. The problem I came across is it - [Stripe vs Paypal for Collecting Payments Online](https://www.laurencegellert.com/2013/08/stripe-vs-paypal-for-collecting-payments-online/) - A few months ago I upgraded a client’s website to support Stripe along side the prior Paypal implementation. The result: sales are up slightly and about 60% of customers are choosing to pay with Stripe. VS. Quick summary: I’m impressed with Stripe as a developer. Customers obviously prefer Stripe. On the business side, - [What is a Data Scientist?](https://www.laurencegellert.com/2013/07/what-is-a-data-scientist/) - The world is now generating zetabytes of data annually and it is only projected to increase. The spread of smart phones, the amount of sophisticated yet cheap sensors, near zero cost of storage, and the amount of investment dollars behind Big Data are pushing demand for data scientists to the forefront. Software professionals are perfectly positioned - [Laurence’s List - Roadmap Features to Prioritize](https://www.laurencegellert.com/2013/05/laurences-list-roadmap-features-to-prioritize/) - Is the number of issues in your backlog into the triple digits? Angry customers, bugs that have you tangled in spaghetti code, the talking head just changed the spec AGAIN!!!... and now the President comes to your desk and says payroll can't be met unless feature X ships on Friday... We've all been on chaotic - [Node.js and Paperboy for local JavaScript development](https://www.laurencegellert.com/2012/01/node-js-and-paperboy-for-local-javascript-development/) - Node.js + Paperboy make for a slick replacement to Apache as an http server for local JavaScript development. This has come in handy a lot lately when working on JavaScript experiments or prototypes. Often times it is easiest to use a CDN to include whatever base libraries are needed (jQuery, Dojo, etc). Annoyingly, browsers won't - [Realtime Web – Is this Web 3.0?](https://www.laurencegellert.com/2011/11/realtime-web-is-this-web-3-0/) - The Keeping it Realtime Conference in Portland showcased bleeding edge technology that will no doubt create waves, perhaps even a boom in technology akin to what Ruby on Rails did a few years ago. The Keeping it Realtime conference could have easily been titled the Node.js / Websockets / PubSub Conference. It was paradise for - [Tips and Tools for Securing Django](https://www.laurencegellert.com/2019/01/tips-and-tools-for-securing-django/) - Django has a number of built in security measures which are really helpful. In fact as frameworks go by default it does a lot of really smart things security wise. There are a few less commonly known settings that improve security even more which I'll share below. This information is up to date as of - [Making Django's Database Connection More Secure for Migrations](https://www.laurencegellert.com/2019/03/making-djangos-database-connection-more-secure-for-migrations/) - Since Django 1.7 (September, 2014) and the introduction of schema migrations, it has always bugged me that Django needs to connect to the database with a user that has pretty close to ALL privileges. That is because when migrate runs it needs to be able to make changes to the schema with commands like CREATE TABLE and ALTER - [Django Rest Framework How To Whitelist (Safelist) IP Addresses](https://www.laurencegellert.com/2019/04/django-rest-framework-how-to-whitelist-safelist-ip-addresses/) - Here is how to setup a list of IP addresses / subnets that are allowed to call a Django Rest Framework endpoint. All other IP addresses will be blocked. Using an IP safe list is much easier than dealing with username or token authentication for a REST endpoint. This works great in cases where the - [Working for Equity as a Software Developer](https://www.laurencegellert.com/2018/11/working-for-equity-as-a-software-developer/) - As a software developer I’ve been involved in a number of equity conversations over my career. Mostly what you'll run into is dreamers with no experience asking you to work for free while they waste your time. Occasionally you'll encounter a real business person who is worth talking to. It is thrilling to negotiate for - [PHP Sessions not being deleted on Ubuntu Server](https://www.laurencegellert.com/2012/08/php-sessions-not-being-deleted-on-ubuntu-server/) - I came across an AWS Ubuntu 10.04 server running PHP 5.3.x that not was automatically clearing expired PHP session files. They were stacking up in /var/lib/php5/, to the tune of about 207k files and 834MB in just a few months. On an AWS EC2 instance with an 8GB boot partition, that was over 10% of the - [The Software Maintenance Efficiency Curve](https://www.laurencegellert.com/2014/12/the-software-maintenance-efficiency-curve/) - I have been told “there is no such thing as green field development”. While that statement is false for the hobbyist developer, in the business world it is nearly true. Those who code for a hobby or for pure enjoyment often start from scratch, as evidenced by the explosion of unmaintained projects on Github. See - [Flash Boys by Michael Lewis](https://www.laurencegellert.com/2014/07/flash-boys-by-michael-lewis/) - For anyone interested in code, networking, and finance, Flash Boys is a real page turner. For me personally, with interests in all three, it sent chills up my spine. I could not put it down!!! Flash Boys is a fascinating, informative, and thoroughly done edge of your seat ride through the modern world of technology - [How to require SSL when connecting to MySQL on AWS RDS](https://www.laurencegellert.com/2017/08/how-to-require-ssl-when-connecting-to-mysql-on-aws-rds/) - With MySQL you can opt to connect to the database using an encrypted connection. This option is important to consider on AWS if you are using RDS for your MySQL database. The network between your EC2 server and the RDS server is controlled by Amazon. You don't know who has access or what is going on - [Why I use GitHub (or Bitbucket) at every chance, and why you should too](https://www.laurencegellert.com/2015/01/why-i-use-github-or-bitbucket-at-every-chance-and-why-you-should-too/) - When I work on projects that don't have GitHub or Bitbucket, I really miss it. It is the little things they do that speed things along and get me access to what I need in a way that looks visually pleasing. This is not meant to offend, but for me GitHub and Bitbucket are pretty - [Why Software Should Not Be Grouped Under Information Technology (IT)](https://www.laurencegellert.com/2019/03/why-software-should-not-be-grouped-under-information-technology-it/) - One of the reasons I love software and get so excited about is it is one of the few ideas known to our civilization that can so easily magnify its initial investment. - [Thoughts on Require.js and a simpler approach to loading JavaScript](https://www.laurencegellert.com/2013/01/thoughts-on-require-js-and-a-simpler-approach-to-loading-javascript/) - Require.js is trying to solve the problem of dealing with lots of JavaScript. I have used it with Backbone.js, underscore, Dojo, and jQuery. It works well, but it does take some effort to get it configured and running within your project. "When a project reaches a certain size, managing the script modules for a project - [Using MySQL with Encrypted SSL Connections](https://www.laurencegellert.com/2013/09/using-mysql-with-encrypted-ssl-connections/) - MySQL offers native support for connecting via SSL. By default this is available in AWS RDS MySQL instances. Using this connection method effectively encrypts all data going back and forth between the client and the server. This prevents eavesdropping (aka packet sniffing). This is especially important in relation to cloud hosting, where traffic sniffing may be - [How to setup the MySQL data directory to be in your encrypted home folder on Ubuntu 14.04](https://www.laurencegellert.com/2014/11/how-to-setup-the-mysql-data-directory-to-be-in-your-encrypted-home-folder-on-ubuntu-14-04/) - Ubuntu has built in home folder encryption similar to OSX. I always turn on this feature on both OSs and have never experienced any perceptible performance hit. This guide shows one approach to migrating the MySQL data directory into the encrypted home folder on Ubuntu 14.04. Caveats: The only system user allowed to access the - [CSS3 HTML5 Web Based Tools](https://www.laurencegellert.com/2011/08/css3-html5-web-based-tools/) - This post covers a few fun and useful browser based 'CSS builder' tools. They generate CCS3 effects on the fly and take the headache out of making them work across modern browsers. Check out http://caniuse.com/ for a complete source of information on which browsers support CSS3/HTML5 features. Alas, it looks like IE 9 is having - [Adobe Edge Inspect Reviewed (formerly named Shadow)](https://www.laurencegellert.com/2012/09/adobe-shadow-reviewed/) - I'm currently working on responsive websites that support not only desktop browsers, but also Android and iOS - at any resolution. Testing becomes quite a task when it comes time to stop writing new features and preparing to check in. I have multiple devices to test on, and because they are physical devices, it is - [Tools to test your website's performance](https://www.laurencegellert.com/2013/06/tools-to-test-your-websites-performance/) - There are many developer oriented tools out there for testing web site performance. Many are free (free as in beer), some are open source (free as in speech), and a few are also subscription based. If you are not using performance analysis tools in your development process, I highly recommend it. Tools are what take - [Domain Name Economics - Surfing the Bubble](https://www.laurencegellert.com/2012/09/domain-name-economics-surfing-the-bubble/) - Virtual realestate is booming. Who would have thought domain names would be the thing to buy? There is a great story about Kevin Ham, the doctor who bought up expired and misspelled domains and now has a $300M empire. It blows my mind because I watched it happen (literally, I was at my computer for - [Building SysBench in Ubuntu 13.04](https://www.laurencegellert.com/2013/09/building-sysbench-in-ubuntu-13-04/) - When trying to build SysBench 0.4.12 you may be getting an error like: /bin/sh ../libtool --tag=CC --mode=link gcc -pthread -g -O2 -o sysbench sysbench.o sb_timer.o sb_options.o sb_logger.o db_driver.o tests/fileio/libsbfileio.a tests/threads/libsbthreads.a tests/memory/libsbmemory.a tests/cpu/libsbcpu.a tests/oltp/libsboltp.a tests/mutex/libsbmutex.a drivers/mysql/libsbmysql.a -L/usr/local/mysql/lib/ -lmysqlclient_r -lrt -lm ../libtool: line 838: X--tag=CC: command not found ../libtool: line 871: libtool: ignoring unknown tag : command not - [Are you Smart yet? Will everything become Smart someday?](https://www.laurencegellert.com/2013/08/are-you-smart-yet-will-everything-become-smart-someday/) - Everything is getting capital 'S' Smart these days. Smart phones, Smart homes, Smart cars, in EPIC there are 'Smart phrases', and even a local cafe chain has something called Smart beans.... The Smart trend lumps together intelligent networks, big data, bio-metrics, domains that end in .io, and apparently organic farming practices. Makes Web 2.0 and - [A KeePass setting that might save your online identity](https://www.laurencegellert.com/2015/02/a-keepass-setting-that-might-save-your-online-identity/) - Your KeePass file might not be as safe as you think, but it is easy to protect yourself with this simple settings change that does not require creating a new kdbx file. This helps make your KeePass file more secure by deterring dictionary and brute force attacks. The setting is called 'Key Transformation', accessible in KeePass under - [Grunt - for automating builds in Front End land](https://www.laurencegellert.com/2014/04/grunt-for-automating-builds-in-front-end-land/) - Grunt is a front end build tool I've used on the last several projects. It handles CSS / JavaScript minification, concatenation, and linting really well. Some of my legacy projects use a combination of bash and Yahoo UI Compressor, which I'm now switching away from in favor of Grunt. What I liked about Grunt from - [My Answer To: I want to learn programming, should I attend a code school?](https://www.laurencegellert.com/2016/01/i-want-to-learn-programming-should-i-attend-a-code-school/) - I recently had a reader ask me if they should attend a coding academy because they want to get into programming. Here is my answer: There are many success stories involving code schools. In fact my grandmother was one of those success stories, but more about her later. Still, I'd be careful of code boot - [Is localhost development obsolete?](https://www.laurencegellert.com/2015/08/is-localhost-development-obsolete/) - Topic explored: Someday soon developers will only need a basic Chrome Book and a wifi connection to do their work. No software will be installed locally other than a browser. I'm not so sure this trend will pan out across the board, but there are several reasons it makes sense. Software development traditionally requires a - [Django Tricks for Processing and Storing JSON](https://www.laurencegellert.com/2018/09/django-tricks-for-processing-and-storing-json/) - In this post I'll show a few tricks I use to make JSON fit into Django more seamlessly. The first is a lesson on coding that everybody should know. Parsing external JSON: Whenever you take in JSON from "strange computers" (which is basically any computer) it works most of the time. As C3p0 said: R2D2, - [My Answer To: How To Stay Current in Software?](https://www.laurencegellert.com/2018/07/my-answer-to-how-to-stay-current-in-software/) - I had a developer write to me a few weeks ago asking how to stay current. With their permission I've published their question and my answer with personal details omitted. Question from a new developer: How do I stay current? I am a new developer at a small software company. In my current position, I - [Django - Correctly Wiring to AWS CloudFront for Static and Media Files](https://www.laurencegellert.com/2018/03/django-correctly-wiring-to-aws-cloudfront-for-static-and-media-files/) - When it comes to "How To Setup a CDN for Django" most people suggest the following "half way" setup that can lead to stale cache problems and slowness in the admin. Configure Django to upload media and static files to S3. That is done by installing django-storages and boto, then setting DEFAULT_FILE_STORAGE to your S3 bucket. - [How to Override a Composer Dependency so it Pulls From Your Branch](https://www.laurencegellert.com/2017/12/how-to-override-a-composer-dependency-so-it-pulls-from-your-branch/) - Ran into a situation this week where I needed to fix and slightly customize a dependency of a dependency. This was for a Laravel project that uses Composer to manage dependencies. Since I'm using Composer everything in /vendor is managed by Composer and is off limits to code changes. I need to get things launched - with - [How to Structure Ongoing Learning in the Software Field](https://www.laurencegellert.com/2017/01/how-to-structure-ongoing-learning-in-the-software-field/) - Many software developers have a love/hate relationship with the amount of ongoing learning the profession requires. It can be really enjoyable to learn new things, especially languages and frameworks that are powerful and fun to use. That moment when a big idea crystalizes in the mind is priceless. At the same time it can be - [Tips for Getting into Software Development Heaven](https://www.laurencegellert.com/2017/05/tips-for-getting-into-software-development-heaven/) - In programming hell the keyboard layout changes every day. The Internet is laggy. The backlog is so long, it can't even load. The control and shift keys only work half the time. You may only use pico as your editor. Tab completion never works. OS updates come out every day. OS updates occasionally don't work. - [GnuPG - HowTo, Tutorial, Notes](https://www.laurencegellert.com/2011/04/gnupg-howto-tutorial-notes/) - Basic GnuPG instructions, create and backup keys, encryption and decryption of files. This GnuPG tutorial covers installing and running the basics of GnuPG: encrypt, decrypt, create and export or backup your public and private keys. It is geared for a single user where encryption is used as part of a data backup/transmission strategy. This tutorial - [DBAs are Out of Style and Now There’s a Hole In Your Database](https://www.laurencegellert.com/2017/07/dbas-are-out-of-style-and-now-theres-a-hole-in-your-database/) - The concept of a DBA - database administrator, has practically gone out of style as a full time job. DBA work, if it is being done, is handled by someone or something else, perhaps in a more vanilla way that works well enough for most systems. However, if the DBA work is being ignored then - [Some Tips on Improving your Social Skills (for Software Devs)](https://www.laurencegellert.com/2017/04/quick-social-skills-tips-for-software-developers/) - After 7 hours heads down working on code the last thing I want to do is talk to someone. In fact, I'm probably so in the zone by that point I'd likely go on to code for another 1-5 hours before calling it a day. Writing code is what I've built my life around. The - [The Number e in Calculus](https://www.laurencegellert.com/2004/07/the-number-e-in-calculus/) - One of my closest math tutors once told me he had a student who asked the question: "Was math discovered or invented?" I think the answer is probably 'both'. Some math I find beautiful. Thinking about it can really clear my mind. Especially the number 'e', which must have been discovered, since it has more - [JavaScript the Good Parts - Review](https://www.laurencegellert.com/2012/03/javascript-the-good-parts-review/) - First, let's start with a little joke about JavaScript: See the difference? This book is targeted at helping readers understand the 'low level' implementation details of JavaScript. The code examples on nuances of the language are the best I have found. As a primer, check out Douglas Crockford's website, which has a lot of the same information - [A funny meme, for all those rock star coders out there](https://www.laurencegellert.com/2013/12/a-funny-meme-for-all-those-rock-star-coders-out-there/) - I don't always test my code, but when I do, I do it in Production. - [On Pluggers, Rockstars, Ninjas, and other fun labels for developers - which are you?](https://www.laurencegellert.com/2014/01/on-pluggers-rockstars-ninjas-and-other-fun-labels-for-developers-which-are-you/) - My first boss taught me there are two types of programmers: pluggers and rock stars. It was the late 90’s, and programming talent was in high demand. I was the young gun they brought in. A plugger would not have worked out they told me. There was just too much opportunity to be had! We - [Quick guide to freeing up disk space in Ubuntu 16.04](https://www.laurencegellert.com/2016/09/quick-guide-to-freeing-up-disk-space-in-ubuntu-16-04/) - Ubuntu retains apt package downloads. It also default installs all locales (language packs). These can be freed up to reclaim as much disk space as possible. This should come in handy on VPS servers, especially the smaller ones backed by SSDs. For example the smallest Linode server currently available is a 24GB SSD so every - [Backup to AWS S3 with multi-factor delete protection and encryption](https://www.laurencegellert.com/2016/11/backup-to-aws-s3-with-multi-factor-delete-protection-and-encryption/) - Having secure automated backups means a lot to me. This blog post outlines a way to create encrypted backups and push them into an AWS S3 bucket protected by MFA and versioning, all with one command. There are four parts to getting the backup big picture right: Step 1 – secure your data at rest - [Ping your sitemap to Google and Bing with a bash script](https://www.laurencegellert.com/2016/12/ping-your-sitemap-to-google-and-bing-with-a-bash-script/) - If you are using a sitemap.xml file you know you need to submit it to the search engines on a regular basis (say nightly). This is done via a GET request to each search engine's 'ping' URL. Many of the solutions out there for automatically pinging your sitemap.xml file to Google and Bing rely on - [Associative Arrays in JavaScript](https://www.laurencegellert.com/2012/01/associative-arrays-in-javascript/) - Associative Arrays in JavaScript are a breed of their own. It is a side effect of the weak typing in JavaScript. To understand the issue, let's walk through some examples: The length property is not defined as it would be in a normal array: var basicArray = new Array(); basicArray[0] = "Portland"; basicArray[1] = "Beaverton"; - [Django Group By Having Query Example](https://www.laurencegellert.com/2016/09/django-group-by-having-query-example/) - Example Group By Having query in Django 1.10. Let's say you have SQL such as: SELECT DISTINCT user_id, COUNT(*) FROM my_model WHERE tag_id = 15 OR tag_id = 17 GROUP BY user_id HAVING COUNT(*) > 1 The above query finds all the user_ids in the my_model table with both tag id 15 and 17. In - [Django enable SQL debug logging in shell how to](https://www.laurencegellert.com/2016/09/django-enable-sql-debug-logging-in-shell-how-to/) - How to get Django to show debug SQL logging output in the shell. Works in Django 1.10! Start the Django shell: python manage.py shell Paste this into your shell: import logging log = logging.getLogger('django.db.backends') log.setLevel(logging.DEBUG) log.addHandler(logging.StreamHandler()) The last line log.addHandler(logging.StreamHandler()) may not be needed if you already have a StreamHandler in your logging config. Worst - [Webservice API design tips – correct pagination and exposing deleted rows](https://www.laurencegellert.com/2016/08/webservice-api-design-tips-correct-pagination-and-exposing-deleted-rows/) - After working with dozens of REST, SOAP and 'ad-hoc' web services / APIs I've noticed a similar set of design problems by companies big and small. One gotcha I almost always see left out of an API is an easy way to determine which records were deleted or moved on the backend. Another gotcha is implementing - [Launch Plans - Your Ticket to Excellence](https://www.laurencegellert.com/2011/10/launch-plans-your-ticket-to-excellence/) - McDonald’s has a checklist for making a Big Mac, but surgeons also use checklists so they don't cut off the wrong limb of a patient. Checklists sound mundane, but they ensure quality. In the case of a Big Mac, the checklist makes for a consistent low cost product. In the case of a surgical operation, - [Basic Coding Standards and Guidelines](https://www.laurencegellert.com/2012/06/basic-coding-standards-and-guidelines/) - Naming conventions in coding are important for maintainability and quality. Without a standard to follow, each developer (and sometimes each file) will take on a standard of its own (or be just a random mash of whatever). Deciding on a standard as a group is tougher than it sounds. Discussing standards leads to holy wars. - [Architectural Components to Plan For From Day 1](https://www.laurencegellert.com/2012/07/architectural-components-to-plan-for-from-day-1/) - Businesses rely in part, on technology, to differentiate themselves. There is no cookie cutter solution that allows a business an exclusive chance to be better and faster at serving customers. Simple solutions are already used by everyone, so there is no edge to be had. As a result of this market force, custom software is - [What is a Full Stack developer?](https://www.laurencegellert.com/2012/08/what-is-a-full-stack-developer/) - Is it reasonable to expect mere mortals to have mastery over every facet of the development stack? Probably not, but Facebook can ask for it. I was told at OSCON by a Facebook employee that they only hire 'Full Stack' developers. Well, what does that mean? To me, a Full Stack Developer is someone with - [How to write a proper commit message](https://www.laurencegellert.com/2013/07/how-to-write-a-proper-commit-message/) - No matter what versioning system you are using (Git, Mercurial, Subversion, TFS, CVS), a useful commit message is just as valuable as adhering to coding style and leaving behind useful comments. Why care about commit messages? If you ever need to look back through the commit log to find when a change was introduced, you - [Mastery over Negativity - Dealing with Negative Geeks](https://www.laurencegellert.com/2015/04/mastery-over-negativity-dealing-with-negative-geeks/) - I think it is okay to be negative about a given software technology, but it has to be for the right technical reasons in the context of the problem at hand. For the most part what goes on is bashing with scant substance behind it. Thankfully that sort of bashing can safely be ignored, but - [Django Automatic Slug Generator Abstract Class](https://www.laurencegellert.com/2016/04/django-automatic-slug-generator/) - Using Django, an example of how to auto populate a slug field based on the name or title of whatever the thing is. Correctly handles duplicate values (slugs are unique), and truncates slug if value too long. Includes sample unit tests! The built in Django model.SlugField() is basically the same thing as a model.CharField(). It - [Gist CSS for Wordpress That Looks Better](https://www.laurencegellert.com/2014/05/gist-css-for-wordpress-that-looks-better/) - Here is the CSS I'm using for my WordPress blog to improve the way Gists look. UPDATE 4/2016 - There used to be a major post here with a Gist, but I recently discovered GitHub improved their CSS making my old post irrelevant. GitHub fixed their embed code CSS a lot! Now all I do - [Three Failings of Scrum and the Old School Solution](https://www.laurencegellert.com/2015/12/three-failings-of-scrum-and-the-old-school-solution/) - Everywhere I look I see software rapidly falling into obsolescence that will need to be re-written soon. A good example is how rapidly JavaScript (ECMAscript) is evolving. In a few years nobody will get excited about maintaining a ECMA5 code base... this is already true for some early Angular 1.x apps, am I right??? Another - [Sending emails through Comcast on Ubuntu using ssmtp](https://www.laurencegellert.com/2015/02/sending-emails-through-comcast-on-ubuntu-using-ssmtp/) - Ssmpt is a light weight mail package that is easy to configure and suitable for my needs during local development. It is basically a mail forwarder, can't receive email, and has very few settings relative to a program like sendmail. Comcast is notorious for requiring email sent on its network to go through its smtp - [Python Strategy Pattern](https://www.laurencegellert.com/2011/08/python-strategy-pattern/) - The strategy pattern can be a nice way to improve flexibility when accessing external resources. For example an application might have images referenced in Flickr and a relational database. You want to be able to search both places, but you also want your API to be the same. There are lots of ways to do - [Correct use of PHP's 'at' operator with speed benchmark](https://www.laurencegellert.com/2014/09/correct-use-of-phps-at-operator-with-speed-benchmark/) - In PHP placing an @ symbol in front of an expression (variable or function call) tells php to suppress any error messages that expression generates. I find this to be a handy piece of syntactic sugar. When used correctly the gains in code readability far outweigh the costs in terms of performance (which I benchmark - [Ever heard of inodes? You need lots of them.](https://www.laurencegellert.com/2014/05/ever-heard-of-inodes-you-need-lots-of-them/) - Ran into a situation on a customer's CentOS server the other day where a service wasn't working. Symptoms and error messages indicated the disk was full. However '$ df -h' was showing ample free space. What the heck? Turned out the maximum number of files on the disk had been consumed. Technically speaking, the limiting - [Compression utility pngout - a free lunch, bytes are on the menu](https://www.laurencegellert.com/2013/06/compression-utility-pngout-a-free-lunch-bytes-are-on-the-menu/) - Pngout is a free command line utility for compressing png files without any loss in image quality. Pngout compresses PNG files really really well (10-30% savings is typical). That translates into real dollars in terms of storage and bandwidth for large scale sites. Most importantly it reduces page load time. If that doesn't get you excited - [Pros and Cons of RDS vs EC2 for MySQL with AWS](https://www.laurencegellert.com/2013/05/pros-and-cons-of-rds-vs-ec2-for-mysql-with-aws/) - I recently published a benchmark of EC2 vs RDS MySQL performance. This article is a follow up to that. Specifically, I'm comparing EC2 vs RDS in the situation where one EC2 instance is being used as a combined app server and database server and it is time to upgrade because of load. When a single - [HTML5 Canvas Font Rendering Results](https://www.laurencegellert.com/2013/04/html5-canvas-font-rendering-results/) - Just launched the first version of an online product builder for Pacific Headwear at CapBuilder.net. It makes intensive use of HTML5/Canvas technology. What a fun project! This project pushed the limits of Canvas technology and replaced the previous Flash based cap builder Pacific Headwear was using. One of the biggest challenges was making sure the builder - [MySQL query for obtaining unique list of domain names with count from email field](https://www.laurencegellert.com/2013/03/mysql-query-for-obtaining-unique-list-of-domain-names-with-count-from-email-field/) - The following MySQL query is useful for getting a count of all the domain names used by email addresses in your database. It isolates the domain name (after the @ sign) in the email field. SELECT substring_index(email, '@', -1), COUNT(*) FROM login GROUP BY substring_index(email, '@', -1); It can also be used to track down - [Using your browser as a dev tool to test HEAD requests](https://www.laurencegellert.com/2013/03/using-your-browser-as-a-dev-tool-to-test-head-requests/) - A HEAD requests check to see if the resource exists, and what kind of data it might provide. The key to a HEAD requests is the response contains no data, headers only. I've been noticing HEAD requests resolving as 404 errors in one of my application log files. I think these are coming from sites - [What makes a software team gel?](https://www.laurencegellert.com/2012/11/what-makes-a-software-team-gel/) - A software team that has gelled continuously runs above expectations. Bugs are fixed before they are logged. There is a feeling that anything can and will be accomplished. A team in gel state reflects well on the quality of the product, but more importantly on the bottom line. There are huge productivity gains to be - [Embedded Twitter Feed on My About Page](https://www.laurencegellert.com/2012/10/embedded-twitter-feed-on-my-about-page/) - Wow twitter, embedding my twitter feed (called a user timeline) on my about page was super easy. To embed your own user timeline: Start at the twitter site. Click the Gear Icon -> Settings -> Widgets (on the left) -> Create New -> User Timeline. Configure it the way you want, then copy/paste the script - [Sublime 2 Tip - Excluding minified project files](https://www.laurencegellert.com/2012/09/sublime-2-tip-excluding-minified-project-files/) - Sublime Text 2 is my new best friend as an editor. It is fast, it anticipates my needs, and it doesn't get in my way. So far, every nit I have encountered with it has an easy fix. For example, I often use the "Find In Files..." feature to cross reference where a certain identifier - [Geekonomics - Software that kills](https://www.laurencegellert.com/2011/05/geekonomics-software-that-kills/) - I just finished reading the book Geekonomics - the real cost of insecure software. The book sums up commercial software development from a business perspective succinctly: "Don't worry, be crappy." http://www.geekonomicsbook.com/ It is a pretty interesting topic - and should be required for any software professional, especially managers! The author tends to hammer home the same - [Dealing with Chaos on a Software Project](https://www.laurencegellert.com/2012/06/dealing-with-chaos-on-a-software-project/) - Many software projects find themselves in chaos. Perhaps the department is growing like crazy, new hires left and right, no one really understands the project but a launch is on the horizon. Another option is the department is short staffed and is under considerable pressure to deliver. Political battles and turf wars are being waged - [Responsive Design Testing Tool Launched](https://www.laurencegellert.com/2012/04/response-design-testing-tool-launched/) - Just posted this CSS Responsive Design testing tool. You can enter your site's URL and it will render it at a variety of resolutions. Enjoy! - [Responsive Design Theme Implemented](https://www.laurencegellert.com/2012/03/theme-updated/) - New blog theme was launched tonight! The theme name is Brunelleschi, by Kit MacAllister. He's also from Portland. Here's what I love about the theme - it uses Responsive Design. For a demonstration of what Responsive Design is, try re-sizing this browser window, or loading it with your phone or tablet. Notice how the site - [PHP Fat-Free Routing Examples](https://www.laurencegellert.com/2012/02/php-fat-free-routing-examples/) - The PHP Fat-Free framework is the best library I have found in the PHP world for SEO friendly URL routes (eg, /people/{some_username}). It is simple, flexible, and gets the job done with only a 58KB footprint! This can be thought of as the 'C' in MVC, for controller, which handles incoming requests and provides the - [Interview with a Software Lawyer](https://www.laurencegellert.com/2011/10/interview-with-a-software-lawyer/) - I met Aaron Williamson at OSCON this year. Aaron works as a legal counselor at the Software Freedom Law Center in New York. He is an expert on software law and open source licensing. After one of his talks I approached him and asked if I could interview him and share the transcript online. Well, here it - [Java Startup Memory Issue Solved](https://www.laurencegellert.com/2011/11/java-startup-memory-issue-solved/) - Towards the end of every week, my version of WebLogic stops cooperating and shows a memory error when I try to start it. Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine. It doesn't make sense because I have plenty of free memory - [Some good quotes](https://www.laurencegellert.com/2011/02/some-good-quotes/) - The big question is whether you are going to be able to say a hearty yes to your adventure. - Joseph Campbell An investment in knowledge pays the best interest. - Benjamin Franklin Neither a lofty degree of intelligence nor imagination nor both together go to the making of genius. Love, love, love, that is the - [Command Line SSH Tunnel Port Forwarding](https://www.laurencegellert.com/2011/01/command-line-ssh-tunnel-port-forwarding/) - Tutorial on command line SSH tunneling, port forwarding. How to setup an SSH tunnel using bash scripting. SSH port forwarding (aka tunneling) is useful for getting into remote systems securely. If you need to access a database server, source repository, or other service that is blocked off by a firewall (except for ssh), a tunnel will - [Memory Usage in PHP Frameworks](https://www.laurencegellert.com/2011/06/memory-usage-in-php-frameworks/) - I ran some tests across different PHP frameworks to see how much memory a single page request uses (FatFree, Symfony 1.0x, WordPress, and Drupal). I also asked some colleagues to share what they got. This is based on PHP 5.2 and 5.3 on a mix of Linux, Windows, and Mac. In other words, the results - [MySQL Maintenance Tasks for InnoDB with MySQL 5.1](https://www.laurencegellert.com/2011/07/mysql-maintenance-tasks-for-innodb-with-mysql-5-1/) - From time to time, MySQL 5.1 databases need a little house keeping. We found our production DB had a hard time running a simple join query between two tables with about 400k rows. It was taking between 30 and 100 seconds to run. On QA however, it was taking 58 milliseconds. The columns involved were - [Memory Based Simultaneous User Limit](https://www.laurencegellert.com/2011/07/memory-based-simultaneous-user-limit/) - As a follow on to my last post about PHP memory consumption, I wanted to get some ideas out there about memory utilization. This post explores: An equation for the maximum number of users an application can support on a given server. What can happen when the maximum number of users is exceeded. How memory consumption impacts - [Here Comes CentOS](https://www.laurencegellert.com/2007/12/here-comes-centos/) - Take the song "Here Comes Santa Clause", and instead sing "Here comes Cent-OS". Here comes CentOS! Here comes CentOS! Right down CentOS Lane! Linus and Stallman and all their c-code, making up the brains, Files are loading, packets pinging, All is secure and tight Make your backups, read the Tao, 'Cause CentOS boots tonight! Here ## Pages - [Software Development Blog](https://www.laurencegellert.com/) - Posts on Application Development, Book Reviews, Business, Code, Data, For New Developers Fun Nerdy, Science and Math, Sys Admin, Work - [About Laurence](https://www.laurencegellert.com/about-page/) - I am an experienced software developer specializing in Python/Django, JavaScript (React, Angular, jQuery), iOS/Android hybrid apps, API integrations, and AWS. Aside from Python which has been my language of choice recently, past jobs utilized Java (Spring, Hibernate, CFX, Maven, etc), PHP, and a few with C#/.NET. So I'm a generalist who leans toward Python and - [Laurence Gellert's Blog](https://www.laurencegellert.com/home/) - Re: Software is my life so make it a good one. - [Fundamental Software Skills Book](https://www.laurencegellert.com/software-skills-book/) - Get the context needed to be a successful software developer based on my 20 years of experience: tools, quality coding, data handling, APIs, frameworks and more. - [Newsletter](https://www.laurencegellert.com/newsletter/) - [Privacy Policy](https://www.laurencegellert.com/privacy-policy/) - Privacy TLDR; This is a blog so there isn't much going on in terms of data collection here but there are a few things you need to be aware of. Newsletter - if you signup for the newsletter (fields: email, accept privacy policy) that information is stored in the blog's database. You can unsubscribe from - [Meeting Cost Calculator with Timer](https://www.laurencegellert.com/calculators/meeting-cost-calculator-with-timer/) - Meetings are a great thing when conducted correctly. The flip side is a meeting where one person blabs for an hour, or people talk at each other and accomplish nothing but posturing. I think Colin Powell said it best "Having suffered through endless, pointless, mindless time-wasters for years, I have evolved certain rules for - [Calculators](https://www.laurencegellert.com/calculators/) - Here is a collection of calculators that software professionals may find interesting or useful. Meeting Cost Calculator With Timer - [Software](https://www.laurencegellert.com/software/) - Here are links to software tools I have released as part of my blog: GitHub Activity Graph Designer / Builder Customize your github activity graph by drawing whatever design you want. It generates a set of commits that seeds the activity graph by changing GIT_AUTHOR_DATE and GIT_COMMITTER_DATE. Thanks to this tool we can all have - [Android Float Picker Widget](https://www.laurencegellert.com/software/android-float-picker-widget/) - Float Picker Widget is an open source Android based widget for picking a number using plus and minus buttons, no typing required. Widget supports whole numbers, decimals, positive values, and negative values. Configuration options include increment size, number of decimal places, minimum value, maximum value, etc. When user holds down button, the widget will continue - [CSS Responsive Design Testing Tool](https://www.laurencegellert.com/software/css-responsive-design-testing-tool/) - [Contact](https://www.laurencegellert.com/contact/) - [Archives](https://www.laurencegellert.com/archives/) - All the blog posts I've published are listed on this page. - [Github Activity Graph](https://www.laurencegellert.com/software/github-graph-builder/) - Fake out your GitHub activity graph with this designer tool! Customize your GitHub activity graph however you like using this drawing tool. It generates a set of commits that seeds the activity graph by changing GIT_AUTHOR_DATE and GIT_COMMITTER_DATE. Free to use at your own risk - for entertainment purposes only. - [Newsletter Signup](https://www.laurencegellert.com/newsletter-signup/) - [Search](https://www.laurencegellert.com/search/) ## Categories - [Science and Math](https://www.laurencegellert.com/category/science-and-math/) - [Fun Nerdy](https://www.laurencegellert.com/category/fun-nerdy/) - [Work](https://www.laurencegellert.com/category/work/) - [Sys Admin](https://www.laurencegellert.com/category/sys-admin/) - [Book Reviews](https://www.laurencegellert.com/category/book-reviews/) - [Data](https://www.laurencegellert.com/category/data/) - [Code](https://www.laurencegellert.com/category/code/) - [Application Development](https://www.laurencegellert.com/category/application-development/) - [Business](https://www.laurencegellert.com/category/business-2/) - [For New Developers](https://www.laurencegellert.com/category/for-new-developers/) ## Tags - [math](https://www.laurencegellert.com/tag/math/) - [calculus](https://www.laurencegellert.com/tag/calculus/) - [nature](https://www.laurencegellert.com/tag/nature/) - [linux](https://www.laurencegellert.com/tag/linux/) - [fun](https://www.laurencegellert.com/tag/fun/) - [joke](https://www.laurencegellert.com/tag/joke/) - [startup](https://www.laurencegellert.com/tag/startup/) - [office](https://www.laurencegellert.com/tag/office/) - [security](https://www.laurencegellert.com/tag/security/) - [development](https://www.laurencegellert.com/tag/development/) - [software](https://www.laurencegellert.com/tag/software/) - [command line](https://www.laurencegellert.com/tag/command-line/) - [encryption](https://www.laurencegellert.com/tag/encryption/) - [MongoDB](https://www.laurencegellert.com/tag/mongodb/) - [career](https://www.laurencegellert.com/tag/career/) - [java](https://www.laurencegellert.com/tag/java/) - [architecture](https://www.laurencegellert.com/tag/architecture/) - [qa](https://www.laurencegellert.com/tag/qa/) - [webdev](https://www.laurencegellert.com/tag/webdev/) - [html5](https://www.laurencegellert.com/tag/html5/) - [flash](https://www.laurencegellert.com/tag/flash/) - [scripting](https://www.laurencegellert.com/tag/scripting/) - [cloud](https://www.laurencegellert.com/tag/cloud/) - [multimedia](https://www.laurencegellert.com/tag/multimedia/) - [leadership](https://www.laurencegellert.com/tag/leadership/) - [android](https://www.laurencegellert.com/tag/android/) - [python](https://www.laurencegellert.com/tag/python/) - [business](https://www.laurencegellert.com/tag/business/) - [JavaScript](https://www.laurencegellert.com/tag/javascript/) - [aws](https://www.laurencegellert.com/tag/aws/) - [tools](https://www.laurencegellert.com/tag/tools/) - [economics](https://www.laurencegellert.com/tag/economics/) - [freemium](https://www.laurencegellert.com/tag/freemium/) - [social media](https://www.laurencegellert.com/tag/social-media/) - [Windows8](https://www.laurencegellert.com/tag/windows8/) - [canvas](https://www.laurencegellert.com/tag/canvas/) - [MySQL](https://www.laurencegellert.com/tag/mysql/) - [RDS](https://www.laurencegellert.com/tag/rds/) - [bigdata](https://www.laurencegellert.com/tag/bigdata/) - [data science](https://www.laurencegellert.com/tag/data-science/) - [ecommerce](https://www.laurencegellert.com/tag/ecommerce/) - [php](https://www.laurencegellert.com/tag/php/) - [git](https://www.laurencegellert.com/tag/git/) - [django](https://www.laurencegellert.com/tag/django/) - [sql](https://www.laurencegellert.com/tag/sql/) - [scrum](https://www.laurencegellert.com/tag/scrum/) - [education](https://www.laurencegellert.com/tag/education/) - [communication](https://www.laurencegellert.com/tag/communication/) - [APIs](https://www.laurencegellert.com/tag/apis/) - [REST](https://www.laurencegellert.com/tag/rest/) - [Web Services](https://www.laurencegellert.com/tag/web-services/) - [learning](https://www.laurencegellert.com/tag/learning/) - [WordPress](https://www.laurencegellert.com/tag/wordpress/) - [databases](https://www.laurencegellert.com/tag/databases/) - [Windows10](https://www.laurencegellert.com/tag/windows10/) - [json](https://www.laurencegellert.com/tag/json/) - [ada](https://www.laurencegellert.com/tag/ada/) - [Mac](https://www.laurencegellert.com/tag/mac/) - [Windows](https://www.laurencegellert.com/tag/windows/) - [ChatGPT](https://www.laurencegellert.com/tag/chatgpt/) - [AI Research](https://www.laurencegellert.com/tag/ai-research/)