My Peer Review of Your Paper (A Parody)

Dear author(s):

I am going to start out with a summary of your paper and a few complimentary remarks. Unfortunately for you, I am a PhD student who just went ABD and is now in the process of writing a dissertation chapter that encompasses everything tangentially related to your topic. It will eventually be thrown away for something more sane, but I digress.

While this appears to be a peer review, it is in fact a game of Battleship. I will make a series of remarks A-2, B-12 etc. in the hopes that i can somehow sink the battleships which are your critical review, theoretical framework, sampling decisions, methodology, analysis and conclusions. In anticipation of this sinking, I will be a little bit nice this time in hopes that karma will extend this favor to me at some time in this process. For this reason, I recommend that your paper be returned with a request for major revisions.

Unfortunately, your theoretical framework does not encompass all aspects of the ever-changing and oft-debated discipline. Worse, it does not include some of my very favorite authors. You should include many more authors and especially my favorites in order to make your contributions to a fairly narrow, but relevant aspect of the field much less clear. The world is complex, my friend, therefore all straight-forward positivistic experiments much include at least one paragraph on postmodern social theory.

Your critical review of the literature is even worse than your theoretical framework. There are at least twenty authors who have said the exact opposite of “this thing that you referenced in your paper” and you need to deal with each in turn, even though they come from popularly tweeted blog posts of something some famous academics wrote one night when they were obviously either bored or very drunk. I also have written a few drunken posts on the topic that I will not mention here, but they are popular enough that if you google the appropriate terms you will find them pretty quickly. Unfortunately, I do not have any published works you can refer to, but that’s only because they are all in revisions themselves.

I don’t really understand how you came to select the cases you did. Please insert a few lines of bullshit that justify why people become interested in a research topic to the point that they wish to write about it. I kind of want to know why myself.

You elected to use some methodology that i do not completely understand myself. Good for you! If I don’t understand it, it must be pretty cutting edge. But, I am pretty sure that if I did the same thing with my own cutting edge methodologies, I would come up with fairly different results. This likely has nothing to do with your analysis, but instead with the way I treat research like a Yahtzee game. You see, whenever I get some great data, I shake it up a few times until I get a Yahtzee! Once I see that Yahtzee, I come up with a great research question. Like this: How many dice are showing the exact same number? Hypothesis 0: not 5. Hypothesis 1: 5. Result: Yahtzee! (otherwise, I wouldn’t bother to write up the results.) Either way, choose a different methodology that is closer to the way I like to study problems.

I am not sure that your analysis follows from your theoretical framework. This makes sense because if you were going to use the theoretical framework in the way it was intended, it would just be duplicating the rather mundane and old methods of people who have already got their first academic job and have received promotion and tenure — not to mention tons of grant money to now do all that research work properly. This will not do. Your first mistake was trying to be both cutting edge and working from the foundations of a discipline. If I can’t sink you on one side, I will definitely sink you on the other.

Your conclusions are adequate of course, because we all know that attacking a conclusion is petty. You are free to speculate away all you want so long as you are sure to include the need for further research. Of course, that need would be subsided if people actually began to accept my papers, but there I go again digressing on the issue.

I noticed a number of minor typing and grammar errors. Hopefully these will not matter as the primary goal here is that this paper never makes it to the final proof stage.

Also, I thought I’d include a little bit of speculation here at the end because I am kind of on a roll. In fact, if it weren’t a complete violation of the rules of peer review, I think I’d want to publish this myself. I think it could become Internet gold.

P.S. I may still be drunk.

P.P.S. In my opinion Rusty Nails go very well with revisions. If you have no Drambuie, just add lime juice and marachino cherries and make a Whiskey Sour instead.

Advertisements

Part II: How not to Start Your Haskell Program

< Part I: Is There a Such a Thing as ‘Real World’ Haskell? Part: III   How Haskell Monads are Like a Muppet >

