November 30, 2005

My first 'real' win!

I won my first $5.00 + $0.50 sit-n-go tonight at Bodog.com. winner takes 50% of pot ($25), 2nd takes 30% and 3rd takes 20%. It was a nice little boost to the bankroll.

At the risk of making this sound like a poker commercial:

I'm snk13 @ bodog.com. Come play with me! :)


cheers
jk

November 22, 2005

Microsoft Office Marketplace: Comodo Free Email Certificate

Comodo is giving away free email certificates to use in signing and encrypting emails.

they are good for roughly a year. i havn't published mine anyplace yet, but probably should to promote PKI :)

jk

November 18, 2005

In the money!!!

I just finished 24th in the 9pm PokerChamps freeroll tourney #4948. 1500 players, $35 prize pool, places 4-28 all get $1.

The turning point was where I had 8 2 unsuited in the big blind with $1500 in chips left, blinds were $2000/$4000. The flop came 8 2 8!!!!!!! I went all in and pulled down a $35,000 pot, which was enough to get me in the money!

$1 will not get me too far in online poker. I might try to play a low stakes ring game to see if i can scrape together $2.20 to play in a 10 person sit-n-go.

All in baby!
jk

November 15, 2005

GotFocus()?

I always have to look for this code, so i'm posting it here so i know where it is :)

from http://www.syncfusion.com/FAQ/WindowsForms/FAQ_c41c.aspx#q1021q

jk

----------------------------------------------------
How do I get hold of the currently focused Control?

The .Net framework libraries do not provide you an API to query for the focused Control. You have to invoke a windows API to do so:

 
[C#]
public class MyForm : Form
{
[DllImport("user32.dll", CharSet=CharSet.Auto, CallingConvention=CallingConvention.Winapi)]
internal static extern IntPtr GetFocus();

private Control GetFocusedControl()
{
Control focusedControl = null;

// To get hold of the focused control:
IntPtr focusedHandle = GetFocus();

// Note that if the focused Control is not a .Net control,
//then this will return null.
if(focusedHandle != IntPtr.Zero)
focusedControl = Control.FromHandle(focusedHandle);

return focusedControl;
}
}

Meet Your Deadlines with These Tips

Mork pointed out to me the other day, #4 and #5 are sometimes hard to do! :)

Read the article here

jk

November 13, 2005

Indigo Beta 1 to WCF Sept CTP changes (from David Pallmann's Blog)

Making the jump from Indigo Beta1 to WCF Sep 05 CTP release

As with any prerelease, there have been changes, so watch out when you're working w/ the code examples from Programming "Indigo"

enjoy!

jk

November 09, 2005

Fun with List <T>

I didn't see a method in the 2.0 dotnet framework to 'AddRange' or adapt an IList into a List, so this was the result...

enjoy :)

jk


public List< T > ConvertListToListT< T >(System.Collections.IList list)
{
List< T > ret = new List< T >();
foreach (T o in list)
{
ret.Add(o);
}
return ret;
}

Programmers are optimists (well, most anyway)

I ran across the 'GodObject' anti-pattern http://perldesignpatterns.com/?GodObject and saw this quote which seemed worth repeating regarding development in general:

Programmers are optimists. We assume that each feature in the specification
for a project can be added in a constant amount of time even as the code grows,
and we add each new feature just like we added the last. In other words, that
programs are completed in linear time. The last half, recursively, takes twice
as long.

This is very easy to lose track of when estimating, espically on a large system. If this post even saves one developer from an unnecessary late night (or nights) then it has done its job :)

jk

November 05, 2005

CTP Madness

I ran across this link tonight and found it useful. (Thanks Channel 9!).

http://channel9.msdn.com/ctpmadness/Default.aspx

It can tell what versions of .net 2.0/Whidbey/WCF/WPF you have installed, which versions are compatible, and which are retired.

For those still looking at WCF and WPF this should still be of use.

It was really helpful for me getting Indigo installed on my VPC!

jk

October 08, 2005

Home page setting changes unexpectedly, or you cannot change your home page setting

How many times has this happened to you :)

I have a reg file and batch file ready for this if anyone wants it....

jk

August 30, 2005

Wolves + Vegas = 200K fine???????

