Category Archives: Rants

A Beginner’s Guide to Publishing on iOS and Android

Submitting apps to Google Play

  • Pay the $25 one-time fee.
  • Sign APK with your keystore.
  • Upload the APK.
  • Upload screenshots and metadata.
  • Hit publish.

Total time: 5 minutes.

Submitting an App to the App Store

  • Pay $99 a year.
  • Wait for Apple to dig through your articles of incorporation, then approve your membership.
  • Apple tries to call your corporate attorney at 7:30 PM on a Friday and can’t figure out why he’s not answering.
  • Apple ignores your emails asking them to call you back. Restart process.
  • Obtain an intermediate certificate. Install into Keychain.
  • Whitelist any devices you’ll be using to test with.
  • Create development and distribution provisioning profiles for your app and system.
  • Generate your certificate. Load everything into Keychain.
  • Find out you need the newest MacOS that just came out last week in order to compile.
  • Re-download the whole 5gb Xcode. Find out that there is now no backward compatibility with older iOS.
  • Link up certificates to your Xcode project.
  • Certificates don’t work for some inexplicable reason. Apple doesn’t know why. Revoke all certificates and go back to step 5.
  • Spend two days trying to figure out a half dozen unhelpful error messages in Xcode, in-between bugs, freezes, crashes, and file corruption.
  • Upload your icons and screenshots in dozens of sizes, including a 57×57 and 58×58 icon (WTF, seriously?).
  • Compile for Release and pray the certificate works.
  • Log into iTunes Connect and upload your screenshots (in 3 different sizes) and metadata. Mark it as ready for binary.
  • Download Application Loader and open. Don’t use open or create package, they don’t do what you think they do.
  • Navigate to ~/Library/Developer/Xcode/DerivedData and try to figure out which folder is your latest release compile.
  • Upload to Apple. If it rejects your certificate, even though it worked fine on your device, go back to step 5.
  • Now that you painstakingly rebuilt your certificates, you find out the release cert won’t run on your device. Ironically, Application Loader accepts it this time.
  • Wait anywhere from 1-3 weeks for Apple to review your app.
  • Your app will likely get rejected. They’ll give an oddly-worded explanation why, leaving you to guess what they want you to fix.
  • Have fun in Xcode. Go back to step 12.
  • Congratulations, your app has been accepted. Grab a bottle of scotch, relax, and watch the nickels come rolling in.

Total time: 3 weeks.

I guess this should be a great hint of what I’m working on right now.

Opera Adopting WebKit and Why it Sucks

Everyone who knows me, knows I’m an Opera fanatic. I’ve been using it for 13 years or so, actually. We had some great times over the years… tabbed browsing years before Mozilla copied it. Mouse gestures and easy keyboard navigation. Incredibly fast rendering. Session saving. Security. Stability. I could count on one hand the amount of times its crashed on me over the years (and 90% of it had to do with MSNBC’s old website — I can only hope they fired their UX guy). Admittedly, Opera has been slacking off with standards implementation lately, but it’s not exactly show-stopping stuff.

So why are they ditching Presto in favor of WebKit? I guess they just don’t have the money to keep moving in that direction, especially with the WebGL stuff that complicates future implementation. It’s a sad situation though, and makes me wonder how long until Firefox and IE follow suit. “But wouldn’t it be a perfect world with one rendering engine?” Well, yes and no. This happened once, remember IE6? If you wanted the Internet to work, you had to use that browser. But things weren’t so great… standards were lacking to say the least. New standards stagnated, and Flash workarounds became prevalent. But hey, it was the only browser in town, until Firefox. So if all browsers went to WebKit… not only would it be IE6 all over again, but the WebKit code would probably get forked all over the place anyway and defeat the purpose. You’d just end up with arguments over the direction of the project, and the end result would be WebKit, MozKit, ChromeKit, and IEKit. Hey, it’s happened once before.

I like WebKit, but I don’t love it. I’ve tried to love her, honestly I have, but she’s just not my type. The Javascript API implementation is very nonstandard and IE-ish. Stability seems lacking (might be due to the multi-threading?). Flash barely works (Chrome and Safari need to stop blaming Flash for their browser crashes; other browsers don’t have these problems). It’s slow. To be fair, maybe these are just problems with Chrome and Safari, and not necessarily WebKit. When I was loading up my netbook awhile back and deciding on a browser, I went with Chrome, and for 3 months I gave it a chance. It was excruciatingly slow. It crashed a lot. I figured it was because it was an underpowered netbook, so I didn’t think Opera would work any better if I installed it, but thankfully I was wrong. It made the Internet tolerable again. It’s going to be really lame if I have to start using IE9 instead of WebKit — and worse — if IE9 turns out to be a better browser than Chrome.