My last Haskell post had me thinking that I might as well create a really bad tutorial outlining my own strategies to deal with Haskell in the real world.    Some of the issues I outlined were:

  • Tutorials for Haskell focussed on solving problems, rather than getting it to ‘do stuff’ which is what alot of users expect from their computer software.
  • Haskell is emerging as an important player in the future of code.   Both as a type of code itself and as a way of improving skills in such languages as Java and Python.   However, it will not make the mainstream unless ‘regular folk’ start using it.
  • Functional programs (in theory) are apt to be more sustainable, less buggy and more consistently documented.   Regular folk, working with imperative and/or objective and pseudo objective languages probably don’t realize this -> not until their code breaks and they have to re-install the wheel.

While I have some experience in other languages like Ruby, and Python, I’ve decided to approach Haskell as if I were a PHP developer instead.     There are some very good reasons for this:

  • PHP is a ‘do something’ language.    Basically, it takes dynamic data and outputs it to a web page.   While math problems and recursion-like methods are possible – it’s usually input and output (ie. taking data in and out of a MySQL database) that is the most important.    Anyone expecting to use Haskell for primarily I/O related stuff is going to die from frustration.
  • PHP code can get very messy, even in the hands of an experienced coder.   Documentation of code is all dependent on comments and external manuals.     Haskell can help your average PHP coder, because its type-system offers a kind of in-source documentation.
  • PHP is a ‘regular peoples’ code.    It is adopted by alot of people with varying skills and experience with computer software, many of whom have very little understanding of its long run limitations.
  • Well into its 5th release, alot of the work has already been done for your average PHP coder.       It’s almost not even necessary to create your own objects and functions with all the pre-created libraries available.     Unfortunately, it’s also widely assumed that you are going to create a web application ->  what if you want to turn your code into an App?    or a desktop application that uses data from a php created api?   or an intense web universe ala Second Life or World of WarCraft?
  • As an interpreted program,   it’s pretty simple to solve problems through trial and error.    Just keep hacking away at php, and eventually you can make some convoluted function do what you want it to do (in an unscalable way, of course).

I am also going to make a number of assumptions:

  1. That you have read through at least some of the Haskell Wikibook.    I do not intend to explain what a Monad is, or impress everyone with my knowledge of complex mathematical theory.    This tutorial is an inquiry about how to approach a Haskell applications, not learning Haskell itself.
  2. You have a fair knowledge of some imperative-style computer language (possibly PHP).

As suggested, I am going to look at developing a one-level ‘rogue-like’ RPG game.      If I were to start such a game in php, I might start with something like:

$playerChar = array ("name" => 'Bob', "class" => 'fighter', "STR" => '18', "DEX" => '14', "WIS" => '11', "INT" => '15');

I suggest this because PHP coders want to get to the action as fast as possible.   The PHP coder (let’s call her PHiP) will know that her first problem is making data output in some consistent manner, so will create a variable that mimics a possible set of data that will eventually be displayed to the screen (likely a webpage).   Knowing that things like the name and class of the character will change, PHiP will put some variables inside the array.    Then PHiP will include some other ideas about what a character will need, and a print_r statement to watch the action as she lashes out blindly for the right outputs:

$playerChar ['traits'] = ("name" => $name, "class" => $class ...); $playerChar ['equip'] = ("weapon" => $weapon, "armour" => $armour ...); print_r ($playerChar);

If you are a Haskell coder, you probably already see countless disasters in store for PHiP if she uses this approach with Haskell.    Here are a few:

  • variables in Haskell are always constant.     Once called, the values will not change.   Believe it or not, functional programmers will see this as a good thing (see side effects in Wikipedia).
  • playerChar [‘traits’] would be seen as a function with an input [‘traits’] that, using Haskell syntax, is a list containing one string value ‘traits’.   Haskell would be wondering what to do if it encountered other lists containing one or more other string value(s).
  • All of the variables inside the associative array $playerChar  are irrelevant in Haskell.  Unless they are constant.
  • Deciding what to do with the array would be overwhelming.    A list could be used, but would require that all values inside be strings.   Or it could be a huge tuple of various kinds of values, or a list of tuples.
  • Without being sure what types of values are needed to create the playerChar, there are almost sure to be problems letting PHiP’s player character switch its weapon from a sword to a mace and back.

