Blog Archive — Page 11

This is part of my blog, which I have long since stopped maintaining. The page has been preserved in case its content is of any interest. Please go back to the homepage to see the current contents of this site.

  • The Need for Mobile General Computation (aka, why I'm stuck with Android)

    My mobile phone contract has well and truly hit the “18-month itch” stage – although I still have six months until an upgrade is due, I can’t help but look at adverts and scan gadget blogs and think “ooh, I want one of those”.

    I could go for an iPhone, and have a vast library of apps to choose from – far more than Android has ever offered.  I could go for a Windows Phone device and enjoy a user interface that is genuinely refreshing compared to the rest of the mobile OS options.

    But much as it annoys me with its weird bugs, poor battery life, fragmentation, weird manufacturer-specific skins and inconsistent interface, there’s one important advantage to Android that sways my decision back to it every time I consider the alternatives. It is simply this:

    I want to be in charge of my device.

    The seeds of the war on general-purpose computation are already taking root in the mobile OS space. Phones and tablets are quickly gaining ground as the primary means of getting things done in our online worlds, and implicit in that is that users of these devices are putting the manufacturers and the mobile networks in charge of what they can and cannot do with them.

    I reject this trend. I want root.

    I want to be able to uninstall the apps HTC and Vodafone think I should use. I want to firewall apps off from “phoning home”. I want to back up a complete partition image of my phone. I want to run any script I can think of. I want to tunnel my network access over SSH.

    By and large, mobile software and hardware manufacturers are hostile to this kind of activity. It’s impossible on a Windows Phone device. iPhones can be jailbroken but OS updates – including important security updates – undo the jailbreaking until some enterprising hacker can find another exploit.  Of the current crowd of mobile operating systems, only Android, with its open-source releases of the core OS, allows said enterprising hackers to create their own distributions of the operating system and maintain “root” whilst applying Google’s own OS updates.

    So although I am bored of Android, though I crave a new and interesting user interface to play with, I crave freedom more. If I can’t make a device mine; if I can’t choose to be master of all that goes into it, out of it and through it, it’s not a general purpose computer – and I refuse to base a good proportion of my future computing needs on it.

  • On Very Small PCs

    With my recent acquisition of a Bluetooth keyboard added to the PowerSkin, my phone has completed its transition from thin, attractive polycarbonate slate to the monstrous assault on product design you see before you.

    Desire HD + PowerSkin + Bluetooth Keyboard

    Or so I would have said in the dim and technologically distant days of 2010.

    But really, I don’t have a giant ugly phone – because the other day, an incoming call interrupted my SSH session and I was briefly confused as to why someone was calling me on my computer.

    I don’t have a giant phone – I have a really tiny laptop, with a battery that lasts two days.

    Did the future happen while I wasn’t looking again?

  • Union Meetings are Broken

    Today’s union meeting, the latest in a series that have been held every few weeks since January, was more than I could face. I skipped it to eat lunch and tackle an interesting software problem instead. It’s not that I don’t want my voice to be heard; to take part in the democratic process inside the union – it’s just the inefficiency of it all that I can’t stand.

    In the democratic process by which national and local governments are elected, the bare minimum one needs to do is to go to a polling station and vote – a quick walk, a tick in the box, job done. How we form our opinions on which candidates to vote for is up to us. There are numerous ways in which we can find the information we need, in our own time, to whatever extent we feel like. Information is everywhere, even if it’s not quite as everywhere as I would like.

    But contrast this with the union decision-making process. Negotiations with the company proceed at a snail’s pace, so all the information we have is dished out to us at irregular intervals often weeks apart. To vote on anything, a motion must be proposed, then a meeting called (far enough in the future that everyone can plan around it), then all the members must convene. The meeting must then, it appears, be hijacked by the same people asking the same repetitive questions as always, followed by a lengthy debate about whether we want to vote on the given motion at all, or change it. After an hour of soul-sapping boredom, we all then vote on whether we have enough information to make a decision or not, decide that we don’t – so can’t make a meaningful decision after all – then we all go back to our desks and wait for the next meeting to be called in two weeks’ time.

    I and other colleagues are now so disenfranchised with the process that we’re starting to care less about the result – I’ve had enough of arguing about my pay rise, now I just want to know what it is and get it as soon as possible. And if the process is so bad that participants stop caring about the result, the process is broken.

    This is the twenty-first century. The sum of all union knowledge could be wikified; regularly updated. We could vote on motions online, in seconds. Argumentative characters could have their arguments amongst themselves, then with the committee, without everyone else present. The whole process could iterate so much faster, with fewer annoyances on the way, and everyone – staff, union and company – could stop wasting so much time. So why don’t we do that?

  • App Idea: CatchUp

    Here’s some initial design ideas for a location-aware chat app that, as far as I am aware, has significant new features over and above existing mobile chat apps (iMessage, WhatsApp, BBM etc.) and existing location-based functionality in apps (FourSquare, Facebook check-ins, Google Places).

    Background

    Pictochat

    The inspiration for this idea came, more or less, from the Nintendo DS “Pictochat”application.  PictoChat allows up to 16 users to link their DS consoles over a peer-to-peer WiFi connection, and share doodled messages with each other in real time. Between a couple of DS-using friends, PictoChat is an interesting gimmick, but I first encountered it coming into its own at an anime (Japanese animation) convention called MinamiCon. Here, the concentration of DS users was so high that multiple 16-person PictoChat rooms came into existence, full of people chatting away with other convention-goers.

    This was in 2005, before the now ever-present smartphone really came into its own. What about today? Achieving a critical density of DS users to make PictoChat useful is no longer an issue – a critical density of smartphone users exists at every event and every non-event in the Western world. What if we reimagined PictoChat for the smartphone?

    Concept

    There is one big change to the PictoChat concept that we need to make to have a viable idea – and one big addition.

    Attempting to write using DrawSomething

    • Text, not pictures. The DS’ stylus and resistive touchscreen were ideal for doodles, but not so much for text – though a keyboard was available. Modern smartphones have thumb-friendly capacitative screens, and anyone who’s tried to give textual clues in DrawSomething will tell you that writing text PictoChat-style is a non-starter. This new app needs to be text-based, with optional picture and video sharing, much like MMS.
    • Catching up. The idea of “catching up” provided the app’s working title, and forms a secondary mode for the app. As well as real-time chat between people in close proximity, the app also attempts to solve the problem of “how do I keep in touch with people I did [activity x] with?”. Say, for example, that you are at a concert. Over the course of the event the app detects 20 people in your vicinity. You could chat with them live (though hopefully you paid to watch the band not stare at your phone…), but the app remembers who was there so you can also chat to them afterwards.

    Technical Issues

    There are a number of technical issues that the app would have to address.

    • Privacy. It must be easy for users to indicate that they don’t want to be interrupted by messages, and that they don’t want people to detect your presence and “catch up” with you later.
    • Identification. Integration with Facebook would be desirable to allow users to find their friends on the service. However, the app is providing a semi-public mapping of people to locations, so CatchUp users should not be identifiable to people who are not their friends. Foursquare has struck a reasonable balance here.
    • Connection technology. PictoChat used device-to-device WiFi. This is not ideal for CatchUp as it would prevent users from using their WiFi for other things. A low-power Bluetooth connection is a possibility which would also enforce the “chats must be local” idea. However, if we are going to enable “catch up” chats later, we need a server-side chat backend anyway, so it may be best to route everything through the server and determine user proximity for local chat groups on the server.

    CatchUp Architecture

    CatchUp Architecture

    • Integration to other services. Integration with the Facebook, FourSquare or Google Places API could give users the ability to “check in” and use the chat facility together, increasing uptake. Integration with services like Last.fm could incorporate knowledge of event times and places, meaning that the “catch up” chats can have sensible names like “Justin Bieber Concert, Wembley Stadium, 1/1/2012” rather than “with 312 users at Wembley Stadium, 1/1/2012”.

    Last.fm's Events List

    Last.fm’s Events List

    • Blocking. It must be easy for users to block and report abusive users, prevent them from finding out where the reporter is in future, etc.

    Mockups

    I have produced a couple of user interface mockups for the potential design:

    CatchUp Main Menu

    CatchUp Main Menu

    The main menu of CatchUp presents a simple list of chat opportunities, in reverse chronological order.

    At the top is the “Chat now” area. Pressing there takes you to the live chat for your location, as determined and managed by the CatchUp server. The tile shows where CatchUp thinks you are, and how many people you will be placed in a chat room with.

    Below this is a list of all your “catch up” opportunities. If configured to do so, CatchUp monitors your location in the background. If you stay in a location with enough people for long enough (possibly without having to explicitly open a chat), a “catch up” for that event will be placed in the list. The user can press one of these to be taken to a chat room for everyone who was there. Users can remove the Catch Up from the app (and thus prevent being chatted with by other event attendees) with a swipe.

    Settings will have fine-grained privacy options, for example to prevent the user appearing in others’ Catch Ups without explicit permission, to mark certain locations that Catch Up will automatically deactivate itself in, and so on.

    CatchUp Chat Interface

    CatchUp Chat Interface

    Chatting in CatchUp is a simple affair. As locations may have many people chatting, iPhone-style bubbles are replaced with a more basic appearance – though images and videos can still be embedded.

    Potential Flaws

    No application is without its flaws. Here are some that CatchUp would have to address:

    • User Critical Mass. Any social app is only as good as the number of people using it, particularly if the main use case is live chatting. Facebook integration could help a lot here, as could venue sponsorship such as posters with instructions / QR codes to download the app.
    • Balancing default privacy options. Many (most?) users will never change their privacy options. The default must be restrictive enough that the app does not raise Facebook/Buzz-style security concerns, but permissive enough that Catch Ups are still useful.
    • Web interface? Can Catch Up do without a web interface and run mobile-only like Instagram? Or would a web-based interface be useful so that post-event Catch Ups can be done with a proper keyboard?
    • Permanence. Catch Up needs to strike a balance between permanence (everything is kept forever – but UI becomes more complex and permissions more fine-grained) and impermanence (Catch Ups expire and are deleted – but we may need to allow users to get their data out).

    Naming Ideas

    Aside from “CatchUp”, a number of other names have been suggested:

    • Ketchup (a pun on Catch Up)
    • ReCollect (based on the idea that you can “collect” people at events then chat to them later)
    • LiveChat

    Next Steps

    What’s next for CatchUp is largely down to you.

    I am a UX guy and a Java/Python/PHP developer with zero experience of mobile app development – I can do a mean usability study, but I can’t make this app myself in a sensible amount of time.

    If you want to help make this app, get in touch. I can’t do it without help.

    If you want this app to exist but can’t help, share this post! Eventually it’ll get to someone with the time, skill and inclination to help out.

    And if you have any comments whatsoever, keep on scrolling. I’d love to hear any thoughts or (constructive) criticisms you may have!

  • My Son vs the Global Monoculture

    The other day I set to wondering what Joseph would make of his Spanish heritage – much more immediate for him with Spanish grandparents than my own distant Scottish and Irish relatives whom I was born too late to meet.  But I suspect the answer will be “not much” – that he will grow up like all children of the twenty-first century, considering national and regional cultures to be a thing of only historical significance.  Cheap travel and global communications are already merging cultures, and the pace of the change is only going to increase.

    McDonalds in Fanateer, Saudi Arabia

    McDonalds in Fanateer, Saudi Arabia

    In a way, it’s sad – like the loss of a species or a language, the erosion of a cultural identity is removing information from the world that we can’t necessarily get back when we decide we want it again.

    But on the other hand, the more blended global cultures become, the more possibilities we have. Our common memes are making us immune to “culture shock” and allowing us to communicate with other people who a century ago we would have thought of as ‘alien’ – turns out, of course, they’re just like us. A society that has given up on the need to hold onto its historical culture can integrate everybody and every good idea, no matter how ‘alien’.

    It’s started. Chinese food is no longer exotic, it’s just food. Coke and McDonalds aren’t American, because they’re everywhere. Good ideas – even ones high in saturated fat – belong to the world, not the country where they began.

    So regardless of what my son thinks of his Spanish roots, I look forward to a future where he can travel and communicate with others from the far corners of the world without cultural differences getting in the way.

  • Don't Call Yourself a Programmer

    As a twenty-six-year-old software engineer – I shan’t use the word “programmer”, for obvious reasons – who’s only ever really had one job, I probably ought to refrain from posting an opinion on this post:

    Don’t Call Yourself a Programmer

    But I will anyway. It’s true, every single word of it. I’m lucky enough to be in that 10% of jobs that isn’t producing “line of business” software, but that percentage doesn’t seem far off the mark. And all the rest applies – in my industry perhaps more than most, the points about networking and about managers hiring people they know ring true.

    It’s a long read, but if you’re in the software industry or at University aiming for a job in software, do yourself a favour and read it. It’s well-written and probably the most concentrated page of good advice you will read this year.

  • Dawkins, meet 4chan

    When Richard Dawkins first coined the word “meme”, he described it as “an idea, behavior or style that spreads from person to person within a culture.” The mental equivalent of a gene, it is something we pass from parent to child, though the mental rather than physical nature of the meme allows it to be passed from any person to any other person regardless of their parentage.

    Of course, the internet has taken that word and twisted it somewhat, using “meme” to refer to viral pictures and video, things we might once have called “image macros”. A meme in the colloquial sense doesn’t seem to have much in common with a gene anymore.

    But whenever my four-year-old son describes something as “epic”, or wants to see “the one with the cat that’s a Pop Tart in space”, or runs up to me and breathlessly informs me that “Daddy, daddy, there was a cat… and it was playing the keyboard!”, I begin to suspect that there isn’t that much of a difference after all. I have passed on to my son my eyes, my nose, the curl of my toes, and a thousand obscure pop-culture references that he has picked up on and gleefully spreads to others despite having no context for them whatsoever.

  • Skeuomorphism Must Die!

    There have been a lot of rants around the internet of late about “skeuomorphism” in software, largely targeted at the latest versions of Apple’s operating systems. They’ve almost all been negative, possibly because designers hating on the concept are the only ones who felt sufficiently incensed that they looked up the name for it. I’m afraid I’m going to do nothing to buck the trend.

    Skeuomorphism is defined as “[producing] a derivative object that retains ornamental design cues to a structure that was necessary in the original”, which in software terms usually refers to making a software interface look like a real-world object. For example, the Apple applications that have recently raised designers’ ire:

    OSX Lion iCal iOS 5 iPhoto

    Skeuomorphism in software can be useful if (a) the concept the designer is trying to convey is difficult to get across without resorting to real-world objects, and (b) the skeuomorphic interface actually improves things.

    In the iPhoto example, the paintbrushes are utterly redundant – the user already knows it’s a photo-editing app. Using buttons instead of photorealistic buttons wouldn’t have made the functions of the tools any easier to understand. In fact it might have been an improvement, as to many users the brushes could imply “this tool lets you draw on the picture”, which is not the case.

    In the iCal example, the leather effect adds nothing in terms of usability – in fact it reduces the contrast ratio of the text to the background compared to OSX’s usual grey. All it does is evoke the idea of a leather-bound diary, an object which is fast becoming obsolete. (I tried using a real diary for a while. Gave up when it became apparent that there wasn’t a plugin for it that would sync the contents with Google Calendar.)

    And that, I think, is the core of my problem with skeuomorphism. It’s inherently holding us back. Designers of these interfaces have looked at the possibilities of software UIs, glorious blank canvases on which we can draw anything the mind can imagine, infinite spaces of black pixels begging for life and colour, and they’ve chosen to make their software look a bit like leather.

    Worse still is where this route leads, because Apple is far from the first company to flirt with these ideas.

    Back in the mid-1990s, new and inexperienced users were joining the “computer revolution” in their millions. The advent of mouse-driven interfaces, (relatively) high-resolution and high-colour displays gave software developers a new technique to ease non-technical users into the world of computing.

    They could make their fax program… look like a fax machine.

    Horrible 90s Fax App

    Buttons that look like textured plastic! Fake 7-segment displays to tell the time! Eight speed-dials! Huge amounts of wasted space! Curved corners! Cyan! A giant useless phone-shape attached to the side! A “handsfree” button that cannot possibly make the device more hands-free! This interface, and hundreds like it, are things of horror.

    And of course, one company took it too far. They produced a skeuomorphic interface to govern every action the user takes with the computer, an interface so reviled that it bombed commercially and became the in-joke of the software design profession.

    Kids: don’t do skeuomorphism. Or you might end up like Uncle Bob.

    Microsoft Bob

  • Love / H8 (A Review of Windows 8 Consumer Preview)

    Microsoft’s next operating system, Windows 8, is now available in “Consumer Preview” form – a release designed to let potential customers know what to expect from it when it launches in around six months’ time. It’s probably a very good idea to give it six months to soak in, because just in case the tech media has entirely passed you by, it looks like this:

    Metro Start Screen

    Nary a Start Menu in sight. Microsoft has gone all-out with its minimal, colourful “Metro” design that appeared first on Windows Phone 7 before coming to the Xbox 360 and finally to the desktop/tablet OS itself.

    I say “tablet” there because Windows 8 is very much focussed on the tablet – sometimes, it appears from the Consumer Preview at least, to the detriment of the desktop experience. It makes its point even before you first log in, with its photograph that overlays the login screen. How do you get from there to the login options? Swipe up. Or for a desktop user, the much more awkward click-and-drag-up. (Luckily, pressing a key also works.)

    Where’s the Start button? There isn’t one. To get back to the Metro tiles, you swipe in from the bottom-left of the screen, or from the right and press the Start button that appears. Both are easy, if not exactly intuitive, gestures on a tablet but are very awkward with a mouse. The same applies for the task switcher (swipe from top-right). And Metro apps can’t be closed apart from by going to that task switcher and dragging an app off the panel. In practice, for the desktop user, this means relying on the Windows key, Alt-Tab and Alt-F4 instead of the mouse gestures that are just too annoying to use all the time.

    The key usability ethos that drove Windows Phone’s Metro interface is that it should be “glanceable”; that users shouldn’t have to go into different apps or do complex things just to see the information that’s important to them. This idea has made it through to Windows 8 relatively intact – there’s a mail tile that shows your new mail, a calendar tile that shows upcoming appointments, and so on. It feels a lot like a phone or a tablet, but what it doesn’t feel much like is a real, multi-function, generic computer.

    Windows 8 Calendar

    Calendar

    Windows 8 doesn’t break support for all the apps you’re used to, but it does add new Metro-style apps of its own on the top. They’re really, really pretty – and currently unfinished, though that’s par for the course for an unreleased operating system. Above, the calendar’s month view really shines in full screen (though you can’t show more than just your primary Google calendar). Below, the equally pretty and minimal mail app (that doesn’t support generic POP or IMAP accounts yet).

    Windows 8 Mail

    Mail

    Some integration is very well done, such as the Pictures app which automatically shows pictures from Facebook, Flickr and SkyDrive:

    Windows 8 Pictures - Flickr

    Pictures

    …but some is less well done, such as the “What’s New” page shown below. Huge amounts of wasted space make it largely unusable as a main way of interacting with the Twitter and Facebook feeds that it shows. (It’s also the interface’s only serif text, which is slightly jarring.) Hopefully this app will get a lot of attention before launch.

    Windows 8 "What's New"

    “What’s New”

    There are a few ugly lines and some odd incidences of 16px Arial bold too, such as in the weather app (below). On any other interface they’d go unnoticed, but given the smoothness and the emphasis on large, thin typefaces everywhere else in the GUI, they stand out.

    Windows 8 Weather

    Weather

    By contrast the new Windows Store really nails the appearance, showing off how beautiful Metro can be. Again, as expected for a pre-release OS, the store is a ghost town with only a couple of dozen apps in total. Apps from the store install and update as expected, which may finally put an end to the manual effort of keeping Windows apps up-to-date, at the cost of putting more of the computing experience under Microsoft’s control. (Of course, you can still download and install apps without going through the store.)

    Windows 8 Store

    Store

    The full list of installed applications isn’t on a Start Menu but is instead part of the system-wide Search functionality, just like on smartphone operating systems. Luckily you can get there just by typing on the Metro “Start” screen, so it works as a decent app launcher for keyboard-lovers.

    Windows 8 Complete Menu

    Search

    As you can see, non-Metro apps are included in this list too, and when activated, the main problem with Windows 8 becomes apparent: schizophrenia.

    It’s like there are two teams at work on Windows 8 (there probably are) and they refuse to talk to each other or share ideas. From a world of simple minimalism, geometric tiles and large thin fonts, the simple request for a file browser window drops you immediately into this:

    Windows 8 Explorer

    Explorer

    Five menus worth of “ribbon” interface, icons in ribbons, icons in the title bar, minimise and maximise, location bars, side bars… The Explorer GUI would have looked at home in Windows 7, but against the rest of Windows 8 its needless complexity and over-engineering is staggering.

    To the left of the screen are desktop shortcuts that bear no resemblance to your Metro “desktop shortcuts”. At the bottom of the screen, a taskbar that doesn’t include the Metro apps you have open. And of course no Start button, no hint to the novice user that there is a way back to the completely different interface they were using just now. (If you’re wondering, the corner-hotspot-gestures still work, bringing up weird semi-transparent overlays over the Windows desktop.)

    For the many people who are going to hate the Metro interface, it’s nice that you can use Windows 8 largely from the traditional desktop – but if you don’t pin all the desktop apps you want to the taskbar, you’ll have to dip back into Metro to launch them. Unfortunately, for those people, there’s no compelling reason to upgrade. The desktop experience is nearly identical to Windows 7, and all Windows 8 adds is a weird extra GUI layer that you hate.

    For the people, myself included, that love the Metro interface, we have the opposite problem. Simple productivity tasks can be done from Metro, but to get any real work done – a web browser that supports more than 10 tabs, say, or a word processor, or a game – you’ll be switching back to the desktop interface far more often than you’d like.

    Windows 8 Settings

    Settings

    With Windows 8, Microsoft have set themselves a monumental challenge. Rather than follow in Google and Apple’s footsteps by adapting their mobile OS for tablets, they have chosen to differentiate themselves by adapting their desktop OS instead – the same desktop OS that is used by an estimated 90% of all computer users. If they fail, it will have been an expensive experiment that could cost them ground in the desktop market as well as the tablet market. If they succeed, they will have stolen Apple’s crown as the greatest innovator in desktop operating systems.

    This time next year, we’ll know for sure.

    In the mean time, I’m rebooting into Linux.

  • A Beginner's Guide to Java Swing

    For those looking for a quick introduction to laying out Graphical User Interface components using Java’s Swing technology, this guide may prove helpful. (But probably not.)

    Swing Components all have a few common properties that affect how they are laid out on the GUI. These are:

    • alignmentX and alignmentY do nothing whatsoever.

    • maximumSize sets the largest size the component can be when rendered, unless the Layout Manager feels like messing with you.

    • minimumSize sets the smallest size the component can be, although this only holds when Venus is in Capricorn.

    • preferredSize sets the exact size that a component will try to be, provided you have entered the secret unlock codes which are known only to Larry Ellison and the Illuminati.

    Swing components are arranged inside their parent panels by Layout Managers. Many layout managers are available to achieve certain common layouts. They include:

    • FlowLayout arranges components in a straight horizontal line, hiding any that it can’t be bothered to display because your box was too small for them.

    • BoxLayout places all components in either a horizontal or vertical line, expanding to fit them all, but resizing the child components for the lulz.

    • BorderLayout places components on the top, left, bottom or right-hand side of the panel. If you place two on the same side, they duel to the death until only one survives.

    • GridLayout arranges components in a grid with fixed size cells. If the component in one of the cells happens to be huge for some reason (e.g. you did not enter the Illuminati secret unlock code), your entire parent panel expands until it consumes the universe.

    • GridBagLayout represents the eternal influence of the Outer Gods in the affairs of man. Ï̷̫̥̣͈ͯ̌a̱̮̼̣̞͇̬͚ͧ́̉̆ͭͭ͜I̻̝̰̟͕̖͎ͦ̏ͫ̀͗̋͢ã̶̧̭͚͖ͤ͑́̎ͩͅ!̙͉͙̫̋̋͠ ̹͓̝̹͙͉̲͉̰́̽̐̈ͭ͆̎!̛̘̖̺̺̦̙ͦ͗̂͗̈͊͝ f̦̬̲͇̥̗̙̬͆ͦͦ̀̒̕G̸̩̹̞̫̈ͨ͒͆͞r̶̤͆̋i̴̮͖̦̙̤͈̗͍̎͛ḑ̗̰̘̔ͥ͆͢B̻͇͎̣̰͓̀̇͒ͬ̈́͂ͣ̚͠͠ä̲̮̰͚̬͑̎́g̷̲͔̬͓̙̙̑̂ͧ͢L̶̛͍͎̝̲͐̃a̴͈̤̖͚̠̼̳̺̬͊ͥ̕͡ẏ̶̹̃̌͛̀ǒ̴̙̜̭͖̆͆ͮ̀ͫ͌ͤ͠u̶̥͈̝̱̺͖̔̿͗̊ͦ̒̋ͩ́t͖̤̻̥̟̻̻̹̞̻̎͒̅͂͗͑̽̎ͩ̇̇̔̉̌̃ ̵͕̘̬̳͆̒̈́ͭͦ̚͠’̷̘̔͋ͦ͂͝t͍͉͒̄ͨ̓ͧ̋̀h̲̣̜̱̳̝ͣ̓ą̶̸̜͎̝̹̭̹͒̐̄͊ͯ̐g̯̹̔̍ͦ͡n̩͚̞͆͌ͬ̐!̞̪͎͙̼͇͌͊̌

    I hope that helps.