Presto was the little engine that could. Blindingly fast, incredibly stable. It’s just sad Opera never let it live up to what it could have been, or rather what it was, a standards-compliant powerhouse that shamed all other browsers. Why did they let it fall behind? Why don’t they open-source Presto and let the community improve it? Why just piggyback on WebKit?

I know I’m rambling. I’m not happy about this, but I wish Opera the best of luck in their implementation. Perhaps they’ll do a better job than Google, at least.

If I had a TED Talk, it would sound like this…

Once upon a time, computers were invented. The idea was simple enough; feed the machine input, it processes per your instructions, and produces an output. The hard part was getting the instructions into the computer so it knew what to do. First, logic was hardwired. Then there were punchcards. These processes were incredibly time-consuming, so programming languages were written. Low-level languages like Assembler allowed the programmer to build software for the CPU itself… this was efficient, but still complicated, and would only work for that particular hardware. Higher level languages were created to abstract the hardware and software, and make things more programmer-friendly. This gave birth to COBOL, FORTRAN, and BASIC. However, it was discovered early on that these functional languages were not well-suited for complex applications. Languages like C++ evolved over the next few decades to make object-oriented programming popular. As languages moved away from concepts such as garbage collection, other concepts remained, like static typing.

Over a decade into the 21st century, PC productivity has evolved by leaps and bounds. We no longer do word processing using markup tags. We don’t use BASIC as an OS. We don’t poke around in PostScript code to build vector shapes and 3D models. We don’t hack around in Unix terminals to check our email. Event logging is not done using a dot matrix printer in a closet. So then, why are we are still using punchcard-era thinking in computer programming?

We need to demand better than this. We need to put an end to Notepad-style IDEs. End the command prompts. End the need for compiling everything to machine code. End the buffer overflows, freezes, crashes, hex hacking, and general security disasters. End the thousands of source files strewn across directories. End the hours wasted rebuilding for other architectures. End the dozens of C++ and LISP copycat languages and admit they were never great languages to begin with. End the need for languages.

While everything else on PCs has moved away from languages, software development has not. Why is that? Is it because we’re too limited by RAM and HDD? Software is getting more complicated? We can’t afford for software to take longer than it needs to? No, no, and no. Why can’t we abstract things in a different way? Like simply use visual interfaces to snap together libraries of low-level logic, skipping high-level programming languages completely? Why does MVC and OOP have to involve hundreds of files, when it could simple be the way you choose to visualize your data, not necessarily how you physically organize it? Why not let the computer organize itself efficiently… why is the housekeeping our job?

I hope one day we will live in a future where the average developer doesn’t concern him/herself with text-based code, but instead concentrates on the tangible engineering aspects of their project. I see interesting projects that attempt to go this route, and I guess the biggest problem is the money and time involved in such feats. But in the IT world, wouldn’t it be so worth it? I know I’ve talked about these ideas a million times, but let me reiterate: Creating yet another programming language will not solve any problems; let’s instead come up with a plan to move away from programming languages.

MVVM Frameworks versus Unobtrusive Javascript

So this has been bothering me, and maybe I’m underthinking this, but doesn’t it seem like Javascript frameworks these days are not only breaking the unobtrusive scripting mantra, but also breaking MVC? Example from knockout.js’s website:

knockout

Why on Earth would it be a good idea to “encapsulate data and behavior into a view model”, as their website suggests? Well, to “get a clean, extensible foundation on which to build sophisticated UIs without getting lost in a tangle of event handlers and manual DOM updates.” I’m really on the fence about this. While I’ve always suspected MVC can sometimes complicate development and refactoring, these days I live by unobtrusive scripting. HTML holds your structure. CSS holds your stylesheet. JS holds your business logic. SQL, JSON, XML, etc. hold your data. Why mix and match all that crap in your HTML file? Just because you can, doesn’t mean it’s a good idea, that’s why we all stopped doing that method years ago. And it’s not just Knockout doing this, it’s nearly every framework these days.

So to be fair, there are definitely arguments in some cases against MVC. Likewise, there are arguments against unobtrusive Javascript. For instance, jQuery event handlers can be used irresponsibly and make it easy for your designers to screw up the logic by renaming a class or restructuring the tag hierarchy. I’m definitely familiar with this. And with MVC, I can see the advantages of forsaking it in the backend for some projects since it’s often times building the view itself based on logic. However, in the case of Javascript, your view has already been generated so I fail to really see the benefit of decoupling them.

