Dark Souls

I finally finished playing Dark Souls yesterday.

First of all, it plays exactly the same as Demon’s Souls. It could have picked up at the end of Demon’s souls and I wouldn’t have noticed I was playing a new game. Outside of a few minor tweaks (such as healing flasks), it is the same game. So I’m going to assume you know about Demon’s Souls (http://baconfriedrice.com/2010/12/more-video-games/).

The Good
Boss Fights: There are less stupid boss fights where you can glitch out the Boss AI and basically get a free win. One of the “multiplayer” features of Demon’s/Dark Souls is that other players can leave messages on the floor. In Demon’s Souls, most boss rooms has a “safe” spot which would be marked with a message. This spot was usally behind a rock or in a nook where the boss would try to futilely attack but be blocked. Then you just shoot 200 arrows and watch the boss slowly die, which was 100% safe. Dark Souls seemed to fix this problem well, as I actually had to fight all the bosses head on in the way intended. Plus, I think there were more overall mechanics. For example, there is one boss that is completely invisible and you have to hit her based on her footprints.

Level layout: One of my favorite things about this game is the way the different sections are interlinked. There is clearly one or two expected paths where the difficulty scales approximately with your character. However, you can pretty much go to any zone in the game from the starting hub if you chose, although they are typically guarded by a monster that serves as a gear/skill check to prevent you from entering areas that are too strong for you.

What’s amazing is that playing through the expected path, you will often go down a path or staircase and encounter an entrance to a zone that is too high level for you and get your ass handed to you by this gear check monster. Later on, after you’ve progressed on the expected path, you will find yourself in the high level zone and come across this same monster but from the opposite direction. It really causes you to go “ohhhhh, so that’s where this staircase always led!” All of the zones are so different feeling, but each is connected through real paths. This is different from Demon’s Souls, where each world was accessed through portals in a central hub. Having to actually walk to each place makes it feel that much cooler.

The Bad
Stupid narrow bridges: Unlike many games, Dark Souls has no concept of boundaries. If you walk off the edge you fall to your death. You have to pay attention when just running around, because you often have to cross narrow bridges or ledges, where pushing the control stick a little bit too hard results in death. I won’t say that it’s unfair, because everything is doable without dying. It’s just a huge pain in the ass and doesn’t really add anything to the game, especially when you have to travel over it dozens of times.

The Ugly
Targetting System: One of the annoying things about this game is how the targeting system works. You tap down on the right joystick to “target” a unit in front of you, which locks your camera onto it and prevents you from looking around. This is pretty crucial to keep an enemy in sight, particularly when they are jumping back and forth. The problem is that there is a maximum distance that you can lock on, so if the enemy jumps away or up high, it breaks the lock. Then you have to keep pressing down to relock, and sometimes it won’t lock onto the same enemy.

Camera: Most of the bosses in this game are big. Most are several times larger than your character. So when you hit them, you end up hitting their ankle. This means you are up in their face, and the camera gets blocked or clips through the boss/wall and you can’t see anything. Similarly, when you lock on you tend to lock on to to the center of their body, which is way to high to hit. So your camera is pointed up at them but you’re hitting much lower. In one fight, I spend most of the time just watching a boss’s feet and spanning this homing spell because the room was too small and I couldn’t see shit.

Overall
Play this game. Buy Demon’s Souls and play that first if you haven’t already. Both of these games are some of the best things to come out in recent years. If it’s too hard look up stuff to help you through it, but there is absolutely no reason to not finish it at least once.

HTML5 For Web Designers by Jeremy Keith, CSS3 For Web Designers by Dan Cederholm

HTML5 For Web Designers by Jeremy Keith and CSS3 For Web Designers by Dan Cederholm are both A Book Apart books.  Even though I just recently read Introducing HTML5 and The Book of CSS3, I wanted to see how HTML5 and CSS3 would be presented “for web designers”.  Introducing HTML5 and The Book of CSS3 go through many new aspects of HTML5 and CSS3, both usable and not quite ready, and they are both really helpful in getting a good grasp of the big picture for both of them.  They both go through different categories of new features, with explanations and some basic examples for each.  They read a bit like textbooks to me, though.

HTML5 For Web Designers and CSS3 For Web Designers take more practical, use-right-now approaches.  They don’t necessarily try to thoroughly cover all the new features, but present the ones that are stable enough for you to use right now.  And both books are so short!  They were easy reads and the authors have really friendly tones.  I’m hoping the other A Book Apart books are similar!

HTML5 For Web Designers starts off with “A Brief History of Markup”.  Some of it is similar to what Introducing HTML5 mentions, but I also learned new things.  It takes a very humorous tone – I liked the following:

After HTML 4.01, the next revision to the language was called XHTML 1.0.  The X stood for “eXtreme” and web developers were required to cross their arms in an X shape when speaking the letter.

No, not really.  The X stood for “eXtensible” and arm crossing was entirely optional. (page 2)

The chapter “The Design of HTML5” was interesting to me, because it gives a background that is more that just historical facts – it gives  a glimpse into the reasoning and principles behind people’s thoughts.  For instance, it talks about some of the WHATWG’s design principles used to guide the development of HTML5.  One that caught my interest was “Priority of constituencies”, which, according to the book, says: “In case of conflict, consider users over authors over implementers over specifiers over theoretical purity” (page 10).  So apparently HTML5 is, at the core, designed for the users.  I often assume this is true for many things, when in fact they are not at all… It’s nice to know HTML5 really is designed that way!

In talking about the very loose syntax of HTML5, I came across this paragraph:

If you’re looking for a cheap evening’s entertainment, get an array of programmers into the same room and utter the words “significant white space.”  You can then spend hours warming yourself by the ensuing flame war. (jpage 15)

First of all, I probably enjoyed the phrase “array of programmers” too much.  Second, it made me try to clarify my own thoughts on white space.  I haven’t yet seriously used a language in which white space is significant (such as Python), so I can’t clearly say what I think about that, but I do know that I really like patterns and structures – any time I code, I try to make my style as consistent as possible everywhere.  I feel like theoretically I would enjoy the strictness of significant white space, but in reality I would probably get pissed off that my code broke due to something tiny I didn’t feel was important at all.

One thing I thought was interesting is the author’s approach to canvas.  I’ve seen people all over the internet so excited about it, treating it like the best thing ever… but this author is not quite as enamored with it, due to its lack of accessibility (page 27).  It’s interesting that he considers that more important than all the “cool stuff” canvas can do.

Another thing I found interesting is when the author is discussing calendar widgets.  He says, “…calendar widgets all do the same thing, but you’ll find that they’re implemented slightly differently on each site.  A native calendar widget would smooth away the inconsistencies and reduce cognitive load during the date-picking process” (page 51).  To me though, I feel like it would be weird because a native widget would be styled by the browser, and may not fit with the overall design of a site.  Which is “better”?  It seems like something would be inconsistent for the user either way, so is there really a “better” way, or is it okay either way?

I actually enjoyed CSS3 For Web Designers more than HTML5 For Web Designers.  The tone is also friendly and humorous, but the approach the author takes to examples is a lot easier to relate to and more interesting.  Also, he (Dan Cederholm) apparently coined the term “bulletproof web design” and created Dribbble (foreword)!

I like his humor a lot – “We created support groups for designers emotionally scarred by inexplicable Internet Explorer bug” (page 2).  He also has an interesting take on the critical and non-critical aspects of a site’s visual experience.  According to him, branding, usability, accessibility, and layout are critical, while interaction, visual rewards, feedback, and movement are non-critical (page 5).  I had never though of splitting aspects of a site in those ways, but with his categorizations, his critical and non-critical aspects mostly make sense to me.  I am surprised that branding is critical (though perhaps he is talking about business sites, while I mostly think of personal sites), and feedback is non-critical (I had figured that would be part of usability).

I liked the way he presented examples, and he takes a very practical, learn-by-trying approach.  For instance, when talking about timing functions in transitions, he says, “If you slept through geometry in high school like I did, don’t worry.  I recommend simply plugging in each of these timing function values to see how they differ” (page 20).  The examples were really fun to follow and made a lot of sense, because he related them all to a fictional case study (page 29).  In fact, he made the fake site available: Things We Left On The Moon.

The author brings up a good question – do websites need to be experienced exactly the same way in every browser (page 35)?  His answer is no.  From what I understand, he believes that the most basic functionality should work in every browser, but extras on top of that are not required, and you should design your site so that it degrades gracefully.  For example, if a browser can’t display the transition of text from one color to another, fine!  Just have it change color – the transition is not so important.   I think that I agree with him, although I may not agree with which exactly what aspects he thinks are important.

Also, fun fact I learned from the book – parallax scrolling originated in an arcade game (page 84)!

It may seem like I recommend every book I read ever, but that might also be because I give up and don’t finish books I wouldn’t recommend.  I definitely recommend these two books.  Originally I had been debating whether I should purchase them or not, since I already had the other books about HTML5 and CSS3.  I’m glad I did though, because although a lot of topics discussed were similar, they were approached in very different ways and I definitely learned new things.  I really like the short and quick “learn what you can use now” approach that A Book Apart books seem to take.  I’ll probably end up getting more of them (I already have Responsive Web Design!)

Introducing HTML5 by Bruce Lawson and Remy Sharp, The Book of CSS3 by Peter Gasston

Due to procrastination I am writing about two books at once again!

In planning out my Node.js experiment, I realized that to really learn Node.js, I would need to learn JavaScript for real – and to learn JavaScript for real, I would need to go back and re-learn HTML and CSS.  In re-learning HTML and CSS, I discovered I was stuck in the past and really needed to catch up to HTML5 and CSS3, which led to the purchase of these two books.

To learn about all the cool new stuff in HTML5, I decided on Introducing HTML5 by Bruce Lawson and Remy Sharp.  This book was perfect for me – it describes the cool new features of HTML5 (plus some extras) in enough detail to allow the reader to use them, assuming you are already familiar with HTML, but leaves the really in-depth information for your own further exploration.

The book includes a short history of HTML5, which was really fascinating to me.  I never realized there was so much drama and conflict behind it all – the W3C deciding to freeze HTML at 4.01 and move to XHTML 1.0 in 1998, people from Opera and Mozilla disagreeing with work on a new XHTML 2.0 specification and creating the WHATWG to create their own specification, the W3C deciding they may have been wrong and starting to use the WHATWG’s specification as the basis of a new version of HTML, the W3C finally dropping XHTML 2.0 and moving to HTML5, the tension between the W3C and the WHATWG (pages xi-xiii)… It’s like high school drama!

I also never knew how haphazardly new features get implemented in browsers, and how much competition there is among browsers.  The example the book gave is XMLHttpRequest (page xiv).  It was created by Microsoft, and to implement something similar the other browsers had to reverse-engineer it, so there was never any standard.  Browsers all implement things in such different ways – it’s so interesting how there has to be a delicate balance between specifying how browsers should handle things (such as invalid markup or errors) and browser individuality (or else all browsers would be the same and there would be no competition!).

The biggest thing I learned in reading this book is HTML’s emphasis on accessibility.  When I taught myself way back when, I had no idea – I just used it to make my page look how I wanted.  I never realized that specific HTML tags are so important, not just for accessibility, but also for search engines.  I feel like this as been increasingly emphasized recently, hence the very strong opinion these days that HTML should purely be for structure and CSS should do all the styling.  Also, apparently there are laws about a website’s accessibility?!  The book says that some old screen readers don’t handle the specification correctly, so it’s not your fault if they can’t deal with your content, but “it’s your responsibility to know your users and the law in  your area” (page 53).  It didn’t go into any further detail – does anyone know anything about that?

I also learned some interesting fact tidbits.  Apparently the HTML5 shiv was named by John Resig, but later realized he used the wrong word and really meant shim.  The name stuck, however, so now it’s known as the HTML5 shiv (page 276).  Also, apparently “even today Microsoft Internet Explorer claims to be a Mozilla browser” (page 281).  Learning more about browsers’ history really makes me understand people’s disdain towards IE!

My favorite part is the tone of this book.  Both authors use a very colloquial writing style, and there are so many little pokes and teases at each other.  Here are some of my favorite text selections:

New browser features are very exciting and some people have made websites that claim to test browsers’ HTML5 support.  Most of them wildly pick and mix specs, checking for HTML5, related WHATWG-derived specifications such as Web Workers and then, drunk and giddy with buzzwords, throw in WebGL, SVG, the W3C File API, Media Queries, and some Apple proprietary whizbangs before hyperventilating and going to bed for a lie-down. (page xvi)

HTML5 browsers must still render these dear departed elements, of course, as there are plenty of them still out there in the wild.  But you must avoid them as if they were tarantulas, zombies, man-eating tigers, plutonium sandwiches, or Celine Dion songs. (page 70)

You don’t need us to explain what our old chum id is.  But now you can begin the value of id with a digit, just like you always have been able to do with class.  Yay to the max, that’s phat, as people a quarter of my age probably say. (page 74)

Say for instance you had created a real-time charting application that tracked every time Bruce mentions his favourite pink cuddly toy on Twitter.  This charting app will plot Bruce’s sentiment against the current time – so you know if he’s happy with the colour, texture, and general feel of the thing or not. (page 270, obviously written by Remy)

To catch up on CSS3, I picked The Book of CSS3 by Peter Gasston.  To be honest I was pretty skeptical about the book at first.  The cover has a robot mannequin on it, being measured by smaller robots… what in the world does that have to do with CSS3?!  I never found out, but the book was very useful, so I guess it’s good I didn’t judge it by its cover!  This book is similar to the last – it assumes you’re familiar with CSS, and teaches you enough about the new CSS3 features to be able to use them, but doesn’t throw extraneous details at you.

I was very surprised to learn that CSS2 isn’t even an official W3C recommendation yet, and that work began on CSS3 way back in 1998 (page 2).  These things take so long!  It’s understandable though, I guess, since so many people give their opinions and they all have to agree in the end.  I wonder why CSS3 popped up as such a popular topic recently, though?  Same with HTML5, actually – at what point did they all of a sudden gain visibility?  Is it because browsers now have implemented so much of them that we can use them even if they’re not finalized?

I never realized the recommendation process was so complicated.  Working Draft, Last Call, Candidate Recommendation, Proposed Recommendation, and finally Recomendation (page 3).  I wonder what the average length of time it is for a module to make it through all the stages?  Years, probably!

I was pretty impressed with how much research seemed to have been done by the author in terms of browser support.  At the end of every chapter, there is a table listing the features discussed in that chapter and which browsers (among WebKit, FireFox, Opera, and IE) support it, which support it with browser prefixes, and which are expected to support it in a future version.  The examples in the chapters also include browser prefixes, so you know exactly which features are support in what way.

Something that made me think was the following sentence, which is related to something I mentioned earlier:

We think of web pages as having three layers: content (HTML), presentation (CSS), and behavior (JavaScript), and it’s generally understood that these layers should all be kept absolutely separate – we don’t use presentational or behavioral rules in the content layer (in other words, no CSS or JavaScript inline in the markup). (page 163)

I wonder when this shift came about?  From what I’ve understood after reading around, people make a big emphasis on separating layers precisely because people never used to do that.  Even I remember using <font> and style=”position:absolute” in my HTML.  What was it that caused this shift?  I personally do believe it’s easier to understand and maintain if everything is split.  However now the Transitions and Animations modules kind of take a step back – they add animation, which is usually seen as behavior.  I wonder how things will change now?

The book also went into some proposed CSS3 that may or may not ever come to reality.  One interesting one is the CSS Haptics proposed by Nokia (page 248).  I can’t really wrap my head around the fact that they are simultaneously filling in the gaps of features web developers wanted long, long ago and had to implement with workarounds (such as rounded corners done with images), and thinking way far ahead to propose CSS that defines the haptic feedback of a touchscreen.  The example was “haptic-tap-type: latched-button-down”.  Will a touchscreen one day really be able to make me feel like a physically pushed a button down?!  I still can’t get my brain around it.

Fun fact – to get around a certain @font-face drawback, you need to add a “null” value which only needs to be a single character.  It’s become convention to use a smiley face! (page 55)

These two books were awesome, and I definitely learned a lot.  I’ve now already started on my next set of books (which will most likely be written about together, since I’ve already finished one of them but don’t feel like writing about it yet…) to continue my learning for the Node.js project.  I’m also working on a separate “project” at the same time though – getting through Seven Languages in Seven Weeks by Bruce Tate.  All this stuff is so exciting!

The Historian by Elizabeth Kostova

I’m in Boston right now!  Well, really Newton, but I flew into Boston.  Came here for work on Tuesday and I’m leaving tomorrow morning.  I’ve been able to catch up on my reading while on the plane here and also in the middle of the last three nights while I was up until 2:00am or 3:00am somehow still jetlagged.

I borrowed The Historian by Elizabeth Kostova about a month ago when Jack and I checked out the Santa Clara library for the first time.  I hadn’t been to a library for years, and this one was pretty awesome.  Way back in middle school the library I went to in Idaho had self-checkout machines, but I thought it was cool that the ones at the Santa Clara library uses RFIDs instead of scanning the barcodes.  It was kind of funny to watch Jack trying and failing to check out his book by carefully lining the barcode under the light, and then me just taking it from him and doing it for him by just throwing the book randomly on the machine.

I started in the fiction section first, which is where I picked up The Historian.  My method of selecting books is to go down each aisle one side at a time and just scan for interesting titles.  If there’s an interesting title, I pick it up and look at the cover and description on the back.  If the book still has my attention, then I’ll flip through and read a few paragraphs just to make sure I like the author’s writing style.  Kind of a superficial way of selecting books, but with so many choices in a library there’s not really a more efficient way to do it!

I decided to borrow The History because the back cover description made it sound like a mystery, and I like mysteries.  I’ve also realized lately that I like historical fiction, which is what this also sounded like.  When I got home and started reading, I was surprised to discover it was about Dracula.  I couldn’t figure out for a while how I could miss the main subject of the book, but  then I realized that there was a library barcode covering part of the back cover description and I never read the “praise” quotes on books, which both referenced Dracula and vampires.  At least it was a good surprise!

I really liked this book.  It’s historical fiction but written from the point of view of historians in a (relatively) modern time studying history, in this case about Dracula, rather than from the point of view of those periods in history themselves.  This was pretty cool to me, because they were unraveling a mystery through research of different historical sources, and it spanned hundreds of years.  Although it was fiction it was fascinating to see the small links and references the author created throughout time.

Another reason I really liked this book is because of the way the story is told.  There’s the story of the main character, which is told in first-person, but then you find out the rest of the story with her through the stories and letters of multiple people, which are all interweaved, both in who the story/letter is from and in time.  They’re also presented in chunks that are exciting and fun to read, but also leave you hanging and waiting for more.  I haven’t read a book in a long time like this, where I ended each chapter wanting to immediately jump to the next no matter how late it was or where I needed to be.

My only problem with the book was that the telling of the story through letters wasn’t 100% believable to me.  In the case of the letters from her dad, they were worded too much like a novel – too much detail, too many exact quotes, too specific about exactly how he felt, too intimate.  The letters were supposed to be written years after the events happened and written for his daughter to read – I really can’t imagine a person remembering exactly what every single person said, or even telling his daughter about how he and her mother spent their time together in a  hotel.  After a while I forgot it was a letter and just treated it as a first-person part of the book, but the fact that it was a letter from her dad was pretty important, so I don’t think that was the intended reaction.  To be fair, it would have been really hard to tell the story without giving that much detail.

It’s been hard to write this, because I have no idea how much I can say without giving things away.  I suck at writing reviews…

Steins;Gate

This anime is good. I’ve heard a lot of good comments about it throughout the internet and I have to say the anime lived up to the hype.

The plot centers around a scientist who accidentally discovers he created a way to send text messages to the past. They initially start changing the past which results in a bunch of crap happening and a quest to return things back to normal. It’s not a particularly unique concept, but they do approach it very well and leave some nice twists in turns in there to keep viewers on their toes. There are a few doubts about the way they executed everything in the end (it seemed like kind of a cop out) but overall, it was well done.

The characters are the focal point of the anime, with the time traveling just acting as the plot driver. The main protagonist Okabe, is voice by none other than Mamoru Miyano, who is responsible for Light in Death Note, Tamaki in Ouran High School Host Club, and Masaomi Kida in Durarara (also Setsuna F. Seiei from Gundam 00 but Setsuna is an emo, quiet bitch in that so I don’t really care for him). He gives an outstanding performance and really helps to add a lot more emotion to the series.

But really I like dthis series because of Makise Kurisu. She is such a well designed character, from her overall display and style, to her slightly arrogant yet caring personality. She has a touch of tsundere in her, but it’s pulled off in the “right” way. Animes tend to milk the “tsun” part to death, making for some very unnatural and exaggerated situations. Makise behaves like a real person would, acting initially annoyed by Okabe’s strange mannerisms but slowly getting used to it over time. After they work together and accomplish some things, they grow to enjoy each other’s company. However, there is always a hint of “tsun” left in there, manifesting in minor teasing or scolding. The banter between Makise and Okabe is extremely well written, and it’s wonderful to see their relationship develop throughout the series, without any kind of stupid situations coming between it. The moments when they are talking together are much more memorable and interesting to me than all the rest of the time traveling science fiction.

I highly recommend this series and anything more I say will just spoil it more. It is one of the best anime I’ve seen in recent years and definitely deserves a watch.

Renoki: Making An Android Game (part 14)

I wanted to finally fix some lingering issues with Renoki and get the final version up on the market. This will be version 4.0 and I believe that this will be my final version for now.

I have been struggling with tablet resolutions for a while now. When I was first designing the graphics, I made a stupid decision and created them for a 480×854 resolution, because I thought that would be the largest resolution I would support. Unfortunately, a bunch of other phones came out with enormous resolutions (1280×720) and I realized that my app was still showing up for tablets.

Supporting Tablet Resolutions
One of the annoying things I ran into was that I set Renoki to have a minimum Android API level of 7 (froyo). This means that any device with froyo or newer can download it. Given that ~25% of phones are still running froyo (, I felt this was a good decision to make. Unfortunately, if you do not want to support tablet resolutions, there is no way to make your app not show up,). There are some things in the Android Manifest you can do (support-screens, compatible-screens) but the useful mechanism were not introduced until API level 9. This means it is IMPOSSIBLE to prevent a level 7 app from appearing on tablets.

The next best thing I could do is run the app in screen compatibility mode. What this would do is create the smaller resolution game in the middle of the screen and surround it with a black border for all the unused pixels. While this doesn’t offer a full experience, it would at least prevent the game from crashing. The problem was that the view the game was in was still the entire screen size (e.g. 1280×720), but I was only drawing within my original 960×540. I had a few things based on the screen width which were screwed up by this, and images I had go “offscreen” didn’t really go offscreen and instead just drew on the black border. It was in general a very screwed up thing.

The solution I realized was to hardcode my base view to a specific height and width, and use the view width to do my calculations. This basically solved all my problems and allowed it to run correctly on any resolution.

My app has 1 FrameLayout (@id=frameLayout) that contains a single custom SurfaceView. By creating a set of LayoutParams and setting the width, height, and gravity, I made that root FrameLayout conform to the size I wanted. Then, my app always thinks it is running on the correct resolution, regardless of the actual device resolution. I also made sure to multiply by the pixel density “dip” to make sure it works on all devices.

So now I have an app that “works” on all resolutions, although it is extra tiny on big tablets. However, this is good enough for me and I definitely don’t want to spend the time creating all the images for this game at bigger resolutions.

HTML&CSS by Jon Duckett, Above the Fold by Brian Miller

I was reading these two books at once and finished them around the same time, so I figured I’d write about both at once.

I found out about HTML&CSS by Jon Duckett because someone posted about it on Reddit.  Although I already knew HTML and CSS, I couldn’t help buying it – the photos on the website make it look so beautiful!  I figured that I would benefit from re-learning HTML and CSS in a structured way, since I had taught them to myself before.  It’s even more gorgeous in person!  The HTML and CSS are color-coded, each type of page (Introduction, Reference, Background, Diagram, Example, and Summary) has its own layout, and even the example pages (showing the result of the HTML) are beautiful.

It’s a beginner book, so it start off with just HTML.  It describes how HTML works, then goes into different tags, introduced in related categories.  It’s very simple and very clear, with lots of diagrams and examples.  The book brings up some older HTML practices that are no longer used, but it points out that they are old, and is explaining them in case the reader comes across them when looking around the internet – I really like that it does that.  Things change so quickly, but I think it’s important to still know where things came from and how things evolved.  It also goes into a few new HTML5 tags, but doesn’t delve into them too deeply, and just tells the reader to look out for them.  The examples of the HTML code are so pretty.  Instead of simply displaying what a browser would display, there are photos of a laptop or a monitor, showing the site in a browser.  The background of the photos are beautifully-decorated rooms, and it just makes looking at plain HTML a lot more enjoyable.

The second section is about adding CSS to the HTML that had already been taught.  It also introduces CSS in related categories, so it’s easier to digest, and easy to follow.  The example pages that are created slowly become more complicated and realistic.  By the end a full web page is created.  The relevant example code is color-coded and easy to follow, and the code is even available online (although I personally never checked it out).

The last section is some random website-related information, giving some quick information about the process of creating and maintaining a website, such as designing for the visitor, wireframing, visual design, and SEO.

Overall I think it’s a great book to learn HTML and CSS as a beginner, especially because it’s very visual and you are using HTML and CSS to create something visual, so it makes a lot of sense to present the material to you in well-organized and understandable visual examples.  The examples aren’t contrived and are real examples of situations in which you would utilize the code.  And of course, it’s so enjoyable to look at!  In general I think that it’s very hard to learn coding languages just from books without trying them out, so I think it’s awesome the examples in the book are available online to play around with and explore.  I didn’t check them out just because I was reading the book not to learn, but to refresh.

As I went through it, I actually learned that I lot of things I thought I knew are obsolete, and there are a lot of new tags and conventions used today that I had no idea about.  It was a great refresher, and it’s made me remember how interested I’ve always been in web design and web development.  I’ve decided to follow up with an HTML5 book and a CSS3 book to get caught up on the latest of HTML and CSS, and then take a look at both again from a design perspective.

I can’t remember how I found out about Above the Fold by Brian Miller – probably some Reddit post or Quora answer – but I’m really glad I found it.  Before I started working in my current team at work, I never too much thought to user experience and design, but I’ve come to realize that they’re really important, and if I don’t have to put much thought into them when interacting with a website they were probably well-done!

This book is also split into three sections.  The first is Design and Typography.  However it’s not limited to those topics and includes a lot of relevant information that’s useful and pretty interesting.  For instance, it explains how things such as a computer’s color depth, monitor resolution, operating system, browser type, and connection speed will affect how they see your site, no matter what you do.  Something I found really fascinating in this section was the Brief History of Web Design, split into Web 1.0 (1993-2002) and Web 2.0 2003-present).  It included screenshots of websites from those previous years – Yahoo in 1994!  Amazon in 1995!  Apple in 1997!  Google in 1998 (which, by the way, doesn’t look too drastically different)!  It’s cool to see how much things have changed.