In short, PHiP is using the wrong paradigm to code effectively in Haskell.    The issue is not a problem of syntax, or even understanding a problem.   The issue is the approach.

As the tutorial goes along, we will deal with PHiP’s player character.    But, to work in Haskell, I propose that you do not start with the data you want to put in and out.    Instead, you start with input and output itself – inside main – like this:

main :: IO() main = do x <- getChar if x == 'q' then putStrLn "Thanks for Playing" else pmove x >> main move :: Char -> String move a |  a == 'w'       = "UP!" |  a == 's'       = "DOWN!" |  a == 'a'       = "LEFT!" |  a == 'd'       = "RIGHT!" |  otherwise      = "HANG AROUND AND DO NOTHING!" pmove = print . move

Right now, this code is pretty useless, but it offers a few nice things to help make sure you don’t lose steam in your coding.

  • It creates an output that will work (sort of) like PHiP’s print_r string.
  • It offers a practical demonstration of point notation, which, in laymen’s terms creates a function pmove that prints (using print) the results of move.    Essentially, it keeps me from having to write “print (move x)” all the time.
  • I accepts an input ‘a’ that is a character.
  • It creates a strongly typed function ‘move’ that takes a Character and returns a String.   As we move forward, we can chain a series of functions together that will help PHiPs make her Haskell program to do more interesting things such as fight a monster.

(as it turns out, this code works slightly differently in Windows than it does in Linux.    Use the Linux version, because it makes me seem a little more competent.   If anyone can explain why Windows wants the CR for the getChar command, please  add it to the comments.)

I am not absolutely sure this is the very best approach to a rogue-like game, but I can guarantee it is better to start this way than it is to begin with creating variables.     As you read this tutorial, I hope you continue to use other documentations elsewhere to help you get your mind around my use of ‘do’, ‘getChar’, ‘putStrLn’ and guards ‘|’ here (pretty rudimentary Haskell code right now).

The next tutorial will look at shaping our dungeon and establishing where our player as he or she moves across the board.

Incidentally, as of writing this, I am working on a rogue-like game with my son called Rasghiosse (my son named it).    I have a public Darcs repository on Patch-Tag that you are free to join in on if you like.   As of writing this tutorial, I am not much further ahead than the above code, so I would appreciate your help.

My Big Day Downtown

On July 31st, 2010 I took Mr. 6 out with me on my Big Day Downtown.   Needless to say that was an Adventure we would remember for a long time.   It was great to explore many of the nicks and crannies that the downtown has to offer while trying to find some of the geekiest objects known to humans.

Mr. 6 was a great moderator on my geekiness.   I guess he’ll have to grow into his Dad’s obsessions.   But, by way of intro – here is us going into Strange Adventures:

I wanted superheros, zombies, weird star trek stuff.   Mr. 6 wanted Calvin and Hobbes.   I think our final purchase is a testament to the level of flexibility both of us had to display during this trip.

The next stop we made was to The Loop Craft Café on Barrington Street where I was kindly helped to find a nice baby alpaca light-blue wool for a scarf idea I have (I will share it when it’s done.   Clue:  it will be of interest to people who use Twitter.)    The product they offer is very high quality, and great for very special projects – like the stuff you might find on Etsy.  We chatted about yarn bombing, knit-ins and that sort of thing.   I also took a look at some drop spindles and raw wool.   I have carders to help me spin my own yarn – i’d love to try it sometime.   Mr. 6 was also impressed with their balling machine.