What is the best way to go about this problem? Honestly, we can chase our tails on MVC and UJ for another decade, but I think the only way to solve this is with smarter IDEs. Can you get “lost in a tangle of event handlers”? Sure, I guess. But you can also get lost in a tangle of MVVM… as a veteran of the “onclick=” era, you can trust me on that. We should demand a web development IDE that makes it easy to manage event handlers and functions, representing them visually in some fashion, and linking them to objects from the HTML side so we can instantly see what logic is attached to them. Then we won’t have to wade through tons of text files to locate what we want. This is the year 2013, why do we continue to pretend this problem doesn’t exist or doesn’t need to be solved?

I don’t mean to sound all negative; modern Javascript frameworks can do some cool stuff… automatic DOM updating, templating, ease of code generation from the backend, etc…. so for some projects, this is absolutely wonderful and perhaps merited, but honestly I can’t think of an everyday use for them that wouldn’t make things needlessly complicated. jQuery forever changed the way we code… it’s a great general-purpose framework that makes it easy to do event handlers and DOM updates, so in a way, doesn’t that already solve the problems that MVVM frameworks are trying to “re-solve”?

In closing, some of these MVVM Javascript frameworks infuriate me and make me want to develop my own cleaner, friendlier framework or IDE. It also makes me reflect on previous posts suggesting that we might be regressing back into 90’s web development; now I’m starting to think it really is happening.

Predictions for 2013-2014

– Apple will release the iWatch
The curved screen thing will be cool for about 5 minutes, and then people will remember why we stopped wearing watches in the first place. Bottom line is it won’t be the sort of thing Steve Jobs would have allowed to be released.

– HTML5 and Javascript will continue to revolutionize application development
Developers will start ditching Objective-C, Java, and C# and moving towards the cross-platform capabilities of HTML5, whether it’s a mobile or desktop app.

– IE8 will continue to be a problem for web designers
Worldwide usage will go from 25% to ~15%, but that won’t be enough to be able to completely drop support for it. Maybe 2014. And even then, there are numerous issues with IE9 to look forward to.

– Flash will still dominate over canvas
But if Adobe knows what’s good for them, they’ll give Flash an HTML5 export option.

– New canvas development environments will be introduced, but still no real IDE for designers
Canvas technologies will grow by leaps and bounds, but will still be in the shadow of Flash in many ways. However, game development engines written for canvas (and some cross-compiled to Flash) will become a driving force in developers moving away from Flash’s strongest selling point.

– Tablets will start to go the way of netbooks and ultrabooks
Although they will still have a comparatively strong showing, people will finally start wondering what they need a tablet PC for, and start going back to buying normal laptops.

– Apple stock will fall flat and more or less stay that way, besides on Keynote days
Apple will continue to do everything but innovate against their increasingly tough competition. Instead of making much-needed changes to iOS and the iPhone’s featureset, they will continue down the path of gradually speeding up the processor and adding more services nobody will use (Maps, Siri, Newstand, that ticket thingy…). They will finally use all that money they’ve been building up… in an attempt to wipe Samsung and Google off the face of the earth. It’ll make the justice department kinda mad.

– A financial crisis will begin to take shape, much like in 2008
The US will get its turn to be Greece. Not to sound like Chicken Little, but start investing in precious metals and virtual currencies. Tech stocks will not save you.

– The popularity of Rails and PHP will decrease as more of these casual backend developers decide to specialize in Javascript instead
Much like traditional developers moving to Javascript, backend web developers will do the same, but I’m not just talking about Node.js. I mean they’ll get into a more lucrative and fun line of work, and let the engineers do their Java and .NET thing.

– This will be another not-so-great year for Microsoft
The Surface won’t sell. No tablet will actually, besides the iPad, but even those sales will start to sag.

– Assault weapons will get banned like they were in the past
Some people will whine, and then they’ll move on to more important things, like the latest celebrity divorce. Seriously though, conservatives might actually start hammering Obama on more important things, like the use of drones and his continued assassinations of Americans overseas. Real political discourse: it’s not just for the fringe element anymore.

– The cost of app development will skyrocket
Due to the continued fragmentation of iOS and Android, it’ll be harder to write consistent apps, especially ones that can’t be written in Phonegap. Apps will also require more complexity to do things that haven’t been done already. This will drive up the cost of deliverables and slow down growth of the sector, though it won’t exactly stop growing.

– What’s left of the social IPO bubble will burst hard
People (besides their shareholders) will still love their Facebook, but that won’t save anyone else. Twitter will start to get old and busted, while places like Reddit will get more popular. Social will turn into something more community-oriented, instead of an isolated soapbox for you and random people you went to high school with.

– LinkedIn will get hacked
Anonymous will continue to show a strong prescence, but their “organization” will have more of a decidedly left-wing adgenda that includes hating on business professionals at large. A vulnerability will be discovered in some legacy code, which will culminate into an attack on LinkedIn. Otherwise though, it’ll be business as usual.