Ok, I hardly think a non-official team trip to Vegas, pulled together by KG qualifies as a team practice. I'll bet Mr. Taylor (Owner) would be quite happy to pay the 200k fine if it helps the team gel and start building some chemistry. I bet KG would pay it himself too!

Now, I wonder if the team won enough money to cover the fine? :)

Here's the link...

jk

August 19, 2005

Nanotechnology

Nanotechnology - I can't add anything intelligent so read the article :)

jk

August 16, 2005

FAQ about PGP messaging

This was an excellent bit of text PGP messaging.


What it is, what it's for, and why you'd use it
“Pretty Good Privacy” (PGP) is a scheme used to encrypt or sign messages. There are other schemes for the same thing, but this one is freely available for various different types of computer systems. It works by using secret and public key pairs, you pass out your public key and keep your secret key, and so does anyone else that you communicate with (they pass out their public keys, and keep their private keys). All the keys, in combination, are used to encrypt messages (your own private keys, and each other's public keys), and all of them are required to decrypt them (you send a message encrypted with your private key and their public key, and they decrypt it with your public key and their private key). This way, no outsider can decrypt the material (because they don't have anybody's private keys).


jk

August 04, 2005

Best wishes for a speedy recovery Ernie!

I had heard that golfer Ernie Els had injured is knee on vacation, but did not hear that it was a ruptured Anterior Cruciate Ligament (ACL) (http://www.ernieels.com/show_story.asp?ontheroad_id=205#current).

From the link above, it sounds like Ernie has already had surgery, and having had the same injury and surgery, my heart (and busted ACL) goes out to Ernie on this. Rupturing your ACL is a nasty, nasty thing. I wish Ernie the best of luck and a speedy recovery. Chills go up my spine (not in a good way mind you!) even thinking about rupturing an ACL.

Go get 'em Big Easy!

cheers
jk

August 02, 2005

Dating Design Patterns

Wow, I really can't add much to this; the "Trojan Proxy" says it all.

Dating Design Patterns

cheers

jk

July 25, 2005

Congrats to Lefty and Goosen

Congrats to the boys for their performance at The Battle of the Bridges tonight. It was fun to watch!

Speaking of Phil, I just saw this link on espn's site. It's an article talking about how to hit a shot backwards...most of us just worry about hitting it forwards.... :)

Fore!

jk

July 19, 2005

New toy

Callaway Golf Woods: Big Bertha Titanium 454 Driver, The world's longest driver

I upgraded my equipment today by replacing Great Big Bertha Hawkeye 10deg with a Big Bertha 454 10deg (both stiff shaft).

I got it at Golf Galaxy (Bloomington) . I was hitting balls in their station that had a launch monitor hooked up to it so i could see swing speed, ball speed, spin rate, launch angle, smash factor and distance (both carry and total). This allowed me to try multiple brands/models and see what i hit the best and gave some analytics behind it!

Not surprisingly, the one i liked best (the 454) was the one that performed the best for me and 'felt' right. I'm looking forward to getting out and hitting it! Guess i'll be late to work tomorrow! :)

fore!
jk

July 15, 2005

TODO



I think the CLR team should add support for the keyword TODO to the language. TODO seems to be strewn about my code these days, and it would save me from having to comment it out all the time. TODO == noop?

Maybe a macro would do it?



jk

They Write the Right Stuff

This is one of my personal favorites...

This is not a case for agile development, but definitely a case for applying more science and discipline to the development process.

They Write the Right Stuff

Quotables:

-- "Software may power the post-industrial world, but the creation of software remains a pre-industrial trade. According to SEI's studies, nearly 70% of software organizations are stuck in the first two levels of SEI's scale of sophistication: chaos, and slightly better than chaos. "

-- Software for Grown-Ups
"Shipping hell continued today. Grind, grind, grind. We'll never make it. Have I said that already? Why do we always underestimate our shipping schedules? I just don't understand. In at 9:30 AM; out at 11:30 PM Dominos for dinner. And three diet Cokes."

-- "squeezing too much heroic code writing into too little time..."



Only 3 diet cokes, what lightweights. I'm in for 3 diet cokes by 10am; not necessarily a good thing, but true nonetheless............

enjoy

jk

July 14, 2005

Displaying a context (popup) menu at the proper location

I can never find this code when i need it, so i'm reposting it here. My particluar needs were around dynamically creating a context menu on a listview control in the proper location.