The second section is Planning and Usability.  This goes backwards to what you should be considering before your design – the visitors, the client, wireframing, prototyping, and usability.    I think this is the kind of “background” stuff website visitors never see, and never really consider.  There’s a lot more that goes into a site than I thought!

The last section is Business Value, and is about SEO, ads, and marketing.  Since I’m reading this book as a personal interest, I didn’t pay too much attention to this part, even though it was very interesting.  For me personally, it’s good to know about, but I don’t think I would ever be making sites professionally in an environment where I would need to be an expert in these areas, just making sites in my free time for myself :)

I think this book was awesome.  I got a taste of all the important things to consider when designing a site, and it was all very well-presented.  Nearly every page has a screenshot of an existing site that exemplifies the concept being discussed.  Not only was I learning these concepts, I got a lot of ideas and inspiration from the screenshots.

One interesting thing I noticed as I was reading the book is that I get very different impressions of a site when viewing it in a browser versus the entire length at once in a book.  Seeing the entire length makes it feel more cluttered to me – a lot thrown at me at once.  However seeing it at once does give me a better sense of how elements of a site tie together into one experience.

I’d suggest both of these books to anyone interested in web design.  They’re both not only informative, but great to look at, easy to read, and well-designed.  I wish computer science textbooks were presented like this!