– Journalists will continue to preach the end of the desktop PC era
Its death will be greatly exaggerated, although sales will continue to slump. A PC is like a car these days, it’ll last 5-8 years before you need to think about replacing it. An Apple product will continue to have the shelf life of a gallon of milk.

– This will finally be the year of SASS and LESS
Web specialists will not be able to get jobs without knowing one of these technologies. A competing technology might be created to merge the subtle features together to make one CSS preprocessor to rule them all. Knockout, Angular, and Ember will also be huge forces, but may fizzle from whatever similar solutions come next.

– A major part of “The Cloud” will go down
AWS is guaranteed to have hiccups, of course, but I’m thinking Apple, Google, or Microsoft’s services will crash and wreak havoc on the Internet.

– Web designer roles will start dying out
It will no longer be okay to simply be a web designer. That’s like being a janitor that sweeps but doesn’t mop. More than ever, employers will look for either hybrid designer/developer roles, or look for specialists (UI/UX designers, art directors, branding consultants, etc.) to drive the creation of web mockups… people that really understand the professional logic and theory behind a website’s creation, just people who know what HTML and CSS are.

– Crowdbusiness will go unsung, but quietly grow in popularity
That’s a word you’ve never heard before. That’s because I invented it (I think). General-purpose technologies as well as specific projects will be created and expanded on to run businesses in a social way, instead of the traditional Machiavellian way. Instead of booking hotels, people will book with AirBnb. Entire businesses will run off of random strangers’ services. Which will bring about the next point…

– This will be the year of the eReputation
It is no longer acceptable to run the entire web in anonymous way, like Craigslist. A shared system will be created to share a person’s real-world reputation across the web, to make it okay to trust strangers again. This must be done in order to take the next steps in businesses going truly digital.

Jobs to Stay Away From

During my month of unemployment (which felt like a lifetime), I got thrown back into the job market with no lifesaver, thrashing in a sea of horrible jobs looking for something out there I’d be a good fit for. Ultimately I found lots of great things when I started looking outside of Florida, and ended up with 5 different job offers at the same time. But what was even more amazing was how some things in the job market never change, and some of the new trends in hiring these days. Below, I have created some fake job descriptions to help all aspiring web developers navigate the rough waters of modern day job hunting. Enjoy.

Disclaimer: NONE of these are based on any previous jobs I’ve held, which have all been overall positive experiences, but rather based on ridiculous job requirements I’ve seen over the years.

Captain of All that is Awesome
We are looking for a ROCKSTAR developer and IT Evangelist to work for a super awesome badass company!! We’re pretty much the best company ever, because we have beanbag chairs and Xbox. You must be a designer fluent in Photoshop, Illustrator, and InDesign. A web developer fluent in Dreamweaver, Flash, Flex, Ruby on Rails, ASP.NET, PHP, Java, Javascript, and jQuery. Must be a mobile developer fluent in Java and Objective-C, even though you’ll spend 100% of your time in Phonegap. You must have advanced level MySQL, Oracle, sqlite, and NoSQL. Must be a cloud evangelist that has built data centers and has Oracle networking certification. Must have a Six Sigma Black Belt, a PhD in Nuclear Engineering, and expert knowledge of House and Glee (because we’re so down to earth). At AwesomeCorp, we’re hard at work building our CEO’s idea of the moment, whether it’s an app to tell bros where to party, a WordPress plugin that puts, like, hot chicks all over your blog, or a Facebook game that simulates drunk surfing. Come work for AwesomeCorp, because we’re so freaking awesome!!

These are the most easily-recognizable postings, due to use of the words “rockstar” and “evangelist”. Typically it’s a company on the beach, run by a trust-fund frat boy or ex-high school jock trying to live out his glory days bossing people around. The job requirements are impossible, but they’ll hire you if you know the secret handshake. Considering you have to do everything under the Sun at any given time, the pay sucks and the boss is intolerable. The company goes under when it turns out the boss’s snail mail “fake DMV” scam was frowned upon by the state government, thus he spends the weekend converting next week’s payroll to Jose Cuervo.

Ironically Cool Web Barista
HipStar LLC of Portland is looking for a simple web designer to take our Social Network about fixies and old-timey mustaches to a whole new level. Candidate must be fluent in Bootstrap, Node.js, Sproutcore, SASS, HAML, ExtJS, and 10 other Javascript frameworks you’ve never even heard of that came out last month. Must supply your own MacBook Pro with Retina Display. Or else you’re not cool enough to work here. The dress code is Paul Bunyan swag, and the kitchen (we call it the “pretension pond”) is always stocked with Pabst Blue Ribbon. Qualified candidates must have beards and producer glasses, and must submit their art school portfolios for us to make fun of. We’ll contact you within 48 hours to let you know that the cut paper look is so Fall 2012.

There are way too many of these. The “we wish we were Apple” corporate culture from a prima donna CTO, along with incredibly esoteric technology requirements. Ultimately nobody gets hired, which is too bad, because their auction website for knit animal hats totally would have taken off.

Web Developer III
Conglomodyne Corportion requires a synergistic candidate skilled in Visual Studio, ASP.NET, T-SQL, Source Safe, and Powershell to leverage a banking application structure. Must be familiar with Agile/SCRUM SDLC, and must be able to pass a test where you identify 200 different IT acronyms, because that’s an excellent indication of whether or not you can do the job. Your workspace will be in the AT&T building downtown on the former janitorial services floor. Just follow the inspirational posters into our waiting room, then we’ll call you in to grill you on technologies we don’t even use here. Benefits include Hawaiian shirt day, picnic sack races, and a water cooler on every floor. Conglomodyne is an Equal Opportunity Employer.

There are lots of these, and the recruiters always swear this company always does contract-to-hire. Getting hired here is easy; the answer to every interview question involves the words “proactive”, “incentivize”, and “low-hanging fruit”. Standing on the shoulders of giants and getting money shoveled to you is fun for awhile, until the cubicle life starts wearing you down. Then the managers and HR who seem bent on making you miserable. And the nonsense meetings that last half of the day, that make you fantasize about ED-209 board room re-enactments. In the end, even if they did extend a job offer, it’s more beneficial to leap out the window of the 43rd floor… you’d have a better chance of surviving. See, there is a lot to learn about the corporate world from RoboCop movies.

GURU NEEDED IMMEDIATELY
i am looking for a web guru who knows photo shop cs9, excel & autocad 2016 for a project that is sure to make BILLIONS & YOU WILL BE ON THE GROund floor to make teh 6 fig$$$$!!!!11 this idea has never been thought of before so u must come to my home office at 1433 trailer oaks cir to sign a NDA. all candidates must be CHRISTIAN & are subject to a background check. if u are from the government or cia u nead not apply..

Danger, Will Robinson. Some wannabe CEO with absolutely zero clue about the industry wants to sell his/her MLM diet plan through the internets, and wants to pay you in “private stock”. Unless you live in Silicon Valley, this never pans out for anyone. Ever. Plus, with this person’s knowledge of software that doesn’t exist yet, coupled with their fringe entrepreneur spirit, chances are your boss will be this guy:

And if you do end up working for these people, nothing will get done because they’ll stand over your shoulders and argue with you why you didn’t make their website a pixel-perfect adaptation from the Word document they gave you, and how removing Comic Sans from the products page is “subverting their carefully-engineered, god-given vision”.

Sr. Internet Engineer
Victrola Technologies now has an opening for a senior level world wide web (www) programmer. You may have seen us in our booth at COMDEX. Utilizing what is known as the “Internet”, or “information superhighway”, you will be in charge of utilizing cutting edge cyber languages like Perl and TCL/TK to build robust, bug-free “web sites”. Bonus points if you can use Java or Macromedia Shockwave to add rich interactive user experiences to your work. Optimal candidates will have experience in Visual Basic, ASP, and Visual Foxpro, and an A+ certification. Please contact us at victrjobs2828@aol.com.

I often wonder how these situations end. This could potentially be a great company, but with a clueless hiring manager that hasn’t updated the job description in 8 years, or doesn’t know the difference between a web designer and a web developer. Here they are on Monday, waiting for their new VP of development to walk through the doors so they can walk them to their private office, offer a complimentary bottle of Dom Perignon, and hand over the keys to the executive washroom, but instead you chicken out at home because you don’t think you have the 4 years of COBOL experience they demanded on the requirements. With sad looks on their faces, they go back to the beer pinball tournament they’re having in the break room. You’ll never know what you’ve missed.

IT Scapegoat
Cupertino, CA company seeks a GIS specialist who can help fix a popular mapping app. Must have a firm grasp of map software engineering and Objective-C experience. Must be able to use Xcode for 40 hours a week without getting the urge to gouge out own eyes. Must be able to take angry calls from the Australian Government, and spend hours writing apology letters to customers under the initials T.C.. Benefits include dartboard featuring Larry Page, a Steve Jobs shrine made out of Beatles and U2 records, and a $20 iTunes Gift Card. Please send resume in Keynote format to 1 Infinite Loop.

Two words: RUN. AWAY.

Common Sense By Any Other Name…

Seems like these days everyone gets to give a brand name to common sense, obvious practices. OOCSS, for instance… using DRY principles with CSS, come on, that’s just good practice. SCRUM… “let’s have meetings to discuss what’s progressing and what has problems–nobody’s ever thought of that before!” And then silly ideas from ages past, like sIFR and Cufón, the ridiculous answers to problems that weren’t really that huge of problems… well, those weren’t really common sense, more like the opposite, really. Since people like Inman get their 15 minutes of fame for thinking they’re the only ones that ever thought of using Flash to embed fonts, perhaps it’s time I came up with the Bartek Web Design Philosophy. I’m gonna make this up as I go…

  1. Be as semantic as possible. Let everything be what it is, and the universe will stay in balance.
  2. Validate your HTML. If it doesn’t pass validation, and you don’t want to let go of the code that’s causing it, you should probably rethink it. If you truly love Chromeframe, you must let it go free.
  3. Don’t bother trying to get your CSS to validate, except to look for syntax issues. You’re only going to hurt user experience trying to settle for the lowest common denominator.
  4. Use HTML5, but use it like it’s XHTML5. I know it’s a glimmer in the W3C’s eye right now, but you’ll thank me in 5 years.
  5. Polyfills are your friend. CSS PIE will help you achieve enlightenment, even though it has its dark side.
  6. CSS and Javascript do not belong in your HTML. Ever.
  7. jQuery, jQuery UI, and jQuery Mobile. Through this holy trinity, you can accomplish all things.
  8. Wireframe if you feel it is necessary for your clients. Mockup and slice with Photoshop. Don’t start any HTML/CSS without a full mockup.
  9. Don’t over-engineer. There’s no point in going nuts in Javascript for Aunt Edna’s Doll Furniture Emporium.
  10. Load as few external files as possible. Don’t have an external print stylesheet, 50 icon files when you could have used a spritesheet, or a dozen jQuery plugin files that never get touched, that could just be merged together.
  11. Don’t be a slave to backend devs. Pick a language, and learn it. It’s not as hard as you think.
  12. The best solution is almost always a custom one. It will save massive headaches in the long run.
  13. Don’t get caught up in design fads. The homemade look will one day be just as tiresome as the glossy “web 2.0” trend from 2006.
  14. Experiment with new stuff, and don’t be afraid to use Flash if absolutely necessary, but always have a fallback plan.
  15. Make your layouts responsive, but remember this is not always the answer to all mobile user experience problems. Sometimes jQuery mobile, etc. will solve this.
  16. Always plan for IE7 and IE8. Use IETester. IE6 is burning in hell, so no worries there.
  17. Be smart with your SEO. Don’t overdo your SEO, or you will find your SEO fighting an uphill battle it will never win. But if you have a serious budget for SEO, then by all means. SEO.
  18. Don’t settle being employed by ad agencies and web marketing companies for years on end. They help build your portfolio, but are career dead-ends. Keep pushing yourself further.
  19. The quality of your database is directly proportional to the quality of your backend. If you find yourself doing stupid queries, you probably have a stupid schema.
  20. Know a little of everything, find what you like best, then specialize.

And I guess 20 is enough. This philosophy evolved over 7 years of doing this professionally, and has served me pretty well. Hope someone out there finds this useful. And remember, it’s not just common sense… it’s the patented Bartek Web Design Philosophy®.

Everybody’s Talkin’ ’bout the New Sound

Not too long ago I had the displeasure of using Smarty in a PHP project for a major client. You’re probably wondering what the heck anyone would be using Smarty for in 2012… well, lots of turnkey systems (shopping carts, CMS, etc.) built from 2007-2010 use all sorts of templating engines, but Smarty, at the time, was definitely the most popular. These days, I guess PHP developers have wised up to what I had been saying for years, since you don’t really see these things being used anymore. Old-school templating engines had many obvious problems that nobody really thought of, while they were busy worshipping the concept of model-view separation. Don’t get me wrong, there’s nothing inherently wrong with this line of thinking, but… why did this seem to always necessitate the creation of an entirely new programming language? Did the Smarty people forget that PHP itself is already an amazing text processing language, and doesn’t really need an additional templating language written on top of it? To be fair, there are some nice templating engines out these days that use PHP itself as a templating engine, but honestly with good development practices, you can adequately MVC your way through a project without the need for a templating engine. If it scares your designers, then hire new ones. So anyway, the team got together and we basically all said, “is it just me, or is Smarty, well, stupid?” Unfortunately, we were stuck with it, so it didn’t matter that the development team loathed it.

I believe that templating system fiasco of yesteryear serves to prove an important point: the web development fads of today may or may not be the practice of tomorrow. It’s incredibly important that you don’t unnecessarily tie up thousands or millions into a project because it “has to be done in Node.js-SproutCore-Backbone-ExtJS-Coffeescript-SASS-HAML-960gs-Bootstrap-NoSQL”, or whatever bleeding edge technology stack of the week. It might be the hipster CTO thing to do, but keep in mind: some of these technologies may be keepers, but half of these technologies will be long forgotten in 3 years, and one or two of these will make your new programmers laugh, then hard-time you until you pay them to rewrite it in something more sensible. There’s a reason Java, .NET, and PHP continue to thrive, while stuff like Python and Rails seem to have peaked last year could be going the way of Perl and Tcl/Tk. They’re proven scalable, they have support of millions of developers, they have robust libraries already written basically everything, and they are used by the largest sites on the web. They may all be sugarless, downright ugly languages, but heck if they don’t get the job done everytime. I’m not saying all new technology is bad, obviously. Lots of amazing stuff has been popping up lately, but it doesn’t mean I’m going to rush out and use some unproven technology on a Fortune 500 company’s project, though I might experiment in certain places. There’s doing the cool thing, and there’s doing the smart thing. And yeah, I know it’s scary to use the “old way” on new websites sometimes, but I’ve certainly seen my share of situations where the old way was apparently done that way for a reason. Hopefully this doesn’t make me sound like a cranky old person afraid of change, because that’s not at all what I’m trying to convey, heh.

The Future of Software Development

I have a dream. A dream that one day, we will remove the shackles of syntax. We will stop living in the punchcard era of programming. Object-oriented will really mean visual on-screen manifestations, not junk compartmentalized in curly braces. We will stop putting the security of our computers at risk by programming everything in low-level languages. We will stop trying to abstract low-level and high-level languages by creating yet more complicated languages. We will stop using those scripting languages that function like they were created by aliens. We will give up on static typed variables, pointers, and other memory management concepts unnecessary in the 21st century. We will end the possibility of buffer overflows. We will stop the compiler errors. We will end the garbage strike. We will revolt against the Hungarians. We will stop using camels, and instead use spaces. We won’t have to memorize or rely on autocomplete. We will put logic together visually, instead of just typing code. We will truly collaborate in realtime, instead of merging and versioning. We will develop on web browsers, in the cloud. We will develop easily on a touchscreen; the keyboard won’t hold us back. We will stop writing the same code over and over again, and instead make others’ libraries easy to use and share. We will separate programming languages from software development. We will stop worrying about MVC and instead ask why the separation isn’t natural. We will bestow the power of development to frontend designers who are worthy. We will stop worrying about which language is ugly or pretty, and instead worry about why we even need languages. We will stop making programming more difficult than it needs to be. We will stop over-engineering software and go back to the KISS rule, like designers have already figured out. We will stop celebrating “clever” solutions that no other programmer understands. We will make code read more like a flowchart, and less like ASCII vomit. We will stop creating bugs and memory leaks. We will make software impossible to freeze and crash. We will modularize visually. We will create development environments so abstracted from code, it will make Python look like Assembly. We will stop creating hundreds of languages that keep failing to make our jobs easier. We will finally merge the desktop and web. We will make programming so accessible, anybody can do it. We will stop working in cubicles and instead work from the cloud. We will merge design and development. We will make programming an art again. We will make programming cool again, and not just for analytical, lispy grumps with Aspergers. We will end the seemingly endless best practices arguments. We will abolish tabs, semicolons, and braces. By the end of the decade, we need to make this happen. We must be the last developers that ever have to suffer under 1950s programming paradigms. We will go free. We MUST go free.

Flame on, lispy grumps. 🙂

Thoughts on Flash

Yeah, I know I’m a little late to this discussion.

It’s been two and a half years since the famous Steve Jobs letter, and the web has definitely seen some changes because of it. jQuery has replaced most of the incidental interactive uses of Flash. Many canvas IDEs have started popping up on the market, though many are in their infancy. Video and audio tags have become popular fallbacks for Flash video, though they have not replaced Flash due to H.264, MP3, and IE8. Some tools, like Google Swiffy, exist to help facilitate the conversion of assets from Flash to HTML5, though they are slow and rudimentary. IE9 marks the return of Microsoft finally taking web standards seriously. Nearly all games are still made in Flash, but everything else has seen a significant drop in Flash use.

Bottom line on all this? HTML5, as a Flash replacement, has gained some real momentum, but it is still woefully lacking in most ways. A/V tags have caught on as fallbacks only, if at all, due to the standard’s inability to support DRM technologies and fullscreen modes, as well as the spotty format implementations that cause some serious production considerations. jQuery, though a great replacement in many ways, lacks a lot of the advanced keyframing, masking, 3D, etc. that really made Flash captivating. Canvas, though growing by leaps and bounds in Webkit, is still unsuitably slow in most web browsers and mobile devices, often incapable of a consistent 30fps for games that would easily get 300fps in Flash. The latter begs the question: is the V8 Javascript runtime the savior of HTML5 like we think it is, or is there still more work to be done? A lot more?