from http://www.dotnet247.com/247reference/msgs/5/26434.aspx

Courtesy of Mr. Eric Gunnerson (MSFT)


// right click with treeview doesn't set the selected item. This handler
// does...
private void treeView1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
treeView1.SelectedNode = treeView1.GetNodeAt(e.X, e.Y);
if (treeView1.SelectedNode == null)
{
Console.WriteLine("null");
}

// Convert from tree coordinates to screen coordinates, and then back
// to form coordinates so that the context menu pops up at the right spot...
Point spot = this.PointToClient(treeView1.PointToScreen(new Point (e.X, e.Y)));
this.contextMenu1.Show(this, spot);
}
}

July 11, 2005

Stealing Wi-Fi

State: Wi-Fi cloaks a new breed of intruder

I'm not saying whether I've done this or not, but how many of my loyal readers have done this or know of someone who has? There seems to be a large ethical and legal issue to resolve. Smells like a supreme court case to me.

Is using an unsecured Wi-Fi with out 'implied concent' e.g. being a customer at an establishment offering free Wi-Fi, the crime? Is the crime just stupidity for having an unsecured network?

The anology of leaving your house unlocked and trusting people to do the right thing comes to mind here. If you leave your house unlocked and someone comes in and takes something then it is a crime.

What if municipal Wi-Fi takes off and my trusty wireless adapter finds and switches to a stronger signal that I have not been given concent to use?

Comments?

jk

July 06, 2005

Guilty as charged :(

You Arent Gonna Need It

PopupTest - test your popup blocker software and download software

PopupTest - test your popup blocker software and download software

I just ran across this site and thought it was interesting. I'm running IE (latest) and Google toolbar. When I get a chance, I'll try opera and firefox on it to see how they fare...

jk

July 05, 2005

SDN - The SAP Developer Network

In case anyone's VS.NET gets upset about not being able to load the wizards to add a class, form, etc... (*.vsz files), I found an answer on the SAP site of all places :)

SDN - The SAP Developer Network

In case the link above ever goes away, here is the post that got it done for me. I was not using a new beta of anything, but something monkeyed with my registry...hmmm

jk

Posting follows here:
--------------------------------------------------------

Reiner Hille-Doering

Posts: 576
Registered: 2/14/04
Re: Could not run the Wizard - Beta 2.0
Posted: Aug 4, 2004 3:37 AM Reply E-mail this post


Hm, might be that there is something broken with the .NET Connector or Visual Studio installation.
Please try uninstalling NCo. Then make sure that no rests of it are left in "c:\Program Files\SAP", "c:\Program Files\Microsoft Visual Studio 2003\Common7\IDE" and GAC are left and reinstall.

If reinstallation NCo doesn't help,
you might try the following commands from the VS command prompt:

"devenv /resetskippkgs"

regasm "C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\PublicAssemblies\VSLangProj.dll"

regsvr32 "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\vcpackages\csproj.dll"

(All commands are not critical and just reregister some entries in the registry.)

June 29, 2005

My new favorite web site!

BugMeNot.com

The one for the Fargo Forum was pretty funny....:)

jk

June 22, 2005

Old School VSS - OLE automation w/ VSS circa 1995

in searching for vss info this morning, I ran across this link. maybe i'll be inspired to write a vss addin? :)
jk

C# tip of the night


IList list = new ArrayList();
list.Add("the only item in my list");

for(int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i].ToString()); //using the variable 'i' is goodness
Console.WriteLine(list[1].ToString()); //erroneously using the number 1 instead of 'i' is not goodness
}

May 23, 2005

Revenge is sweet

sorry for the bad pun (title); it's late and the best i could do on short notice :)

I made it to Revenge of the Sith tonight; loved it. I'll definitly be going back to catch it once more in the theater! Maybe i'll hit the DLP showing in EP Center's AMC!

No spoilers here; just go see it!

jk

May 06, 2005

May 6, 2005

Happy seis de mayo! :)
jk

May 03, 2005

Running a mile in my shoes (literally)

Last night, I ran for the first time post ACL injury @ LTF. It was only 1 mile @ 5 mph (12/min mile), but it was a great start. I'm amost 3 months post-surgery; it is truly amazing what doctors can do!

Today’s words of wisdom: don’t tear your ACL!!

jk

May 02, 2005

FOXSports.com - MLB- Performance-enhancing contact lenses?

wow, this is one of the coolest thing i've seen a while! :)

jk

FOXSports.com - MLB- Performance-enhancing contact lenses?: " do not cause side effects and are not subject to suspensions. Known as performance-enhancing contact lenses, they were designed to help hitters pick up the seams on the ball better and to protect "

April 27, 2005

VS.NET 2005 Beta2 - WS proxy class generation!

I just got vs.net 2005 beta 2 installed (on a virtual PC image, thanks NI for the help!). I was very happy to see they've improved proxy class generation for web services - they actually generate private fields and public properties! for some reason, there is not a public constructor. good thing its a partial class so i can add my own :) :)

i can't wait to start playing w/ the beta as its the first time i've seen it since the PDC 2003 tech preview.... ;)

cheers
jk

April 20, 2005

Putting smack

Note: This post was taken from an advertisement for Odyessy putters http://www.steelmeetsfeel.com. I was not paid for this post (unfortunately), but I do own an Odyessy White Hot #2 putter (which I love). You're supposed to buy their putter to improve your game so you can hurl insults at your playing partners...(a good craftsman never blames his tools, right?)

Enjoy!
jk

------------------------
•I’ve had brushes with death that were closer than that.
•You know what the best joke in golf is? Your short game.
•You know what really helped me with my putting? Hitting the ball in the hole.
•You know what they call that type of putt in Scotland? Horrible.
•I hope you’re better at ordering drinks than you are at putting.
•The problem appears to be that you’re standing too close to your ball…after you hit it.
•You know what you’re doing wrong? Playing golf.
•In case I don’t remind you later, I like vodka martinis.
•One more putt and you get a free toaster.
•You walk around this green any more and you’re going to need hiking boots.
•Can you hand me some sunscreen? It looks like we’re gonna be here awhile.
•I must be dehydrated because I just hallucinated you missed that putt.
•After all that walking I bet you could use an energy bar.
•Should I cal 911? You look like you’re choking.
•You know what’s wrong with our putting? You’re not good.
•Nice touch, hammer.
•Come on, I’m running out of fingers here.
•You putt like I sing opera. Terribly.
•You know what the problem was there, don’t you? your ball didn’t go in the hole.

Insects and Entropy

A coworker (thanks PaulR!) sent this out the other day. As a person who seems to make things harder than they need to be, it is an excellent reminder. Enjoy the article :)
jk

April 16, 2005

It is done

MCSD .NET

Passed 70-229 (2nd try) w/ a 747. Not the best score, but I'm not taking it again :)

April 15, 2005

DL by any other name smells as sweet : was: Service Station: Contract-First Service Development -- MSDN Magazine, May 2005

Anyone remember IDL back from the good ol' COM/DCOM days? Even though I used to do a lot of VB (versions 3.0-6.0; I'm now recovering nicely thankyouverymuch), I always had interest in how IDL worked and had Mr. Box's Essential COM tome bookmarked at the page containing the the datatype compatibility between C++, VB (and scripting). The C++ "design IDL first" vs. the VB "code first and let VB generate the IDL goo" just added to the my-tool-is-better-than-your-tool issues.

I found Mr Skonnard's article: Service Station: Contract-First Service Development -- MSDN Magazine, May 2005 a very interesting in how, like many other things in technology, we're back to repeating ourselves in the web service world with WSDL First vs. Code first (the ASMX plumbing) displacing IDL vs. Code first.

Defining an abstraction via any Definition Language (IDL or WSDL) and coding to it seems much more like engineering/constructing something intentionally vs. just hacking the functionality out and refactoring it later. This can only improve the quality of the system, thereby making maintenance and extensibility better (and perhaps even possible)!

On our current project, we've been able to use contract first to help us go faster; by working together to define the WSDL, I was able to get the client side objects created and hooked up to the UI, while Mork and Neil started on the backend plumbing. Even though the standard vs.net tools around creating XML schema and WSDL are not high-productivity tools, we do ok w/ them and have hopes for a future where either we write our own version of wsdl.exe, or grab the source from wsdl.exe and refactor it into something that generates more useful proxy classes! :)

I'm looking forward to part two of Aaron's article!

Contract first baby! (think: Just win baby!)

