Using IDisposable on WCF Proxies (or any ICommunicationObject implementation)

by casperOne 5. December 2009 15:27

When you add a service reference in Visual Studio (or use the ServiceModel Metadata Utility Tool (Svcutil.exe)) it generates a proxy for you which derives from the ClientBase<TChannel> class.  This class implements the IDisposable interface, the implementation of which is basically a call to the Close method on the ICommunicationObject implementation.

The problem is that when calling Close if an exception is thrown because of a problem with the channel (in the form of a CommunicationException) or because of a timeout (in the form of a TimeoutException), or any other exception, the ClientBase<TChannel> isn’t properly disposed of.

Because of this, Microsoft has a recommended pattern for the closing of implementations of ICommunicationObject:

try
{
    ...
    client.Close();
}
catch (CommunicationException e)
{
    ...
    client.Abort();
}
catch (TimeoutException e)
{
    ...
    client.Abort();
}
catch (Exception e)
{
    ...
    client.Abort();
    throw;
}

(taken from the section of the MSDN documentation titled “Avoiding Problems with the Using Statement”, located at http://msdn.microsoft.com/en-us/library/aa355056.aspx)

Obviously, this prevents one from using the using statement to easily manage their proxy instance and can get pretty tedious if you are using proxies in multiple areas of your code.  It would be ideal to encapsulate this to some degree.

To that end, I present the CommunicationObjectExtensions class:

//////////////////////////////////////////////////
///
/// Licensed under Creative Commons Attribution 3.0 
/// United States License:
/// 
/// http://creativecommons.org/licenses/by/3.0/us/
/// 
/// This specified that you must attribute the work in the 
/// manner specified by the author or licensor
/// (but not in any way that suggests that they endorse you
/// or your use of the work).
/// 
/// To that end, a simple acknowledgement of my
/// (Nicholas Paldino) creation of the original
/// work will suffice.
/// 
//////////////////////////////////////////////////

// The shorthand for types in namespaces that are used in this file.
using System;
using System.Diagnostics;
using System.ServiceModel;

// The namespace that types in this file are a part of.
namespace Casper.ServiceModel.Extensions
{
    //////////////////////////////////////////////////
    ///
    /// <author>Nicholas Paldino</author>
    /// <created>12/5/2009 2:21:11 PM</created>
    /// <summary>Provides extension methods for <see cref="ICommunicationObject"/>
    /// implementations.</summary>
    ///
    //////////////////////////////////////////////////
    public static class CommunicationObjectExtensions
    {
        //////////////////////////////////////////////////
        ///
        /// <author>Nicholas Paldino</author>
        /// <created>12/5/2009 2:21:11 PM</created>
        /// <summary>A structure which will take a <see cref="ICommunicationObject"/>
        /// instance and return an <see cref="IDisposable"/> implementation
        /// which will implement the close/abort pattern outlined here:
        /// http://msdn.microsoft.com/en-us/library/aa355056.aspx.</summary>
        /// <remarks>This structure enables the use of WCF clients (or any
        /// <see cref="ICommunicationObject"/> implementation really)
        /// in using statements.</remarks>
        ///
        //////////////////////////////////////////////////
        private struct DisposableCommunicationObjectToken : IDisposable
        {
            /// <summary>The <see cref="ICommunicationObject"/> that is to be closed/aborted
            /// of in the call to <see cref="Dispose"/>.</summary>
            private readonly ICommunicationObject client;

            //////////////////////////////////////////////////
            ///
            /// <author>Nicholas Paldino</author>
            /// <created>12/5/2009 2:21:11 PM</created>
            /// <summary>Creates an instance of the 
            /// <see cref="DisposableCommunicationObjectToken"/>.</summary>
            /// <param name="obj">The <see cref="ICommunicationObject"/>
            /// to apply the pattern to.</param>
            ///
            //////////////////////////////////////////////////
            internal DisposableCommunicationObjectToken(ICommunicationObject obj)
            {
                // The obj is not null.
                Debug.Assert(obj != null);

                // Store the obj.
                this.client = obj;
            }

            //////////////////////////////////////////////////
            ///
            /// <author>Nicholas Paldino</author>
            /// <created>12/5/2009 2:21:11 PM</created>
            /// <summary>Called when the instance is disposed.</summary>
            ///
            //////////////////////////////////////////////////
            public void Dispose()
            {
                // If the obj is null, throw an exception.
                if (client == null)
                {
                    // Throw the exception.
                    throw new InvalidOperationException(
                        "The DisposableCommunicationObjectToken structure " +
                        "was created with the default constructor.");
                }

                // Try to close.
                try
                {
                    // Close.
                    client.Close();
                }
                catch (CommunicationException)
                {
                    // Abort if there is a communication exception.
                    client.Abort();
                }
                catch (TimeoutException)
                {
                    // Abort if there is a timeout exception.
                    client.Abort();
                }
                catch (Exception)
                {
                    // Abort in the face of any other exception.
                    client.Abort();

                    // Rethrow.
                    throw;
                }
            }
        }

        //////////////////////////////////////////////////
        ///
        /// <author>Nicholas Paldino</author>
        /// <created>12/5/2009 2:21:11 PM</created>
        /// <summary>Takes an <see cref="ICommunicationObject"/>
        /// implementation and returns an <see cref="IDisposable"/>
        /// implementation which can be used in a using statement, while
        /// executing the proper cleanup procedure outlined here:
        /// http://msdn.microsoft.com/en-us/library/aa355056.aspx.</summary>
        /// <param name="obj">The <see cref="ICommunicationObject"/>
        /// implementation.</param>
        /// <returns>An <see cref="IDisposable"/> implementation which will
        /// close the <see cref="ICommunicationObject"/> implementation
        /// in <paramref name="obj"/> properly.</returns>
        ///
        //////////////////////////////////////////////////
        //
        // TODO: Add parameters here and on DisposableCommunicationObjectToken
        // TODO: of type Predicate<CommunicationException> and
        // TODO: Preidcate<TimeoutException> which will allow for
        // TODO: injected code which will allow for cleanup that the user specifies.
        // TODO: The return value from the predicate would determine if the exception
        // TODO: is rethrown.
        public static IDisposable AsDisposable(this ICommunicationObject obj)
        {
            // Return a new instance of the DisposableCommunicationObjectToken.
            return new DisposableCommunicationObjectToken(obj);
        }
    }
}
Given an implementation of ICommunicationObject (or anything that implements it), you can use it in a using statement like so:
// Note that you don't have
// to declare the client
// parameter as ICommunicationObject
ICommunicationObject client = <new client code>;

using (client.AsDisposable())
{
    // Your code here.
}

Note that there are suggestions on how to improve the functionality, but the boilerplate code is there to be expanded upon.

This code is licensed under the Creative Commons Attribution 3.0 United States License.

Tags: , , , , ,

programming

Dear 2009 MLB Playoff Contenders

by casperOne 7. October 2009 02:18

Tags: ,

personal

SF4 Notebook – Evo 2009 Edition

by casperOne 27. July 2009 03:37

So the Evo 2009 Championship Series has come and gone and all that I or anyone can say is “WOW”.  Being my first Evo, I didn’t know what to expect.  Little did I know it would provide an experience greater than anything I could have imagined.

Everything there was simply intense from competing in the tournament, to watching the matches, even those in games that were not Street Fighter IV (HD Remix, for example).

If the tournament and the matches were the all that one experienced at Evo it would be a complete experience, but that’s not where it ended for me.  The social aspect of Evo is what really made the experience a special one for me.  There were so many new relationships formed, as well as the rekindling of already established ones.

Mix all of that in the boiling cauldron that was Las Vegas that weekend (it was 110° when I arrived at the airport) and you have a once-in-a-lifetime experience.  Except that this experience is one that can reoccur every year.

Street Fighter IV Tournament

Of course I couldn’t write a blog detailing Street Fighter IV knowledge and not compete at Evo.  To prepare myself, I’ve been going to smaller tournaments in the NYC area to get myself comfortable with competing in tournaments.

I need this because I get really bad tournament jitters.  Fortunately, while playing in the tournament at Evo (even though I was in what I like to call the “black bracket of death” or “pool of death”) I was quite comfortable.  I’m grateful for this because now I hope to feel more comfortable with tournaments I go to in the future.

I also struggled to set reasonable expectations before the tournament.  If one hasn’t been to an Evo before, what possible frame of reference do they have when it comes to setting expectations?  As a result, I decided to play it safe and be ok with the idea of going two-and-out (0-2).  If I set my expectations any higher, I ran the risk of ruining the rest of my weekend because I failed to meet my expectations.

In retrospect, I could have had a better way of thinking.  What I really should have done is to put everything I can into every match and let the rest work itself out.

Fortunately, I was relatively calm (much more than I was in previous tournaments) and at any time able to focus only on the next match. And as a result, ended up going 3-2 in pool four, the results of which are posted here:

http://www.evo2k.com/live/brackets/sf4/pool_4/

Once all of that tournament nonsense was done, I was able to focus on the social aspect which of course results in the shout-outs:

Shouts

Kineda – Little did I know that ordering a shirt from you for Evo would result in not only a ton of recognition for me, but the start of a great friendship.

I couldn’t begin to describe the amount of attention that the shirt brought me.  People from my non-Street Fighter life even took notice of it, as well as a number of people that follow me on Twitter.  Hopefully, I pimped it enough to make up for the amount of attention I got because of it!

Beyond that, from the initial meet-and-greet we put together the night before the tournament to the casuals that we had after we were eliminated from the tournament, to you using my crappy-ass laptop late into the evening the night before my flight and everything in between, thank you, I’m definitely looking forward to hanging out again.

Damdai - You are part of the reason that my voice is so hoarse, cheering for you in the HDR finals against Alex Valle, you also achieved your goal of getting out of qualifiers for Street Fighter IV. You play a big part in fueling my passion for Street Fighter IV today, I never thought that it would be what it is today when we were playing Street Fighter II in Vinny’s almost two decades ago.  I'm very proud of you, and am thankful that we’ve reconnected after all this time.

Grancalc – I’m very glad that gootecks introduced us back in April and that we reconnected at Evo.  I'm also incredibly impressed in your run in the Street Fighter IV tournament, which put you on the main stage twice!  It was great to chill with you again, and I’m glad it turns out we have some mutual interests which we can work together on.

Seb – I hadn’t heard from you in a while, and I was quite surprised to see you at Evo (even though I shouldn’t have been).  I’m hoping that some of the connections that you made at Evo help further your projects, and I’m hoping we can help each other in the very near future.

Gootecks – As always, good to see you again.

Andre – VEGAS BABY!!!!  Seriously, if Las Vegas was the candy store, you were the kid in it.  It was great to see you experience Vegas for the first time, but beyond that, you put on an amazing show against Mike Watson with your Bison to finally prove what everyone else but the East Coast just didn’t know; that you are the best Dictator in the country.  I’m looking forward to further adventures in NYC.

Nana and Riley - it's good to see Riley become a new convert after watching the weekends events. You two were incredibly fun to hang out with, and gave me a new perspective of what happens after one more drink.

Sweet Johnny Cage – Meeting you, Mary, and Carlos was a lot of fun, and I gained some valuable information for my future endeavors which I have you to thank for.

Joe “iloveyou” Ciaramelli - “George Washington is a$$ compared to Bruce Lee”.  One of the funniest things I heard during Evo.  Thank you for the discussion about Sagat, as well as showing me the value of the fake kick while you were playing on the main stage (it’s something I haven’t integrated into my game yet).

David Spooky – Glad to have met you at dinner, as well as play some casuals with you as well.  Don’t let what I was pointing out to you during casuals get you down, it is meant to help you level up your game.

Citiofbrass - While I appreciate those that are passionate about the game, you have an additional passion which I share when it comes to the Street Fighter IV community.  I definitely look forward to talking more about community concepts back in NYC.

Marcus – I can’t believe it took you two hours before you mentioned that you developed the Cthulhu dual-mod board!

LecanardZero - Thank you for showing me just how hungry the Northwest is, and we will definitely reconnect when I'm up in Seattle next.

Dogface – Even though there were a few times that I ran into which were inopportune you had a smile on your face each and every time.  It's great to see someone so genuinely nice, happy, and passionate about this community.  I just wish I signed up for your X-Men vs. Street Fighter tournament.

Tatsujinken - You sent me to losers with one of the most knowledgeable, technical, proficient Claw play I've ever seen, an observation justified by the fact that you made it out of our pool as a winner. On top of that, you let me know that it wasn't free mode an then you were gracious enough to talk to me about the matchup later which basically leveled up my game against Claw. I look forward to some more conversations about the game in the future.

koome- You were my first match in the tournament, as well as my fourth match.  Even though I won both of them, you came at me hard in both matches, and I can say with confidence that they were the hardest matches in the bracket (especially the second one, you were hungry to get back at me, and really kept me on my game).  Thank you for the great competition.

ll.nd- Thanks for giving me the crash course in Tatsunoko vs. Capcom, I definitely put it to good use when I was playing at San Diego Comic Con.

John Choi - You were really cool when I introduced myself to you and I remembered what you told me when I said I expected to go 0-2, you said I’d do just fine; you know what, I did.  Thank you.

Seth Killian - Meeting you was great and the enthusiasm you expressed behind my idea for the community was encouraging, I appreciate the support and re-presenting my idea in the very near future.

This is just a short list of the people that I met.  There were so many more, more than I could possibly mention.  To all of those that I have and have not mentioned, thank you to contributing to what is to me an amazing experience.

Tags: , , ,

sf4 notebook

Evo 2009

by casperOne 15. July 2009 21:27

What else needs to be said?

(Actually, watch the live stream here: http://evo2k.com/live)

Good luck to everyone competing this weekend!

Tags: , , ,

sf4

SF4 Notebook – 6/27/2009

by casperOne 27. June 2009 16:39

Evolution Fighting Tournament 2009

Well, I’m officially registered for the Evolution 2009 Championship Series in Street Fighter 4.  My greatest hope? To not peace out.  I’ll definitely be taking pictures, tweeting and hopefully doing a little blogging during the event, so keep an eye out here, as well as my Twitter feed:

http://twitter.com/casperOne

I’ve also been fortunate to reconnect with someone from my past, Damdai.  It’s funny, because we first started playing Street Fighter II together as children, and now he’s come very far in the game (particularly in ST and HDR, and definitely making his way in IV).  It’s been especially great to reconnect with him because of our shared past and our current shared interests.

And of course, it doesn’t hurt to have a known player to spar with to help with leveling up.

Pianoing vs. Double-Tapping

A number of people that are coming from other Street Fighter games are used to the concept of pianoing (i.e. hitting multiple buttons in rapid succession in order to have a greater chance of registering the input of that button type).  However, in SF4, it’s not the best of ideas.  Because SF4 has such a large input window (the amount of time that the game will wait before registering your input), it will actually execute EX moves most of the time when you try to execute them.

Instead, use double-tapping, as Gootecks shows in this X-Play video on G4 TV (it's the second tip in the movie):

Online Play and Autofire

Well, I’ve always had my suspicions about online play, about the nature of disconnects as well as whether or not people were using macros or enhancements.  It’s refreshing, and scary to know at the same time that I was right.  There are videos, but unfortunately, they were taken down (I can’t imagine why, there are tons of other SF4 videos on YouTube).  But to give you an idea, here is the playlist:

http://www.youtube.com/view_play_list?p=4FD00C99444D2FC1

Alex Valle

Alex Valle is on Twitter:

http://twitter.com/AlexValleSF4

And he’s dropping tips for SF4:

From http://twitter.com/AlexValleSF4/statuses/2150147172:

Another SF4 thought, while waiting in line for a comedy show, Ryu can HP Super sim's jump back HP (on hit)

And http://twitter.com/AlexValleSF4/statuses/2148062834:

Being good at Street Fighter 4 requires you to think of strats in the middle of a boring work meeting. Throw/Hit confirm vs Rog EX rushes

Remember, when approaching the next level of anything, it becomes a game of diminishing returns.  However, that slight advantage can mean all the difference in what you do.

General

During my matches with Damdai, some obvious deficiencies in my game were pointed out.

First, I need to learn to incorporate FADC into my game.  I’m not taking advantage of the opportunity to land more damage (especially with Sagat’s F+HK) when landing a first initial move (this goes hand-in-hand with the bread-n-butter combo mentioned later).  This is applicable to all players, all characters.

After my stint at Evo, I’m going to switch to using a stick so I can do moves like this (and others) much more consistently.

Related to using FADC, I need to use Focus Attacks in general much more.  I’m not utilizing the hit-absorption properties nearly as much.  On top of that, it can be quite a surprise to people, often giving you the opportunity to land a free hit (at a price, of course).  Add to that the fact that it can be used to get in on/away from an opponent and it’s obvious there’s a big piece missing in my game.

Second, on whiffed moves, I’m not resorting to using an Ultra Combo to punish often enough.  It needs to be second nature.

This and the FADC improvements will also require greater monitoring of the meters in general, since FADC requires two EX bars.  It’s not that I don’t watch it now, but my awareness has to increase.

Finally, when cornered (or not) and being crossed-up on, dashing is a technique that helps immensely.  If done right, you can avoid damage completely, and more often than not, trade a hit and disrupt what would be a much longer chain of hits.

Ken

Ken is one of the characters that Damdai plays often, and while I knew that Ken had a kara-throw, I’ve never really seen it executed consistently (although we already know Gief can do it), which didn’t give me much of a chance to learn how to counter it.  However, Damdai brought me up to speed very quickly.

It’s just pretty sick, and you can tell when it’s being done by a kind of “glitch” (notice at 0:05 and 0:10) that occurs when you see the regular move cancelled into a throw:

When doing Sagat’s LK->Tiger Knee, it’s not safe on block against Ken if he does the MP SRK.  It will hit cleanly if Ken uses any other button though.

Boxer

Saki XL tells me that Boxer can be thrown out of his EX Dash Punches (and apparently on further research, he can be thrown out of his Ultra as well).  I’ve yet to try this, but I think I might take a shot at it in practice mode today.

Sagat has a typical loop that after hitting an opponent that jumps in and hitting them with a HK, throwing a Tiger Shot Low for additional chip damage.  However, the timing and spacing is such that if Boxer has enough Revenge Meter built up, he can consistently Ultra as a reverse and Sagat will still be in recovery from the Tiger Shot Low, making it a guaranteed hit.

Just like Chun-Li, the reaction now when Boxer has Ultra is to be VERY careful with throwing out a Tiger Shot.  Again, it should only be done if there is forward movement, negating the charge.

Saki XL gets a special mention for being the first person that I’ve played to consistently use the EX cancel trick with Boxer in a match:

His execution and ability to use it effectively in a match is very consistent.

On top of that, he showed me a nifty little bait tactic that Boxer uses, where on knockdown he will do the TAP or the EX Buffalo Headbutt in order to bait a response, and since he finishes it early, will use a move with invulnerability in the beginning to punish (more often than not, an Ultra or Super combo).

Sagat’s Ultra will beat out Boxer’s Ultra if activated after Boxer activates the Ultra Combo.  Better yet, Sagat and Boxer’s frame data supports it.

When being rushed down by Boxer, blocking the Dash Punches can usually be countered by a Tiger Knee on response.  However, if Boxer follows up with a cr.LP, using Sagat’s cr.MP is usually a good response.

Zangief

Thanks to karaleung for pointing out after reading my blog entry on Zangief’s kara-throw that Gief has a short jump which can be used to cause anti-air attacks to whiff (i.e. Sagat’s HK) which set him up perfectly for a grab/Ultra:

Rose

Rose can slide under Sagat’s Tiger Shot Low with her cr.MK (I think it is the MK).  However, on block of the cr.MK (or any of her slides) one can consistently counter with cr.LP->Tiger Shot Low and get chip damage (whereas she doesn’t deliver chip damage with her slide).

Gen

If Sagat activates his Ultra Combo and then Gen activates his Ultra Combo in response, they will both trade one hit, and both Ultra combos will stop.

Sagat

I’ve been getting the cr.LP->Low Tiger Shot much more consistently (as a response to people applying pressure) and it does wonders for getting pressure off, maximizing damage a little more (you get chip damage).

I’m also using the LK->Low Tiger Shot as well, but not as much.  I find it particularly helpful in footsie matchups (Zangief in particular).

Damdai points out that I really need to get Sagat’s BNB (i.e. bread-n-butter) combo down, the cr.LK->cr.LK->cr.LK->Tiger Uppercut, and he’s right.

However, I believe that I still have great use for the cr.LP as a combo starter.  On a whiff, I definitely believe that using cr.LK is a much more effective tool (since it can lead into the BNB), however, it’s startup is too long in order to use it to keep pressure off.  So now, I use the cr.LP to keep people away (comboing into Tiger Shot Low) and will try to use cr.LK on whiffs.

One interesting thing to point out is that it appears to me that Sagat’s defensive hitbox for the cr.LK is much lower to the ground than the cr.LP, which I’ve found works particularly well in defending against Boxer’s pressure game (Dash punches and the like), since it allows Sagat to get under some of Boxer’s attacks.  It’s still risky because of the lengthier startup than the cr.LP, but there is an ample reward for that risk.

I happened across this match on YouTube between Daigo and Mago, and there are a lot of great takeaways from it for a Sagat player:

  • 0:23 - In a situation where a Tiger Shot can’t be executed quickly enough to counter an incoming projectile, use a FADC (with a backwards dash to cancel, of course) to absorb damage, but only do it in a situation where you can safely recover life.
  • 0:35 – Frame data for Sagat supports a link combo from cr.LK->cr.LK but it doesn’t support cr.LK->cr.MK.  When Mago does cr.LK->cr.LK->cr.MK->Tiger Shot Low, I wonder if he could have been punished on the cr.LK->cr.MK.  If he couldn’t have been punished (if it was a true link), the only explanation I can think of is that the two cr.LK pushed Sagat away/Ryu back far enough so that the second cr.MK was more meaty, and allowed for the extra frames required for the cr.MK.  This is definitely something to research in practice mode.
  • 0:39 – Very nice kara Tiger Uppercut FADC (moving back) to Tiger Shot Low.
  • 3:13 – I don’t see the LK used too much in a combo, but Mago manages to get out a j.HP->LK->Tiger Shot High EX and have it all connect.
  • 3:19 – Daigo (being Daigo of course) when hit out of his Ultra Combo actually capitalizes on the fact that his recovery was erased and did a Hurricane Kick to add an extra hit on top of the hits from the Ultra Combo.

Tags: , , , , , , , , , , ,

sf4 notebook

Love Him or Hate Him

by casperOne 22. June 2009 23:24

Well, I would think that this puts our current President more in the “love” column.  Regardless, one has to appreciate a man who makes fun of his own ears:

Tags: ,

politics

SF4 Notebook – 5/29/2009

by casperOne 29. May 2009 02:11

Championship Mode

It’s been a while, as I’ve been busy with non-SF4-related activities, but I’ve also been consumed with Championship Mode.

I’ve finally achieved G1 ranking and the difference in competition between G1 and G2 is the same as the difference between night and day.  The level of competition is just through the roof, and to be honest, I was getting my ass handed to me consistently in the first few matches, to the point where I thought I’d dip below the 15K GP mark.

I’ve never had so much fun losing in my life.  Everyone knows the matchups and executes very well.  One really has to be on their game to just exist at this level.

That being said, I can’t imagine my game not getting better much quicker at this level.

Some things of note at G1:

  • If you lose the first battle, you LOSE 5 GP.
  • If you go below 15K GP because of losses in the first round, you will still retain your G1 status.
  • Winning in the following rounds gains you at least the following points (can be more since there is a slight variation depending on the difficulty of the matchup):
    • 2nd – 10 GP
    • 3rd – 20 GP
    • 4th – 50 GP
    • 5th loss – 100 GP
    • 5th win – 160 GP

I find it odd that the win for the competition gives you only 60% more GP than a loss.  It seems disproportionate.  I almost wouldn’t mind losing at that level (as opposed to G2, where you only get half for a loss in the finals).

Boxer

A lot of Boxer players are using an outstretched palm (not sure which attack it is) which stuffs a lot of Sagat’s AA options.  Other than altering spacing/timing, I haven’t found a better AA option (with the exception of a Tiger Uppercut up close).

Chun-Li

Some Chun players have taken to throwing a fireball, dashing forward once, and then using cr.HK when the opponent jumps over the fireball.  The cr.HK seems to have very high priority here.  I think that a well-timed MP on the way down (or a LK if actually jumping over her) would help here.

Now, when I see that she has her Revenge meter charged for an Ultra, I completely shut down the projectile game.  Her Ultra can hit Sagat from across the screen on reaction.  The take away from this is when Chun has Ultra, only throw a Tiger Shot when you see forward movement.  The forward movement means that the charge has been lost so a Tiger Shot is safe to throw (but open to her jumping over it or throwing an EX projectile of her own, of course).

Gen

It just doesn’t seem right that his Super Combo sets up the Ultra Combo.

I’m feeling much more comfortable with the matchup now, as there are more Gens online than there were before.  The specific Gen that gave me so much trouble doesn’t seem to be around much, but I’m faring much better against him now.  Specifically, I figured out how to block the wall dive shenanigans.

Specifically, most Gens try to cross up on knockdown, and then if they knock you down again, do the wall dive from the opposite wall to try and get you from behind again.  The best advice here is being able to differentiate between him jumping to cross you up or going to the opposite wall.

What confused me the most till now was that it seemed like I was being juggled with the wall dive after the knockdown.  It seems like a stupid realization, but Gen moves in such odd ways that it’s hard to pick up if you don’t see it often, which, I don’t, since I don’t know many people online who play Gen.

Dictator

A common bait that I see is to charge a Focus Attack just out of range.  It actually pulls Dictator back a little, and then springs forward, so the sequence between Dictator and the opponent is typically:

  1. Dictator charges Focus Attack, animation pulls him back in the process.
  2. Opponent whiffs attack in response to Focus Attack charge.
  3. Dictator’s Focus Attack finishes, landing and penetrating any block.

The key here is to not be baited into attacking when being zoned by Dictator.  In this case, I typically use the sounds of the Focus Attack building to remind me to not attack.

It’s analogous to MLB umpires calling a force play at a base, they will have an eye on the base, and listen for the sound of the ball hitting the mitt of the defensive player.  Whichever event occurs first (the foot on the base or the sound of the ball hitting the mitt) wins.

Dhalsim

If you see Dhalsim flash (which indicates he is telporting), flash the elbow (i.e. LP).  It will come out before any move he has after he appears near you.  It’s much safer than any other option, and with the low amount of health that Dhalsim has (only Seth and Gouki have less), it does enough.

It’s very possible that Sagat’s height plays a factor here, and that shorter characters (think Cammy here) would whiff because the offensive hitboxes are not high enough to hit Dhalsim out of the air when he teleports close.

Abel

I love grabbing him out of the Grab out of the Marseille Roll.  A LOT of Abel players still don’t know this.

Ken

If Ken does his Ultra Combo in reaction to Sagat’s Ultra Combo, Ken’s Ultra Combo will win.

C. Viper

When punishing a whiffed Ultra Combo with Sagat’s Ultra Combo, the response has to be timed so that she is not on the ground when the Ultra Combo Animation occurs.  If so, Sagat’s Ultra Combo could go right over her, as she crouches on one knee when she hits the ground.

Zangief

This beast can actually kara-cancel into a throw?!?!

Granted, he doesn’t have any more range on a throw than most other characters (frame data indicates that it a typical 0.9), but the fact that he is so dangerous up close (and this is a technique to get you in closer) makes anyone who knows it much more dangerous.

Blanka

Blanka’s Ultra Combo was the bane of my existence for so long when it was done close to my character. I would always get caught by it, even when I thought I was blocking.

Then I found out that you have to block down when Blanka is going up and then block up for the rest of the combo.

I consider this discovery to be a personal victory, it was that annoying.

A nice little loop with Blanka is to block a non-EX Rolling Attack, and then throw a Low Tiger Shot followed up with a HK.  More often than not, Blanka will jump foward, and can almost always be countered with a HK from Sagat.  The only thing to be careful of here is if he has EX meter charged, as his response can be to do another Rolling Attack but an EX one this time, which will go through the Tiger Shot.  The HK is quick enough in this situation to do it on reaction, which is key (I’d never recommend a reaction based purely on faith of the follow-up move).

If Blanka takes to jumping straight up after you throw the Low Tiger Shot HK, use the Tiger Shot LK instead, and he will land on it.

Sagat

For a long time, I haven’t used the cr.MK because of the frame advantage it has over the cr.MP and not wanting to be punished when crossing-up on someone with a j.LK.

However, I’ve found it very useful against Ken, Zangief and Boxer, in that when they try to zone you, you can use the cr.MP (at risk of punishment of course) to change the distance between you and them, which typically nullifies the moves they poke you with when you whiff.  I’ve found a good follow-up to the cr.MK is the cr.HP, as Ken, Zangief and Boxer will typically try to react, and the cr.HP has a quicker startup than most of the follow-up moves these characters present.

For a long time now, I always wondered why when blocking Blanka’s Backstep Rolling Attack I could counter with F+HK –> Low Tiger Shot and have it hit, while I couldn’t do the same combo after having a Tiger Uppercut stuffed without doing an EX move.

It turns out that you can basically juggle with two normal moves, and to get the third juggle you must use an EX move, Super Combo, or Ultra Combo.  So the following all work:

  • F+HK –> F+HK –> EX/Super/Ultra
  • Stuffed Tiger Uppercut – > F+HK –> EX/Super/Ultra
  • Tiger Uppercut –> FADC –> F+HK –> EX/Super/Ultra

So the general rule is when juggling, the third hit of the juggle MUST be an EX/Super/Ultra.

Here’s an example of the first item in the list in a Top 8 Match at East Coast Throwdown between Gootecks (Boxer) and Long Island Joe (Sagat):

Another great thing to note is how he uses the LK –> Tiger Knee/Tiger Shot.  It’s a great tick move that I haven’t gotten down yet.  However, there are frames in between that can be punished, but in this case I don't know that Boxer has any response to it. I would NOT suggest using this against anyone that has a move with invulnerable frames on startup and doesn't require charge, as that move can probably be used to counter in between the LK and Tiger Knee/Tiger Shot.

Finally, because of the following Twitter comment by thenk83:

@manny7 rufus have any gap killers? with sagat, a kara tk will launch u across the screen. but i gotta catch'em when missing fireballs. #SF4

I didn’t think anything about it when I first read it, but it definitely stuck in my mind a few days later when I did it by accident.  Until this time, I had thought that the HK was the primary kara-able move, but it turns out that’s not the case.

The primary kara-able move is really F+LK.  All it takes to put it together is seeing it once and knowing that your move travelled a LOT farther than it normally would.  Then a little training in practice mode is all it takes to lock it down.

Here’s a great video showing how it’s done, as well as the differences in appearance and range of the moves when kara-cancelling them.

So what’s the use?  Basically, you would use it to close the gap when the moves in themselves won’t do it.  Here’s a great example of Long Island Joe using it in another Top 8 match at East Coast Throwdown:

Notice how after after Sagat throws Ken (from behind during the recovery of the Hadouken), he kara-cancels the F+LK into the Tiger Knee to position himself in front of Ken to throw him shortly after wakeup.

I’ve noted that you can kara-cancel the F+LK into both the Tiger Knee and the Tiger Uppercut.  From across the screen, it can be deadly.  The great part about kara-cancelling into the Tiger Knee is that if moving forward, you can anchor the beginning of the move in the F+LK which would make for a more fluid execution.  This is especially important against Boxer, where a Tiger Knee is very effective, but sometimes difficult to do on demand.

The other great thing about this is that it can be used as a deke, baiting the opponent into a reaction based on the F+LK, which is then punished by either the Tiger Uppercut or the Tiger Knee.  The sequence goes like this:

  1. Sagat executes F+LK.
  2. Opponent begins to counter.
  3. Sagat executes Tiger Knee or Tiger Uppercut to punish (use Tiger Uppercut if you need invulnerability).

It’s also great when you need to close the distance on someone, particularly Dhalsim or Seth players that like to jump forward with outstretched limbs.  Also, it’s possible when someone jumps forwards to punish them with either, even from a distance, which is nice, because it really helps keep the pressure on.

Some other tricks I’ve done is to punish a fireball, but it’s VERY difficult to do, as you have to cancel with the Tiger Uppercut before the fireball hits you, but close enough to hit the opponent when executing.  A more effective tactic is to Tiger Knee over the projectile from across the screen so you are right in their face.  This is particularly effective against Akuma’s triple fireball if timed correctly, as well as his air fireball, as it allows you to get under them and then propel forward and limit his space (since people play him so defensively).

In the end, it’s a great move that catches a lot of people off guard, typically at the wrong moments.

Tags: , , , , , , , , , , ,

sf4 notebook

SF4 Ragequits – 5/9/2009

by casperOne 9. May 2009 21:08

DB72332 – I should have known better, as he had a 35% disconnect rating.

Tags:

sf4 ragequits

SF4 Ragequits – 4/30/2009

by casperOne 30. April 2009 23:44

Divad7
nguyendai

Tags:

sf4 ragequits

Shiny New Chrome

by casperOne 30. April 2009 08:58

This is the most self-aggrandizing crap I have seen in a long time:

http://www.youtube.com/googlechrome

Basically, Google solicited filmmakers for 11 short clips to highlight their new out-of-beta browser, Google Chrome.

Tags: ,

technology

About the author

I'm just another guy who is trying to harness the power of the internet to feed his ego by projecting myself onto the masses.

Definitely consider this site a work-in-progress until further notice.