Game of Thrones

I finished watching Season 1 of Game of Thrones. And yes, I have never read the books, so my opinions of this are solely based off the TV series.

So it’s not bad. I enjoyed myself while watching it, but I may have enjoyed it solely because it’s a dark fantasy world filled with blood, stabbing, and naked women. I think they did a reasonable job at creating all the characters. You really come to like the Stark family and their struggle for justice, while hating all the ruthless, political schemers. There’s a good amount of development for the main characters, and you get to really see them change as time progresses.

The story lines are solid. They are interesting and filled with twists to keep you guessing. I will say the story of the Black Watch was completely pointless, but my guess is that they will play a bigger role in future seasons. Right now, they just seem like a huge waste of time. But otherwise, everything was definitely entertaining and kept me wanting to watch the next episode.

The one thing I did have a problem with is the sheer number of characters and the difficult of keeping track of their long, difficult to pronounce names. I’m still not sure exactly who everyone is and the relations between them, particularly for the non-major characters. I feel like I need to keep the wiki page open while watching so I don’t miss anything.

Establishing The Boundaries of the World
Spoilers by the way

When you create a fantasy world, you need to quickly establish what is valid and what is impossible. While a fantasy world can contain magic, dragons, and super human abilities, it still needs to follow rules. Otherwise, everything quickly loses meaning and it’s impossible to build tension in a scene. For example, everyone understands physics and what is impossible in the real world. If you have a normal man fighting a dragon, you expect the man to get instantly crushed because a real human could not hope to compete with the sheer size and speed of a dragon. So in bad movies (e.g. Transformers) you would have the man impossibly dodge and evade the dragon’s firebreath, claws, and tail. Then somehow they manage to run up without getting blown to smithereens and slice off it’s head (or put some stupid allspark in their chest). Watching something like that is frustrating, stupid, and constantly has you asking “Did that really just happen?”