jk

SCIgen - An Automatic CS Paper Generator

This would work for requirements document too :) Thanks SimpleGeek for the link (i would insert a link to your blog if you had one due)

SCIgen - An Automatic CS Paper Generator

April 14, 2005

I'm back (sort of)

I made it out to the Hyland Hills driving range yesterday. I was a good boy and kept it pretty low-key, but it was excellent being out and swinging the club again! My post-op protocol says I can play 9 holes during phase IV (3 months after surgery), so this means I will get to play WAY more than I thought this summer!

jk

Window Driver - a .Net perspective

Testing is goodness. Writing tests for the data access layer and business object layer are commonplace and sometimes even generated! However, testing UI components has often been more difficult to accomplish; screen scraping and tracking mouse clicks dissappoints. Inspired by Mr. Fowler's article, Window Driver, I attempted to do something similiar for my current project.

First, I took the ultra-simple approach of making the controls public, and then accessing them from the unit test code. However, this implement breaks encapsulation and feels 'dirty'. John suggested Reflection. Reflection is good clean fun, so I started down that path, and then realized, that every class that derives from System.Windows.Forms.Control (Form, UserControl...) exposes a public controls collection! so................


[Test]
public void MyUITest()
{
MyForm form = new MyForm();
ComboBox combo1 = GetControl(form, "combo1") as ComboBox;
Assert.IsNotNull(combo1);
Assert.AreEqual(combo1.SelectedValue, "somevalue");

//TODO party on the combo1 control
}

private Control GetControl(Control parent, string name)
{
foreach(Control c in parent.Controls)
{
if(name == c.Name)
return c;
}
return null;
}


So, hopefully this helps and inspires someone else! Test first baby!

jk

BS from Lounsberry: MN 2005

The honor was our's buddy!

It was a great weekend, and I know Tricia and I are really looking forward to the return trip to the greater Seattle area later this year.

In further Seattle news, I just heard Nate McMillian won NBA coach of the year, so congrats to Nate! I always enjoyed watching him play (from afar in MN); he seems like a good guy and I always enjoy seeing 'good guys' succeed. :)

The hightlight of the weekend was probably the Gameworkd dance-off @ 1:30am between Dan, Brian and Ryan. Thank goodness that I have a bum knee and had an excuse not to participate! :) :)

jk

April 07, 2005

The power of Bloggestion

This morning, Mork was telling me about his idea for a computer book, and then, minutes later I saw this post at EricG's site. Ahhh, the power of Bloggestion.

jk

April 06, 2005

Master's TV coverage

Here's the Master's TV schedule on USA and CBS. Since I'm off friday, I'm hoping to catch some coverage that I would not normally get to see. Someday, I will be watching in person...:)

jk

April 05, 2005

Phil defends...Master's week is here

The Masters starts thursday. Good luck to Mr. Mickelson in defending his title!


I'm also glad to hear that Mr. Nicklaus has decided to play as well. I hope the Golden Bear makes the cut!

April 04, 2005

Nicknames

Does this include code poet?

/* just kidding Mr. Clooney, couldn't help it :)*/

April 01, 2005

blouns is coming to a town near you (if you live in Minneapolis)

Brian is coming! I forsee a lot of beer in our future!

Things you can wear on casual fridays

Mork found these: good, clean fun...


Still, my personal favorite is from the good people at Net Objectives. I still wear mine with pride!

March 25, 2005

1 year out

Today is my 1 year anniversary of leaving Fargo. I’m getting old and nostalgic, but it amazes me all the things that can change in a year. I’m not going to enumerate them all here as it wouldn’t be of interest to most, but the biggest thing that stands out to me is having a great job where I can:
  • create new software

  • participate in a culture of learning

  • work with like-minded/skilled people

Cheers to another good year coming up!!

January 11, 2005

Filtering by number in DataView.RowFilter

Since I unsuccessfully Googled for this answer, maybe this entry will help out someone else... :)

