In recent years, “algorithm” has gone from a niche word relevant mostly to computer scientists to an essential term for understanding how our data-rich world works. And as the use of algorithms becomes pervasive, a firm grasp of how to use them has become a major competitive advantage.
The online Master of Computer and Information Technology (MCIT) degree from the University of Pennsylvania is tailored for non-computer science majors who want to acquire proficiency with algorithms, programming, and other computing skills. Let’s look at three examples of how algorithms covered in the program are used in the real world:
Low-cost DNA sequencing has opened up new possibilities for medicine, offering the potential to diagnose and treat the growing number of diseases with genetic components. However, merely sequencing the DNA isn’t enough to determine the genes that cause some disease. With 3 billion base pairs in the human genome, algorithms are essential for biomedical researchers making sense of today’s vast landscape of genetic data.
Dynamic programming algorithms have been deployed since the early 1970’s for critical tasks such as DNA sequence alignment, protein folding, RNA structure prediction, and protein-DNA binding. Today, biomedical researchers rely on programs like BLAST (Basic Local Alignment Search Tool) and Clustal to compare DNA sequences against relevant databases. Publications involving BLAST and/or Clustal rank among the most-cited scientific papers of all time.
Synthesizing new chemicals is a similarly complicated task. How can one evaluate the trillions of synthesis pathways and millions of existing chemicals to identify those that are likely to be efficient and cost-effective?
The software program Chematica, hailed as “an internet for chemistry” upon its release in 2012, provides a solution using optimization algorithms to predict viable molecular synthesis pathways. Chemists can specify molecules using chemical names, registry numbers, or drawings of the molecule diagrams. Researchers have also demonstrated how to adapt Chematica algorithms to avoid synthesis pathways that have already been patented.This further boosts its usefulness for commercial applications.
Algorithms aren’t just for the hard sciences. We’re living in an era of unprecedented access to arts and culture that allows us to dive into archives of books, TV shows, movies, and music from all over the world in seconds.With humanity’s accumulated, cultural output now available at our fingertips, we face a new problem: how do we quickly find what we want to watch, read, or listen to at any given moment?
Providing automated and compelling cultural curation has become a huge business.ne of the best examples of a successful use of algorithms in this area is Spotify. In particular, its Discover Weekly feature is popular — it delivers listeners customized playlists of songs they haven’t heard but are likely to enjoy. Discovery Weekly and similar services rely on collaborative filtering algorithms derived from graph theory to map preferences and predict what users enjoy.
These are just three examples of how algorithms are creating new possibilities for a broad range of fields. MCIT Online will help students make high-impact contributions like the ones described, using the expertise they will acquire in dynamic programming, graph theory, optimization algorithms, and many other areas of computer science.
Codecademy’s very own Nick Duckwiler (left) and Ryan Tuck from Warby Parker (right) in our office. (📷: Mitch Boyer)
Last month, Codecademy and Warby Parker came together to work on a special Learn SQL from Scratch Capstone Project. It was during this time when I met Ryan Tuck, a Data Engineer at Warby, who played a major part in this partnership. So when he decided to drop by our office for the final QA round, I had to break out my notebook and ask some questions. Enjoy.
Hey Ryan, let’s start off with a question I’ve had for a while — what is a Data Engineer? (Is it similar to a Data Analyst or a Software Engineer?)
At Warby Parker, data engineers are responsible for creating and maintaining the plumbing required to support the data and reporting needs of the business. We use software engineering practices to automate the work of data cleaning, normalizing, and model building so that data is always ready to be consumed by data analysts in every department.
What languages/frameworks do you use at Warby?
On data engineering, we use Python as our general purpose programming language, as do most of the other teams in our Technology department. When it comes to databases, we use PostgreSQL for the majority of our SQL needs, and are beginning to use Amazon Athena and Google BigQuery for some of our larger datasets. We use Looker as our exclusive business intelligence entry point to all of this data.
What are some of the projects you worked on?
I’ve had the privilege of working with a lot of of smart people in every department at our company to help them solve their varied data needs, from reconciling financial data with the Accounting team to automating and modeling standardized performance metrics for our team of over 200 customer experience advisors.
As part of a team of five supporting the data needs of a rapidly growing company, I’ve tried where possible to focus on helping our analysts solve their own problems. This includes helping people learn Python and commit to our codebase, guiding the creation of data models in SQL, and encouraging people to submit pull requests to add features in Looker, our BI tool.
Seeing dozens of otherwise “non-technical” colleagues opening up PRs on a daily basis, and consequently being part of the democratization of tech that we value at Warby Parker, is probably the most rewarding “project” I’ve been a part of.
One project finished recently during our first annual “Hackweek” is called Pipes, which allows anyone at the company to easily move large amounts of data from wherever to wherever (Looker, Google Sheets, PostgreSQL, BigQuery, etc) on a regular cadence, or manually through a simple one-line chatbot interface. The adoption has been overwhelmingly positive and we’re looking to grow this sort of tooling out even more.
“We use software engineering practices to automate the work of data cleaning, normalizing, and model building so that data is always ready to be consumed by data analysts in every department.”
What got you into the data field?
I’ve always been drawn to analytical fields like math, and became pretty proficient in Excel during some internships in college. Once I had learned to program and learned more about data science and its applications in artificial intelligence, I knew that anything I could do to immerse myself in the world of data would be a step in the right direction.
Three and a half years ago, I landed a job as a junior software engineer at Warby Parker not fully knowing what I was in for, but am so glad I got the opportunity to help build tools to support an interesting and ever-changing data-driven culture here.
Where did you learn SQL and Python?
I had a background in C++, and was exposed to Python through an Intro to Data Science course. When Warby Parker hired me onto the Data team in 2015, I had never written a SQL query in my life, but picked it up quickly and within a few months started up internal SQL training classes, which I still teach on a monthly basis.
What does your tattoo say?
The ultimate cheatsheet.
This is Bayes’ Theorem, which is an equation that describes how to update probabilities given new evidence. Two summers ago I worked on building a tool to help predict weekly fantasy football performance. Some colleagues suggested a Bayesian approach would be appropriate, since there aren’t really enough data points in an NFL season to be able to use statistical approaches that require larger datasets, and I’d want to regularly update my predictions after each player’s latest performance.
I did a deep dive into understanding the (simple) math underlying Bayes’ Theorem and came out of that experience with a whole new worldview, understanding my entire knowledge of the world as a big and intricate probabilistic model that I was continuously updating with every experience I ever have. It was pretty transformative, and I figured that was worth a tattoo.
What is a concept in SQL/Python that’s essential to your work?
Donald Knuth said, “Premature optimization is the root of all evil.” I’ve generally found this to be true, and try to live by it in my work. For example, I’ll generally prefer to keep a data model simple by rebuilding it for all time on a daily basis using a single SQL query instead of making a more complicated model that requires iteratively adding to a table, keeping track of state, updated timestamps, when something last ran, etc.
A wise man once said, “Duplicating data makes things go fast,” but databases are already impressively fast to begin with, without implementing anything to improve performance. Ultimately, I almost always approach a problem thinking about optimizing for my time over machine time, for readability over performance, and for introducing as little cognitive overhead as is required by the problem at hand. Only once performance issues or readability issues present themselves will some code be worth a rewrite.
Last question! Since you wrote Warby Parker’s internal SQL training courses, I know there gotta be some inner Curriculum Developer in you. Can you teach a SQL concept in 2 minutes?
Sure! Have you ever written a query that yields some result set and you think, “I’d love to query the stuff I just produced like it was a table?” Enter the WITH clause.
Suppose I have a mega query that gives the transaction summaries:
select
transactions.date as transaction_date,
sum(items.price) as total_cost,
count(*) as number_of_items
from
transactions
inner join
customers
on
customers.id = transactions.customer_id
inner join
transaction_items
on
transactions.id = transaction_items.transaction_id
inner join
items
on
items.id = transaction_items.item_id
Using WITH, I can create a temporary table within my query that I can SELECT from and treat it just like a regular old table.
I will put everything from the previous query in a parentheses and use WITH to give it the name transaction_summaries.
Then I’ll apply the date and customer filtering down below for a more readable query, to separate out all the JOIN logic from the actual WHERE filters that I want to apply on that data.
with transaction_summaries as (
select
transactions.date as transaction_date,
sum(items.price) as total_cost,
count(*) as number_of_items
from
transactions
inner join
customers
on
customers.id = transactions.customer_id
inner join
transaction_items
on
transactions.id = transaction_items.transaction_id
inner join
items
on
items.id = transaction_items.item_id
)
select
*
from
transaction_summaries
where
first_name = 'beyonce'
and
transaction_date > '2018–01–01'
order by
total_cost desc
limit
5
If you’re familiar with subqueries, this does a similar thing but makes the SQL far more readable, even if your query isn’t quite as performant as it would have been. This is essentially an implementation of the mantra “Don’t Repeat Yourself” that’s common in the world of programming.
Incredible. And love the SQL styling! 😍
Huge shout out to Ryan and the whole Warby Parker team for making this partnership happen. Special hat tips for behind-the-scenes support from:
We all know that running a successful blog takes careful planning and ample promoting. Throw in sponsors, affiliates, mailing lists, guest posts, tracking stats, giveaways, and taking pictures and blogging quickly becomes a full-time job! With so many balls in the air, it can often be hard to keep track of everything and stay organized. That is why we have painstakingly worked to design the most comprehensive blog planner kit out there.
Our blog planner has been downloaded by over 70,000 bloggers and is the most popular, well-utilized blog planner out there. It has been designed for driven, full-time bloggers who are determined to increase blog income and traffic.
The pages included in the full planner will help you brainstorm post ideas, plan your weekly posts, set yearly & monthly goals, track yearly & monthly stats, keep track of affiliates, Facebook advertising, social media posts, newsletter campaigns, finances, usernames & passwords, giveaways, etc. You name it, and our blog planner kit has you covered.
There’s no better way to grow your blog than by strategic goal setting and regularly tracking your progress towards reaching your blogging goals. Using The Ultimate Blog Planner is key to blog organization and blogging success!
WHAT’S INCLUDED
The following 9 pages can be downloaded in US Letter size (8.5 x 11) ABSOLUTELY FREE by joining our mailing list through the button below:
Need more pages and/or sizes? Check out the extension package below!
“This is my third year using this planner and it covers absolutely everything I need. It’s a beautiful planner and the extension package is well worth the price.” – Tammy R.
GET THE EXTENSION PACKAGE
The extension package includes 52 additional meticulously designed pages of organizational goodness! The extension is available in four sizes (US Letter, A4, A5 & Personal) so it will fit the planner of your choosing. Here’s a look at what the extension package includes:
The extension pack is available in the following 4 page sizes: US Letter (8.5 x 11 inch – North America), A4 (8.3 x 11.7 inch / 210 x 297 mm – Europe/International), A5 (5.8 x 8.3 inch / 148 x 210 mm) & Personal (3.7 x 6.7 / 95mm x 171mm). You can choose one or more sizes at checkout.
Free Pages Included
The 9 free pages (above) are also included in the extension package, so you’ll receive the full 61-page planner in the size you choose with your purchase.
Ample Margins
The planner has been carefully designed with ample margin space to allow for holes to be punched without punching through any text.
Downloadable PDF Files
This planner is a digital item so you will not receive any physical products. The file(s) will arrive to you via email immediately upon purchase (if you don’t get them check spam). When you download the files, they will arrive in zipped folders. You will need to unzip/extract the files from the folder in order to access them. All files are in PDF format. You will need Adobe Reader to view and print them. Adobe Reader can be downloaded for free here.
Only Print the Pages you Need
This planner allows you to pick and choose only the pages you want to use so you aren’t lugging around unused pages. The Print Guide (included) will help you know how many of each page to print out. The Printing Instructions (included) will give instructions on how to print each of the different page sizes.
Update Subscription
Your extension pack purchase includes an optional subscription to yearly updates. To be notified of yearly updates, you MUST opt into our newsletter at checkout. New and/or updated pages will be available separately at a discounted price to subscribers only.
“I just love Designer Blogs. I have downloaded and used the Blog Planner and now the Life Planner. I enjoy very very much the emails I receive and the wallpapers. I will continue to look to Designer Blogs to fulfill various needs. A very professional yet personable company.” – Kat Y.
PAGE USE EXAMPLES
Are you ready to increase your blog income & traffic? Are you ready to absolutely slaughter your blogging goals? Are you ready for unbelievable blogging success?
Included in the free download are two desktop options – one with the calendar and one without the calendar. The others include one wallpaper per device.
You only have a few seconds to make an awesome first impression with your blog. You might have a gorgeous blog design and out-of-this-world content, but if your site takes FOREVER to load, people are going to be looking for the “back” (aka: “get me outta here”) button before they even have the chance to enjoy your blog in all of its glory.
If your blog takes longer than 3 seconds to load, it is loading TOO SLOW and is costing you visitors. Every second counts! Google’s PageSpeed Insights is a great tool to use to find out how fast or slow your site is loading. If your blog is loading too slow, the tips shared below will help make your Blogger blog load faster in no time.
1. Limit the Number of Posts on the Front Home Page of Your Blog
The more posts you show on your front page, the longer your blog will take to load. We recommend showing no more than 10 posts on the front page. However, if your posts are long and/or they have a lot of images, then it would be wise to show even fewer posts. To change the number of posts your home page shows, go to “Layout” > “Blog Posts” > “Edit.”
Under “Main Page Options,” switch the number of posts shown on the main page to a number less than 10. Then click the “Save” button. View your blog and it will now only show the number of posts you have set it to show.
2. Display Expandable Post Summaries
If you would prefer to show a lot of posts on your main page, using expandable post summaries/post excerpts is a great alternative to the first tip. Expandable post summaries is a feature that shows a short paragraph for each post and then allows your users to click on a “read more” link to view the full content of each post.
Using expandable post summaries on your home page dramatically decreases load time because only a small snippet of each post on the homepage has to load.
3. Resize Images Before Uploading Them To Your Blog
Uploading images in their original size is a surefire way to slow your blog down. The larger the images you upload, the longer your blog will take to load those images.
The goal is to size your images no wider than your post area width, so it’s important to know that width. If you are using a Designer Blogs design, we state the post area width on each of our designs so you’ll know the exact width to use when resizing your images. If you don’t have one of our designs and/or don’t know the width of your post area, then shoot us an email and we’ll be happy to take a look at your site so you’ll know the exact width of your post area. Most post area widths are between 600-800px wide.
Photoshop is the best tool for resizing images, but if you don’t have Photoshop, Pixlr is a free service you can use to do this. Here’s how to easily resize a photo using Pixlr:
1) Hop over to Pixlr and click “Open Pixlr Editor” on the site.
2) Click “Open Image from Computer” and find the image you want to use from your computer.
3) Your image will appear and will be ready for editing. At the bottom of the image you’ll see the current image size. My sample image is currently 4000px wide, which is WAY too large to be uploaded to a blog. So I’m going to change it to the width of my post area, which is 800px wide. In the top navigation bar, click “Image” and then “Image size…”
4) Change the image width to the width of your post area. The height of the image will automatically adjust to keep the proper proportions. Click “OK.”
5) Now you just need to save the resized image, so go to “File” and then “Save.” Rename the file (if needed) and then click “OK.” Find the folder on your computer where you’d like to save the image and click “Save.” You’re now ready to upload your resized image to your blog.
Separate your blog and your blog images by using an image host for your blog images. If you post a large amount of images on your blog in the double digits for each blog post, consider using an external image host.
An external image host will separately load your images on your blog. This takes a little of the loading strain off your blog as your blog only has to load your design and text and widgets.
If your blog images are still taking too long to load, consider optimizing them by compressing the file size. Compressing images removes a little of the unnecessary bulk of the image file size. This will only provide a small benefit if you use only a handful of images per blog post. This trick is more suitable if you post images into the double digits for each blog post and need the extra bit of optimization.
Photoshop can be used for compressing images, but if you don’t have Photoshop, TinyPNG is a free service that works great for automatically compressing your images. Here is how to easily compress images using TinyPNG:
1) Open the TinyPNG site and click on the “Drop your .png or .jpg files here” section on the site to upload your image.
2) Choose the image you want from your computer and upload it.
3) TinyPNG should instantly start compressing your image.
4) When your image has finished being compressed, download your image from TinyPNG to your computer by choosing the “download” link.
A before and after comparison shows the compression ended up resulting in a slightly darker image when compressing up to 73% of the original image size. The image was compressed from 1mb to 275kb.
6. Clean Up Your Blog Widgets
Rid your blog of clutter. Keep the number of widgets you use on your site to a bare minimum. Ask yourself, “do I really NEED this widget?” If not, get rid of it. You don’t want your users getting distracted from your amazing content by an overly cluttered sidebar or footer. Less is more when it comes to widgets. Keeping your widgets to a minimum will allow your content to shine and will help keep your site load time lightening fast!
Keep the essentials only. We recommend the following must have widgets: profile widget, email subscribe widget, blog archive widget, popular posts widget, and search widget.
Similar to reducing your Blogger widgets, keep only the essential third-party gadgets on your blog. Twitter, Instagram, Pinterest, and other social media platforms are well known for having gadgets that take a long time to load. Keep only the gadgets that are essential for your blog.
Consider which platforms are your main sources of readers and prioritize them accordingly. For the platforms that are less important, link to them on your about page or on your sidebar instead of using a third-party gadget.
8. Minimize the number of HTML/JavaScript Gadgets
Adding your own HTML/JavaScript gadgets can be a great way to customize your blog, but adding too many can slow your site down, so use them sparingly. Your blog loads from the top down, so if you do decide to use them, it is best to position them at the bottom of the sidebar or blog so that your users can still read your content while the javascripts are loading.
If you are using them within the main code of the site, it’s best to position them at the end of the body tag (right before ).
Remember to use javascripts sparingly and, when used, to position them at the bottom.
9. Remove Large Blog Design Images
Do you have a large header image you uploaded to your blog? Or a wide background image? If your blog is taking too long to load, these are two areas to check to see if these images are slowing down your blog.
Blog header images should be less than 1mb in size. Ideally, header images should be around 200-400kb.
Blog backgrounds should also be less than 1mb in size. The best blog background images to use are seamless patterns because these images tend to be small and load quickly. Desktop sized backgrounds should not be used for your blog background because these images are usually very large and take a long time to load as most are over the 1mb recommended file size.
10. Limit the Use of Custom Fonts
Custom fonts are beautiful and add personality to your blog design but if you find that your blog takes too long to load, remove or limit your custom fonts. Custom fonts are similar to images in that they take time to load and can be large files. Fancier calligraphy style fonts tend to have larger file sizes in comparison to serif or sans-serif fonts you would find in a book or newspaper.
Custom fonts are best used sparingly such as for your blog header and blog post titles. If possible, use 1 or 2 custom fonts only and change the size or make the fonts bold or italic in your html to use a small number of fonts but still add variety in your fonts on your blog.
The maximum amount of custom fonts you should have on your blog should be a maximum of 3-4 fonts. Any more and you are only slowing down your blog.
Today I want to share with you a fun little trick for automatically resizing your Blogger photos to fill the full width of your post area. Blogger offers several tools for resizing post images easily. I’ll get to my little trick in a second, but first I want to explain how to use the Blogger tools for uploading and resizing your photos for those that don’t already know.
To use the Blogger resizing options, simply create a new post, add a photo, and then click on your uploaded photo to open the sizing and positioning options.
You can set the photo size to small, medium, large, x-large, or to its original size. You can also set the justification to left, center, or right. I recommend centering your photos and using the x-large setting (if you don’t use the trick below) so your photos can be seen in all their glory. The only draw back to using this option is that the x-large size sizes images to 640px, which means if you have a post area that is wider than 640px, the photo will still look a little small. That is where my fancy little trick comes into play, so let’s get to it!
Resizing your blog photos is an important step regardless of whether or not you plan to use this photo sizing trick. This tutorial will still work on photos uploaded in their original size but because uploading original sized photos slows your site WAY DOWN, it is not recommended. The larger the image size, the slower it will load on your site…so trust me, just don’t do it!
Most blogs have a post area width somewhere between 600px-750px, so sizing your photos to 800px wide should work well on most blogs. You’ll want your image to be sized a little larger than your post width with this tutorial because it’s easier to bring an image down in size than it is to bring a small image up in size. Enlarging a small image will cause it to become pixelated and the quality will be low. So to keep things looking good, I recommend sizing your images to around 800px wide with this tutorial.
I use Photoshop to resize my images, but if you don’t have Photoshop, Pixlr is a free service you can use to do this. Here’s how to easily resize a photo using Pixlr:
1) Hop over to Pixlr, scroll down and click “Launch Web App” under the Pixlr Editor option.
2) Click “Open Image from Computer” and find the image you want to use from your computer.
3) Your image will appear and will be ready to be edited. At the bottom of the image you’ll see the current image size. My sample image is currently 4000px wide, which is WAY too large to be uploaded to a blog. So let’s change it to the recommended 800px wide. In the top navigation bar, click “Image” and then “Image size…”
4) Change the image width to 800 pixels. The height of the image will automatically adjust to keep the proper proportions. Click “OK.”
5) Now you just need to save the resized image, so go to “File” and then “Save.” Rename the file (if needed) and then click “OK.” Find the folder on your computer where you’d like to save the image and click “Save.” You’re now ready for the next step.
Now that your image is sized correctly you’ll need to add a little coding to achieve the automatic re-sizing. Don’t worry, you don’t need any coding experience for this.
1) First open up your Blogger dashboard and go to “Theme” and then “Customize.”
2) Click “Advanced” and then scroll down and click on “Add CSS” and copy/paste the following code into the white box:
Note: the above code will only change the images you have set to “Original Size.” If you want ALL of your images to be sized to the full post width regardless of the Blogger re-sizing options you have them set to, add this CSS instead:
Now just add a photo to a post like described in the beginning of this tutorial and make sure the photo is set to “Original Size” and your photo will now nicely fill the full width of your post area once you hit “Publish.” This trick will also apply to all previously posted photos as long as the photos are set to “Original Size.” If not, then you’ll want to use the second code option above.
Oh so big and pretty!
Please leave any questions you may have in the comments and I’ll do my best to answer them. Otherwise, enjoy your lovely automatically resized photos!
You only have a few seconds to make an awesome first impression with your blog. You might have a gorgeous blog design and out-of-this-world content, but if your site takes FOREVER to load, people are going to be looking for the “back” (aka: “get me outta here”) button before they even have the chance to enjoy your blog in all of its glory.
If your blog takes longer than 3 seconds to load, it is loading TOO SLOW and is costing you visitors. Every second counts! Google’s PageSpeed Insights is a great tool to use to find out how fast or slow your site is loading. If your blog is loading too slow, the tips shared below will help make your Blogger blog load faster in no time.
1. Limit the Number of Posts on the Front Home Page of Your Blog
The more posts you show on your front page, the longer your blog will take to load. We recommend showing no more than 10 posts on the front page. However, if your posts are long and/or they have a lot of images, then it would be wise to show even fewer posts. To change the number of posts your home page shows, go to “Layout” > “Blog Posts” > “Edit.”
Under “Main Page Options,” switch the number of posts shown on the main page to a number less than 10. Then click the “Save” button. View your blog and it will now only show the number of posts you have set it to show.
2. Display Expandable Post Summaries
If you would prefer to show a lot of posts on your main page, using expandable post summaries/post excerpts is a great alternative to the first tip. Expandable post summaries is a feature that shows a short paragraph for each post and then allows your users to click on a “read more” link to view the full content of each post.
Using expandable post summaries on your home page dramatically decreases load time because only a small snippet of each post on the homepage has to load.
3. Resize Images Before Uploading Them To Your Blog
Uploading images in their original size is a surefire way to slow your blog down. The larger the images you upload, the longer your blog will take to load those images.
The goal is to size your images no wider than your post area width, so it’s important to know that width. If you are using a Designer Blogs design, we state the post area width on each of our designs so you’ll know the exact width to use when resizing your images. If you don’t have one of our designs and/or don’t know the width of your post area, then shoot us an email and we’ll be happy to take a look at your site so you’ll know the exact width of your post area. Most post area widths are between 600-800px wide.
Photoshop is the best tool for resizing images, but if you don’t have Photoshop, Pixlr is a free service you can use to do this. Here’s how to easily resize a photo using Pixlr:
1) Hop over to Pixlr and click “Open Pixlr Editor” on the site.
2) Click “Open Image from Computer” and find the image you want to use from your computer.
3) Your image will appear and will be ready for editing. At the bottom of the image you’ll see the current image size. My sample image is currently 4000px wide, which is WAY too large to be uploaded to a blog. So I’m going to change it to the width of my post area, which is 800px wide. In the top navigation bar, click “Image” and then “Image size…”
4) Change the image width to the width of your post area. The height of the image will automatically adjust to keep the proper proportions. Click “OK.”
5) Now you just need to save the resized image, so go to “File” and then “Save.” Rename the file (if needed) and then click “OK.” Find the folder on your computer where you’d like to save the image and click “Save.” You’re now ready to upload your resized image to your blog.
Separate your blog and your blog images by using an image host for your blog images. If you post a large amount of images on your blog in the double digits for each blog post, consider using an external image host.
An external image host will separately load your images on your blog. This takes a little of the loading strain off your blog as your blog only has to load your design and text and widgets.
If your blog images are still taking too long to load, consider optimizing them by compressing the file size. Compressing images removes a little of the unnecessary bulk of the image file size. This will only provide a small benefit if you use only a handful of images per blog post. This trick is more suitable if you post images into the double digits for each blog post and need the extra bit of optimization.
Photoshop can be used for compressing images, but if you don’t have Photoshop, TinyPNG is a free service that works great for automatically compressing your images. Here is how to easily compress images using TinyPNG:
1) Open the TinyPNG site and click on the “Drop your .png or .jpg files here” section on the site to upload your image.
2) Choose the image you want from your computer and upload it.
3) TinyPNG should instantly start compressing your image.
4) When your image has finished being compressed, download your image from TinyPNG to your computer by choosing the “download” link.
A before and after comparison shows the compression ended up resulting in a slightly darker image when compressing up to 73% of the original image size. The image was compressed from 1mb to 275kb.
6. Clean Up Your Blog Widgets
Rid your blog of clutter. Keep the number of widgets you use on your site to a bare minimum. Ask yourself, “do I really NEED this widget?” If not, get rid of it. You don’t want your users getting distracted from your amazing content by an overly cluttered sidebar or footer. Less is more when it comes to widgets. Keeping your widgets to a minimum will allow your content to shine and will help keep your site load time lightening fast!
Keep the essentials only. We recommend the following must have widgets: profile widget, email subscribe widget, blog archive widget, popular posts widget, and search widget.
Similar to reducing your Blogger widgets, keep only the essential third-party gadgets on your blog. Twitter, Instagram, Pinterest, and other social media platforms are well known for having gadgets that take a long time to load. Keep only the gadgets that are essential for your blog.
Consider which platforms are your main sources of readers and prioritize them accordingly. For the platforms that are less important, link to them on your about page or on your sidebar instead of using a third-party gadget.
8. Minimize the number of HTML/JavaScript Gadgets
Adding your own HTML/JavaScript gadgets can be a great way to customize your blog, but adding too many can slow your site down, so use them sparingly. Your blog loads from the top down, so if you do decide to use them, it is best to position them at the bottom of the sidebar or blog so that your users can still read your content while the javascripts are loading.
If you are using them within the main code of the site, it’s best to position them at the end of the body tag (right before ).
Remember to use javascripts sparingly and, when used, to position them at the bottom.
9. Remove Large Blog Design Images
Do you have a large header image you uploaded to your blog? Or a wide background image? If your blog is taking too long to load, these are two areas to check to see if these images are slowing down your blog.
Blog header images should be less than 1mb in size. Ideally, header images should be around 200-400kb.
Blog backgrounds should also be less than 1mb in size. The best blog background images to use are seamless patterns because these images tend to be small and load quickly. Desktop sized backgrounds should not be used for your blog background because these images are usually very large and take a long time to load as most are over the 1mb recommended file size.
10. Limit the Use of Custom Fonts
Custom fonts are beautiful and add personality to your blog design but if you find that your blog takes too long to load, remove or limit your custom fonts. Custom fonts are similar to images in that they take time to load and can be large files. Fancier calligraphy style fonts tend to have larger file sizes in comparison to serif or sans-serif fonts you would find in a book or newspaper.
Custom fonts are best used sparingly such as for your blog header and blog post titles. If possible, use 1 or 2 custom fonts only and change the size or make the fonts bold or italic in your html to use a small number of fonts but still add variety in your fonts on your blog.
The maximum amount of custom fonts you should have on your blog should be a maximum of 3-4 fonts. Any more and you are only slowing down your blog.
3. Why have some colleges made standardized test scores optional for students applying for admission? How does this policy help to maintain a level playing field for students applying to college?
4. William Singer, a college admissions consultant, pleaded guilty on Tuesday to charges of racketeering, money laundering and obstruction of justice. What were some of the ways he secured admissions for students? Which did you find most noteworthy or surprising?
5. How does Brian Taylor, managing director of Ivy Coach, distinguish the services his company provides to parents and students from the illegal actions of consultants like Mr. Singer? Do you think it is ethical for companies like Ivy Coach to charge a large fee for their services?
6. How profitable is the education consulting industry? What factors have led to its growth?
Finally, tell us more about what you think:
— What is your reaction to the article? What details stand out to you? Do you think educational consultants are providing a valuable service or an unfair advantage?
— How important for you is getting into the “right” college? Do you feel pressure or anxiety related to the college admissions process? Why do you think some parents are willing to pay so much money to get their children into college?
— Has your family ever hired a private consultant or have you ever attended test preparation classes to help you get into a school? If yes, tell us about the experience. Would you consider using a private consultant if you believed it would improve your chances of getting into college? How much would you be willing to pay? Would you be willing to hire a consultant for your own children? How far would you go to get them into college?
Over and over we have told him that to be positively recognized, you have to have an incredible work ethic and you have to be above reproach. You often hear talk about pulling yourself up by your bootstraps and that college admission is based on merit. What this story tells me is that the playing field is not level based on race and wealth.
What do you think of Ms. McReynolds’s comment? Do you think the college admissions process is fair? Or is it an uneven playing field? What message does this scandal send to high school students who intend to go to college?
— What are the lessons of the scandal? How can we reform the college application process?
Codecademy’s very own Nick Duckwiler (left) and Ryan Tuck from Warby Parker (right) in our office. (📷: Mitch Boyer)
Last month, Codecademy and Warby Parker came together to work on a special Learn SQL from Scratch Capstone Project. It was during this time when I met Ryan Tuck, a Data Engineer at Warby, who played a major part in this partnership. So when he decided to drop by our office for the final QA round, I had to break out my notebook and ask some questions. Enjoy.
Hey Ryan, let’s start off with a question I’ve had for a while — what is a Data Engineer? (Is it similar to a Data Analyst or a Software Engineer?)
At Warby Parker, data engineers are responsible for creating and maintaining the plumbing required to support the data and reporting needs of the business. We use software engineering practices to automate the work of data cleaning, normalizing, and model building so that data is always ready to be consumed by data analysts in every department.
What languages/frameworks do you use at Warby?
On data engineering, we use Python as our general purpose programming language, as do most of the other teams in our Technology department. When it comes to databases, we use PostgreSQL for the majority of our SQL needs, and are beginning to use Amazon Athena and Google BigQuery for some of our larger datasets. We use Looker as our exclusive business intelligence entry point to all of this data.
What are some of the projects you worked on?
I’ve had the privilege of working with a lot of of smart people in every department at our company to help them solve their varied data needs, from reconciling financial data with the Accounting team to automating and modeling standardized performance metrics for our team of over 200 customer experience advisors.
As part of a team of five supporting the data needs of a rapidly growing company, I’ve tried where possible to focus on helping our analysts solve their own problems. This includes helping people learn Python and commit to our codebase, guiding the creation of data models in SQL, and encouraging people to submit pull requests to add features in Looker, our BI tool.
Seeing dozens of otherwise “non-technical” colleagues opening up PRs on a daily basis, and consequently being part of the democratization of tech that we value at Warby Parker, is probably the most rewarding “project” I’ve been a part of.
One project finished recently during our first annual “Hackweek” is called Pipes, which allows anyone at the company to easily move large amounts of data from wherever to wherever (Looker, Google Sheets, PostgreSQL, BigQuery, etc) on a regular cadence, or manually through a simple one-line chatbot interface. The adoption has been overwhelmingly positive and we’re looking to grow this sort of tooling out even more.
“We use software engineering practices to automate the work of data cleaning, normalizing, and model building so that data is always ready to be consumed by data analysts in every department.”
What got you into the data field?
I’ve always been drawn to analytical fields like math, and became pretty proficient in Excel during some internships in college. Once I had learned to program and learned more about data science and its applications in artificial intelligence, I knew that anything I could do to immerse myself in the world of data would be a step in the right direction.
Three and a half years ago, I landed a job as a junior software engineer at Warby Parker not fully knowing what I was in for, but am so glad I got the opportunity to help build tools to support an interesting and ever-changing data-driven culture here.
Where did you learn SQL and Python?
I had a background in C++, and was exposed to Python through an Intro to Data Science course. When Warby Parker hired me onto the Data team in 2015, I had never written a SQL query in my life, but picked it up quickly and within a few months started up internal SQL training classes, which I still teach on a monthly basis.
What does your tattoo say?
The ultimate cheatsheet.
This is Bayes’ Theorem, which is an equation that describes how to update probabilities given new evidence. Two summers ago I worked on building a tool to help predict weekly fantasy football performance. Some colleagues suggested a Bayesian approach would be appropriate, since there aren’t really enough data points in an NFL season to be able to use statistical approaches that require larger datasets, and I’d want to regularly update my predictions after each player’s latest performance.
I did a deep dive into understanding the (simple) math underlying Bayes’ Theorem and came out of that experience with a whole new worldview, understanding my entire knowledge of the world as a big and intricate probabilistic model that I was continuously updating with every experience I ever have. It was pretty transformative, and I figured that was worth a tattoo.
What is a concept in SQL/Python that’s essential to your work?
Donald Knuth said, “Premature optimization is the root of all evil.” I’ve generally found this to be true, and try to live by it in my work. For example, I’ll generally prefer to keep a data model simple by rebuilding it for all time on a daily basis using a single SQL query instead of making a more complicated model that requires iteratively adding to a table, keeping track of state, updated timestamps, when something last ran, etc.
A wise man once said, “Duplicating data makes things go fast,” but databases are already impressively fast to begin with, without implementing anything to improve performance. Ultimately, I almost always approach a problem thinking about optimizing for my time over machine time, for readability over performance, and for introducing as little cognitive overhead as is required by the problem at hand. Only once performance issues or readability issues present themselves will some code be worth a rewrite.
Last question! Since you wrote Warby Parker’s internal SQL training courses, I know there gotta be some inner Curriculum Developer in you. Can you teach a SQL concept in 2 minutes?
Sure! Have you ever written a query that yields some result set and you think, “I’d love to query the stuff I just produced like it was a table?” Enter the WITH clause.
Suppose I have a mega query that gives the transaction summaries:
select
transactions.date as transaction_date,
sum(items.price) as total_cost,
count(*) as number_of_items
from
transactions
inner join
customers
on
customers.id = transactions.customer_id
inner join
transaction_items
on
transactions.id = transaction_items.transaction_id
inner join
items
on
items.id = transaction_items.item_id
Using WITH, I can create a temporary table within my query that I can SELECT from and treat it just like a regular old table.
I will put everything from the previous query in a parentheses and use WITH to give it the name transaction_summaries.
Then I’ll apply the date and customer filtering down below for a more readable query, to separate out all the JOIN logic from the actual WHERE filters that I want to apply on that data.
with transaction_summaries as (
select
transactions.date as transaction_date,
sum(items.price) as total_cost,
count(*) as number_of_items
from
transactions
inner join
customers
on
customers.id = transactions.customer_id
inner join
transaction_items
on
transactions.id = transaction_items.transaction_id
inner join
items
on
items.id = transaction_items.item_id
)
select
*
from
transaction_summaries
where
first_name = 'beyonce'
and
transaction_date > '2018–01–01'
order by
total_cost desc
limit
5
If you’re familiar with subqueries, this does a similar thing but makes the SQL far more readable, even if your query isn’t quite as performant as it would have been. This is essentially an implementation of the mantra “Don’t Repeat Yourself” that’s common in the world of programming.
Incredible. And love the SQL styling! 😍
Huge shout out to Ryan and the whole Warby Parker team for making this partnership happen. Special hat tips for behind-the-scenes support from:
Codecademy’s very own Nick Duckwiler (left) and Ryan Tuck from Warby Parker (right) in our office. (📷: Mitch Boyer)
Last month, Codecademy and Warby Parker came together to work on a special Learn SQL from Scratch Capstone Project. It was during this time when I met Ryan Tuck, a Data Engineer at Warby, who played a major part in this partnership. So when he decided to drop by our office for the final QA round, I had to break out my notebook and ask some questions. Enjoy.
Hey Ryan, let’s start off with a question I’ve had for a while — what is a Data Engineer? (Is it similar to a Data Analyst or a Software Engineer?)
At Warby Parker, data engineers are responsible for creating and maintaining the plumbing required to support the data and reporting needs of the business. We use software engineering practices to automate the work of data cleaning, normalizing, and model building so that data is always ready to be consumed by data analysts in every department.
What languages/frameworks do you use at Warby?
On data engineering, we use Python as our general purpose programming language, as do most of the other teams in our Technology department. When it comes to databases, we use PostgreSQL for the majority of our SQL needs, and are beginning to use Amazon Athena and Google BigQuery for some of our larger datasets. We use Looker as our exclusive business intelligence entry point to all of this data.
What are some of the projects you worked on?
I’ve had the privilege of working with a lot of of smart people in every department at our company to help them solve their varied data needs, from reconciling financial data with the Accounting team to automating and modeling standardized performance metrics for our team of over 200 customer experience advisors.
As part of a team of five supporting the data needs of a rapidly growing company, I’ve tried where possible to focus on helping our analysts solve their own problems. This includes helping people learn Python and commit to our codebase, guiding the creation of data models in SQL, and encouraging people to submit pull requests to add features in Looker, our BI tool.
Seeing dozens of otherwise “non-technical” colleagues opening up PRs on a daily basis, and consequently being part of the democratization of tech that we value at Warby Parker, is probably the most rewarding “project” I’ve been a part of.
One project finished recently during our first annual “Hackweek” is called Pipes, which allows anyone at the company to easily move large amounts of data from wherever to wherever (Looker, Google Sheets, PostgreSQL, BigQuery, etc) on a regular cadence, or manually through a simple one-line chatbot interface. The adoption has been overwhelmingly positive and we’re looking to grow this sort of tooling out even more.
“We use software engineering practices to automate the work of data cleaning, normalizing, and model building so that data is always ready to be consumed by data analysts in every department.”
What got you into the data field?
I’ve always been drawn to analytical fields like math, and became pretty proficient in Excel during some internships in college. Once I had learned to program and learned more about data science and its applications in artificial intelligence, I knew that anything I could do to immerse myself in the world of data would be a step in the right direction.
Three and a half years ago, I landed a job as a junior software engineer at Warby Parker not fully knowing what I was in for, but am so glad I got the opportunity to help build tools to support an interesting and ever-changing data-driven culture here.
Where did you learn SQL and Python?
I had a background in C++, and was exposed to Python through an Intro to Data Science course. When Warby Parker hired me onto the Data team in 2015, I had never written a SQL query in my life, but picked it up quickly and within a few months started up internal SQL training classes, which I still teach on a monthly basis.
What does your tattoo say?
The ultimate cheatsheet.
This is Bayes’ Theorem, which is an equation that describes how to update probabilities given new evidence. Two summers ago I worked on building a tool to help predict weekly fantasy football performance. Some colleagues suggested a Bayesian approach would be appropriate, since there aren’t really enough data points in an NFL season to be able to use statistical approaches that require larger datasets, and I’d want to regularly update my predictions after each player’s latest performance.
I did a deep dive into understanding the (simple) math underlying Bayes’ Theorem and came out of that experience with a whole new worldview, understanding my entire knowledge of the world as a big and intricate probabilistic model that I was continuously updating with every experience I ever have. It was pretty transformative, and I figured that was worth a tattoo.
What is a concept in SQL/Python that’s essential to your work?
Donald Knuth said, “Premature optimization is the root of all evil.” I’ve generally found this to be true, and try to live by it in my work. For example, I’ll generally prefer to keep a data model simple by rebuilding it for all time on a daily basis using a single SQL query instead of making a more complicated model that requires iteratively adding to a table, keeping track of state, updated timestamps, when something last ran, etc.
A wise man once said, “Duplicating data makes things go fast,” but databases are already impressively fast to begin with, without implementing anything to improve performance. Ultimately, I almost always approach a problem thinking about optimizing for my time over machine time, for readability over performance, and for introducing as little cognitive overhead as is required by the problem at hand. Only once performance issues or readability issues present themselves will some code be worth a rewrite.
Last question! Since you wrote Warby Parker’s internal SQL training courses, I know there gotta be some inner Curriculum Developer in you. Can you teach a SQL concept in 2 minutes?
Sure! Have you ever written a query that yields some result set and you think, “I’d love to query the stuff I just produced like it was a table?” Enter the WITH clause.
Suppose I have a mega query that gives the transaction summaries:
select
transactions.date as transaction_date,
sum(items.price) as total_cost,
count(*) as number_of_items
from
transactions
inner join
customers
on
customers.id = transactions.customer_id
inner join
transaction_items
on
transactions.id = transaction_items.transaction_id
inner join
items
on
items.id = transaction_items.item_id
Using WITH, I can create a temporary table within my query that I can SELECT from and treat it just like a regular old table.
I will put everything from the previous query in a parentheses and use WITH to give it the name transaction_summaries.
Then I’ll apply the date and customer filtering down below for a more readable query, to separate out all the JOIN logic from the actual WHERE filters that I want to apply on that data.
with transaction_summaries as (
select
transactions.date as transaction_date,
sum(items.price) as total_cost,
count(*) as number_of_items
from
transactions
inner join
customers
on
customers.id = transactions.customer_id
inner join
transaction_items
on
transactions.id = transaction_items.transaction_id
inner join
items
on
items.id = transaction_items.item_id
)
select
*
from
transaction_summaries
where
first_name = 'beyonce'
and
transaction_date > '2018–01–01'
order by
total_cost desc
limit
5
If you’re familiar with subqueries, this does a similar thing but makes the SQL far more readable, even if your query isn’t quite as performant as it would have been. This is essentially an implementation of the mantra “Don’t Repeat Yourself” that’s common in the world of programming.
Incredible. And love the SQL styling! 😍
Huge shout out to Ryan and the whole Warby Parker team for making this partnership happen. Special hat tips for behind-the-scenes support from: