WWF Words Not In Scrabble
I’ll be soon pushing out a word training app that works with both Words With Friends and Scrabble. Just for fun I ran a query of all the words WWF allows that Scrabble doesn’t. Here they are.
For what it’s worth, most of them *really* are in Scrabble, but they took “potty” words out a while back because some religious zealot objected to POOS being in the OSPD. :-) There is a separate word list for those.
The most notable words to remember here are all the 2-letter words, especially GI, and ZEN as well, which is famously not in the OSPD.
DA,DI,FI,GI,
ABO,DUX,EMF,GOY,KED,LEZ,POM,POO,VON,WOP,YID,ZEN,
ABOS,AFRO,ARSE,BIGA,DAGO,EMFS,FART,GOYS,HEBE,HEMI,ITER,
JISM,KIKE,LEDE,MICK,OFAY,PEED,PISS,POMS,POOS,POOT,RORT,
SHAT,SHIT,SPAZ,SPIK,TURD,TWAT,UGLI,WANK,WIFI,WIKI,WOPS,
YIDS,YOYO,AFOAM,ALURE,BIRDY,BLING,BOCHE,BOKEH,BUBBY,CHODE,
DAGOS,DARKY,DIKEY,DIXIE,DYKEY,EBOLA,FARTS,FATSO,GOYIM,HAFIS,
HAOLE,HEBES,HONKY,INBOX,JANKY,JISMS,KIKES,LEZZY,LIPAS,MERDE,
MICKS,MIRID,MULTI,NANCE,NANCY,NESTY,NOOKY,OFAYS,POMMY,POOED,
POOFS,POOFY,POOTS,POOVE,PUDGE,SHITS,SKIMO,SPIKS,SQUAW,SYRAH,
TURDS,TWATS,UGLIS,VOXEL,WANKS,YOYOS,ABRAID,BADASS,BALLSY,BOCHES,
BOHUNK,BOOBIE,BOWTIE,BUCKRA,CONURE,DAGOES,DARKEY,DARKIE,DICKED,
EQUIPT,FARTED,FATSOS,GOOGLE,GOYISH,GRINGO,HAOLES,HOISIN,HONKEY,
HONKIE,JESUIT,LEZZES,LEZZIE,LIBBER,MERDES,MIRIDS,NANCES,PAPIST,
PEEING,PISSED,PISSER,PISSES,PITTER,POMMIE,POOING,POOTED,POOTER,
POOVES,POPERY,POPISH,SHIKSA,SHIKSE,SHITTY,SKIMOS,SQUAWS,TEXTED,
TOMMED,VOXELS,WANKED,WANKER,ABRAIDS,ASSHOLE,BAZOOMS,BLOWJOB,BOHUNKS
Throw Scrabble Strategy Out The Door In WWF
A couple weeks ago I finally got to installing Words with Friends (WWF) on my iPhone while stuck at one of those counter tables facing a wall at a Smashburger with some co-workers.
Can I get a window, please?
Anyway, I’ve dabbled in competitive Scrabble and am one of those guys that studies word lists on occasion so it was natural and inevitable I’d give WWF a try. I hadn’t played much of the game since Hasbro kicked Scrabulous off of Facebook and replaced it with a heaping, steaming pile of crap version instead. (Hasbro’s official Scrabble version *and* the new Scrabulous, Lexulous)
While WWF is far closer to Scrabble than Lexulous became (Lexulous has 8-tile racks), the strategy is far different because of one simple change that many casual players may not even recognize and I want to share a few tips about it. :-)
The Secret is the Hotspots
So, how do we put this? Well, one of the most important Scrabble strategies is rack management, and the same applies in WWF. If you’re forming words with “good letters” and leaving yourself “bad letters,” you’ll lose quickly in either sport. What’s changed is what those good and bad letters are.
In Scrabble, a 7-letter play (AKA bingo) nets you a +50 point bonus. In WWF, however, it’s only +35. Normally, this wouldn’t be a big deal as you’d guess it would only lead to lower overall scores for both players, but it’s another difference that’s key here.
The hotspot arrangement on a WWF board is vastly different than on a Scrabble board.
Let’s take a look at each of them:
Take a few minutes and study the two boards. You’ll notice that:
- …in Scrabble, it’s impossible to hit a TL and TW in the same play.
- …in Scrabble, extending to a TL does not set up a TW play.
- …in Scrabble, the TL boxes are much further apart.
- …in Scrabble, the TW are at the corners of the board, encouraging more spread.
Some may see the differences as minor, but if you’ve played both you’re no doubt realizing that a WWF board gets closed far faster and more often than a Scrabble board. By close, I mean that parallel plays make it harder to find places to lay down a word.
So, what does this all mean?
Your Rack Is Too Big
Sorry, Dolly. 7-letter plays are dead in WWF. In Scrabble, the occasional “bad letter” drop was fine if you thought you could lay down a bingo on the next turn. So, perhaps your rack was SATIREX. Your best play would most likely be dropping the X, hopefully on a hotspot, and using just about any letter you got back to go for a 7-letter play with a +50 point bonus!
Not so in WWF. You’ll find the board is more closed. I’ve personally had countless bingo’s I simply could not put down. At first, I would be angry at the board and think my opponent lucky. Not anymore. It’s the norm, not the exception. Get used to it!
That’s not to say you shouldn’t look for bingo plays, it just means you shouldn’t be holding out for them, and by far you never, ever want to find yourself with a rack of “good letters” that all amount to 1 and 2 point tiles! You simply can’t score enough points to stay in the game against a good player.
A Nice Rack
A nice rack in WWF is a mix of what in Scrabble you’d dub as good and bad letters. You want some bad letters because they have higher point values and since you’re not going for bingo’s like you do in Scrabble, you need to maximize your points in a typical play. Here were some ideal racks in Scrabble (you’ll find the infamous bingo stems in many of them):
- TISNEBA
- RITSAEN
- AELNISH
The good letters are the ones that make connecting words easy and appear often. Remember, you get that +50 point bonus for bingo’s and since Scrabble words, on average, score less than in WWF, it’s often the difference between winning and losing.
In WWF, though, here are what ideal racks tend to look like:
- HKAISEB
- XEEEERI (can you guess why?)
- AMREHVI
The difference is that in the Scrabble racks you’re mentally putting together longer words. (All three racks have at least one 7-letter bingo.) In the WWF racks, you have a mixture of some hard-to-use letters, but they’re 4+ points each.
Take HKAISEB for example. There is not a single word over 5 letters in this, but you’d likely do massive damage in WWF with words such as BIKES, HIKES, BAKES, SHEIK, BEAKS, or SHAKE. The reason is that the BHK are each 4+ points and you can easily combine them. Drop a B on a TL hotspot and the whole word on a TW and you’re already at about 40 points!
Simple Rack Management
So, as I’ve laid out, the key to WWF is to keep a mix of big scoring tiles with good connecting letters like AEISRT. Now what?
Well, what I like to do is deal with two-letter pairs. If I have one of the pair, I tend to wait for connections later. For example, C can be a hard letter to use. It often starts words, but within a word you generally only see it paired with -H and -K if not an -E. So, if I have an H and some choices, I tend to hold it so I can pair it with a -C or -G. (Take a minute and think of all the words you know that have, but don’t start with an H, and also have no C. Not easy. Now add C to make CH and think again.)
In fact, this is a great way to manage your rack physically when looking for a play. Pair letter combinations together and words magically appear. Given the rack KIOICJT you might feel a bit down, but the simple rearrangement into CKIOIJT instantly makes JOCK, TICK, and TOCK appear. By combining into CK, you’ve turned your 7-letter rack into a 6-sound rack and it’s obviously much easier to work with.
In any given play, limit your distribution of the letters. Don’t make plays like EAR that eliminate your connecting letters for low scores, it’s a double whammy. Correspondingly, don’t drop multiple high-point tiles on empty spots unless there’s a TW play included. You might as well throw the tiles away than give them up for practically nothing. The average player knows to lay down XI as a parallel play with X on a DL or TL and score 50 or 60 points with just 2 tiles, so if you’re playing AXES and the X is not on a hotspot you’re doing it wrong if you only get 11 points for it!
With your rack combination of high-point and good connecting letters, simply stay focused on the hotspots, lay down your big-point letters on em, connect the other letters around them and watch the fireworks. :-)
Hope you enjoyed this blog. But, hey, while we’re here, want to play some WWF? You can find me @ ZaBlanc.
Shmoozing with Fish the Mouse
While Rapture In Venice is technical consulting I do in addition to full-time mobile work during the day, that doesn’t mean I can’t take it three levels deep and rendezvous elsewhere, right?
Since early October 2010, I’ve joined up with the dads of Fish the Mouse Media to work on what’s become our newly released Animal Alphabet HD. How this came about is kinda crazy.
On September 29th, I got this unsolicited email from Paul Millman, Chief Chipmunk of FTM (no, really, that’s his title):
John, we’re looking for an iphone/ipad developer, who is also a dad, to join our new two-member company Fish The Mouse Media.
…
My expertise is not only in the creative and architectural process of developing apps, but also marketing and as a business manager. For Old Mac HD each interactive scene was hand-painted on canvas by internationally acclaimed artist Norm Magnusson (work in MOMA permanent collection), and original renditions of the Old Mac song were recorded in English by pop vocalist Jill Sobule, and in French by Dominique Durand of the indie band Ivy. All of this was produced under my direction.
Our second app, The Animal Alphabet is now ready for to go and we’re looking for a developer for this app…
The developer on their original app couldn’t commit the time for the new app and he was looking for someone who could do the job.
The email couldn’t have come at a better time. I was mired in a nightmare project at EffectiveUI and I had no current contract work going on with RIV. I got back to Paul and eventually asked to see the specs for Animal Alphabet. I was floored! The app was fully designed — AND HUGE! A 36-page PDF full of graphics and specs. As excited as I was to take this project on, I was terrified of the time commitment I would have to make.
I spent a few days considering whether to join up or not. I actually put together an implementation plan of how I was going to accomplish it so i could determine if I should. The big decision was whether to dive into Cocos2D or stick to the iOS SDK. I’d always wanted to learn Cocos2D and even hit up some 360 iDev talks, but it was a risky technical decision to have to make considering my lack of experience. I was able to get a look see at their previous app, Old MacDonald HD, and was horrified at the work the previous developer had to do to get a far smaller set of animations to work. Using the UIKit was even riskier!
No wonder he wasn’t going to commit to this one. :-)
Ultimately, I decided to go the Cocos2D route and take the project! I still remember the excitement of the early days when I got the Angelfish working (it’s the first letter page — being A and all) and seeing it run on the iPad. I knew I’d made the right choice and was glad to have it confirmed. And every letter after that got more and more fun, but wow what a lot of work.
It’s been a tough road. Just a few weeks after taking it on, Michele (5 months pregnant at the time) went on bedrest for 3 months and I had to simultaneously juggle a full-time job, contract work (I took on two more projects in addition to AA), and take care of our two young kids while Michele was basically bed-ridden. I even came close to quitting the project a couple times simply because I was going insane.
It was all worth it, though. I hope that if you treat your kids to it, they’ll love it, but not only that, I hope you love it, too!
A little note on how it’s done…
For the developers out there who may be curious about the technology behind Animal Alphabet HD, here’s how it’s done…
The core architecture is Cocos2D, an excellent animation library for iOS that was originally ported from Python. The API is well-designed and makes coordinating a huge assortment of sequenced animations a piece of cake. (If you haven’t used Cocos2D, I assure you that someone needs to port the Actions API to UIKit!)
In addition, I use iBoost, a sidekick iOS library I’ve led development on that adds all sorts of useful categories and macros to the base SDK. Highly recommended of course. ;-)
And, of course, there’s Flurry for analytics. We’re keeping track of what the most popular letters are. So, for example, if you keep navigating to Q, you’ll probably see more jumping animals in future iterations. ;-)
In terms of Cocos2D construction, every letter is its own scene. They’re all based on a common scene that implements much of the shared functionality. Each letter scene has the bird game where you get the letter flag into the magic hat using the iPad’s accelerometer. The letter navigation selector is shared across all the scenes as well, reattaching as you go.
I also had to wrap the SimpleAudioEngine so that I could stop all sounds when a letter scene exits while keeping the background music playing. (Cocos2D doesn’t have a stopAllSoundEffects call that’s separate from the background music.) I was really impressed with how you construct animations, though. Sequences and parallel actions, just like my old friend, Flex. :-)
And there you go. Animal Alphabet will see updates, including an eventual port to iPhone, in the future. Can’t wait.
Top 10 Annoyances XCode 4 Fixed For Me
XCode 4 is a radically subtle re-think of the XCode interface. The biggest changes are the switch to a single view as well as the overall workflow for running and deploying apps to the App Store.
Here are some of my favorite improvements over XCode 3.
1. Hitting Run while looking at an IB file.
I’ve done this more times than I care to admit. Bring up a XIB, makes some change, and now I want to run the simulator and I hit Command-R and oh wait no but it’s too late. The simulator runs and shows some usually-whacky screenshot of the XIB file. Useless. Now I have to click on XCode and Command-R again.
Probably happens to me twice a day.
With XCode 4, Interface Builder is integrated with XCode and there is no longer an ability to “Run XIB.” Happy news.
2. iPhone Simulator switching to iPad
This has never historically been a problem, but if you’ve used XCode 3 in the last few months, this bug crept in and IS THE RUINER OF LIVES.
Basically, the problem is that for various reasons, some known and some unknown, the default simulator will switch to the last on the list. For example, a couple months ago, I was working on an iPad app and every few runs or so the simulator would switch to iPad. It *always* happened after a clean. What was even more frustrating is that I finished that project, got a new XCode update, and the problem had reversed! So, I found myself doing iPhone work and frequently have the iPad simulator pop up. JEEBUS!
I think this was a secret ploy by Apple to get us all to move to XCode 4. Well, it was a big reason, honestly. :-)
3. Wading through 100 windows.
Several times a day I wanted to look at a specific window I had open, perhaps a certain line was highlighted or perhaps I forgot the filename and just needed to find that particular window. And that’s when you realize you have several dozen windows open. (Project, Console, 6 code windows, search, 2 XIB’s, errors window, ARGGG!!!)
XCode’s new single-view interface keeps things nice and clean, though you can still double-click to open a file in its own window. It especially cleans up Interface Builder, since each one of those files had two of its own!
4. Escape in the middle of code.
This one happened to me a dozen times a day.
Let’s say you have a line of code and perhaps its a call to open a UIAlertView. The arguments have gotten a little munged and you want to see the method’s parameter list again but you don’t want the text inserted into the editor. You move your cursor to halfway in the text “alertView” and hit escape and — nothing. There had to be at least a space after your cursor for it to complete.
Hooray! XCode 4 no longer has that prohibition. Now you can use autocomplete like a handy reference.
5. Using four apps (XCode, Finder, Chrome, App Loader) to release an app.
Fuck that.
XCode 4 lets you build and deploy directly from XCode. Thank the freakin’ gods.
6. Constantly losing the IB Objects window.
This drove me batty. Open up a XIB, make some changes. Then, do some code. Come back to the XIB, and 9 times out of 10 the objects window is hidden somewhere. Most times you can click the IB icon in the dock and you get it again, but it as simply obnoxious because it occurred all day.
Again, the single-view interface alleviates this. Sort of. The objects view is collapsable which can be construed as becoming “lost.” The good news is the collapsed view is very handy and saves space. Try it condensed and see!
7. Losing Console output every run.
Ever run an app, get some console output that maybe showed a crash or something. You go to fix it but if you re-run the app, the console clears. i tend to program quickly, so it’s usually not what I wanted. The only way around it was to copy-and-paste the console output, which is way too manual for my tastes.
XCode 4 retains console output for each run. Simply go to the Log Navigator (Command-7, tho I remapped to Option-7) and see all the output for your runs as well as builds! Thanks, Apple!
8. Changing three items just to run a different target.
This one isn’t always a problem, but can sometimes be. In fact, it was so obfuscated, I can’t even strictly remember the naming scheme. Basically, if you had a couple targets in your project, and wanted to switch, you had to change the target *and* … *and* something else. I can’t even remember it was so stupid. :-)
In XCode 4, the schema system is, at first, a little too involving. But, in a short time you clearly see that it’s bundling all these options into one. Very easy to switch targets now!
9. Multi-View Counterparting
I didn’t realize this was a problem until I got XCode 4. In general, when you editing a *.m file and had to change the *.h you’d hit Command-Option-Up. That doesn’t work anymore in XCode 4 and is one of the top annoyances. (Muscle memory is a bitch. They changed it to Command-Control-Up and you can’t switch it back in XCode, you’ll need to remap.)
Now, in XCode 4, the recommended way to do it is to bring up the Assistant with Command-Option-Enter. It will show you the current file’s counterpart. So, if you’re looking at a *.m, it shows you a *.h, and vice-versa.
Now, I keep the Assistant open all the time, in a smaller pane than my main file, and also hide my Navigator (I mapped the key to Option-~) so I have maximal wide-screen space enough to show the *.m and *.h side-by-side. It works nicely, and if I change to a different source file, it loads both for me automatically.
10. A Cleaner Navigator
The old project navigator was too bulky. Aside from your source code and other files you expected to be there, there was also:
- linked projects
- executables
- old searches
- products (and this still is, grrrrr…)
- etc.
Still not sure why Products is still there. So useless. If you want to change anything about the project, executable, targets, etc. simply select the project at the top and a tabbed system will show you. It works great and keeps everything much cleaner!
Admitting Your Mistakes #AppFail
The software industry is like no other. As members, we accept some pretty nice salaries, but not without sacrifice. We work hard hours in front of a machine with very little human interaction (even if some of us prefer that). We routinely work extra hours for free when projects slip. We ALL bring our work home with us in the form of laptops and mental baggage. (I personally can’t sleep when I have a strange bug haunting me.) And god forbid you spend some time relaxing in the evenings, you’re falling way, behind in a technology race that would put Usain Bolt to shame.
But the worst aspect is the machismo front we have to put up in order to protect ourselves from looking weak. Well. Not this blog.
This past week had me face a nightmare I’d always feared but hoped I’d never have to face. And I’d like to share this story with you because while I’d like to spend the time convincing you of my overwhelming awesomeness, I’m far from it this go around.
What Happened to Task List?
Several weeks ago I was making some additions to Task List v2.1, namely adding a calendar and some other niceties. I’d put some unpublished work into the app in the few months between it and the last release, including Pomodoro integration. I wanted to keep that stuff there, without branching, so I kept it hidden and continued on my merry way.
Everything was fine until I ran a device test. Now, when I do my device tests, I oftentimes install a new version of Task List Pro right over the one I’ve been using. It’s sort of like a guts test. If I’m too scared to threaten my own data, how can I release it to you? But a funny thing happened this time…
All my data disappeared.
When I ran it, my taks list was totally empty. Oh, my. I hadn’t prepared for it, I’m pretty confident in my iOS skills, so I was both shocked and freaked. I tried to delete the app and re-sync, but no luck. My tasks had been wiped clean. I attributed it to the lack of a mapping model for my Core Data upgrade when I did the Pomodoro upgrade. I’d forgotten to put one in, and I presumed automatic migration cleaned me out. Oh, well. Time to move on.
A few days later I submitted v2.1 and everything was fine. Then, a couple weeks later, I pushed out v2.2 which added time reminders. Task List had been gaining popularity over the time it’s been out there and I was pleased with all of the functionality it provided in what still is an easy to use app.
But a week ago today, I got a disturbing email:
just downloaded your latest update for tasklist pro and without warning it has wiped everything (about 50+ tasks plus essential notes).
Total waste of money! I shall be looking elsewhere in future!
Uh. Oh.
Immediately…well, I froze. I remembered what happened when my tasks got wiped clean and suddenly one of my users had seen the same thing. I couldn’t believe it. Not only is this a scary problem for your users to be facing, but taking a couple bad steps with CoreData migrations can leave you with a confusing mish-mash of upgrade paths that can be difficult to fix. That, and the horrifying fear every one of your users is about to lose all of their tasks!!
Shit.
Solving The Problem (The Easy Part)
I started looking at my migrations to diagnose the problem. I reverted to old builds, created some tasks, upgraded, and recorded the results. Indeed, the app was killing my tasks. I had trouble figuring out why, however.
Then, a funny thing happened. I reverted the build without clearing the app first and my old tasks were back! The problem turned out to be that I had accidentally renamed the SQLite store that CoreData was using to save the tasks. This occurred because I replaced my old, by-hand CoreData methods with ones from iBoost, the little augmentation library that I authored on GitHub. I’d forgotten that iBoost has its own, hardcoded SQLite filename.
So, what happened is a clean database was created and the old database was abandoned when users upgraded to v2.1. This confirmed my darkest fears: every Task List user was losing their tasks when they upgraded.
But, all was not lost. Lucky for me, those tasks are still there. Hidden away. Recoverable.
The Solution
I spent hours deciding what to do. Based on my iTunes numbers, thousands of people each day were updating and presumably wiping out their tasks. Was I too late? Was the damage done? Could I get an update out in time to save any of my userbase?
I decided it was my obligation to try. If I could save even a handful of users the grief of losing their tasks, I’d do it. On top of that, I’d make an effort to restore the tasks users had already lost.
When the app starts up now, it checks for the old database and the new database. If an old database exists and a new doesn’t, the user hasn’t lost their tasks yet, so I use the old data location. If they have new tasks but no old tasks, they are a new user and unaffected by the problem. However, if they have both old tasks AND new tasks, I give them a choice. An alert is presented asking if they’d like to restore their old tasks or drop them and continue with the new tasks. Once this decision is made, everything continues as normal in Task List.
This is now live as of just an hour ago. Task List and Task List Pro v2.2.1 solve the problem.
A Week Without A Home
If you’re a iOS developer, you see that my problems are only beginning. Despite fixing the problem quite quickly, I was still at the mercy of Apple. What was worse, the fix came on a Friday, so I had a whole weekend ahead of me with no hope of review. So, I did what I was morally required to do — I pulled Task List off the App Store in every country.
I spent a week waiting for a review. Recently, I’ve seen Task List (the free version) accepted within a day or two. I was hoping for a quick turnaround this week, but it wasn’t happening. By yesterday, I was panicking. So, I tried to change my luck and added Task List to one App Store in some country I’d never heard of. (To any residents of Macau, if you updated my app and lost your tasks, my apologies!)
It may have been a coincidence, but it worked. Today my app went into review and it was finally accepted and pushed to the App Store tonight. Now I hope my users have an easy time migrating back their old tasks if they so choose. I feel like many will just continue on, especially if they’ve re-entered their tasks, but by giving them a choice it shows that I have tried to make a crummy situation right again.
My mistake won’t go unpunished. I’ll lose users who lost their faith in me. I understand. And I’ll have to play catchup in the App Store after a week of no downloads or sales. I failed myself for not realizing my error when my own tasks were wiped out.
Lessons learned. Time to move on. And hopefully this story has been one you can sympathize with.