Given a string variable named quxx, that falls in the set of [A-Z,#,ALL]:

I wanted to use the DataView RowFilter property to filter data for use in a custom alphanumeric paging control (All, A-Z, and Numbers). The RowFilter expression for the A-Z characters was very straightforward:
dataView.RowFilter = string.Format("{0} LIKE '{1}%'", dataView.Table.Columns[0].ColumnName, quxx);


So, extending that to filter on things that start with a number, I looked at the TSQL syntax, figuring it would be similar and tried:
 dataView.RowFilter = string.Format("{0} LIKE '[0-9]%'", dataView.Table.Columns[0].ColumnName, quxx);
, but got an invalid expression exception.

The way I solved it was to use SubString on the first character in the string (note it is one-based and not zero-based):

dataView.RowFilter = string.Format("SUBSTRING({0}, 1, 1) IN (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)", dataView.Table.Columns[0].ColumnName, quxx);


Thanks http://www.whoisjake.com for the alphanumeric pager control code :)

January 03, 2005

Favorites from TAoW Calendar, 2004

I was sick of saving the little tear-offs, so they became a blog entry instead. The items below were my favorites from Quotes from Sun-Tzu - The Art of War - 2004 Calendar. I realize regurgitating what others write is not usually interesting or blogworthy, but I chose to make an exception this time!

Enjoy the wisdom! :)


  • Those whose upper and lower ranks have the same desire are victorious. Chapter 3: “Planning the Attack”

  • Once your basic mind is settled, you should just tune and order it, making it calm and stable, undisturbed by events, not deluded by prospects of gain. Chapter 7: “Armed Contest”

  • The lives of the people and the order of the nation are in the charge of the generals. The difficult of finding good leadership material is a perennial problem. Chapter 2: “On Waging Battle”

  • Give out rewards that are not in the rules, give out directives that are not in the code.

  • If the people are treated with benevolence, faithfulness and justice, then they will be of one mind and will be glad to serve. Chapter 1: “On Assessments”

  • Harmony among people is the basis of the way of military operations: the right weather and an advantageous position help. Chapter 1: “On Assessments”

  • The question regarding political leadership is who is able to win the hearts of the people. Chapter 1: “On Assessments”

  • Invincibility is on oneself, vulnerability is in the opponent. Chapter 4: “Formation”

  • Glean from rich fields, and the armies will have enough to eat. Take care of your health and avoid stress, consolidate your energy and build up your strength. Maneuver your troops and assess strategies so as to be unfathomable. Chapter 11: “The Nine Kinds of Terrain”

  • Therefore, I have heard of military operations that were clumsy but swift, but I have never seen one that was skillful and lasted a long time. It is never beneficial to a nation to have a military operation continue for a long time. Chapter 2: “On Waging Battle”

  • Adaptation means not clinging to fixed methods, but changing appropriately according to events, acting as is suitable. Chapter 8: “Adaptation”

  • Do something for or against them, making opponents turn their attention to it, so that you can find out their patterns of aggressive and defensive behavior. Chapter 6: “Emptiness and Fullness”

  • If you use the enemy to defeat the enemy, you will be strong wherever you go.

  • What is orthodox for you, cause opponents to see as unorthodox: what is unorthodox for you, cause opponents to see as orthodox. Chapter 5: “Strategic Advance”

  • Those whose upper and lower ranks have the same desire are victorious. Chapter 3: “Planning the Attack”

  • If you make it clear what is to be rewarded and what punished, make your directives reliable, keep your machines in good repair, train and exercise your officers and troops, and let their strengths be know so as to overcome the opponent psychologically. This is considered very good. Chapter 3: “Planning the Attack”

  • So unless your heart is wide open and your mind is orderly, you cannot be expected to adapt responsively without limit. Dealing with events unerringly, facing great and unexpected difficulties without upset, calmly handling everything without confusion. Chapter 7: “Armed Contest”

  • When the army is old, the soldiers are lazy, and the discipline and command are not unified. This is an opponent that has already lost. Chapter 4: “Formation”

  • Generals in the field must already be acquainted with all the sciences of warfare before they can command their own soldiers and assess battle formations. Chapter 3: “Planning the Attack”

  • Good warriors make others come to them, and do not go to others. This is the principle of emptiness and fullness of others and self. When you introduce opponents to come to you, then their force is always empty: as long as you do not go to them, your force is always full. Attacking emptiness with fullness is like throwing stones on eggs – the eggs are rue to break.

  • When you are spending a great deal of money on a military operation, if the army is out in the field too long, your budget will not be enough to cover the expense.

  • Knowledge that does not go beyond what the generality knows is not really good.