Once again it was Hack Week (more than just a day!) at Tumblr!
This is getting repetitive in the best way. A couple of times per year
we slow down our normal work and spend a week working on scratching a
personal itch or features we want as user and see how far we can get
with our hacks. One thing from the last Hack Week in September made it all the way to a new experiment out to some testers: Tumblr Patio!
Here are some of the projects that got built for our most recent Hack
Week in January. Some of these things you may also end up seeing on the
site…
Spoiler text, spoiler blocks, and centered text!
This one is so obvious and amazing, it’s wild we don’t already have
it. For Hack Week, Katie added the ability to select text in a paragraph
to be hidden behind a wall of black that can be revealed with a tap.
This can be super useful to hide spoilers. And even better: whole
spoiler blocks. And while we’re here, the ability to center text!
A plethora of new default blog avatars
We haven’t updated our default avatars in several years. (Some of you may remember this one
from 10+ years ago.) They’re feeling a bit stale to us, so why not
update them? And while we’re at it… make a ton more variations! Paul
from the Tumblr Design team came up with a suite of new default avatars,
using our latest Tumblr color palette. Here’s a look at some of them, but there are actually many dozens more using different colors:
Notifications and emails about engagement on your posts
This one is for the folks on Tumblr who love numbers and their Activity
page. Daniel, @jesseatblr, and the Feeds & Machine Learning team
worked on some new notifications and emails we could send out to people
about how their posts have been doing lately on the platform, such as
how many views they’ve gotten, and by how many people. We already have
this available (and more) when you Blaze a post, but why not open it up
to more people? It’s really useful to the folks who use Tumblr to help
build an audience for their work!
A new way of navigating the web: the Command Palette
Some apps we use a lot have a “command palette” accessible via a
keyboard shortcut for quick keyboard-driven access to different parts of
the platform. For example, Slack and Discord have Command + K to access
their quick switchers to hop around conversations. What if Tumblr had
one? Kelly and Paul built one! Press Command/Control + K on Tumblr and
you can use your keyboard to jump to your blog, Activity, your recent
conversations, search, dozens of places!
As always, stay tuned to the @changes blog to see if any of these hacks make it on Tumblr for real!
Once again it was Hack Week (more than just a day!) at Tumblr! A couple of times per year we slow down our normal work and spend a week working on scratching a personal itch or features we want as user and see how far we can get with our hacks. One thing from the last Hack Day in March made it all the way to production: redesigning how direct messaging looks on Tumblr! Pretty cool!
Here are some of the projects that got made for this most recent Hack Week in September. Some of these things you may also end up seeing on the site…
Tumblr Patio
Maybe this will look familiar to you, but we love this idea of being able to organize Tumblr feeds into many “columns” side-by-side, creating a very dense but lively view of Tumblr. Lenny, Kelly, and Paul hacked this together, and we’re pretty excited to see where it’ll go. Each column can be a different feed on Tumblr, like For You, Following, your Activity, a specific blog, a search, Trending, even a Collection, so many possibilities!
Tumblr Booths
Meanwhile, a separate team of @autoplanes, Katie, @lex, Shaun, and Eve dug into the idea of selling digital and physical goods through blogs on Tumblr, leveraging our sibling platform WooCommerce! Blogs could put whatever they’d like for sale here, and have a dedicated space for it. We know there are so many amazing artists and artisans here who could use this to more easily sell their creations on Tumblr!
Avatar Frames/Hats
This one is a golden oldie, it keeps coming back hack day after hack day, and each time it gets even better. Santi and Maxime hacked together some example avatar “frames” and “hats” that folks on Tumblr could purchase for their blog. Maybe eventually people could create these and sell them or gift them to each other!
As always, stay tuned to the @changes blog to see if any of these hacks make it on Tumblr for real!
It was Hack Week (more than just a day!) once again at Tumblr! A couple of times per year we grind everything to a halt and spend a week working on whatever we want and see how far we can get with our hacks. Since last time, we’ve launched the ability to have a Discord => Tumblr integration, we’re close to launching Twitch embed support, and custom logos are now possible in the mobile apps! And from a previous Hack Day, we’ve launched “Timestamps Everywhere” on web, and we’re working on rolling it out to the mobile apps very soon!
Here are some of the projects that got made for this last Hack Week. Some of these things you may also end up seeing on the site…
Interacting as a Sideblog/Secondary blog
@designpatternpirate put together a proof of concept for switching to a sideblog/secondary blog when liking or replying to posts. Using this hack, you’d be able to switch which of your blogs you’re “acting as” when hitting the like button or when replying to a post, to start. You’d even have separate Likes pages for each blog!
“One Year Ago” Dashboard Feed
André hacked together a feed which shows a portal backwards in time, to what the blogs you’re following were posting a year ago today:
Moving Android notification settings
On Android, Omar moved all of our notification settings out of the Tumblr app and into the Android OS level notifications settings view, like other apps do:
“Time for crab!” 🦀
@superchlorine hacked together a delightful button for the dashboard that summons crabs which scuttle across the page, and even comment on what they’re traipsing over:
As always, stay tuned to the @changes blog to see if any of these hacks make it on Tumblr for real!
Ah yes, it was Hack Day once again at Tumblr. A few times per year we slow down our normal work and spend a day (or sometimes a whole week) working on whatever we want and see how far we can get with our hacks. The main star of the last Hack Week was… pretty much all of them!
Here are some of the projects that got made for our most recent Hack Day earlier this month. Some of these things you may also end up seeing on the site…
@yi5h worked on a huge suite of “rewards” that folks on Tumblr could unlock by doing various things on the platform, such as reblogging, creating content, even just logging in! Maybe you could earn badges this way to put on your blog…
@straku hacked together a new way of viewing reblog trails. We commonly get feedback that reblog trails are difficult to understand, so styling them differently to make the information clearer is fun to try out!
Meanwhile, Evgeniy built a beautifully simple “Back to Top” button for the Android app, which does exactly what it sounds like: brings you back to the top of whatever feed you’re currently viewing. No more scrolling, scrolling, scrolling — just one tap!
As always, stay tuned to the @changes blog to see if any of these hacks make it on Tumblr for real!
It was Hack Week (more than just a day!) once again at Tumblr! A couple of times per year we slow down our normal work and spend a week working on whatever we want and see how far we can get with our hacks. The main star of the last Hack Week was the “Summon crab!” button, and we loved it so much that we rolled it out not just for April Fools this year, but we made it our first gift-able widget in TumblrMart!
Here are some of the projects that got made for this most recent Hack Week in September. Some of these things you may also end up seeing on the site…
Tumbeast Digital Pet
Ben worked on adding our friendly server room Tumbeasts to Tumblr as a cute little digital pet. You can feed them and play with them, and they poop and get unhappy and need tending, of course. Who wouldn’t want one of these to take care of every day on Tumblr, forever and ever?
Tumblr Blaze on TumblrMart
@adalpari added Tumblr Blaze as a gift-able item in TumblrMart, which would allow folks to buy Blaze “credits” for other people. Perfect for those times you see an amazing post on Tumblr that definitely deserves to be spread around, and you don’t mind throwing some money at letting that person have a chance to spread it via Blaze!
User Account Switcher
@yi5h hacked together an account switcher for the web, so that folks can log in to more than one Tumblr account and easily switch back and forth between them. Super handy if you have one account for your roleplaying character, and another for your Star Trek fandom discussions. Very useful!
Tumblr Collections
On web as well, João made a version of an idea that’s floated around many times, the idea of being able to organize posts on Tumblr into “collections” that can be named and shared. I think everyone would very much enjoy having a collection called “waves” that’s just soothing GIFs of ocean waves.
As always, stay tuned to the @changes blog to see if any of these hacks make it on Tumblr for real!
It was Hack Day once again at Tumblr! A couple of times per year we grind everything to a halt and spend 24 hours working on whatever we want and see how far we can get with our hacks. Here are some of the projects that got made for Hack Day! Some of these things you may end up seeing on the site…
Twitch Embeds
Wesley hacked together the ability to post Twitch streams to Tumblr! These can be live streams or clips.
Tumblr to Discord
@cyle put together a very simple webhook integration between Tumblr and Discord so you can send events about your blog to a Discord server:
Custom Tumblr logos on mobile
@mlu, @dakotairene, and friends hacked together the ability for us to put custom Tumblr logos in the mobile apps’ dashboard tab bar, like we do on the web!
Tumblr Time Machine
Lucila constructed an elaborate Tumblr Time Machine, so you can filter search results to a specific year:
Stay tuned to the @changes blog to see if any of these hacks make it on Tumblr for real!
It was Hack Day again at Tumblr! A couple of times per year we grind everything to a halt and spend 24 hours working on whatever we want and see how far we can get with our hacks. Here are some of the projects that got made for Hack Day! Some of these things you may end up seeing on the site…
Timestamps on Posts
@superchlorine hacked the website to show timestamps on every post, reblog trail item, and note in the notes view. This is also already a popular XKit extension, and it’s easy to see why!
Mutual Love
Evgeniy hacked the Tumblr Android app to play a cute sound and animation whenever you follow someone who already follows you! Being mutuals on Tumblr is something special, and this celebrates it in such a cute way.
@cyle hacked the dashboard on web to view it in a grid format (like the Likes page on web) or a masonry format (like the Explore and Tagged pages on web). It creates a dense amount of information!
Post only to a Tagged Page
Tanya hacked the post editor to let you post directly to a tagged page! The posts made this way will only show up on that tagged page, and not your blog, or anywhere else. Great for folks that want to participate in a tag but not have it show up on their blog!
Mobile Rave Room
And it wouldn’t be a Tumblr Hack Day without a rave room hack: @oli took the rave room mobile and did a (completely not officially sponsored) DJ set in NYC and live streamed it.
Stay tuned to the @changes blog to see if any of these hacks make it on Tumblr for real!
Well well well, it was Hack Day once again at Tumblr. A few times per year we slow down our normal work and spend a day (or sometimes a whole week) working on whatever we want and see how far we can get with our hacks. Here are some of the projects that got made for our most recent Hack Day earlier this month. Some of these things you may also end up seeing on the site…
Wesley worked on adding the ability to translate the text content of posts using LibreTranslate, which works really well! We know this is a big pain point for folks who use Tumblr around the world, so we’re excited to keep experimenting with this.
Omar built a Feature Wishlist for the Android app, which has different lists for community-driven and staff-driven feature ideas, with the ability to upvote which ones you’d like the most! Really cool, we’re trying to think of ways like this to expand what we can do to collaborate with the community, like we already do with the @wip and @changes blogs.
One thing that’s been bugging @blowery forever is trying to figure out who exactly added the tags when you’re viewing a reblog of a post. It can be hard to tell whether the person reblogging it added the tags, or if they’re meant to come from the reblogged post. To help distinguish this, they hacked together putting the reblogger’s avatar next to the tags they added at the bottom of their reblog!
@straku hacked together a more modern look for our 1:1 messaging on Tumblr, bringing the message bubbles into a left-and-right back-and-forth format, and using some better colors. Looks a lot snazzier!
As always, stay tuned to the @changes blog to see if any of these hacks make it on Tumblr for real!
One of the Core Web team’s goals at Tumblr is to reduce the number of runtime issues that we see in our React codebase. To help move some of those issues from runtime to compile time, I evaluated the two leading type systems, Flow and TypeScript, to see if they could give us more type safety. I did a bit of background reading about the differences between Flow and TypeScript to see what the community had to say about them.
This post claims that Flow and TypeScript are similar enough that you should choose whichever of them is easier to integrate with your other tools. For Angular development, it recommends using TypeScript; for React, Flow.
This post outlines the author’s experience with using Flow in a React codebase. It advocates switching from Flow to TypeScript because of Flow’s unhelpful error messages, bad tooling, and propensity to spread untyped code. It also claims that most of the type annotations are able to be shared between Flow and TypeScript with only minor changes.
This slideshow shows many differences around the philosophies and goals of TypeScript and Flow, and it gives detailed explanations in the differences between the two type systems. It explains IDE support and how to get access to third-party type definitions.
Lack of Consensus
It seems like many people have differing opinions about which type system is better for a React codebase. Because there wasn’t a broad consensus across the community, I decided to get some first-hand experience with each of these tools to see which one would be most practical and helpful for use at Tumblr.
For the most part, Flow and TypeScript are basically interchangeable. I was able to reuse most of the source code between both projects with only minor changes. Here are some examples of changes I needed to make to get my TypeScript code working with Flow:
Flow requires that types are imported using import type where TypeScript re-uses import.
Some generic type constraints are different in redux’s type declarations between Flow and TypeScript, so I dropped the generic constraint for Flow.
Types cannot have the same name as constants, so I had to rename a few small things (see below).
Testing
After I got the project prepared I set up the following situations to see which tool performed better. These are my assumptions of the most common situations in which a type checker will help when writing React code on a day-to-day basis.
Handling an Unnecessary Case in a Switch
TypeScript
TypeScript realizes that 'not_real' is not a possible case for the switch.
Flow
Flow does not detect any issue.
Declaring Variables with Same Name as Type
TypeScript
TypeScript allows types to have the same name as constants, and it allows Command-clicking on the types to see their declarations.
Flow
Flow requires types and constants to have different names. In this case, I needed to rename the type to INCREMENT_ENTHUSIASM_T to appease Flow’s type checker.
Returning Incorrect Type from Function
TypeScript
[ts]
Type '{ enthusiasmLevel: string; languageName: string; }' is not assignable to type 'StoreState'.
Types of property 'enthusiasmLevel' are incompatible.
Type 'string' is not assignable to type 'number'.
Flow 0.52
[flow] object literal (This type is incompatible with the expected return type of object type Property `enthusiasmLevel` is incompatible:)
Flow 0.53
[flow] property `enthusiasmLevel` of StoreState (Property not found in number) [flow] property `languageName` of StoreState (Property not found in number)
Missing Required Props When Instantiating a Component
TypeScript
TypeScript shows the error at the site where the properties are missing with the error:
[ts] Type '{}' is not assignable to type 'IntrinsicAttributes & Props'. Type '{}' is not assignable to type 'Props'. Property 'name' is missing in type '{}'.
Flow
Flow shows the error within the component where the property will be used, with no way to discover which call site is missing a property. This can be very confusing in codebases that have lots of reusable components. Flow displays this error:
[flow] property `name` of Props (Property not found in props of React element `Hello`)
Code Safety
TypeScript
TypeScript allows enforcing full type coverage on .ts files with the noImplicitAny flag in the tsconfig.
Flow
Flow provides a code coverage plugin so that you can see which lines are implicitly not typed.
Other Considerations
Flow has the most React community support and tooling, so there is much more documentation about how to get Flow and React working together. TypeScript is more popular with Angular developers. Choosing TypeScript may be breaking from community standards, so we may have more issues that don’t have a simple answer on Google.
Conclusion
I concluded that we should use TypeScript because it seems easier to work with. My experience seems to line up with this blog post. It has better error messages to debug type issues and its integration with VSCode makes coding more pleasant and transparent. If this ends up being the wrong choice later on, our codebase will be portable to Flow with some minor changes.
Shortly after arriving at this conclusion, Flow 0.53 was released and a blog post on Medium published touting it’s “even better support for React”. However, after running through the test cases above, I only found one case where Flow had improved its error messaging. TypeScript still seems like the more reliable, easier to use solution.
John Bunting talks about different services Tumblr has built and how their architecture helps them be fault tolerant as they continue to grow.
John Bunting talks about different services Tumblr has built and how their architecture helps them be fault tolerant as they continue to grow.
You are looking at a Tumblr post, so you love GIFs. You are reading an engineering post, so you love bits. Have you ever wanted to know how Tumblr turns these bits into GIFs? Thanks to QCon, you can watch cyborg hacker codingjester talk about how its done.