However, if in the first 10 minutes you show that the man can dodge, jump, and shoot magic bolts, then you’ve established that in this world, the laws of physics do not apply. This world has magic, dragons, super powerful men and that’s just the way it is. You don’t need to explain how anything works or how it came to be. It’s just accepted.

For most of the series, everyone is pretty normal. People fight like real, clumsy humans in heavy armor. They get easily hurt and die to single sword slashes. There is mention of some zombie like people called “white walkers” in the first episode, but they never really reveal them so we don’t know if they are truly zombies or just a bunch of savage people who pretend to be ghosts to scare you. There is no signs of magic or supernatural beings, outside of some legends and superstitions mentioned in passing. You get the feeling that this world generally follows the laws of physics and is realistic enough.

But towards the end of season 1, things start getting weirder and weirder. The white walkers are revealed as being real zombies who rise from the dead. A woman uses “blood magic” to save someone from death. A woman walks into a fire and is unburned. Even dragons show up in the final scene. You have this radical switch where the world goes from the middle ages to Dragon Age the video game.

The problem I have with this is that for the entire season, people have been established as normal humans, struggling with mortal issues in a real world. As soon as you introduce dragons and magic into the mix, it shatters everything you thought you knew and trivializes everything you’ve already seen. Imagine a movie about World War II, where a platoon of soldiers is fighting on the street. They use teamwork, courage, and ingenuity with the tools at their disposal to slowly work their way towards a goal, maybe killing some machine gun nests or tanks along the way and losing some men. Then all of a sudden a Gundam shows up and blows everything to smithereens. That’s how I felt at the ending of Season 1.

