Support and Expand
Our project managers and engineers can take over your existing project and bring new life to your business.
Elizabeth Garrett Christensen
January 13, 2020
Co-authored by Greg Hanson
Tax collection is one of the topics du jour for those of us in the ecommerce industry. Since state and local authorities are now able to levy taxes on ecommerce goods, taxation for online stores has become quite complicated. The purpose of this post is to give you some next steps and ideas on implementation if you’re new to the topic and need to know how to get started on tax collection for your ecommerce business.
Current ecommerce sales tax policy stems from the 2018 U.S. Supreme Court decision South Dakota v. Wayfair, Inc. Since that decision, favoring South Dakota, 30 states have enacted legislation to require ecommerce stores to pay sales tax if they fit the definition of having an ‘economic nexus’, that is, they do enough business in the state to be worth taxing.
So the first and most important note is to get your own legal counsel in regards to your taxes. There are many rules and things are changing every month with local and state authorities, so you’ll need reliable counsel on the topic.
If you’re looking for someone to help, make sure this person has:
Luckily for anyone starting to collect sales tax, there are some very good SaaS (software as a service) systems out there to make tax collection, reporting, and compliance easy. These software systems typically integrate with your ecommerce store by providing the store with the correct tax amount for the sale and collecting information for you on your reports and filing information to get the taxes...
Juan Pablo Ventoso
January 7, 2020
We live in a competitive world, and the web is no different. Improving latency issues is crucial to any Search Engine Optimization (SEO) strategy, increasing the website’s ranking and organic traffic (visitors from search engines) as a result.
There are many factors that can lead to a faster response time, including optimization of your hosting plan, server proximity to your main traffic source, or utilization of a Content Distribution Network (CDN) if you are expecting visitors on an international level. Some of these solutions and many others can be implemented with only a couple hours of coding.
Nobody enjoys waiting for long load times. When opening a Google search link, being met with a blank page or a loading GIF for several seconds can seem agonizing. That’s why optimizing the initial rendering of your page is crucial.
The content that immediately appears to the user without the need to scroll down is referred to as “above-the-fold”. This is where your optimization efforts should be aimed. So here’s a plan to load and display as quickly as possible:
First, differentiate the critical styles and scripts you need to render the topmost content, and separate them from the rest of our stylesheet and external script references.
Finally, take the stylesheet and scripts link references from the
<head> tag (where it’s usually located) and move them to the end of the above-the-fold content.
Now, the user won’t have to wait until all references are loaded before seeing content. Tip: Remember to use the async tag on scripts whenever possible.
January 3, 2020
Like most of my co-workers, I spend a lot of time in a terminal emulator (console) in a shell at the Linux command line. I often come across tools that make work there nicer, but sometimes I forget about them before I integrate them into my workflow. So here are notes about a few of them for myself and anyone else who may find them useful.
a command line HTTP client with an intuitive UI, JSON support, syntax highlighting, wget-like downloads, plugins, and more.
Given how commonly-used curl, wget, and GET/POST (lwp-request) are, it is nice to see some innovation in this space to enhance usability.
Here is a simple example that demonstrates several HTTP redirects with full request and response headers, colorized:
http -v --pretty=all --follow endpoint.com | less -R
The color highlighting of the body, not just response headers, is the main difference here from curl, wget, etc.
Also nice for ad-hoc interactive use is that the verbose header output is sent to
stdout instead of
stderr, so it shows up in
less without needing to have the shell merge it with
2>&1 before piping to
In the above example, the client makes 3 requests, because the first 2 are redirects:
Normally we would want to reduce the number of HTTP redirects, so why not redirect straight from
Before the introduction of HTTP Strict Transport Security (HSTS) to the web, that is what we did.
But with HSTS it is better to pass through HTTPS for each hostname, so that the
Strict-Transport-Security HTTP response header can be sent and the browser can cache the fact that both the bare yourdomain.tld and www.yourdomain.tld should only be accessed via HTTPS.
See the thorough description at the Sentinel Stand blog post for more details, including a discussion of
Muhammad Najmi bin Ahmad Zabidi
December 31, 2019
Working as a system administrator means I have to spend quite some time during my work (and even during casual surfing) with the terminal. Sometimes I feel that certain information I want could just be fetched and parsed through the terminal, without having to use my mouse and point to the browser.
Some of the websites I visit use XML and JSON, which we could parse with Bash scripting. Previously I wrote a Ruby script to call Nokogiri to parse the XML elements until I found a Bash tool that could do the same thing.
These tools have already been around for quite a while—I’d just like to share what I did with them. The tools I used are xmlstarlet for XML parsing and jq for JSON.
I have the following XML elements, and I’ll save them to a file called data.xml:
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/"> <channel> <title>eSolat JAKIM : Waktu Solat Hari Ini</title> <link>Gombak,Petaling,Sepang,Hulu Langat,Hulu Selangor,Rawang,S.Alam</link> <description>Gombak,Petaling,Sepang,Hulu Langat,Hulu Selangor,Rawang,S.Alam</description> <dc:language>ms</dc:language> <dc:creator>www.e-solat.gov.my</dc:creator> <dc:rights>Copyright JAKIM</dc:rights> <dc:date>26-12-2019 00:37:31</dc:date> <admin:generatorAgent rdf:resource="expressionengine" /> <item> <title>Imsak</title> <description>05:53:00</description> </item> <item> <title>Subuh</title> <description>06:03:00</description> </item> <item> <title>Syuruk</title> <description>07:14:00</description> </item> <item> <title>Zohor</title> <description>13:16:00</description...
December 6, 2019
Giving a Career Talk to 1st Graders
This week, I gave a career talk to my daughter’s 1st grade class and I talked about my job as a software engineer. I started with this video, which depicts two kids explaining to their dad how to make a peanut butter sandwich (called the “Exact Instructions Challenge”), but he takes them very literally and acts as though he has no context on how to work with peanut butter, jelly, and bread. The video got some giggles!
After the video, I talked about how the video was similar to what I do: I give computers instructions, and like that silly dad, computers don’t know anything about what they are being told to do. I hope they understood the analogy!
We talked about what a computer is and how we all have a lot of computers at our house (“I have 5 Alexas at my house!”, “I have a PS4!”, “I have a PS2!”), even some that can turn the lights on and off now. I didn’t show them code because I didn’t think it would mean much to them, but a couple of the kids in the class had worked on kid-friendly coding projects.
I talked a little bit about my education (1st graders aren’t quite sure what this “college” thing is), and how I work from home. We talked about how I problem-solve, just like they do — right before the talk started, their teacher asked them to problem-solve so that everyone could have a chair! I explained that sometimes I problem-solve and figure out what the fastest way to do something is, or what another solution might be, but it might last longer. We also talked about how communication (reading and writing) are important in my job, so they should keep working on that!
The best part of the talk was Q&A, because I was able to understand what was in their big kid brains! Here are some of the questions I fielded:
Kürşat Kutlu Aydemir
November 26, 2019
Code review is analysis of source code of a software project by reading the code itself or sometimes using automated tools to analyze it, and it is part of the Software Quality Assurance (SQA) activities which define the quality assurance of the whole software development lifecycle. As we go through the flow of a code-review, we’ll understand what to assure by doing code review. Code review lifecycle covers the guidelines and the code review process itself.
- Specific: target one area clearly and precisely.
- Measurable: quantify progress toward success by using metrics.
- Actionable: ready to start and possible to accomplish.
- Relevant: connected to what’s being done, considered, and/or resourced.
- Timely: occurring at a favorable or useful time and opportune.
Regardless of what programming language is used to develop, code review should cover the following common areas:
Other practices can also be reviewed, like extensibility or OOP (Object Oriented Programming)...
Elizabeth Garrett Christensen
November 16, 2019
I do a lot of project management work related to web applications. Everyone assembles their own set of useful productivity tools and I’m feeling pretty good about how I’ve got things set up at the moment so I thought I’d share my secret sauce. I’m interested to hear what other people have found useful as well so feel free to share in the comments.
Ok, this one is all over the map. Slack is obviously the big one and many of our clients use that with us. Most larger organizations incur a cost (smaller projects are free). Internally End Point uses Zulip, which is a pretty decent open source application. Zulip doesn’t have as refined a user interface as Slack, but it works for our needs, and also has a mobile app I can use on the go.
I also highly recommend Skype. While it’s not the best system out there, so many people use it, it is almost impossible to avoid. Skype is really easy way to get someone’s attention and I use it with a lot of my clients for quick one-on-one questions and chats. Google Hangouts chat is also really nice for working with external folks and will run in your menu tray and mobile phone, so you can stay up to date wherever you’re working.
I spend a few hours on the phone a day and my go-to system at the moment is Zoom. End Point often uses Google Hangouts or Meet, but those require a Google account, which can be a burden for some clients or contacts who aren’t Google-ified. Zoom is pretty cost effective and lets you connect with someone via video chat or phone and even provides local numbers for your participants all over the globe. This is not only a great system for large group meetings, it is excellent for initial meetings or situations where you’re unsure if your group needs a phone or video call. Each participant can choose for themselves. It’s also technically the most stable and is far better about maintaining solid connection (for my OS/browser) when compared to Skype or Google Meet/Hangouts. I...
November 4, 2019
Support for CSS Grid is excellent (over 90% globally! 💯). I have been using it in a variety of client projects for the past few years with great success. The combination of CSS Grid and Flexbox has made layout on the web much simpler, more fun and less frustrating compared to the
hacks techniques which were used for CSS layout in the past. Definitely give it a try if you haven’t already done so.
IE10 and IE11 support an earlier version of the CSS Grid spec and with help from Autoprefixer we can reap the benefits of CSS Grid in those old browsers with a little bit of extra work. I’ve long been a huge fan and happy user of Autoprefixer. It’s a PostCSS plugin that examines your CSS and augments it with vendor prefixes and alternative syntaxes. Although vendor prefixes (e.g.
-o, etc.) are much less common these days, there are a few still in use.
With CSS Grid the basic idea is to define the grid, i.e. the rows and columns that make it up, and then go about placing elements on the grid. Think of a website layout with a masthead, navigation, hero image, main content sidebar, and footer as an example. Your grid styles can specify where each of these elements should be displayed on the grid: how many rows or columns they span, etc. In addition to this method of explicitly placing elements on the grid, auto-placement places elements on the grid for you automatically.
I recently learned how to use control comments in Autoprefixer to get fine-grained control over the way it operates on and enhances my CSS Grid styles. Rather than specifying a single (global) behavior via config options, control comments let you tell Autoprefixer how you would like it to process individual blocks of CSS code. For the scenario where I was explicitly placing elements on my grid I used the following control comment in my CSS file:
/* autoprefixer grid: no-autoplace */