Here’s a real world scenario for you. You have a client with an animation and video-intensive project for you. They want it to run on IE8, Firefox, and iPad, among others. Simple, right? Well, no. here’s the situation. IE8 has no canvas support. iPad has no Flash support. What technology do you use to create the animations, and what technology do you use to play them? Guess what, I’m faced with this problem right now, and many others have also. The answer usually ends up being, you can’t use animation, and you have to double up on video formats. For this particular project, not using animation wasn’t an option, so the solution we came up with was: Flash as an animation IDE. Swiffy to create HTML5 fallbacks. Flash and H.264 for video, canvas as a fallback, Flash as the fallback-fallback for absence of H.264 support. Why is this so stupidly complicated for such a simple thing? Microsoft and Apple, that’s why.

As much as I dislike Flash, I don’t really see it going away anytime soon. More like what happened to Java applets; you see fewer and fewer as better technologies become more capable of replacing it (Flash). This is already happening with Flash, but Flash is still a lot more suited for certain projects at this time. Just off the top of my head, here are a few pointers canvas could learn from Flash:

  1. IDE is king. Flash is two things: a runtime plugin technology, and a development environment. Canvas currently has no de-facto, and what is available is not fully-baked yet. Creating animations in Flash was so easy. In canvas, it usually means a Javascript nightmare to get something awful-looking.
  2. Sub-pixel accuracy. This was in Flash from the start, and so well-integrated it was a little annoying. But useful. Maybe this can be done in WebGL at some point, but right now I don’t think it’s possible.
  3. Speed. Really, this should be at the top of the list. Speed, people. Get it together. We want fast frame rates. No tearing. No lag. No major browser inconsistencies. If there’s a problem with Javascript, then it needs to be solved.
  4. DRM. Sure Javascript can be obfuscated, but there needs to be ways to protect media from getting jacked, if so chosen. This is easier said than done with the way the internet works, and I’m aware of that, but it would be nice.
  5. Asset containment. It would be nice to be able to shove all data into a single binary, instead of having PNGs, MP3s, etc. scattered all over your server and needing to be downloaded individually. Maybe the canvas IDEs of the future will have the option of base64’ing everything, but that may make the problem worse (filesize and whatnot).
  6. A/V synchronization. Flash can be easily synced so that animation and music don’t go rogue. Also, ways to read audio levels to make interactive queues, and ways of generating custom audio during runtime. Not sure if there’s a way to do any of this in canvas. Doubt it.
  7. 3D. Okay, so WebGL. The other browsers need to get with it, because Flash seems to be years ahead on this. How it will compare to Flash remains to be seen.
  8. A common binary runtime. This is the only way canvas will ever be nearly as fast as Flash. Right now, your runtimes have to be written in Javascript. Every IDE has their own. What if there was a binary runtime to hook into, that every browser supported? Oh wait, I guess that’s what Flash is, and what canvas will never be. Heh.
  9. Compatibility. Not really canvas’s fault, but not even half the web supports canvas. IE8 and below, plus mobile devices are still far behind… and when they do support canvas, they’re too slow. Flash, even if its mobile forray was short-lived, at least had a faster implementation than canvas.
  10. Camera and microphone support. Seems like Chrome might implement some of this, but as far as I know there are no common APIs for this like there are with GPS.

And I could go on. Some of it is nitpicky, I know, but a lot of it is incredibly important to designers and animators.

Bottom line, it’s unfortunate that the late Steve Jobs felt it necessary to start a war over two technologies that aren’t necessarily mutually exclusive. In a way, I’m glad Flash has gone back to what it’s supposed to be (a runtime for when performance, presentation, compatibility, and heavy dependence on animation and object-oriented programming), but it saddens me a little to see the web step a few years back in time, in order to bend over backwards for mobile devices. The result seems to be that the web is a more boring place, and canvas so far has failed to solve the basic problems it claimed it would.

Here’s how I see the future. Eventually, Adobe will make Flash capable of compiling to canvas directly. That way, canvas will be available as a fallback for when Flash isn’t available. If that doesn’t happen, eventually converters will get better, or Adobe will come up with a new IDE. And no, I’m not talking about Edge, Hype, or Muse. Please, Adobe, no more garbage toys; give us what we want. But anyway. At any rate, we’ll likely continue down the path of Flash really finding its niche, and browsers continuing to offer no real solutions to canvas’s shortcomings.