Maybe all of this supernatural stuff won’t matter much and the dragons (which are still babies) are just there for symbolism or something. I hope that the series will continue to focus only on men fighting men, and never bring dragons or magic into the picture again. And despite how well done most of the series is, all I can think about is the ending and how stupid it is.

The book that started it all: How I taught myself HTML in 4th grade

I got my new book HTML&CSS in the mail yesterday.  It’s a very basic introduction to HTML and CSS, but I got it even though I know both because it is absolutely gorgeous.  I wish more books taught like this – I’ve actually been searching for more books on web design like this.

Anyway, as I started reading through it, I realized that a lot of HTML I thought I knew is obsolete.  For instance, apparently using <a name=”blah” /> is now obsolete in HTML5, and you should instead specify anchors for links with id attributes.  I didn’t even know you could specify anchors with id!  At that point I realized that my HTML is way outdated.

Why?  Because the HTML I know is what I taught myself from a book in 4th grade.  After this one semi-structured introduction to HTML, everything else I picked up as I needed it, and I definitely haven’t been keeping up with new specifications.  I have a very haphazard knowledge of HTML, with a lot of gaps.  Same with CSS – I don’t think I even bothered with CSS for years because that intro book never mentioned it.  I’ve definitely been able to get by with what I know, but I think it’s time for a more structured refresher – and to get myself updated to 2012!

