Minggu, 29 Maret 2020

Shoot Your Goo, Fun Puzzle Platformer Made With FTEQW In 48H!

Shoot Your Goo is (despite its name) a family friendly puzzle platformer made in just 48h for the GMTK Game Jam 2019. It could be described as a mix of Angry Birds and mini-golf, but see for yourself:


The source-code can be found here, and you can head over to InsideQC to discuss with the creators.

The team who made this has become quite proficient in turning out interesting game prototypes (Bloodletter, Escape from Space etc.)  with the very cool FTEQW engine... a much advanced Quake1 derived engine (unofficial developer's documentation on the QuakeWiki & source code).

There are also a few other interesting projects with FTEQW, such as CubiQuake, FreeCS, and it has even gotten to the point of being nearly ready as a functional drop in replacement engine for Xonotic.

Semi-OT: Trenchbroom, the modern take on Quake engine mapping is continuing with great improvements and should be on your list to check out for sure

Discuss on our forums here.


Battle For Boulder Badge


After the devastating loss of Rascal, I went back to training out on Route 2 with Lucky. There was no way a mere Metapod was going to stand up to Gym Leader Brock. I had confidence that Rascal, Nibbles and Kiwi would help me earn the Boulder Badge, but without Rascal my confidence faltered. It took us a few days, but eventually Lucky sprouted wings and evolved into Butterfree, a significant improvement over the lovably little lump of a Pokémon he was as Metapod. I did not neglect Kiwi and Nibbles during this time, either, but their progress was a bit less important.
Once Lucky had evolved, I spent what little money I had on a couple of potions at the PokéMart. Although they were expensive, I would not let another Pokémon fall in the Pewter City Gym. I absolutely would not. My nerves were shot as I stepped into the gym for the second time. I remember I was sweating and shaking just thinking about facing Brock. I saw the Junior Trainer who had bested my poor Rascal. He gave me an approving nod, but it did little to improve my disposition. Brock stood at the far end of the gym and beckoned me forward. He had seen my fight with the Junior Trainer several days ago and was eager to face me.

I clenched my jaw tightly as I threw out my first Pokémon. Kiwi met Brock's Geodude face-to-face in the gym's arena. We wasted no time kicking up as much dust as possible to obscure Geodude's vision. Brock had Geodude spend most of its time curling up into a defensive ball, but every now and then it lashed out with a tackle that it simply couldn't land on Kiwi. When I felt it's accuracy was sufficiently incapacitated, I withdrew Kiwi and used Nibble to wear down the Geodude slowly but surely. The Geodude was powerless in the dust Kiwi's sand-attack had kicked up and against Nibbles relentless tackling.
Then Brock threw out his champion, the Onix. I tossed Kiwi back into the ring hoping to repeat our earlier performance on Geodude. Kiwi kicked up as much sand as he could, but Onix still managed to land a lucky strike on him. It hurt Kiwi enough to discourage me from keeping Kiwi on the field any longer. Nibbles was sent out while Onix merely bided his time. I knew immediately that any attacks on Onix while in this defensive state would be unleashed twofold onto its attacker. Your only choices are to crush it swiftly, which is difficult against a rock hard Pokémon like Onix, or to wait it out.
Nibbles began to stare down his opponent while it remained in its defensive posture. Slowly this would lower the Onix's defenses and leave it vulnerable to a massive strike. Eventually, Nibbles was exchanged for Lucky who covered the Onix in its string shot while it continued to wait for our attacks. Feeling safer, Kiwi returned to the battle to continue whipping up sand into Onix's face. Then as soon as Onix released its defensive posturing, Kiwi slammed it with a gust from his wings and knocked the Onix to the floor.
That was how I won my first badge in the great region of Kanto.

Brock was impressed and clasped me firmly on the back with a great slap of his hand. He knew about Rascal, of course, and was pleased at my stance on training. He liked how patient and defensive I was and as a reward not only gave me a handsome sum of PokéDollars, but a Technical Machine that would teach certain eligible Pokémon his Onix's signature technique of biding time and waiting for the counter strike. This strategy didn't really work out well for Brock that day, so I wasn't sure how I would incorporate it on to a team that I intended to take as few hits as possible. I didn't want to be rude, though, so I graciously accepted the TM #34 and the Boulder Badge.
I was now officially on the road to challenge the Indigo Plateau League. I really hadn't come to Kanto expecting to do something quite that dramatic, but I was slowly being pushed in that direction. Professor Oak had prompted me to take this journey and running into Wolf made me question what the journey really meant to me personally. The encounter with the snarky trainer in Viridian City helped me shape my personal goals and encouraged me to challenge the gyms to seek reputation and understanding in the world of Pokémon training. Now, I had my first badge pinned proudly to my backpack and I was on my way to the next adventure — with considerably more money to spend thanks to my winnings.

Current Team:
Attacks in Blue are recently learned.

CX 2692, Moon Patrol!

This episode is all about the Irem arcade game Moon Patrol, ported by Atari via GCC. Thanks for your patience regarding the release of this episode. I had a bit of an emotional setback in January and I'm trying to fight my way out of it. M.A.D. by US Games will be the next game I'm covering, so if you have any feedback for the game please send it to me at 2600gamebygame@gmail.com by end of day 23 February. Thank you for listening!

Moon Patrol on Random Terrain
Moon Patrol on KLOV
Moon Patrol on Atari Protos
The Zorfon Mystery by Rob Wanenchak
Mark Ackerman's web site
Atari Age Moon Patrol title screen glitch
Get Matt's Repro Freeway patch on eBay

Selasa, 24 Maret 2020

I Am Alive Download For Free

I Am Alive Download For Free


SCREENSHOT





System Requirements Of I Am Alive Download Free

  • Operating System: Window XP/ Vista/ Window 7/ Window 8
  • CPU: Intel Pentium 4 or later
  • RAM: 1 GB
  • Setup size: 1.8GB
  • Hard Disk Space: 2 GB













Sabtu, 21 Maret 2020

Dona Nobis Pacem And Final Fantasy X

At Holy Mass as the priest holds the Sacred Host in His Hand, he strikes his breast three times saying-

Lamb of God Who takes away the sins of the world, Have mercy on us
Lamb of God Who takes away the sins of the world, Have mercy on us
Lamb of God Who takes away the sins of the world, grant us peace

This moment occurs just after Sacred Host is broken, one of the moment which mystically shows forth the Sacrifice Our Lord offers on the Cross and that His perfect sacrifice has been accepted to grant us peace- peace between humanity and Almighty God in the New and Everlasting Covenant. 

Holy Mass renews this sacrifice it brings this Once and For all sacrifice into the here and now, God uses the rites of the Mass to intersect history anew with this One Sacrifice, bringing its efficacy, applying its merits to those who are present and who have interiorly united themselves to the sacred rites.

He does this through His Sacred Priesthood- those to Whom He Himself gave the command, 

"Take this, all of you, and eat of it, for this is My Body which will be given up for you- do this as a memorial of Me", a sacred rites, through which, according to St. Paul, "you are proclaiming the Lord's death, until He comes".

This brings me to the thought, which I have shared previously, about "the calm" of Final Fantasy X.

When the final summon is made, when the summoner gives his/her life in sacrifice, sin is defeated, the evil monster is chained up once more, and a period of peace is given to the world.

Let's skip the fact that as the plot of FFX develops the whole Yevon religion is revealed to be a sham, but the fact of the matter is, the final summonings did bring calm, and this was because of the self-less courage of the summoners.

Here is the extract from X about The Calm, only watch the first 5 mins, after that it moves on. 


Notice the desire for this Calm that the people have, and the language used, it is the period of peace during which people can raise their families without fear. The calm that parents long for the safety of their children, and children so they can be free from nightmares and sleep peacefully in their beds.

Maybe we need to try and see the Sacrifice of the Mass like this- in attending Holy Mass, in being there at this Have Mercy on us! Have Mercy on us! Grant us peace! The period of calm is ushered in to our lives, it envelops us, we are surrounded in Our Lord's merits mediated through the Holy Sacrifice- the Final Summoning. 

This doesn't mean we won't suffer from illness, it doesn't mean endless prosperity, but neither did the final summoning in X, but what it means is freedom from sin, from the power of the Devil, and for those who are living in the state of grace, the promise of Eternal Calm, of which this present time will just be a foreshadowing.

With these thoughts in mind-- Introeamus ad altare Dei.



X-Wing: Second Edition Is On The Way!

Feeling fresh.

Oh man, I'm excited.  I haven't played X-Wing in a while because the competitive meta was just so stagnant with all the health regen, turrets,and bombs.  Now that they rebooted the entire game, I'm really pumped to get back into it.

The official announcement is here:
https://www.fantasyflightgames.com/en/news/2018/5/1/x-wing-second-edition/

There's a thread on the FFG forums that has all the consolidated info:
https://community.fantasyflightgames.com/topic/274813-consolidated-x-wing-20-changes-thread/

Here's a quick run-down of what changed and what didn't..

These things have not changed in 2.0:
  • Models carry over (some models may be re-released with new sculpts/paint/features)
  • Dice are the same
  • Range ruler is the same
  • Range bonuses and obstructions work the same (except turrets)
  • Templates are the same size -- but have a line down the center for alignment on nubless bases
  • Basic game flow (but phases are renamed; some new phases)
  • Maneuver driven by hidden dials plus actions
  • Actions include: Focus, Target lock, evade, boost, barrel roll, cloak, reinforce, jam, coordinate, rotate arc (specific action mechanics may change)
  • Upgrade slots: EPT, modification, title, torpedo, astromech, bombs, missiles, crew, system, turret
  • Some upgrades will still take two slots
  • Tokens (some art changes, shape): focus, evade, target lock, cloak, stress, tractor beam, jam, shield, ion
  • Conditions are still a thing (Director Krennic)
  • Setup Phase is largely the same

These things have changed in 2.0:
  • New phases/phase names ("Strategy Phase")
  • Medium ship bases (confirmed: U-wing, ARC-170, K-wing, G1A, Kimogila, Scurrg, Firespray, TIE Punisher, TIE Reaper, TBD)
  • The new templates have a centerline that aligns to hash marks on the base and assists with bumping.
  • Green maneuvers become blue 
  • Red actions which gain a stress after taking
  • Push the Limit is gone; some ships may "link" a first action into a second and gain a stress (example: focus into target lock linked action)
  • New tokens: Force, charge
  • Force tokens which power force abilities for some pilots; they may also be used to change one Focus result
  • Charge/surge tokens which power some pilot abilities and ordnance
  • Token shape now indicates when removed: "End of Round" tokens are round; square tokens have other triggers to remove (e.g. ion, stress) 
  • Evade tokens to not add evade results; they just change green dice to evades.
  • No costs on pilot cards or upgrades; these are in the squad builder app. Baseline is now 200 points.
  • Each ship base has a bullseye arc and quadrants marked
  • Turrets adopt mobile arc mechanics
  • Turrets also get ranged bonuses and penalties, Ordnance does not.
  • New upgrade cards are full sized, landscape
  • New upgrade slots: Force Abilities ("Instinctive Aim"), Configuration ("S-foils")
  • Resistance and First Order will now be separate factions
  • Firespray-31 is no longer Imperial; Scum only
  • New pilots
  • No upgrade bar; either use ship build cards from the core set or the squad builder app
  • Pilot skill is now called Initiative and goes from 1 to 6 [Wedge Antilles: 6]; no Veteran's Instincts or ability to change
  • Damage deck - new. Repairing damage is now a thing. New cards ("Fuel Leak", "Panicked Pilot", "Wounded Pilot"); only 5 Direct Hits in the deck now.
  • Regen exists, but is powered by charge tokens and nets a weapons disabled (R2 astromech)
  • Decimator gets Reinforce and a red Coordinate
  • Some ships have built-in abilities: Phantom (Stygium); TIE Advanced (Advanced Targeting Computer)
  • Ordnance appears not to spend target locks (e.g. Proton torps); 
  • Ion tokens: 1 for small ship, 2 for medium ship, 3 for large ship
  • Bombs can blow up obstacles (and do damage in the process)
  • New abilities will affect the Setup Phase
  • They will introduce new obstacle types
  • Shield levels have been reduced on many ships
  • Barrel roll is not adjustable; they use the hash marks on the bases for alignment.Barrel Roll now only has 3 positions per side (6 total) – makes Barrel Roll more inline with Boost as you only have 6 total positions.If you declare and action and you can't do it (ie Barrel Roll would land you on a rock), you just lose the action now
  • There is a "range 0" for own ship abilities.
  • Target Lock is now just Lock – and you can Lock on to objects as well as ships (friendly and enemy).
  • Certain ships have different attack values for different arcs now.

Took inventory last night.  Looks like I'm going to have to do some massive trading when the game comes out.

Rebels:
3 A-Wing (2 Aces)
4 B-Wing (2 Aces)
4 T-65 X-Wing (Core)
2 Z-Wing
1 HWK-290
1 Y-Wing
1 E-Wing
1 K-Wing
1 YT-1300 (Heroes)
1 YT-1300
1 YT-2400
1 Sabine's TIE Fighter

Imps:
3 TIE Interceptors
2 TIE Advanced
1 TIE Phantom
7 TIE Fighters (Core)
4 TIE Interceptors (Royal Guard)
4 TIE Interceptors (181st)
3 TIE Defender (Veterans)
3 TIE Bomber (Veterans)
1 TIE Advanced (Raider)
1 TIE Advanced Proto
1 TIE Aggressor
1 VT-49 Decimator
1 Lambda Shuttle

Scum:
2 BroBots
1 Slave I
1 H-6 Bomber

Resistance:
4 T-70 X-Wing (Core)
1 T-70 X-Wing (Heroes)

First Order:
7 TIE F/O (Core)
1 TIE Silencer

Proper Analog Retro Video Capture With The Datapath E1/E1s

Capturing analog video can be a difficult task.  Analog video follows rather imprecise standards and is increasingly being discarded in today's world where 100% digital video solutions like HDMI and DisplayPort rule.  Capturing a digital signal is often simply a matter of buying a capture card/box and plugging everything in.  But capturing audio signals, at least those signals that do not conform to the "broadcast standards of 525/625i", is not quite so easy.  But while there exist inexpensive devices that can handle low quality composite and medium quality s-video sources, what about high-end analog sources like component video, 15KHz RGB and 31KHz VGA signals?  Moreover, are any of them compatible with 240p signals put out by retro consoles and home computers?  While there are affordable devices that can sort of handle these signals like the Startech USB3HDCAP, the results are often second rate.  But what if there was a device that you can acquire for similar cost and provide truly first-rate capture?  Interested?  Well if you are, read on to discover the power and the caveats of the Datapath VisionRGB E1 and E1s.

Read more »

Selasa, 17 Maret 2020

The Shiny Trashcan Effect

Greetings from debt purgatory!

We are half way through paying off our construction debt for our expansion project started in 2014. Do you remember 2014? Fantasy Flight Games was still an independent company, Magic was going strong and the big news story was the outbreak of Ebola. Good times. Our Kickstarter did fund successfully that year. We did complete the project, albeit two years late. We did send out all the rewards, and one refund to that jackass who likes to leave me (hidden) blog comments. That saga is a whole other story (it's in the book).

Customers occasionally come in, tell us how they're great supporters of ours, how they buy all their games from us and ... holy hell, you built a second floor!!! Yes, thank you, thank you. Mmm hmmm. I stopped mentioning it was years ago. Snark is not appreciated and we need all the customers we can get. Got debt to pay down.

So how are we doing? It's a bit of a struggle making loan payments and trying to grow during a period of industry transition. There are projects I would like to do. There's a white board in my office with $20,000 worth of stuff. Yet, we just improved the store in our bid to obtain Wizards of the Coast "premium" status, and we somehow came up with the thousands to do that.

Yes, thousands of dollars for a nebulous status. However, this is exactly what I had been asking for. Recognition of hard work and capital spent to improve a venue rather than shoeboxes of cardboard (even though the cardboard is more in line with success with the WOTC model). How could I not pursue this? When motivated, we can make things happen. In the future we shall refer to this as the Shiny Trashcan Effect.





Our sales necessary for growth, the needed engine to pay off our debt, have exceeded expectations. We saw a large jump when the space was complete, but it was a one time thing (about three times bigger than projected). We immediately went back to the grind. It brought home the fact that the space is really important to a small subset of customers (20%). That money spent on doubling inventory would have seen growth over years, but probably slower growth, rather than all at once. There's also the question of whether doing nothing at all would have led to the same growth rate, considering we struggled to focus the business in the Kickstarter and construction year. No, no, this will have longer term benefits, if we can leverage them.


Anyway, we're up 25% this year, due to a number of factors, so I'll continue to fantasize about that white board and work on projects that don't require intensive capital. And maybe we'll hit Premium status with WOTC and see some benefit there.

Senin, 16 Maret 2020

GameFly Experience (Monday Musings 77)

Addendum:
I returned Sekiro and by the next day, GameFly already shipped out a new game! I'm very happy thus far with my GameFly experience.

I decided to take advantage of GameFly's free month trial, and place Sekiro at the top of the list. Given that Sekiro was recently released, and GameFly noting that there's "low availability", I was surprised to see the game shipped out the day after I signed up for the trial! I signed up Monday, shipped Tuesday, and received Friday.

Given the popularity of Sekiro, I thought I had to wait a couple of weeks, at least, to receive the game, so I was pleasantly surprised to see "shipped" when I checked the status the next day. However, I'm not sure how quickly you can receive a game that has just been released that day. Would I have received Sekiro four days after its release date?

Looking through the list of GameFly games, I was impressed that they not only have the triple A titles, but also some niche ones including the Atelier series, that appear to come out yearly. I enjoyed Atelier Sophie, but not to the point where I want to buy future Atelier series at the $60 price point. 

You can keep the game for as long as you want, and once you finish the game, upon receipt, they mail you the next game.

Games in my queue are newly released Days Gone, Dragon Quest XI (as I was considering buying the game), soon to be released A Plague Tale: Innocence, and Red Dead Redemption 2. I'm curious to see for myself if I'd enjoy RDR2, and GameFly gives me the opportunity to do so free, as opposed to having buy the game and not enjoying it. 

As difficult as Sekiro is, even if it takes me 2 months to complete, the rental is nevertheless cheaper than buying the game full price. However, it does appear to be a game I'd like to buy on sale, once the Bundled edition comes out (From software always releases DLCs), so I can return Sekiro and hopefully get Days Gone (also "low availability").

Indeed, a strat that you can use, is to write down a list of all the game titles you're considering purchasing, sample these games, spending a few hours to see if this game is up your alley, and then return quickly to receive the next game. If a game appears to be a must own, then you can buy it without buyer's remorse. 

If you're a slow gamer like me and you like to take months on a game, then GameFly may not be a good option, since it costs $15.95/month for one game out at a time, or $22.95/month for two games out at a time.

So far, I've had positive experience with GameFly, albeit it's only been 1 week's experience. If you have a GameFly membership, please feel free to describe your experiences with them.

The How Of Happiness Review

Jumat, 06 Maret 2020

Super Mario 64 (N64)

Hey, welcome back, it's Super Adventures 9th birthday etc. But never mind that, I've got TERRIBLE NEWS for you. Some quirk of Blogger has retroactively screwed up all my damn 256 colour images, removing shades and leaving them more dithered than they should be.


It only ruined little bits of them, only a few of the colours, but ideally you want your screenshots to be 0% ruined.

So I've got GOOD NEWS for you: mecha-neko wrote a thing and I did a thing and over Christmas we replaced something like 14,000 images over 1000 posts. So now the site is entirely fixed... or mostly broken, or somewhere in between. Why not click a few old posts and find out! I mean after reading this one.

Super Mario 64 Title screen logo pal europe
Developer:Nintendo|Release Date:1997 (1996 in Japan + US)|Systems:N64, DS, iQue Player

This week on Super Adventures, it's Super Mario 64!

It's a game that needs no introduction, so instead I'll start off by talking about how much I hate 3D platformers. Actually I don't hate them, as long as they keep their distance and don't bother me, but they've never been my genre. I like 2D platformers, I like games where you wander around in 3D, but somehow when you combine the two I lose interest. Maybe it's because I don't like slipping off narrow platforms and misjudging depth.

Actually I will give the game a bit of an introduction, because I like trivia. Super Mario 64 was designed by pioneering Nintendo game genius Shigeru Miyamoto, who's been making Marios since the first Donkey Kong arcade cabinet. He'd already set the template for the 2D platformer genre with Super Mario Bros. so they were hoping he could pull off the same trick in 3D. And he did... though he took a few months longer than planned. Unfortunately Mario 64 was meant to be the big launch title that got people buying the Nintendo 64, so they had to delay the console for months as well. They probably made the right choice though, as the PlayStation and Saturn were well established even before the delay and the N64 needed to show off some actual magic to lure people over to a cartridge-based machine without videos, voices or CD music.

Personally I love the N64 and I've got a lot of nostalgia for it, but Mario 64 not so much. I've maybe played the game twice and the furthest I've gotten is the stone slab boss that falls on you. But some people seem to like it, and it's "acclaimed as one of the greatest video games of all time", so I'm going to give it another few hours to win me over.

Read on »

The Shiny Trashcan Effect

Greetings from debt purgatory!

We are half way through paying off our construction debt for our expansion project started in 2014. Do you remember 2014? Fantasy Flight Games was still an independent company, Magic was going strong and the big news story was the outbreak of Ebola. Good times. Our Kickstarter did fund successfully that year. We did complete the project, albeit two years late. We did send out all the rewards, and one refund to that jackass who likes to leave me (hidden) blog comments. That saga is a whole other story (it's in the book).

Customers occasionally come in, tell us how they're great supporters of ours, how they buy all their games from us and ... holy hell, you built a second floor!!! Yes, thank you, thank you. Mmm hmmm. I stopped mentioning it was years ago. Snark is not appreciated and we need all the customers we can get. Got debt to pay down.

So how are we doing? It's a bit of a struggle making loan payments and trying to grow during a period of industry transition. There are projects I would like to do. There's a white board in my office with $20,000 worth of stuff. Yet, we just improved the store in our bid to obtain Wizards of the Coast "premium" status, and we somehow came up with the thousands to do that.

Yes, thousands of dollars for a nebulous status. However, this is exactly what I had been asking for. Recognition of hard work and capital spent to improve a venue rather than shoeboxes of cardboard (even though the cardboard is more in line with success with the WOTC model). How could I not pursue this? When motivated, we can make things happen. In the future we shall refer to this as the Shiny Trashcan Effect.





Our sales necessary for growth, the needed engine to pay off our debt, have exceeded expectations. We saw a large jump when the space was complete, but it was a one time thing (about three times bigger than projected). We immediately went back to the grind. It brought home the fact that the space is really important to a small subset of customers (20%). That money spent on doubling inventory would have seen growth over years, but probably slower growth, rather than all at once. There's also the question of whether doing nothing at all would have led to the same growth rate, considering we struggled to focus the business in the Kickstarter and construction year. No, no, this will have longer term benefits, if we can leverage them.


Anyway, we're up 25% this year, due to a number of factors, so I'll continue to fantasize about that white board and work on projects that don't require intensive capital. And maybe we'll hit Premium status with WOTC and see some benefit there.

Verb-noun Vs Noun-Verb

I went to the Roguelike Celebration over the weekend and enjoyed Thomas Biskup's talk about Ultimate ADOM. Among the many interface improvements they're making based on user testing is they're simplifying the controls from the traditional roguelike controls to W A S D + E F. I don't know how roguelike game players will respond to that but I'm a fan! This reminded me of two things from my past, so I thought I'd say a little about those.

Sometime in my teens I got to meet Lord British (Richard Garriott) and Iolo the Bard (David Watson). My mom was shopping, and I went to the computer aisle to browse the games I couldn't afford. Richard and Iolo were talking about Ultima 6. Nobody else was there, so I got to talk to them for half an hour! I learned about OOP, UI, testing, systems thinking, and more. Really cool!

They told me about how they coded puzzles to look for the state of the world (nouns) instead of the player actions (verbs). For example, there was a puzzle where they expected players to cast Telekinesis (ᚩᚣᛕ ORT POR YLEM) on a lever on the other side of a chasm. Instead, during playtesting, they saw that one player killed a party member, tossed the body over the chasm, cast Resurrect (ᛁᛗᚳ IN MANI CORP), then have the party member pull the lever.

Wow! That wasn't something I had ever thought of in the simple games I had written at that age.

Another thing they told me about was the simpler control scheme. Previous Ultimas had a control scheme similar to what roguelike games have. W to wear armor, I to ignite a torch, K to klimb a ladder, D to descend a ladder, B to board a ship, etc. You specify the verb such as J to jimmy a lock and then after that you can choose a noun such as the lock to jimmy.

In Ultima 6 they reversed the order so that the noun came first and then the verb. This meant the game could tell whether you were trying to J jimmy a lock or B board a ship or K klimb a ladder because the game knew that it was a lock or a ship or a ladder. And that meant they didn't need separate keys for these verbs, but instead one key, U use object. There are times when they had multiple verbs for a noun but for the most part they could get away with just one.

I haven't closely followed Ultimate ADOM but I'm guessing they're doing something similar.

The noun-verb thing comes up in another context. After I stopped making games for a living I went into programming language research. My main topic was studying how functional programming languages and object-oriented programming languages can be combined. Something I noticed at the time was that the syntax for functional languages tends to be verb then noun: f(x), whereas the syntax for object oriented languages tends to be noun then verb: x.f(). At some level these can be considered equivalent. You can express with one what you can express with the other. There's a big difference in usability though: auto-complete.

What happens when we auto-complete f(x)? First we need to know all possible f that are valid in this context. Since the programmer has just started typing in the expression, any function is valid, and that means there's a very long list to choose from. It takes many keystrokes to pick one. Second we need to know all possible x that are valid in this context. These are usually local names, so there aren't that many. Knowing the type of f narrows down the list but the list was already small, so there's not much to gain.

What happens when we auto-complete x.f()? First we need to know all possible x. The programmer has just started typing, so any local name is valid, but there aren't many. Typing just one character can narrow down the list to one or two elements. Second we need to know all possible f that are valid in this context. These are methods defined on the type of x, so there aren't that many compared to all possible functions. Knowing the type of x narrows down the list substantially, so there's a lot gained.

The two syntaxes seem equivalent in theory but they aren't in practice. I wonder if people who use regular text editors end up believing the two syntaxes are equivalent, whereas people who use IDEs prefer the object-oriented syntax, even if they're not taking advantage of object-oriented programming (inheritance, subtyping, etc.).

This asymmetry is orthogonal to whether you're using functional or object-oriented programming. It is better for programmers if they can choose from two medium length lists than to have to choose from a very long list (where a lot has to be typed before it's useful) and then a very short list (where not much is gained). You see this in other contexts too. Command line interfaces like DOS, VMS, and Unix shell typically specify a verb first and then the noun(s). GUIs such as Mac and Windows typically specify a noun first by clicking an icon, and then the verb by choosing from the right click menu. In text editors, vim's commands like d0 are verb then text selection (noun), whereas in more conventional text editors (including Emacs) you'd first select some text (the noun) and then invoke a verb like delete. Kakoune is a modal editor that uses noun-verb instead of verb-noun.

In games it seems like it'd be better for players to first choose an object from the environment and then choose from a small set of actions, than to first choose from a large set of actions and then choose from a set of objects. However I haven't surveyed enough games to see what's more common. The next time you're playing a game, look at the structure of commands to see if it's verb-noun or noun-verb.

Kamis, 05 Maret 2020

Tech Book Face Off: Python For Data Analysis Vs. Python Data Science Handbook

I'm starting to dabble in machine learning. (You know it's all the rage now.) As with anything new, I find it most effective to pick out a couple of books on the subject and start learning the landscape and the details straight away. Online resources are good for an introduction, or to find answers to specific questions on how to get a particular task done, but they don't hold a candle to the depth and focus that you can find from reading about a subject in a well-written book. Since I'd already had some general exposure to machine learning in college, I wanted to work through a couple of books that focused on how to do data analysis and machine learning in a practical sense with a real language and modern tools. Python with Pandas and Scikit-Learn has a huge community and plenty of active development right now, so that's the route I went with for this pair of books. I selected Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython by Wes McKinney to get the details of using the Pandas data analysis package from the author of the package himself. Then I chose Python Data Science Handbook: Essential Tools for Working with Data by Jake VanderPlas to get more coverage of Pandas from another perspective and expand into some of the Scikit-Learn tools available for machine learning. Let's see how these two books stack up for learning to make sense of large amounts of data.

Python for Data Analysis front coverVS.Python Data Science Handbook front cover

Python for Data Analysis

This book covers all of the fundamentals of doing data analysis with Python using IPython, Jupyter Notebooks, Matplotlib graphing, and the main data analysis packages: NumPy and Pandas. It stops short of going into the other major data analysis and machine learning library, Scikit-Learn, because it had already filled over 500 pages with the intricate details of NumPy and Pandas. Wes McKinney is the original author of the Pandas library, so we're getting all of those details straight from the source.

The book starts out with the perfunctory chapters on installing Python and other packages, how to use IPython and Jupyter Notebooks, and running through the basic Python language features. It's filler chapters like these in nearly every programming book out there that makes me think that I no longer need to read introductory books on new languages. I can just go directly into books on applications of any given language, confident that they'll introduce me to the syntax and features I need to know anyway. It's not wrong, exactly, but the result is an awful lot of books with the same extra introductory material filling up pages that will mostly go unread.

Then there's a big chapter on using NumPy before moving on to Pandas for the rest of the book, with a chapter on the Matplotlib graphing library thrown in somewhere in the middle. The main focus is on Pandas, which is a huge library with tons of invaluable features for messing around with data. The book covers everything from reading and writing data, data cleaning, combining and merging data in various ways, doing complex calculations on the data with aggregation and groupby operations, and working with time series and categorical data.

The number and types of operations you can do on a data set with Pandas is pretty incredible, and that makes Pandas an excellent library to learn to use well. As McKinney says in the book,
During the course of doing data analysis and modeling, a significant amount of time is spent on data preparation: loading, cleaning, transforming, and rearranging. Such tasks are often reported to take up 80% or more of an analyst's time.
With all of that time spent on low-level data tasks, Pandas makes the life of a data scientist so much easier and more enjoyable. Data can be cleaned and transformed much more easily and reliably, and you can get down to making inferences about the data quickly.

Beyond covering all of the ins and outs of Pandas, McKinney sprinkles in a few good tips on other tools that can speed up your data analysis tasks. For instance,
If you work with large quantities of data locally, I would encourage you to explore PyTables and h5py to see how they can suit your needs. Since many data analysis problems are I/O-bound (rather than CPU-bound), using a tool like HDF5 can massively accelerate your applications.

Other than these scattered tips, the book is actually fairly dry and uninspiring. It reads a lot like the (excellent) online documentation for Pandas, but doesn't add too much more than that. Even most of the examples for different features are just drab randomly generated numbers with boring labels. You could just as easily read the online docs and get all of the same material. It may be a little nicer to have it all in book form so that you can sit down and focus on it, but that's a slight advantage. I was hoping for something more, that secret sauce that you sometimes find in books on software libraries, to make the book a greater value than just reading the online docs.

The book does have a chapter at the end that goes through some extended examples of data wrangling with publicly available data sets, which is a nice way of bringing everything together, but it's a small part of a large book. All in all, it's a no-nonsense, comprehensive exploration of the Pandas library, but not too much more than that. I wouldn't recommend it because there are better options out there that add something more than the online documentation can give you, like the next book.

Python Data Science Handbook


The Python Data Science Handbook covers most of what Python for Data Analysis does with somewhat less depth, but then goes much further into using Scikit-Learn to analyze data sets with machine learning techniques. The book is split into five large chapters, only the first of which delves into introductory minutiae by introducing the IPython interpreter. Thankfully, the book assumes you know Python already and doesn't bore the reader with another summary of lists, dicts, and comprehensions.

The next few chapters cover the use of NumPy, Pandas, and Matplotlib, and while the Pandas material is somewhat reduced from Python for Data Analysis, the Matplotlib material actually gets into the cartography drawing capabilities of this library. So, there are trade-offs in the number of topics covered in this book, as I would say the author gives more breadth while sacrificing some depth. The last chapter explores a good amount of Scikit-Learn with explanations and discussions of ten different machine learning models. This chapter added significantly to the book, grounding the features explored in the previous chapters with machine learning applications on real data sets of hand-written digits, bicycle traffic, and facial recognition. Seeing how different models performed better or worse in different applications was fascinating and enlightening.

The writing style of Jake VanderPlas was much more engaging as well. While reading the book, I felt like I was being guided by a mentor who wanted to make sure I understood the reasons behind different decisions, and why things should be done a certain way. While Python for Data Analysis focused on the "what" and "how" of programming with Pandas, the Python Data Science Handbook really addressed the "why" of data science programming, from explaining some of the reasons behind little decisions:
One guiding principle of Python code is that "explicit is better than implicit." The explicit nature of loc and iloc make them very useful in maintaining clean and readable code; especially in the case of integer indexes, I recommend using these both to make code easier to read and understand, and to prevent subtle bugs due to the mixed indexing/slicing convention.
To carefully describing the big issues with training machine learning models:

The general behavior we would expect from a learning curve is this: A model of a given complexity will overfit a small dataset: this means the training score will be relatively high, while the validation score will be relatively low. A model of a given complexity will underfit a large dataset: this means that the training score will decrease, but the validation score will increase. A model will never, except by chance, give a better score to the validation set than the training set: this means the curves should keep getting closer together but never cross.
This conversationally instructive style was quite comfortable, and made the whole book an enjoyable read, even though the material was understandably complicated with a lot of different features and concerns to think about. VanderPlas helped it all go down easily. It was a lot to take in, but it was never overwhelming. He also had plenty of words of encouragement, knowing that when real problems with data arise, it could get discouraging:
Real-world datasets are noisy and heterogeneous, may have missing features, and may include data in a form that is difficult to map to a clean [n_samples, n_features] matrix. Before applying any of the methods discussed here, you must first extract these features from your data; there is no formula for how to do this that applies across all domains, and thus this is where you as a data scientist must exercise your own intuition and expertise.
It's easy to tell that I much preferred this book over Python for Data Analysis, and I would recommend anyone looking into data science and machine learning take a look at the Python Data Science Handbook. It's a great overview of the subject, and you'll be able to get up and running with Python quickly, experimenting with some real applications of machine learning, and learning some of the critical issues of feature engineering and model validation.

Only the Beginning


These two books, Python for Data Analysis and Python Data Science Handbook, clearly only scratch the surface of machine learning. They teach you how to use the main Python libraries for data analysis and machine learning, but they don't go much further than that. There's a ton more stuff to learn about how to do machine learning well and what goes on under the hood in all of these various models. I've got my eye on more machine learning books like Python Machine Learning by Sebastian Raschka, Hands-On Machine Learning with Scikit-Learn and TensorFlow by Aurélien Géron, and The Elements of Statistical Learning by Trevor Hastie, et al, among many others. There's a vast amount of literature out there now on machine learning, covering everything from practical applications to the theoretical underpinnings of the models. Suffice it to say, this is only the beginning of the exploration.