Our next stop was to share a root beer at Just Us Coffee on Barrington Street very close to a few other community-minded businesses that I love very much:  The Halifax Hub and Splice Training.     I realize that business is ultimately about making a profit, but the community does alot also to help make that profit happen (everything from roads, police, education, social services and so on), so I always appreciate a business that gives back.   Just Us serves fair trade coffee, helping to decrease the impact my caffeine addiction has on the third world.   Mr. 6 loved the ‘South at the Top’ map they have there – it’s a great reminder to me that ‘up’ is relative to where you are standing.   Splice training helped me out with some USB drives when I put on a ‘geek guys’ program last year.   In the end, about 8 young men (don’t know where the young women went) learned a whole lot about coding in Python and were able to keep their copy of Python so they could continue learning on the library computers!   Maybe in a few years they’ll be able to up their learning to some Objective-C coding with the help of Splice’s iPod/iPad development courses.

Splice also supported this year’s iphone Hackathon hosted at the Hub Halifax via Apps4Good.   The Hub, if you didn’t know, is a great co-working space in the middle of downtown.   They are always helping to support groups with their whatever-camp and know a heckofalot more than I do about such things.

Now back to my spending.    The next stop was Rock Candy – where there were all kinds of crazy Hard-rock and Punk periphernalia for sale.

Sculpture Outside Rock Candy shop

Mr. 6 is a great fan of the Ramones (as am I) – his favorite song by them is “I Don’t Want to Grow Up” – although he says he likes the original version by Tom Waits a bit more.

Doin' the Blitzkrieg Shop!

I have to say that I was really impressed with the selection and quality of Rock Candy’s offerings.    My hat is excellent and fits really nicely.   I’ve had a hard time keeping it off my head this summer.

The last part of our trip was food – Lunch at The Bluenose II Restaurant, Candy at Freak Lunch Box and ice cream at Cows.    The fun is probably best told in pictures:

Chicken Fingers FTW!
HULK WANT CANDY!!!!111111!!
Our Last Visit was Ice Cream

In My World…

I need to just rant more.    Obviously, I am not keeping up with my blogging very well, although my Twitter account is doing ok.   Anyway, maybe the occasional asinine opinion piece will help me get back into the blogosphere somehow.   Because I miss it.  Truly, I do!

I’ve been noticing quite a few things about the world that really just rile me hard.    So here is a list of thing that would happen if I owned the world:

If I owned the world:

  • Kids under 12 would not be allowed to wear clothes they are not allowed to get dirty.   Their ‘good’ clothes would be as affordable as second hand clothes.
  • ‘Prorogue‘ would be delicious dipped in sour cream and sriracha.
  • Most conferences would be un-
  • Jane Siberry would come to Halifax more often.
  • People would see debate for what it is, and get a life accordingly.
  • Anonymity would be used to benefit humankind, rather than mere internet cowardice.
  • Internet and Tech knowledge would be seen as ‘regular business’ rather than ‘something for techies to do.’
  • Curiosity would trump complaining (yes, yes, I know that I am undermining everything I’m saying here).
  • People would realize that I am actually a technophobe with a sense of responsibility.

That’s it for now.  I don’t want to complain too much on this blog.   Hopefully I’ll get around to putting out something useful and wise.  Until then – what rules would you make if you owned the world?

A Little Teamwork Helps Reach Some Big Goals

2009_1210hockey0008

Originally uploaded by maritimes online.

I am passionate about librarianship and social media, but when it comes down to the wire, I really truly madly deeply love playing sports with kids. And make no mistake, this crowd looks like they are just a bunch of kids with hockey gear on, but I can guarantee a few things:

– You cannot score on the big goalie in the center.
– You cannot keep the young man dead centre from scoring top corner on any goalie.
– The little girl in the front will have the ball away from you, passed on and in your net before you even know what happened.
– You cannot thank the two guys on the left enough. They are from Old Navy and they gave us new equipment and Jerseys so we can keep playing hard.
– You need to drop lots of money into Salvation Army kettles this year, because they are what keeps this program running.

This crowd is seriously tough, folks. Given a little teamwork from the community, they will make big things happen. Consider doing the same thing in yours!