I was surprised to find that I actually had that book from 1998 (14 years ago!) in my bookshelf.  I must have missed it when I was unpacking – otherwise I would have reminisced over it for hours.  Take a look at how awful it looks:

I got it from a book order in 4th grade.  Remember those?  I was always so excited to pick out new books to get.  I have no idea what possessed me to get this book, but I’m glad I did, because I’m pretty sure this book is the reason I’m a software engineer today.

Here’s the back cover.  I cringe just looking at that example site.

I’ve already checked, that website doesn’t exist any more.

I’ve been on a book-buying kick lately, mostly about web design.  I figure the money will be worth it in the long run since I’ll be learning something I have a lot of interest in, and I haven’t sat down and read for a long time.  I still have five or so fiction books in my bookshelf that I haven’t gotten to, but at this point in time I’m more interested in learning.  And reading is dying out!  Why don’t people relax and just read any more?  That used to be all I did when I was little.  Now instead of staying up really late reading I stay up really late browsing the Internet.

The HTML&CSS book is so pretty.

Even when they show the example pages that correspond with each code snippet, they don’t just show the page – they display them on different monitors in beautifully decorated rooms.  I’ve even been getting some book suggestions from the books they show in the background.

I also got Above The Fold a few days ago.  It’s also really pretty, and there’s a lot of fascinating background in it.  I never thought about the fact that tabbed browsing was based on file folders, although it seems obvious now that I know.  It talks about the structure of web pages, but it shows a lot of them full-length.  Web pages look so different when you look at them full-length versus the height of your browser.  They feel so much more cluttered to me when I see them full-screen – but then I guess that’s the whole reason the “fold” is important!

