The VP Geek Speaks
- Home /
- The VP Geek Speaks
Links Not Working? Check AdBlock Plus
It turns out that the issues with useForcedLinkTracking are not isolated just to Safari’s popup blocker. Unfortunately, one of the most popular browser for both Chrome and Firefox, AdBlock Plus is subject to this issue as well.
One of the things that the AdBlock Plus plugin does is attempt to intercept any and all link traffic to determine whether it was created from an actual mouse click or if it was triggered through JavaScript as part of a marketing campaign. When used on a site with Adobe’s SiteCatalyst analytics with useForcedLinkTracking turned on and target="_blank" set in the hyperlink, you will trigger the issue. If you run into this issue, you can fix it by:
Write Software for People, Not Computers
Throughout a normal day, I end up reading a lot of information about current issues in technology, and today is no different. There was a debate raging about whether or not high-level math was required for programmers that was sparked by this article by Sarah Mei Programming is not math. While it is an interesting topic, and, surprisingly, I mostly agree with Sarah on this issue, that is not the most important portion of her post. The important part is instead a quote from Structure and Interpretation of Computer Programs from MIT Press, and is as follows:
The Easiest Way to Create A Solution That Works
The easiest way to create a solution that works…is to do it right the first time. Yes, this is a bit of a cop-out, but it turns out to be an important factor to keep in mind when you are tempted to come up with a quick and dirty solution for a problem that does not follow established best practices and is likely to have code quality issues later.
I have run across many sections of code that I or other developers have written in the past that we thought were “good enough” at the time it was written, yet, I was revisiting the code because we discovered a bug in it. Many times, this code had an issue that would have been trivial to fix at the time it was written, if it were only found. It seems that as a developer, we tend to find the least sufficient solution that will solve the immediate problem we are experiencing instead of finding an optimal solution that will be easily maintained months and years after it was written.
Performance Testing with Siege
One of the most important things to consider when evaluating a website is how well the site performs under load. For many eCommerce websites, there is a higher volume of traffic to the website on Cyber Monday, which is the Monday after Thanksgiving. One of the sites I work with typically sees traffic to its site quadruple on this one day of the year compared to the average traffic. However, when you anticipate something on your site making it to the front page of Digg or Slashdot, your site can easily see a jump of an order of magnitude (10X) or more.
Estimating Software Development Projects is Hard
As a software developer, working with non-technical management and end users to define a deadline for when a project will be ready to use or how long it will take from start to end of a project is an extremely complex task. Unfortunately, the non-technical audience thinks that it should be simple to give some sort of estimation on the fly without detailed analysis of the project and what it involves, as it seems simple for them to estimate tasks that are like ones they have done before.
Ignore Whitespace Not Available in BitBucket Pull Requests
When looking for an online location to use as the host for source code, many people by default look at GitHub, as it seems to be the most well-known option out there, and is free for open source projects. However, if you would like your source code to be kept private, or would rather use Mercurial instead of Git, GitHub may not be the place for you. Instead, I would suggest BitBucket as your source code repository provider.
Always Use Automated Integration Testing
QA or Quality Assurance of a software project is often the area of software development that is most neglected. Typically developers avoid software testing like their lives depended on it. While a basic level of testing is required for a single scenario to validate that your code “works”, the level of testing that is required to ensure that all users have a good user experience across all targeted platforms is something that a developer seems to think is beneath them.
AddThis Can Cause Your Site To Not Load
Over the last few days, I have run across quite a few websites that seem to never finish loading. After waiting for 20 seconds or more, I give up, realizing that whatever content was on the site wasn’t worth it anymore for me to stare at a blank white browser until it loaded however much longer. Unfortunately for those websites, they are losing traffic that they will never get back.
== and === in JavaScript and HTML Input Elements
If you read any current information about best practices in JavaScript, you will typically find the following advice somewhere in the list of things to do.
Always use
===and!==while avoiding==and!=
While I will never argue against this advice, there are a few things that a developer shoule realize when using === and !== instead of == and !=.
===and!==first do a check of the data type of the two objects you are comparing. JavaScript never forces you to explicitly define the datatype for an object you are creating as it will automatically assign one based on the contents of the object and how it was created.- The output of all of the Math functions produce integers or floats as the datatypes for the resultant numbers. For example,
Math.floor(10.39438)will produce10. - When retrieving the value of any
selectorinputortextareais always return as a string. This means that even though the value of the string may be a perfectly good number, it will never match a number data type. For example"10"is not equal to10when using the===.
You should always use === and !== instead of == and !=, but you should make sure you understand the datatypes you are dealing with so that your comparison works as expected without any surprises at runtime.
Always URL Encode your Cookies
One of the things that you tend to forget about when dealing with websites that typically only cater to English-speaking visitors is how to properly deal with Unicode throughout the site. It turns out that some browsers handle Unicode support in different sections of the browser differently.
For instance, it turns out that when you want to store Unicode data as the value in a cookie, your success may vary across browsers. When I tested this with the Euro symbol, €, it worked without a hitch in Chrome, Safari, and Internet Explorer. However, in Firefox, it was stored as an empty string. In order to correct the issue, you can use encodeURI() on the Unicode character to get the ASCII version of the Unicode character, and then store that in the cookie. Fortunately, this seems to work without issue across all of the major browsers.
Categories
Tags
- 100pounds
- 2020
- Acp
- Adblock-Plus
- Adoption
- Agentic
- Agents
- Agile
- Ai
- Ai-Agents
- Amazon
- Apache
- Apple
- Architecture
- Authorize-Net
- Automation
- Azure
- Bing
- Bingbot
- Blog
- Book-Reviews
- Books
- Burnout
- Business-Tools
- Cache
- Career
- Chatgpt
- Chrome
- Cicd
- Claude
- Cloudflare
- Code-Quality
- Code-Review
- Codex
- Coding
- Coding-Agents
- Compass
- Conversion
- Copilot
- Css
- Culture
- Cursor
- Cve
- Design-Patterns
- Developer-Experience
- Developer-Tools
- Developer-Velocity
- Development
- Disqus
- Docker
- Documentation
- Enterprise
- Fine-Tuning
- Firefox
- Future-of-Work
- Gemini
- Genesis-Framework
- Getting-Started
- Ghost-Tag
- Github
- Github-Copilot
- Githubpages
- Google-Slides
- Google-Workspace
- Governance
- Helper
- Hiring
- How-Not-To
- How-To
- Html
- Hugo
- Infrastructure
- Integration
- Internet-Explorer
- Interviews
- Iphone-6
- Javascript
- Jekyll
- Jetbrains
- Jquery
- Junior-Developers
- Knowledge-Management
- Laravel
- Leadership
- Legal
- Lessons-Learned
- Local-First
- MacOS
- Magento
- Magento 2
- Magento2
- Management
- Mcp
- Meetings
- Mental-Health
- Mentorship
- Metr
- Metrics
- Microsoft
- Moltbot
- Multi-Agent
- Mysql
- Netlify
- Nginx
- Nodejs
- Open-Source
- Openai
- Openclaw
- Orchestration
- OSX
- Performance
- Personal
- Php
- Policy
- Presentations
- Process
- Productivity
- Programming
- Prompt-Injection
- Pull-Requests
- Python
- Quality
- Rant
- Remote-Work
- Research
- Responsive-Web-Design
- Retrospective
- Roi
- Safari
- Sales
- Scrum
- Security
- Senior-Engineers
- Series
- Sitecatalyst
- Sota
- Sql
- Sql-Server
- Tasks
- Teams
- Technical-Debt
- Testing
- Tier-Pricing
- Tips
- Tmobile
- Tools
- Trust
- Unittest
- Ux
- Varnish
- Verification
- Vibe-Coding
- Visual-Studio
- Web-Development
- Windows-7
- Windows-Vista
- Woocommerce
- Wordpress
- Workflow
- Workflows
- Xml