I’d also been reading The Design of Everyday Things before I got into this big book kick, because my user experience friend recommended it.  Before I started work on my current team I never thought about user experience at all – but now it seems so important.  I guess if I don’t have to think about the experience of doing something while I’m doing it, it was probably designed well enough that it was natural and made sense.  On the other hand, the book says that when something goes wrong, people tend to blame themselves rather than bad design.  I don’t think I believe that 100%, because some people are just retarded, but if the majority of people have difficulties, something is probably wrong.

Another book I recently bought but haven’t started is a little different… I got I Am Jackie Chan, for no reason other than that Jackie Chan is awesome.  Sadly, I had to get a used book because they apparently don’t print it any more.

I’ve decided to set aside a specific amount of money each month for my “splurgy” purchases, and these books fall into them.  I’ve already ordered Responsive Web Design – now that people browse from phones so much a responsive site is pretty much expected.  Here are some other books I’ve decided to buy so far, in the order I want to get them:

After I read more I’m going to stop being lazy and actually design BaconFriedRice instead of using pre-made templates.  Yes, I’ve been saying that for a long time, but now that I’m reading all these I want to do it right.  I’m excited to get to that point!  Now off to read some more!

Node.js experiment part 2: Research, review, and learning

I want to do this experiment right, so rather than jump right in I’ve decided to do a lot of research and planning before hand.  I’ve also decided to review JavaScript and learn Node.js “correctly” by reading introductions and tutorials.

But two things before I begin:

  1. I need a name for the project!  It’s bothering me that I don’t have one, and I don’t want to go through the bother of going with a temporary name and renaming everything afterward.  Any ideas?  It needs to describe the “resource blog” idea, but also maybe be cute and easy to remember.  These are some random thoughts I’ve jotted down:
    • bacon links?
    • piggy links?
    • library?
    • repository?
    • reference?
    • collection?
    • anthology?
    • compilation?
  2. I want to be organized, so I’ve started a notebook for this project.  I write notes on introductions/tutorials in it, and also just jot down any thoughts I have.  I like writing things down on paper rather than just typing them, because it helps force me to think through it – when I type, sometimes I type so fast I can’t even think fast enough to keep up.  I also discovered Trello, this awesome “collaboration tool” that’s perfect for organizing a project, especially projects with multiple people.  I found it when I was looking through code52 about their most recent project.  Here is their Trello board for their project Samurai.  It’s awesome – there are lists of different types of tasks, and you put cards in the lists, which represent tasks.  The cards can have notes, comments, and checklists, and can be labeled with categories and even have people assigned to them!  Here is my Trello board for my experiment.  I’ve just started putting it together so I’ll definitely be expanding it.  Comments on the cards are welcome :)  Also I feel silly assigning myself to everything, but when I finish things it makes me feel like I’ve accomplished a lot!

Here’s a table of contents again:

Research
Review
Learning

Research

First I expanded my feature list so I could figure out what I would need to do.  Here is what I have in my notebook:

  • Log in to post
    • Only me for now
    • Goes to admin center – like the WordPress admin page
      • Add/edit/delete resources
      • Save versions eventually?
      • Save drafts
      • Moderate comments
      • For posts:
        • Create/select category (can only belong to a single category)
        • Add tags
        • Title
        • URL
        • Note
        • Rating
    • In the future, expanding for more users
      • Admin can manage users
      • Manage user profile – name, email, picture, URL, bio, etc.
      • Add/edit/delete own posts
      • Versions?
      • Drafts
      • Same as above for posts
      • Permissions model – everyone sees same functionality but can only act based on permissions
  • View resources
    • Summary view and full view
      • Summary view – multiple summary views on a page, “more” link will show full view
        • Title
        • URL
        • Snippet of note
        • Rating
        • Category
        • Tags
        • Number of comments
        • Votes with ability to vote (like Reddit)
      • Full view – each resource on a single page
        • Title
        • URL
        • Note
        • Rating
        • Category
        • Tags
        • Votes with ability to vote
        • All comments
          • Name
          • URL/email
          • Comment
        • Add comment
          • Name
          • URL/email
          • Comment
          • Recaptcha
    • Default view
      • Display resources by time, most recent first
      • Show each resource in summary view
    • Category view
      • All on one page
        • Alphabetical categories
        • Show in category tree
        • Show minimized by default, can maximize to see summary view
      • By category
        • Same format as all on one page except each page is for each outmost category (subcategories don’t get own page)
        • Can sort by date, rating, votes
    • By tags (user search by tag)
      • Show summary view of results, by date as default
      • Can sort by date, rating, votes
      • Minimized by default, maximize to see summary view
    • By highest rated (my rating)
      • Same format as tags view
    • By highest voted (by visitors)
      • Same format as tags view
  • Index page
    • Default view of resources
    • Tag cloud
    • Short list of highest rated with “more” link
    • Short list of highest voted with “more” link
    • Link to page with different category views
    • Search bar for tags
    • About link
    • Contact link

Now that I’ve typed it out, I realized that there may be too many different views of a single resource – full view, summary view, and minimized view.  I need to think more on that.  I figured that showing the full view of every resource would be too much information if it wasn’t the index page so I think there should be at least two views, but it may not be necessary for both a summary view and a minimized view.  I may get rid of the minimized view, otherwise someone would have to first expand the minimized view, and then click “more” on the summary view to see the full view.

I’ve also come up with a list of tools/frameworks that I think I’ll need for the project.  I did quite a bit of research on the best tool for each function, and I think this is the finalized list.  They’re in no particular order under each category:

  • The general code – server and client side
    • Node.js – obviously
    • Express – web development framework
    • Jade – template engine
    • Stylus – CSS pre-processor
    • nodeQuery – DOM manipulation framework with JQuery methods
    • everyauth – authentication and authorization
    • Async – utility module for asynchronous code
    • node-UUID – generate UUIDs
    • node-recaptcha – renders and verifies Recaptcha captchas
  • Database
    • MongoDB – document-oriented NoSQL database system
    • Mongoose – MongoDB object modeling tool
  • Testing and debugging
  • Deployment
    • Forever – tool to ensure a script runs forever
  • Logging
    • winston – multi-transport asynchronous logging library
  • Documentation
    • NDoc – documentation generator

I’ve always had this really weird attitude towards using external tools.  On one hand, I feel like doing everything myself is “better” in terms of me being a programmer and not being lazy.  But at the same time I guess it’s not lazy, it’s being resourceful and using what’s already out there.  I never know how I feel about it… I still get conflicted about it all the time.  But I’ve got this huge list now, so I’ll have to deal with it!

There are still some things I need to consider for the project, and need to do research on – I won’t fully go into them here but they’re on the Node.js Experiment Trello board.

Review

Since all my JavaScript is self-taught, and JavaScript is kind of important to Node.js, I decided to fill myself in by following a introduction tutorial.  I also want to learn to use Node.js the “right” way, so I am following an introduction tutorial for that too.  I decided on Felix’s Node.js Beginners Guide, which was suggested by a lot of people when I was researching best Node.js tutorials.  And as luck had it, that tutorial suggested Eloquent JavaScript as a JavaScript tutorial, and it had good reviews when I researched it, so I’ve decided to follow that for my JavaScript review.

I’m up to chapter 9 in Eloquent JavaScript and it’s been great for me so far, as someone who already has programming background in other languages and wants to just pick up the little nuances about JavaScript (it still throws me off that you don’t have to tell a variable what kind of variable it is.  And null vs undefined?  == vs. ===?  Closures?!  Prototypes?!?!)  However I think that as an introduction for someone who has never programmed before, it’s kind of a mess.  It doesn’t explain things very clearly and kind of brushes over some programming concepts as “magic”.  I had to do some outside research about closures and prototypes, and I still don’t fully understand them.  They also try to shove too much down your throat – they had an entire chapter that was based around the concept of graphs but never explained graphs and just sort of threw code at you.  I love the in-browser console though; it’s really easy to follow along with their code samples and edit it myself.  Try out the in-browser console – it’s awesome.  Overall I think it was a good choice.  Still need the finish taking notes on the last few chapters though.

I’m also playing around with Codecademy to keep filling in any knowledge gaps I have.  It’s neat, I like the tutorial format, with the skeleton code in the editor and the console to run it.

After that I’m going to take notes on Felix’s Node.js Beginners Guide.  Then I’ll see what other knowledge I may be lacking and research some more good tutorials.

Learning

I guess I kind of already covered this with Felix’s Node.js Beginners Guide.  But I’m also going to need to become familiar with all of the tools and frameworks I’ve chosen to use in the experiment, so I think that I will have to do some reading on each of those and code through some small sample projects for each of them, before I try to use them all together.  I still need to come up with a plan for that – not sure what order I’ll be going in, as the list of tools and frameworks above are in random order.  I wonder if it’s better to familiarize myself with testing tools first so that I can use them while I learn the others?

Anyway, it’s late now, so I’m going to bed.  Goodnight!