<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-18357892</id><updated>2023-03-21T04:44:44.326-05:00</updated><title type='text'>Mike&#39;s Moot Musings</title><subtitle type='html'>Random thoughts, Rants, some dry humor. Overall, likely things that don&#39;t matter much in The Big Picture.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default?alt=atom'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default?alt=atom&amp;start-index=26&amp;max-results=25'/><author><name>Mike</name><uri>http://www.blogger.com/profile/12919771642509799568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-18357892.post-116126880240111704</id><published>2006-10-19T08:48:00.000-05:00</published><updated>2006-10-19T10:32:52.400-05:00</updated><title type='text'>Lego Mindstorms.Net</title><content type='html'>A while back, maybe 7 years or so, my wife bought me a &lt;a href=&quot;http://mindstorms.lego.com/eng/default_ris.asp&quot;&gt;Lego Mindstorms&lt;/a&gt; kit. It&#39;s all the goodness of legos, robotics, and programming rolled into one. With the kit, you could make robots that carried out simple routines or even respond to input. I created various bots with the included drag-and-drop programming environment that came with the set, and did a few with the &lt;a href=&quot;http://www.cs.uu.nl/~markov/lego/rcxcc/index.html&quot;&gt;NQC &lt;/a&gt;(not quite C) language.&lt;br /&gt;&lt;br /&gt;A year later when my second son was born, I had to put the kit up because of all the small peices and his rather aggressive form of curiosity.&lt;br /&gt;&lt;br /&gt;Just a few days ago, we dug the kit out and started making things with it. &quot;Things&quot; because they have been mostly powered vehicles and not so much robots. The main reason is because we are two motors down, which leaves us with one servo motor and a low-powered standard motor. The other two servo motors are locked up. A quick search on Google revealed there was a manufacturing flaw that caused them to sieze. But, being I did not discover this until years later, Lego could do nothing for me. I had to purchase new ones. I&#39;m not upset that I had to buy new ones. I mean, it was my fault I did not notice the flaw until years later - long after any warranty has expired.&lt;br /&gt;&lt;br /&gt;Ok, training off topic here.&lt;br /&gt;&lt;br /&gt;While looking for some Managed DirectX info, I stumbed across the &lt;a href=&quot;http://msdn.microsoft.com/coding4fun/&quot;&gt;Coding4Fun&lt;/a&gt; site. There I found &quot;&lt;a href=&quot;http://msdn.microsoft.com/coding4fun/lego/default.aspx&quot;&gt;Microsoft .NET Interface for LEGO Mindstorms&lt;/a&gt;&quot;.&lt;br /&gt;&lt;br /&gt;Oh joy!&lt;br /&gt;&lt;br /&gt;Now we have Legos, robotics, programming AND C# in one fun package ready for endless possibilities! (did I mention that I think C# is the best thing since sliced bread? Doubt that? Have you ever tried to program with sliced bread? q.e.d.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To get started, I download and installed the &lt;a href=&quot;http://mindstorms.lego.com/sdk2point5/legomindstormssdk25.zip&quot;&gt;LEGO Mindstorms SDK 2.5&lt;/a&gt;, &lt;a href=&quot;http://download.microsoft.com/download/4/1/e/41e8f2c1-1bf7-419f-b31b-06122d090a49/cslegosamples.msi&quot;&gt;C# LEGO Starter Kits&lt;/a&gt;, and located (not install) the original RCX 1.5 CD that came with the set. There&#39;s also a download for the &lt;a href=&quot;http://download.microsoft.com/download/4/1/e/41e8f2c1-1bf7-419f-b31b-06122d090a49/cpplegosamples.msi&quot;&gt;Microsoft .NET Interface for LEGO Mindstorms&lt;/a&gt;, but I&#39;m not sure if that&#39;s needed since the required dlls come with the sample code and I don&#39;t need to dig into the source code for them.&lt;br /&gt;&lt;br /&gt;The SDK comes with a tool, ScriptEd, that can install the firmware on the RCX brick - which is where the original Lego CD comes in. On it is the firmware file, firm0331.lgo. From ScriptEd&#39;s &quot;Special&quot; menu item, choose &quot;Download Firmware&quot;. That will prompt you for the above mentioned file. Select it and hit OK.&lt;br /&gt;&lt;br /&gt;The C# starter kits have sample solutions; MusicSample, RemoteControlSample, and a RoverBotSample. The MusicSample shows a keyboard on the PC screen and playes the corresponding note on the RCX for each key pressed. The RemoteControlSample shows how you can use the PC keyboard to control the brick. The RoverBotSample demonstrates how to use the sensors and motors AND it pots the roverbot path on the form displayed on the PC.&lt;br /&gt;&lt;br /&gt;There are a few differences between the .Net SDK and NQC. One is, obviously, the syntax. The other is the location of the execution. Using the .Net platform, the code executes on the PC and commands are sent to the brick via IR. Using NQC, the program is sent to the brick and it then operates autonomously - needs no connection between it and the PC where the coding took place.&lt;br /&gt;&lt;br /&gt;Another difference is the type of execution. The native program operates like a Win32 application with a message loop and uses global constants that you are somehow expected to know.... or lookup from somewhere. A typical RCX NQC program looks somehting like this (I took it from the &lt;a href=&quot;http://www.oreilly.com/catalog/lmstorms/chapter/ch04.html&quot;&gt;O&#39;Reilly&lt;/a&gt; site about a book on the topic because I don&#39;t have any that I created anymore.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;#define BACK_TIME 50&lt;br /&gt;#define TURN_TIME 80&lt;br /&gt;task main()&lt;br /&gt;{&lt;br /&gt;SetSensor(SENSOR_1, SENSOR_TOUCH);&lt;br /&gt;SetSensor(SENSOR_3, SENSOR_TOUCH);&lt;br /&gt;OnFwd(OUT_A + OUT_C);&lt;br /&gt;while (true)&lt;br /&gt;{&lt;br /&gt;if (SENSOR_1 == 1)&lt;br /&gt;{&lt;br /&gt;PlayTone(440, 50);&lt;br /&gt;OnRev(OUT_A + OUT_C);&lt;br /&gt;Wait(BACK_TIME);&lt;br /&gt;OnFwd(OUT_A);&lt;br /&gt;Wait(TURN_TIME);&lt;br /&gt;OnFwd(OUT_C);&lt;br /&gt;}&lt;br /&gt;if (SENSOR_3 == 1)&lt;br /&gt;{&lt;br /&gt;PlayTone(880, 50);&lt;br /&gt;OnRev(OUT_A + OUT_C);&lt;br /&gt;Wait(BACK_TIME);&lt;br /&gt;OnFwd(OUT_C);&lt;br /&gt;Wait(TURN_TIME);&lt;br /&gt;OnFwd(OUT_A);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Notice the endless loop &quot;while(true)&quot; in task main(). With each pass, it checks the status of the sensors and sets the motor speeds accordingly. And notice the global constants, SENSOR_TOUCH, OUT_C, SENSOR_1, etc. These are defined in the firmware.&lt;/p&gt;But with the .Net SDK, it uses all the goodness of OOP and event-driven procedures. Here&#39;s a sample from the RoverBotSample code;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;public class RoverBot&lt;br /&gt;{&lt;br /&gt;static public void Main()&lt;br /&gt;{&lt;br /&gt;// Create and run our RoverBot&lt;br /&gt;RoverBot roverBot = new RoverBot();&lt;br /&gt;roverBot.Run();&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;public RoverBot() { }&lt;br /&gt;public void Run()&lt;br /&gt;{&lt;br /&gt;// Create and configure our RCX&lt;br /&gt;this._rcx = new Rcx();&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;// Connect to the RCX module (this is done once).&lt;br /&gt;this._rcx.Connect(RcxPort.Usb);&lt;br /&gt;this._rcx.BatteryPowerChanged += new RcxBatteryPowerChangedEventHandler(_rcx_BatteryPowerChanged);&lt;br /&gt;// We will use touch sensors attached to blocks 1 and 3&lt;br /&gt;// to inform us when the RCX runs into obstacles.&lt;br /&gt;this._rcx.Sensor1.SensorType = RcxSensorType.Touch;&lt;br /&gt;this._rcx.Sensor3.SensorType = RcxSensorType.Touch;&lt;br /&gt;this._rcx.Sensor2.SensorType = RcxSensorType.Light;&lt;br /&gt;this._rcx.Sensor1.ValueChanged += new RcxSensorValueChangedEventHandler(Sensor1_ValueChanged);&lt;br /&gt;this._rcx.Sensor3.ValueChanged += new RcxSensorValueChangedEventHandler(Sensor3_ValueChanged);&lt;br /&gt;this._rcx.Sensor2.ValueChanged += new RcxSensorValueChangedEventHandler(Sensor2_ValueChanged);&lt;br /&gt;this.UpdateMovement();&lt;br /&gt;// Let the app run&lt;br /&gt;Application.Run();&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;And of course the events that are called when the sensor values change.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;private void Sensor1_ValueChanged(object sender, RcxSensorValueChangedEventArgs e)&lt;br /&gt;{&lt;br /&gt;this.UpdateMovement();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void UpdateMovement()&lt;br /&gt;{&lt;br /&gt;// If the left sensor is pressed, we should turn right&lt;br /&gt;if (this._rcx.Sensor1.Value == 1)&lt;br /&gt;{&lt;br /&gt;this._rcx.MotorA.Power = 8;&lt;br /&gt;this._rcx.MotorC.Power = -8;&lt;br /&gt;}&lt;br /&gt;// If the right sensor is pressed, we should turn left&lt;br /&gt;else if (this._rcx.Sensor3.Value == 1)&lt;br /&gt;{&lt;br /&gt;this._rcx.MotorA.Power = -8;&lt;br /&gt;this._rcx.MotorC.Power = 8;&lt;br /&gt;}&lt;br /&gt;// Otherwise we can go straight&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;this._rcx.MotorA.Power = 8;&lt;br /&gt;this._rcx.MotorC.Power = 8;&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I see a few possible improvements that can be made, but it gets the point across; classes, enums and events!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Next, I need to get the &lt;a href=&quot;http://mindstorms.lego.com/&quot;&gt;NXT&lt;/a&gt;. It uses Bluetooth to communicate with the PC. That should increase range and coolness factor. ;-)</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/116126880240111704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=116126880240111704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/116126880240111704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/116126880240111704'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/10/lego-mindstormsnet.html' title='Lego Mindstorms.Net'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12919771642509799568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-115884604460853659</id><published>2006-09-21T08:18:00.000-05:00</published><updated>2007-03-01T15:12:16.293-05:00</updated><title type='text'>....has too many arguments specified (Part 2)</title><content type='html'>Recap;&lt;br /&gt;I was trying simple data binding in ASP.Net using a SqlDataSource and a GridView. The data source has four stored procs for the four commands.... though the Insert one is useless since the GridView is incomplete and cannot do that...&lt;br /&gt;&lt;br /&gt;Anyway, the &lt;span style=&quot;color:#000099;&quot;&gt;Select&lt;/span&gt; proc returns all the required fields with their respective names; idOrder, cdName, etc. The &lt;span style=&quot;color:#000099;&quot;&gt;Delete&lt;/span&gt; proc takes one parameter, @iiOrder (naming convention; first &quot;i&quot; for Int, second &quot;i&quot; for Input). I set the GridView &quot;&lt;span style=&quot;color:#cc0000;&quot;&gt;DataKeyNames&lt;/span&gt;&quot; to &quot;idOrder&quot; because that is the PK and the value needed to run the Delete.&lt;br /&gt;&lt;br /&gt;But, the page kept throwing &quot;&lt;span style=&quot;color:#660000;&quot;&gt;Procedure or function iDBQAScore_CriteriaDelete has too many arguments specified&lt;/span&gt;&quot; errors.&lt;br /&gt;&lt;br /&gt;Well, yesterday I discovered the missing link. The Stored Proc parameters *must* be named the same as the fields. I can understand that there must be a link there somehow, but I&#39;m still put off by that requirement. well, for one, it&#39;s not very intuitive nor documented. It must be discovered by trial and error, or via Google. Heh, searching Google Groups yields better documentation than MSDN.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But through all that experimentation, my boss and I discovered a solution to the issue that drove me to the SqlDataSource over the ObjectDataSource, so I guess it was worth it even if it made me doubt my value as a developer. Hell, I do that anyway ;-)</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/115884604460853659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=115884604460853659' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115884604460853659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115884604460853659'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/09/has-too-many-arguments-specified-part.html' title='....has too many arguments specified (Part 2)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12919771642509799568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-115877509168605362</id><published>2006-09-20T12:07:00.000-05:00</published><updated>2006-10-20T02:51:41.086-05:00</updated><title type='text'>....has too many arguments specified</title><content type='html'>&lt;em&gt;&lt;span style=&quot;font-size:130%;color:#660000;&quot;&gt;&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;After having some issues with the ObjectDataSource and a custom DataAccess component (more on that later) I decided to get back to basics and use the SqlDataSource and bind it directly to a GridView.&lt;br /&gt;&lt;br /&gt;To start things off, I plopped a SqlDataSource onto a web page, set the ConnectionString and the StoredProc name for the four commands, Delete, Insert, Select, and Update using the Wizzard thing. As a part of that process, it retrieves the parameters for each of the StoredProcs. Good stuff.&lt;br /&gt;&lt;br /&gt;Next I added a GridView and set the DataSourceID to the above SqlDataSource. I set EnableEditing and EnableDeleting - they each have an associated StoredProc so it should be good.&lt;br /&gt;&lt;br /&gt;Remembering the Demos at the Microsoft Launch Event in Detroit, I hit Ctrl-S and F5 and expected it to work.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style=&quot;font-size:130%;color:#660000;&quot;&gt;Procedure or function iDBQAScore_CriteriaDelete has too many arguments specified.&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;oh, yeah. The demos were simplistic, non-real-world applicaitons. You know, like embedding SQL code that accesses one table in the web page code. Who does that?!!&lt;br /&gt;&lt;br /&gt;A search of Google shows that there are many more out there that don&#39;t know what they are doing either... or they just expect the magic to work. About half the help requests go unanswered with the other half being told to Clear() the params and re-add them in the page code. Say it with me, &quot;Who does that?!!&quot; Or more specifically, Why Should That Be Necessary?! If you are going to fudge with the DataAccess components, that should not be done in the page code.&lt;br /&gt;&lt;br /&gt;Or I&#39;m an idiot, which seems likely given the number of rants I have about ASP.Net.&lt;br /&gt;&lt;br /&gt;On a side note, I&#39;m not a .Net hater. I Love C#. Sure, I started out a little ... hesitant until I got to understand it. Which is why I keep trying with ASP.Net thinking I&#39;ll eventually get a grip on it. But, the more I use it, the more I long for the Regular ASP days.&lt;br /&gt;&lt;br /&gt;Back to the SqlDataSource and GridView....&lt;br /&gt;&lt;br /&gt;After some thought, I figure the automatic databinding is trying to give the SqlDataSource all the fields in the GridView table. So, I convert all the fields to Templates and change &quot;Bind&quot; to &quot;Eval&quot; except the field that should pass it&#39;s value to the SqlDataSource. And I make sure the DataKeyNames property on the GridView is set to the PK field.&lt;br /&gt;&lt;br /&gt;Ctrl-S &amp; F5....&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style=&quot;font-size:130%;color:#660000;&quot;&gt;Procedure or function iDBQAScore_CriteriaDelete has too many arguments specified.&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;grrrr&lt;br /&gt;&lt;br /&gt;I switch to Design mode and examine the SqlDataSource properties via the Properties window. Hitting the ellipsis button by the property &quot;DeleteQuery&quot; brings up the &quot;Command and Parameter Editor&quot;. A quick review shows all the parameters are correct. Oh, wait, there&#39;s a &quot;Refresh Parameters&quot; button. I hit that and a new parameter is added to the list, &quot;RETURN_VALUE&quot;.&lt;br /&gt;&lt;br /&gt;Ah hA!&lt;br /&gt;&lt;br /&gt;&quot;OK&quot;, Ctrl-S &amp;amp; F5&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style=&quot;font-size:130%;color:#660000;&quot;&gt;Procedure or function iDBQAScore_CriteriaDelete has too many arguments specified.&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;WTF?!!&lt;br /&gt;&lt;br /&gt;Maybe the &quot;RETURN_VALUE&quot; parameter needs to be set. Don&#39;t laugh. When using the EnterpriseLibrary, I ran into a similar situation. I break down and add a&lt;br /&gt;&lt;span style=&quot;color:#000099;&quot;&gt;GridView1_RowDeleting&lt;/span&gt; event handler to the page code. In it I set the &quot;RETURN_VALUE&quot; DefaultValue to &lt;span style=&quot;color:#33ccff;&quot;&gt;String&lt;/span&gt;.Empty... which is odd since the data type for that param is &lt;span style=&quot;color:#000099;&quot;&gt;Int32&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Ctrl-S &amp;amp; F5&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style=&quot;font-size:130%;color:#660000;&quot;&gt;Procedure or function iDBQAScore_CriteriaDelete has too many arguments specified.&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Now I&#39;m beginning to feel like a no-talent hack... moreso than before. Why is something so SIMPLE so damned difficult?!&lt;br /&gt;&lt;br /&gt;I wish there was a happy ending, but there isn&#39;t. I&#39;ve been at this all afternoon... (ok, only two hours, but it feels like a long time) and don&#39;t have a solution in sight.&lt;br /&gt;&lt;br /&gt;Back to the trenches. I&#39;ll keep y&#39;all posted.</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/115877509168605362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=115877509168605362' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115877509168605362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115877509168605362'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/09/has-too-many-arguments-specified.html' title='....has too many arguments specified'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12919771642509799568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-115772260063589568</id><published>2006-09-08T08:27:00.000-05:00</published><updated>2006-09-08T08:36:40.636-05:00</updated><title type='text'>Rotten Apple, The Second Half</title><content type='html'>I have good news and bad news.&lt;br /&gt;&lt;br /&gt;The bad is that I have to eat my words. I plugged my Canon PowerShot S110 into my PC at work, which is running XP SP2 with all the updates, and, while it did recognize the new USB device as the correct type and model, it did not have the drivers needed to use it.&lt;br /&gt;&lt;br /&gt;So, that tells me one of two things; 1) ALL Apples ship with ALL the drivers needed to talk to EVERY camera out there (I limit this statement to only cameras because the commercial used a stereotyped actress to portray a camera and no other device), or 2) Apple&#39;s selfish proprietarianism strikes again by forcing all device makers to communicate in one specific manner so that no additional drivers are needed. Is that good or bad? I dunno.&lt;br /&gt;&lt;br /&gt;The good news is that Tim Buckley over at CTRL+ALT+DEL Comics did a very good &lt;a href=&quot;http://www.ctrlaltdel-online.com/comic.php?d=20060513&quot;&gt;strip&lt;/a&gt; covering the whole Rotten Apple Ad Campaign.&lt;br /&gt;&lt;br /&gt;I think it&#39;ll use the last frame as my new Tag Line</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/115772260063589568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=115772260063589568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115772260063589568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115772260063589568'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/09/rotten-apple-second-half.html' title='Rotten Apple, The Second Half'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12919771642509799568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-115704387346443175</id><published>2006-08-31T12:01:00.000-05:00</published><updated>2006-10-03T08:51:47.170-05:00</updated><title type='text'>Today&#39;s ASP.Net Gripes</title><content type='html'>- In a &lt;span style=&quot;color:#3333ff;&quot;&gt;web.sitemap&lt;/span&gt; file, an external link (a link to a web site not in the current web application) in the top-most node will cause the entire &lt;span style=&quot;color:#996633;&quot;&gt;asp:menu&lt;/span&gt; to not render at all.&lt;br /&gt;&lt;br /&gt;- If the same external link is placed anywhere else in the &lt;span style=&quot;color:#3333ff;&quot;&gt;web.sitemap&lt;/span&gt; file, the corresponding menu node will not render, though the other menu items will. wtf?&lt;br /&gt;&lt;br /&gt;- The properties &lt;span style=&quot;color:#996633;&quot;&gt;ShowStartingNode&lt;/span&gt; and &lt;span style=&quot;color:#996633;&quot;&gt;StartFromCurrentNode&lt;/span&gt; of &lt;span style=&quot;color:#996633;&quot;&gt;SiteMapDataSource&lt;/span&gt; combined with the &lt;span style=&quot;color:#996633;&quot;&gt;Web.Sitemap&lt;/span&gt;&#39;s&lt;span style=&quot;color:#996633;&quot;&gt; siteMapNode&lt;/span&gt; nesting requirements makes for a dizying combination of possibilities of which only one actually comes close to the behavior desired. Hard to understand what I&#39;m saying? I&#39;ll work on a sample.... eventually.&lt;br /&gt;&lt;br /&gt;- The &lt;span style=&quot;color:#996633;&quot;&gt;asp:Menu&lt;/span&gt; is incredibly difficult to impliment a style that matches the other controls on that page.&lt;br /&gt;&lt;br /&gt;- The &lt;span style=&quot;color:#996633;&quot;&gt;customErrors-error&lt;/span&gt; section of the &lt;span style=&quot;color:#996633;&quot;&gt;web.config&lt;/span&gt; file can only accept an &lt;span style=&quot;color:#3333ff;&quot;&gt;Int32&lt;/span&gt; for the &lt;span style=&quot;color:#3333ff;&quot;&gt;statusCode&lt;/span&gt; even though &lt;span style=&quot;color:#ff0000;&quot;&gt;non-int&lt;/span&gt; HTTP errors exits. This makes it impossible to set up custom pages for most errors. For example, &lt;span style=&quot;color:#006600;&quot;&gt;401.2 &quot;Access Denied&quot;&lt;/span&gt; when using Windows authentication mode. Sure it can be set up in IIS, but then what&#39;s the point of even having a &lt;span style=&quot;color:#996633;&quot;&gt;customErrors&lt;/span&gt; section?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The answer to the gripes; &quot;&lt;span style=&quot;color:#006600;&quot;&gt;Don&#39;t do that.&quot; &lt;/span&gt;&lt;span style=&quot;color:#000000;&quot;&gt;or &lt;/span&gt;&lt;span style=&quot;color:#990000;&quot;&gt;&quot;If you find you need to do that, you are obviously making a huge architectural error.&quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Or perhapse, and most likely, I don&#39;t know enough about ASP.Net just yet. .. which brings up a different point. All these features, libraries and controls are designed to simplify development, but instead they just shift the complexity from one area to another. So instead of trying to figure out how to create a role-specific menu, I have to figure out how to impliment a pre-defined menu control that someone else decided has all the base abilities that I need.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There is always construction.... I make a hella shed ;)</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/115704387346443175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=115704387346443175' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115704387346443175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115704387346443175'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/08/todays-aspnet-gripes.html' title='Today&#39;s ASP.Net Gripes'/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/blank.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-115512864572226822</id><published>2006-08-09T07:57:00.000-05:00</published><updated>2006-08-09T08:04:05.793-05:00</updated><title type='text'>&quot;Oh, and next Friday... is Hawaiian shirt day... so, you know..&quot;</title><content type='html'>My office is holding a picnic today and the dress code has been relaxed a bit; shorts are permissible. So, yes, I&#39;m wearing shorts.&lt;br /&gt;&lt;br /&gt;In the office.&lt;br /&gt;&lt;br /&gt;Sitting in my chair.&lt;br /&gt;&lt;br /&gt;The vary chair that I&#39;ve sat in for the past 5 years with long pants.&lt;br /&gt;&lt;br /&gt;But now, in shorts, my skin is touching the chair. Sure, the shorts go down to just above the knee when I&#39;m standing. But in the sitting position they creep up a little... a little to far to be comfortable... at work.... in my chair.&lt;br /&gt;&lt;br /&gt;I feel so naked.</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/115512864572226822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=115512864572226822' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115512864572226822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115512864572226822'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/08/oh-and-next-friday-is-hawaiian-shirt.html' title='&quot;Oh, and next Friday... is Hawaiian shirt day... so, you know..&quot;'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12919771642509799568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-115497705415754342</id><published>2006-08-07T13:29:00.000-05:00</published><updated>2006-08-07T17:26:57.746-05:00</updated><title type='text'>XML Lookup in XSL</title><content type='html'>Or should I call this &quot;XSL transform with an XML lookup&quot;?&lt;br /&gt;&lt;br /&gt;meh. Whatever I call it, the jist is that I was finally able to fugure out how to use another XML file to lookup description-type data that relates to a main XML file (parent-child) and output it all to HTML using an XSLT file... all in PHP. ;-)&lt;br /&gt;&lt;br /&gt;Let me back up a bit to cover why I was trying to do it in the first place.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.2kgames.com/civ4/home.htm&quot;&gt;Sid Meier&#39;s Civilization IV&lt;/a&gt; was designed to be mod-able. I&#39;d suggest reading about the game if you don&#39;t know it, because I&#39;m not going to cover it here. But I will mention that it uses XML files for unit, terrain, technologies, leader and other rules and information.&lt;br /&gt;&lt;br /&gt;So I wanted to make a way to display all the information in one simple, easy to view place - be it a web page or a windows form or whatever. But since I&#39;ve been playing with PHP, I chose to give that a go.&lt;br /&gt;&lt;br /&gt;The first thing I had to do was enable XML/XSL on my PHP web server. To do that, in the PHP.ini file change&lt;br /&gt;&lt;blockquote&gt;;extension=php_xmlrpc.dll&lt;br /&gt;;extension=php_xsl.dll &lt;/blockquote&gt;&lt;br /&gt;to&lt;br /&gt;&lt;blockquote&gt;extension=php_xmlrpc.dll&lt;br /&gt;extension=php_xsl.dll &lt;/blockquote&gt;&lt;br /&gt;and add these files to the PHP install folder&lt;br /&gt;&lt;ul&gt;&lt;li&gt;libxslt.dll&lt;/li&gt;&lt;li&gt;libxml2.dll&lt;/li&gt;&lt;li&gt;libexslt.dll&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;and these to (PHP Install)/ext folder&lt;/p&gt;&lt;ul&gt;&lt;li&gt;php_xmlrpc.dll&lt;/li&gt;&lt;li&gt;php_xsl.dll&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;You might be able to do it without one or two of those, but it works the way it is for me. :-)&lt;/p&gt;&lt;p&gt;After that, it&#39;s easy to load an XML file and apply an XSL stylesheet (is taht redundant? Like ATM Machine?) .&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&amp;lt;?php//load the and stylesheet&lt;br /&gt;$xsl = new DomDocument();&lt;br /&gt;$xsl-&amp;gt;load(&quot;CIV4UnitInfo.xsl&quot;);&lt;br /&gt;//Load the xml&lt;br /&gt;$inputdom = new DomDocument();&lt;br /&gt;$inputdom-&amp;gt;load(&quot;CIV4UnitInfos.xml&quot;);&lt;br /&gt;// create the processor and import the stylesheet&lt;br /&gt;$proc = new XsltProcessor();&lt;br /&gt;$xsl = $proc-&amp;gt;importStylesheet($xsl);&lt;br /&gt;/* transform and output the xml document */&lt;br /&gt;$newdom = $proc-&amp;gt;transformToDoc($inputdom);&lt;br /&gt;print $newdom-&amp;gt;saveXML(); ?&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I got that from .... well, just about every sample out there.&lt;br /&gt;&lt;br /&gt;The Unit data is in the &quot;CIV4UnitInfos.xml&quot; file (I didn&#39;t name it so don&#39;t harp on me about &#39;infos&#39;) and the lookup data is in &quot;CIV4GameTextInfos_Objects.xml&quot; but that&#39;s linked in my XSL file, &quot;CIV4UnitInfo.xsl&quot;.&lt;br /&gt;&lt;br /&gt;Heads up, I had to remove the namespace declaration from Sid&#39;s xml files. The xsl transform would not work unless I did. I&#39;m not sure why.&lt;br /&gt;&lt;br /&gt;In the file &quot;CIV4UnitInfos.xml&quot; there&#39;s a lookup key that refers to a description in &quot;CIV4GameTextInfos_Objects.xml&quot;. So, part of my transform I need to get that description for output.&lt;br /&gt;&lt;br /&gt;I start with the header and declaration stuff&lt;br /&gt;&lt;br /&gt;Ok, I forgot how painful it is to try to post code on this blog. In order to preserve my sanity, I&#39;ll skip to the pertinent stuff.&lt;br /&gt;&lt;br /&gt;First is the lookup variable declaration. This is what includes the &quot;CIV4GameTextInfos_Objects.xml&quot; file.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;xsl:variable name=&quot;unitLookup&quot; select=&quot;document(&#39;CIV4GameTextInfos_Objects.xml&#39;)/Civ4GameText/TEXT&quot;/&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Then in the &amp;lt;xsl:template match=&quot;UnitInfo&quot;&amp;gt; section, I lookup the current key value using&lt;br /&gt;&lt;blockquote&gt;Desc:&amp;lt;xsl:value-of select=&quot;$unitLookup[Tag=current()/Description]/English&quot;/&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I&#39;d love to post more xsl code and some xml to show the structure, but....&lt;br /&gt;&lt;br /&gt;Next I tackle the technology tree!</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/115497705415754342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=115497705415754342' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115497705415754342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115497705415754342'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/08/xml-lookup-in-xsl.html' title='XML Lookup in XSL'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12919771642509799568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-115469819280488861</id><published>2006-08-04T07:57:00.001-05:00</published><updated>2006-08-04T13:33:49.593-05:00</updated><title type='text'>Rotten Apple</title><content type='html'>&lt;p&gt;I despise that smug little teen in the Apple Computer commercials. Well, not him personally. It’s his message I dislike. “Apples don’t crash.”, “Apples are immune to viruses.”, “PCs cannot talk to digital cameras.”, “PCs are hard to set up.”&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;I’ve lost a lot of respect for Apple because of that ad campaign. Sure, telling biased, half-truths is a staple of advertising, but to lie? Ok, Ok, yes, lying is also a staple, but I tend to disrespect the companies that do so, much like Apple now.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;To counterpoint each message respectively;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Apples don’t crash.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Because of Apple’s selfish, greedy need to keep complete control over that platform, there is only one manufacturer and configuration to support. I would hope they could handle that.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;And I would add that this is quite restrictive and eventually more costly. An Apple user cannot go to the Local Best Buy store and buy upgrade component. So the choice is to take it to an Apple Shop, look for a specialty supplier or wait and replace the whole computer.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Apples are immune to viruses&lt;br /&gt;&lt;ul&gt;&lt;li&gt;First, I’ll admit that they probably meant Apple is immune to “the virus that is going around” and stated in the commercial. But my counterpoint still applies.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Let’s look at the mentality of any vandal, or anyone for that matter. Be most effective for the least amount of work. Windows has a large user base while Apple’s is smaller. That surely explains why the hacker would choose to target the Windows platform. Biggest bang for the buck.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;And to say that simple because Apple Viruses have not made the news does not mean they are invulnerable.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;PCs cannot talk to digital cameras.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;This is an outright lie. I have a Cannon PowerShot 110 and it has no problems downloading the images from it with the built-in software. Their statement is almost criminal.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Needless to say, Apple will not win me over with that Teen-Punk-Hipster series of ads. If anything, they have pushed me further away.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/115469819280488861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=115469819280488861' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115469819280488861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115469819280488861'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/08/rotten-apple.html' title='Rotten Apple'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12919771642509799568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-115461622740715247</id><published>2006-08-03T09:34:00.000-05:00</published><updated>2006-08-03T10:21:46.776-05:00</updated><title type='text'>PHP 5.1.4 and MySQL 5.0.11</title><content type='html'>A while back I set up a phpBB forum for a group of fellow gamers. I didn’t understand how the forum code worked, since it’s written in PHP and I’m a MSFT dev, but it impressed me with its ease of installation, performance and mod-ability. And since I’ve been growing tired of ASP.Net’s hoops (fighting with inherited web.configs, setting up WebApplications, IDE generated and mangled code, to compile or not compile and how to control it, unnecessary postbacks, … the list goes on, but this is not about ASP.Net) … where was I?&lt;br /&gt;&lt;br /&gt;Ah, yes, hoops.&lt;br /&gt;&lt;br /&gt;Well, setting up the forums was easy. Just drop the files in an web folder, run the install.php, and, bam, you have a web site. It reminded me of simpler days with regular ASP. So I decided to explore this refreshing language a bit more.&lt;br /&gt;&lt;br /&gt;I &lt;a href=&quot;http://www.php.net/downloads.php&quot;&gt;downloaded&lt;/a&gt; the latest version of PHP. There were several download choices, but after digging around for a description of each, I choose to go with the Windows Installer version. Anther was a complete package but very complicated install instructions that seemed to deal more with making the choice of with package to install than with the actual task of installing it. The last choice was a “Collection of PECL Modules”. er, ok. The Windows Installer will be fine, thanks.&lt;br /&gt;&lt;br /&gt;The install went easy enough, so the next step was to install &lt;a href=&quot;http://dev.mysql.com/downloads/mysql/5.0.html&quot;&gt;MySQL&lt;/a&gt;. (of course, the “Windows (x86)” version which is also an installer – setup.exe actually) While I was at it, I installed the &lt;a href=&quot;http://dev.mysql.com/downloads/gui-tools/5.0.html&quot;&gt;GUI-Tools&lt;/a&gt; because I’m not a Unix-Baby – I like pretty interface.&lt;br /&gt;&lt;br /&gt;So, with PHP and MySQL installed, I created a simple database-driven web page.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;&quot;&gt;//Test.php&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family:Courier New;font-size:85%;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;font-family:Courier New;font-size:85%;&quot;&gt;Connection vars are defined in config.php&lt;br /&gt;include &#39;config.php&#39;;&lt;br /&gt;$conn = mysql_connect($dbhost, $dbuser, $dbpasswd) or die (&#39;Error connecting to mysql&#39;);&lt;br /&gt;mysql_select_db($dbname);&lt;br /&gt;&lt;br /&gt;$query = &quot;SELECT id, name, rank FROM ttest&quot;;&lt;br /&gt;$result = mysql_query($query);&lt;br /&gt;&lt;br /&gt;while($row = mysql_fetch_row($result))&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;echo($row[0]);&lt;br /&gt;&lt;br /&gt;echo(&quot;&amp;lt;br /&amp;gt;&quot;);echo($row[0]);&lt;br /&gt;&lt;br /&gt;echo(&quot;&amp;lt;br /&amp;gt;&quot;);&lt;br /&gt;echo($row[0]);&lt;br /&gt;&lt;br /&gt;echo(&quot;&amp;lt;br /&amp;gt;&quot;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;mysql_free_result($result);&lt;br /&gt;mysql_close($conn);&lt;br /&gt;//EOF&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;Simple to the max.&lt;br /&gt;&lt;br /&gt;I pointed my browser at the newly created PHP localhost site and it returned;&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;&quot;&gt;Fatal error: Call to undefined function mysql_connect() &lt;/span&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;&quot;&gt;in&lt;br /&gt;c:\Inetpub\wwwroot\MyPHP\db\Test.php on line 2&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Ok, here’s where I need to fess up. This was not the first time I played with PHP. I had installed an earlier version, 4.1.X, some time before 5.X was available and created the same Test.php. But back then it worked. So, you can imagine my surprise when it did not this time. I mean, “undefined function call”?! PHP has MySQL functionality built it! At least I thought.&lt;br /&gt;&lt;br /&gt;A bit of digging revealed that MySQL interop was removed starting with PHP v.5. (I can’t find the link) The reason cited was that the users of PHP would likely already have the MySQL libraries installed. Ok, so if that’s the case, then if I do, and I do, why does it not work?&lt;br /&gt;&lt;br /&gt;Looking around, I kept finding &amp;lt;sarcasm&amp;gt;brilliant and helpful&amp;lt;/sarcasm&amp;gt; posts that said to “simply recompile PHP with *insert list of params here*” ... With what compiler and how? I have VC++ but … ugh, but even so, that would be a few days of messing with include locations, compile directives, and other missing files. And that’s IF I can even get it to load into the VS IDE.&lt;br /&gt;&lt;br /&gt;Luckily, more searching uncovered a &lt;a href=&quot;http://dev.mysql.com/downloads/connector/php/&quot;&gt;download&lt;/a&gt; for the binaries on the MySQL site.&lt;br /&gt;&lt;br /&gt;Short story from here;&lt;br /&gt;&lt;br /&gt;Download (from the above link) the mysql (and mysqli, too, while we are there) extensions for connecting MySQL 5.0.11 from PHP 5.1.4 and unzip to any folder.&lt;br /&gt;&lt;br /&gt;In the PHP install folder put;&lt;br /&gt;libmysql.dll&lt;br /&gt;&lt;br /&gt;In (PHP install folder)\ext;&lt;br /&gt;php_mysql.dll&lt;br /&gt;php_mysqli.dll&lt;br /&gt;&lt;br /&gt;Edit C:\Windows\php.ini;&lt;br /&gt;change&lt;br /&gt;&lt;blockquote&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;&quot;&gt;;extension_dir = &quot;./&quot;&lt;br /&gt;&lt;br /&gt;;extension=php_mysql.dll&lt;br /&gt;;extension=php_mysqli.dll&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;to&lt;br /&gt;&lt;blockquote&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;&quot;&gt;extension_dir = C:\php\ext&lt;br /&gt;&lt;br /&gt;extension=php_mysql.dll&lt;br /&gt;extension=php_mysqli.dll&lt;/span&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;After that, my test.php page worked.&lt;/p&gt;&lt;p&gt;Simple. After a lot of digging. :)&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/115461622740715247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=115461622740715247' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115461622740715247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115461622740715247'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/08/php-514-and-mysql-5011.html' title='PHP 5.1.4 and MySQL 5.0.11'/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/blank.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-115324081674947273</id><published>2006-07-18T11:07:00.000-05:00</published><updated>2006-07-18T11:40:16.836-05:00</updated><title type='text'>Posted an MMO Review</title><content type='html'>I posted a quick &lt;a href=&quot;http://the-casual-gamer.blogspot.com/2006/07/eve-online-my-first-impression.html&quot;&gt;review&lt;/a&gt; on a group blog, The Casual Gamer, about Eve Online - a massivly multiplayer online role playing game (MMORPG) set in space.&lt;br /&gt;&lt;br /&gt;I started playing MMOs back on 2003 when Star Wars Galaxies (SWG) launched. From there I tried Everquest 2 (EQ2), Everquest 1 (EQLive), World of Warcraft (WoW), Saga of Rysome, and Dark and Light, but have only stuck with EQ2.&lt;br /&gt;&lt;br /&gt;SWG went through 2 major changes. The first one was called The Combat Upgrade (CU). It aimed at making combat more like EQ2. I liked it, but not as much as EQ2. The second change was the New Game Experience (NGE, but by now that&#39;s prett obvious ;-) ). The NGE was exactly that, a New Game. It made the combat like that of a first person shooter and removed all the dynamics of the first two combat system.&lt;br /&gt;&lt;br /&gt;I cancelled soon after the NGE was forced upon us.&lt;br /&gt;&lt;br /&gt;EQ2 has been a blast until recently. Now it&#39;s simply mildly entertaining. After so many quests, you come to realize that it&#39;s nothing more than killing a number of &quot;things&quot; (mobs, creatures, whatever) for a prize and combat is just pressing a series of buttons to cast spells in a given order. My pattern of spells is weaken, slow, reduce resistance, poison, disease, damage over time and repeat. Throw in a few heals or protection spells for my comrades and you have my night all summed up in 10 seconds.&lt;br /&gt;&lt;br /&gt;The game developers try to hide the mundanity of it all with rare mobs. The result is a quest journal full of quests you cannot complete. Or clumps of missing hair because there are gobs of swamp constrictors, brush nightstalkers, and swamp nightstalkers but no brush constrictors, of which you need 20.&lt;br /&gt;&lt;br /&gt;Well, that and some mobs that are hard or impossible to kill solo. But that brings up a whole new set of issues. You need a group to kill some mobs and everyone in your group has a list of things they need help to kill. Who goes first? &lt;br /&gt;&lt;br /&gt;Eve, I was thinking, might be different. But it&#39;s not. They never are. As much as MMO companies try to sell us on the fact that their game is unique, it&#39;s not.&lt;br /&gt;&lt;br /&gt;Kill X for Y.&lt;br /&gt;&lt;br /&gt;Why? To get Y++ so you can kill X++.&lt;br /&gt;&lt;br /&gt;/sigh</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/115324081674947273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=115324081674947273' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115324081674947273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115324081674947273'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/07/posted-mmo-review.html' title='Posted an MMO Review'/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/blank.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-115254503856819977</id><published>2006-07-10T09:25:00.000-05:00</published><updated>2006-07-10T10:23:59.363-05:00</updated><title type='text'>The Shed: Part 3</title><content type='html'>During my vacation last week, I finished the exterior and we did the landscaping around it. The exterior needed trim work, some door adjustments, and a door seal. Around the perimeter the ground needed to be leveled out and plants planted, and scrap concrete had to be picked up. Though, since my last post about it, I see alot more has been done than just those action items.&lt;br /&gt;&lt;br /&gt;This front view shows the cleaned and leveled ground in front of the newly adjusted and weather-sealed door, the decorative grasses, and an overall view of the finished trim.&lt;br /&gt;&lt;a href=&quot;http://photos1.blogger.com/blogger/5404/1794/1600/ShedFront.jpg&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://photos1.blogger.com/blogger/5404/1794/320/ShedFront.jpg&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The back view shows decorative grasses, finished trim and ... the still unfinised patio steps in the lower left. *oops* That&#39;s a TODO that has been open since last year. I need to get that done to prevent further washout.&lt;br /&gt;&lt;a href=&quot;http://photos1.blogger.com/blogger/5404/1794/1600/ShedBack.jpg&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://photos1.blogger.com/blogger/5404/1794/320/ShedBack.jpg&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here&#39;s a close up of the soffit. I cut, bent and installed the aluminum trim. I knew *how* but lacked the technique at first. I ended up redoing one side after I figured out to make it look good. The edges had to be folded over to make it more sturdy and prevent buckling when nailed to the less-than-straight fascia.&lt;br /&gt;&lt;a href=&quot;http://photos1.blogger.com/blogger/5404/1794/1600/ShedSoffit.jpg&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://photos1.blogger.com/blogger/5404/1794/320/ShedSoffit.jpg&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It kinda shows the box I had to bend to make the transition between the front and side overhangs. (it must have a name... ) I wish I wound have taken pictures of that process; the measurement diagram, the layout, the cuts, the bends and finally fastening it in place.&lt;br /&gt;&lt;br /&gt;Also in the above picture, notice the soffit vent. I was not entirely sure how that was going to go together. What I ended up doing was leaving a 2&quot; gap between the siding and the soffit trim. Then the vinyl vent slipped right behind the trim and the siding J-channel.&lt;br /&gt;&lt;a href=&quot;http://photos1.blogger.com/blogger/5404/1794/1600/VentDiagram.jpg&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://photos1.blogger.com/blogger/5404/1794/320/VentDiagram.jpg&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here&#39;s a view of the fascia near the peak. Nothing of note except that I like the way it turned out. :-) I wanted to put an asthetic bend along the length of the fascia to provide a shadow line, but decided against it. Mistakes are too expensive.&lt;br /&gt;&lt;a href=&quot;http://photos1.blogger.com/blogger/5404/1794/1600/ShedPeak.jpg&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://photos1.blogger.com/blogger/5404/1794/320/ShedPeak.jpg&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is a view of a corner of the door to show the weather stripping and the good seal it made after I adjusted the tracks.&lt;br /&gt;&lt;a href=&quot;http://photos1.blogger.com/blogger/5404/1794/1600/ShedDoor.jpg&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://photos1.blogger.com/blogger/5404/1794/320/ShedDoor.jpg&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Next is the door lock and the electrical hookup to power the stereo and mini fridge ;)</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/115254503856819977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=115254503856819977' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115254503856819977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115254503856819977'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/07/shed-part-3.html' title='The Shed: Part 3'/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/blank.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-115254152847711101</id><published>2006-07-10T09:13:00.000-05:00</published><updated>2006-07-10T09:25:28.496-05:00</updated><title type='text'>Has it Been That Long?</title><content type='html'>Wow, I let a couple weeks go by without a post. Humm, busy doing what.... ?&lt;br /&gt;&lt;br /&gt;Last week I was on vacation. No excuse. The vacation was at home, so I had access to a PC. *And* we did quite a few things worth posting about. One thing, we finished the shed, which I&#39;ll post about after this. Not exciting, but, that&#39;s me ;-) Other things ... yardwork, 4th of July, birthday party, baby-sit (what&#39;s the plural form of that? Not plural in terms of multiple times, but rather multiple kids ), and .. humm.&lt;br /&gt;&lt;br /&gt;The week before that I was struggling with Asp.Net - which was putting me in a foul mood. In fact, I did start two harsh posts about Asp.Net but didn&#39;t publish either, and another I deleted bcause it was a rant about something I did not understand. Asp.net just feel so hacked together sometimes. It&#39;s like &quot;they&quot; add a feature but have to create a work-around for all the side-effects.</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/115254152847711101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=115254152847711101' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115254152847711101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115254152847711101'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/07/has-it-been-that-long.html' title='Has it Been That Long?'/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/blank.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-115133578791587964</id><published>2006-06-26T10:29:00.000-05:00</published><updated>2006-06-26T12:56:32.356-05:00</updated><title type='text'>I Got to the Point: Cedar Point</title><content type='html'>Cedar Point has always been the source of many good memories. I&#39;ve been going there since I was a kid. And now my wife and I take our children there. It&#39;s a summer wonder land, and the kids&#39; eyes light up like stars at the mention of going. But anymore, for me, the stars have dimmed.&lt;br /&gt;&lt;br /&gt;But let me tell you why...&lt;br /&gt;&lt;br /&gt;Prices are out of control. A bottle of water that costs $1 in the vending machine where I work costs $2.25 at Cedar Point. Flimsy t-shirts will run you $22. A chocolate covered banana runs over $4.&lt;br /&gt;&lt;br /&gt;A large portion of the day is spent waiting. Waiting for food, waiting for the restroom, waiting for rides. The wait for the more popular coasters is around 2 hours. And that&#39;s for a 10 second to an 80 second ride. Yes, Seconds. To put that into prespective, if I were to go alone and spend 12 hours there to ride all the coasters I wanted, I would spend 8 minutes on the rides (the &quot;active&quot; part of the ride, not the setup) and obvoiusly over 11 hours waiting in line or walking to the next ride. (the estimation is based on an average of 1 hr 30 min wait time.)&lt;br /&gt;&lt;br /&gt;Let me repeat that for emphasis; &lt;strong&gt;Out of 12 hours in the park, over 11 hours are spent waiting while under 10 minutes are spent on the rides.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;And in that 11 hours of waiting, I&#39;d be subjected to loud-mouthed punks in line for half of it, and&lt;br /&gt;incomprehensible, ear-piercing noise that is supposed to be our safety instructions for the other half, both of which made conversation impossible.&lt;br /&gt;&lt;br /&gt;Oh, and I guess I&#39;ll need to eat some time in there. But then, the food, with the exception of a few things like the fries by the Gemini, is hardly worth the wait.. or the cost!! Some food is prepaired and left out in the open for anyone to poke at, or sneeze on. (Next time I&#39;m taking pictures) There is no way that meets the food service codes. Not that the food preparers care. Almost none showed any ownership in their work or even a sense of urgency.&lt;br /&gt;&lt;br /&gt;My wife spent 13 minutes waiting for fried cheese on a stick while the food preparer lazily dipped and dunk each doomed chunk into the frier just to have it &quot;explode&quot; (as the preparer put it). Does Cedar Point not instruct them how to do their job let alone to at least simulate enthusiasm?!&lt;br /&gt;&lt;br /&gt;There was one guy who did a good job of keeping his area clean. The French Fry stand by the Gemini was the cleanest I&#39;ve seen in years. The ketsup and mustard was not smeared all over the condiment table, the seats and tables were cleaned right after they were vacated, and dropped fries were quickly swept up. He should be the training manager.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But, even with the waiting, the prices, the waiting, the questionable food, the waiting, and the deafening noise, and the waiting, we&#39;ll still go every year for as long as the kids&#39; eyes light up at the mention of Cedar Point.</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/115133578791587964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=115133578791587964' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115133578791587964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115133578791587964'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/06/i-got-to-point-cedar-point.html' title='I Got to the Point: Cedar Point'/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/blank.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-115098271674234145</id><published>2006-06-22T07:54:00.000-05:00</published><updated>2006-06-22T08:25:16.823-05:00</updated><title type='text'>Small Talk</title><content type='html'>In short; I can&#39;t do it.&lt;br /&gt;&lt;br /&gt;I mean, I can regurgitate the clichés, &quot;How&#39;s things?&quot;, &quot;Heck of a rain we had last night.&quot;, &quot;Enjoying the show?&quot; But why? Those, and the millions like it, are so, well, by definition of cliché, overused. So much so that if I&#39;m caught uttering any one of them, I feel the person to whom I flung it at will think I&#39;m a witless dolt!&lt;br /&gt;&lt;br /&gt;Instead, I guess, I&#39;m forced to make them think I don&#39;t care to talk to them but not even offering the standard conversation starter.&lt;br /&gt;&lt;br /&gt;Perhaps if I was into sports I could talk about the latest game. There&#39;s always someone talking about yesterday&#39;s game. But then, come to think of it, that&#39;s all the same thing, or often made up of phrases the announcer said. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I used to be able to Small Talk with just about anyone. Back when I was in the Army, I didn&#39;t have any problem at all. None of it has stuck with me so it&#39;s impossible to outline here, but I do remember chit-chatting through all the monotonous Peace-Time Army duties.&lt;br /&gt;&lt;br /&gt;All that was lost, though, shortly after I got into the I.T. field. I wonder if there&#39;s a connection. And come to think of it, I tend to rely heavily on movie quotes for material when I feel a certain segment in time needs some noise - as do many other programmers I know. In fact, it&#39;s become a respectable art; the ability to remember a movie quote to fit the current situation, and the more obscure the movie the better.&lt;br /&gt;&lt;br /&gt;Often the mere utterance of a quote leads to a triad of dialog exchange. The exchange can come in two or more forms; 1) use quotes from different movies to progress the conversation, 2) abandon the conversation and recite the whole movie, 3) Adapt the quote to fit the current context, and 4)abandon the conversation and recite any random quote from any random movie. &lt;br /&gt;&lt;br /&gt;There was an example of #3 my friend Dan did using a scene from Top Gun to wich he applied a programmer take to it. Let&#39;s see if I can remember....&lt;br /&gt;&lt;br /&gt;&quot;That&#39;s pretty dangerous, man, exiting a for loop. What were you thinking?&quot;&lt;br /&gt;&lt;br /&gt;&quot;Think?! I don&#39;t have time to &#39;think&#39;. When you are coding to an impossible schedule there&#39;s no time. Hack it, hit F5 and compile!&quot;&lt;br /&gt;&lt;br /&gt;or something like that. Dan or Jason, if you are reading this, feel free to post it :-)&lt;br /&gt;&lt;br /&gt;So, yeah, I can&#39;t regurgitate conversational clichés without cringing, but I can regurgitate movie quotes. How weird is that?&lt;br /&gt;&lt;br /&gt;(btw, that last line was from &lt;a href=&quot;http://www.imdb.com/title/tt0379786/quotes&quot;&gt;Serenity&lt;/a&gt;. Sure, maybe others, but I had Lenore&#39;s voice in my head when I wrote it ;-) )</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/115098271674234145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=115098271674234145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115098271674234145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115098271674234145'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/06/small-talk.html' title='Small Talk'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12919771642509799568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-115063934387116281</id><published>2006-06-18T08:45:00.000-05:00</published><updated>2006-06-18T09:02:23.886-05:00</updated><title type='text'>Shed: The Second Story</title><content type='html'>Yesterday I finished the sheeting and Jill helped with the roofing felt. Jason came to the rescue later and helped with the shingles. Of course, it was 90 out and the sun was at it&#39;s hottest when we started the roof. There must be some sort of mystical connection between shingles and sun... and concrete and sun... and ...&lt;br /&gt;&lt;br /&gt;Here&#39;s the almost-finished roof. All that&#39;s left are the ridge cap shingles.&lt;br /&gt;&lt;a href=&quot;http://photos1.blogger.com/blogger/5404/1794/1600/ShedRoof.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;&quot; src=&quot;http://photos1.blogger.com/blogger/5404/1794/320/ShedRoof.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Later that night, after-dusk-but-not-quite-night, I used the laser level to lay out the siding starter strip.&lt;a href=&quot;http://photos1.blogger.com/blogger/5404/1794/1600/Starter.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;&quot; src=&quot;http://photos1.blogger.com/blogger/5404/1794/320/Starter.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Oh, going back to earlier that day, my neighbor Jim added his contribution. While I was up a ladder nailing some sheeting in place, I saw someone out of the corner of my eye go into the shed. I looked down and saw that it was Jim and he started pounding a nail (it was actually a screw, but ... meh ;-) ) into one of the studs. Then, he pulled a roll of toilet paper from under his shirt and hung it on the screw. &quot;There!&quot; he declared. &lt;br /&gt;&lt;a href=&quot;http://photos1.blogger.com/blogger/5404/1794/1600/JimsContribution.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;&quot; src=&quot;http://photos1.blogger.com/blogger/5404/1794/320/JimsContribution.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Today we start the siding. My wife has been looking forward to this step for a while. hehe :-)</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/115063934387116281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=115063934387116281' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115063934387116281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115063934387116281'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/06/shed-second-story.html' title='Shed: The Second Story'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12919771642509799568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-115046741954239244</id><published>2006-06-16T08:39:00.000-05:00</published><updated>2006-12-13T03:00:56.693-05:00</updated><title type='text'>Revisiting the Game Log Parser</title><content type='html'>&lt;strong&gt;The Briefing&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I have a brief respite from work stuff, so I can spend a few minutes on an Add-In for the &lt;a href=&quot;http://mokee-mike-blog.blogspot.com/2006/05/game-log-monitor-and-parsers-part-5.html&quot;&gt;Game Log Parser&lt;/a&gt; mentioned a few posts back. It seems a new function for it has popped up.&lt;br /&gt;&lt;br /&gt;In Everquest 2, there are special quests that, upon completion, earn you and your guild status points (which is a good thing as more is better, but I&#39;m not going to go into why here). These special quests, or, Heritage Quests as they are called in game, consist of several steps. Many of the steps require a group of players to accomplish. So, to prevent doing each step multiple times, the guild members try to stay on the same step. Sometimes, though, they get out of sync for one reason or another.&lt;br /&gt;&lt;br /&gt;Tracking who is on what step can get confusing. Methods to track each player&#39;s progress range from a spreadsheet, to forum posts, to a specialized site like &lt;a href=&quot;http://www.eq2hq.org&quot;&gt;EQ2HQ&lt;/a&gt; (here&#39;s my guild&#39;s &lt;a href=&quot;http://www.eq2hq.org/guildview.php?guild=1150394528&quot;&gt;HQs&lt;/a&gt;). Each of those, though, require manual updating and most need some level of manual communication.&lt;br /&gt;&lt;br /&gt;What&#39;s needed most is a way to gather that information automatically.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Enter MokeeLogMonitor and the EQ2 Add-ins&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;When we last left the Log Monitor, it was about 70% complete. Now it is about 90% and has had some minor design changes.&lt;br /&gt;&lt;br /&gt;The first change was on the Add-In interface. Originally, it required 2 forms. That has been changed to a collection of UserControls. (UserControls are easier to dynamically add to a TabControl). Another change was to the UI. Instead of reloading each add-in&#39;s forms when the add-in is selected from a list, it now loads all the add-ins and all their forms (UCs) into a tabcontrol.&lt;br /&gt;&lt;br /&gt;Let me try to explain better..&lt;br /&gt;There&#39;s a Main tab, where all the Monitor&#39;s stuff is held, and a tab for each Add-in. Then, in each Add-In tab, there&#39;s a TabControl that holds all the add-in&#39;s forms as TabPages. Aw heck, here&#39;s a couple of pics.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;br /&gt;&lt;img src=&quot;http://i20.photobucket.com/albums/b215/Colain/LogParser/Main.jpg&quot; /&gt;&lt;br /&gt;&lt;strong&gt;Main Tab&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;Two Add-Ins are loaded; EQ2CombatParser and EQ2Harvestparser.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;br /&gt;&lt;img src=&quot;http://i20.photobucket.com/albums/b215/Colain/LogParser/Harvest.jpg&quot; /&gt;&lt;br /&gt;&lt;strong&gt;Harvest Add-In Tab&lt;/strong&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The Harvest Add-In has two forms; Data and Settings. (&quot;Silver&quot; is fake data)&lt;/p&gt;&lt;br /&gt;&lt;strong&gt;Back to the HQs&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;To automate the tracking of Heritage Quest progress, all I have to do is create an HQ Parser that looks for text that signals the completion of a step. Then, when a match is found, the Add-In could call a web service to update that character&#39;s HQ Progress!&lt;br /&gt;&lt;br /&gt;Then, of course, the rest is easy; set up a GridView on a web form to view and compare each person&#39;s progress, etc.&lt;br /&gt;&lt;br /&gt;Time to get to work ;-)</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/115046741954239244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=115046741954239244' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115046741954239244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115046741954239244'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/06/revisiting-game-log-parser.html' title='Revisiting the Game Log Parser'/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/blank.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://i20.photobucket.com/albums/b215/Colain/LogParser/th_Main.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-115040598584684976</id><published>2006-06-15T16:00:00.000-05:00</published><updated>2006-06-15T16:13:05.860-05:00</updated><title type='text'>Blog for the sake of blogging</title><content type='html'>I had several things to write about, but I just never got to it. Too much to do at work, and when I&#39;m home I do family stuff ... until the kids go to bed. &lt;br /&gt;&lt;br /&gt;That&#39;s usually when I get time to do what I want, be it hobby-programming, or playing EQ2 or just watching a movie. But, now that school is out, I don&#39;t have &quot;me-time&quot;. I have to keep the kids up late so they sleep in so that my wife can get a 2-hour nap in after work (she works 3rd shift).&lt;br /&gt;&lt;br /&gt;And speaking of that, I need to get home so she can nap for a few hours before going to work.&lt;br /&gt;&lt;br /&gt;We need a better child care solution.&lt;br /&gt;&lt;br /&gt;Wait, what was I talking about?</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/115040598584684976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=115040598584684976' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115040598584684976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115040598584684976'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/06/blog-for-sake-of-blogging.html' title='Blog for the sake of blogging'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12919771642509799568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-115020601190767216</id><published>2006-06-13T08:25:00.000-05:00</published><updated>2006-06-16T14:53:33.863-05:00</updated><title type='text'>Shed Pics</title><content type='html'>&lt;div align=&quot;center&quot;&gt;&lt;a href=&quot;http://i20.photobucket.com/albums/b215/Colain/Shed/IMG_2281.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;WIDTH: 391px; HEIGHT: 263px&quot; src=&quot;http://i20.photobucket.com/albums/b215/Colain/Shed/IMG_2281.jpg&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;The Hole.&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;Note the trench around the perimeter. It made me regret burrying &#39;crete chunks leftover from the pool patio under there.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;a href=&quot;http://i20.photobucket.com/albums/b215/Colain/Shed/IMG_2288.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;WIDTH: 391px; HEIGHT: 263px&quot; src=&quot;http://i20.photobucket.com/albums/b215/Colain/Shed/IMG_2288.jpg&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;The Slab&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;I wish we would have put our handprints in it. Well, at least we got the date ;-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;a href=&quot;http://i20.photobucket.com/albums/b215/Colain/Shed/IMG_2292.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;WIDTH: 391px; HEIGHT: 263px&quot; src=&quot;http://i20.photobucket.com/albums/b215/Colain/Shed/IMG_2292.jpg&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;FrankenShed&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;Up close it looks kinda bad right now because all the ... 2nd-Life lumber. But it&#39;ll get covered soon with siding the same color as the house.</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/115020601190767216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=115020601190767216' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115020601190767216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115020601190767216'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/06/shed-pics.html' title='Shed Pics'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12919771642509799568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://i20.photobucket.com/albums/b215/Colain/Shed/th_IMG_2281.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-115013227486377861</id><published>2006-06-12T11:25:00.000-05:00</published><updated>2006-06-12T12:11:14.913-05:00</updated><title type='text'>Sunburned, Sore, Scrapped, and ... Something</title><content type='html'>All of last weekend was spent putting up our poolhouse... I mean, shed. It&#39;s 10&#39;x10&#39; with 8&#39; walls on a slab and a simple 8/12 pitch roof on top. But I feel like it&#39;s a 30x100 pole barn right about now. I ache all over.&lt;br /&gt;&lt;br /&gt;Two weeks ago, Jason, my dad, my brother-in-law, my wife Jill and I poured the concrete slab for it. After letting it cure a week, then being busy or getting rained-out, we finally were able to start the actual structure.&lt;br /&gt;&lt;br /&gt;Pouring the slab went smoothly. Three of us manned wheel barrels while two spred it out (my oldest son helped with this part, too). It went alot easier than the prep work. Whitehouse code requires a rat wall along the perimeter 18&quot; onto the ground. I tried to keep the width to about 3 to 4 inches to save concrete. But keeping it that narrow made it a bit more difficult to coax all that dirt out with a pick and a shovel.&lt;br /&gt;&lt;br /&gt;Oh, and when the wheel-barrelling-and-spreading was all done, I discovered I miscalculated how much &#39;crete I needed. The driver estimated there was about 2 cubic yards left in the truck.... and no, I do not get a refund.&lt;br /&gt;&lt;br /&gt;Then last week, my father-in-law offered some lumber given to him from a local builder. I graciously accepted 30 2x4x12&#39;s, 10 4x8 sheets of 7/16&quot; OSB and a couple of 2x6x10&#39;s. That about made up for my previous estimation error. :-)&lt;br /&gt;&lt;br /&gt;Just a few more sheets of OBS will finish up the exterior. This weekend I hope to get the roofing done. Hopefully we can get some siding to match the house soon so the neighbors do not have to look at the used OSB that&#39;s exposed now.&lt;br /&gt;&lt;br /&gt;After that, the overhead door then the electrical! :-D&lt;br /&gt;&lt;br /&gt;Then the mini-fridge, the stereo, the ...</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/115013227486377861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=115013227486377861' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115013227486377861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/115013227486377861'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/06/sunburned-sore-scrapped-and-something.html' title='Sunburned, Sore, Scrapped, and ... Something'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12919771642509799568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-114972687275398447</id><published>2006-06-07T19:32:00.000-05:00</published><updated>2006-06-07T19:34:32.766-05:00</updated><title type='text'>Dig-ity-Dig: Part 2</title><content type='html'>&lt;strong&gt;Recap:&lt;/strong&gt;&lt;br /&gt;- I need access to a password protected Absolute Database file.&lt;br /&gt;- The app author has not replied to my emails.&lt;br /&gt;- The exe that uses the db file has been compressed making it impossible to examine the String Resource Table - where I assume the db password is stored.&lt;br /&gt;- Absolute Database does not have an ODBC Driver so I cannot use brute force to crack the password... unless I acquire and learn Delphi, which I an not prepaired to do just yet.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now, the conclusion of our Journey.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Leg Eleven: Land Ho!!&lt;br /&gt;&lt;/strong&gt;- I figured if the exe was uncompressed at run time, all I have to do is examine its process memory when it&#39;s running.&lt;br /&gt;- Since I needed low-level memory access, I started a C++ project and looked up how to use ReadProcessMemory() which lead me to OpenThreadToken(), ImpersonateSelf() and SetPrivilege()&lt;br /&gt;- While looking for syntax and how to use the wide range of cryptic variable types ( wth is PDWORD?) I found &lt;a href=&quot;http://www.codeproject.com/csharp/freecelldiscombobulator.asp&quot;&gt;FreeCell Discombobulator&lt;/a&gt; written in C#!! It reads the FreeCell process memory and can tell you where all the cards are. There&#39;s another &lt;a href=&quot;http://www.codeproject.com/csharp/minememoryreader.asp&quot;&gt;sample&lt;/a&gt; that does the same with MineSweep - but with mines and not cards.&lt;br /&gt;- I altered the sample to look at the app I&#39;ve been examining and made it write the memory footprint to a binary file.&lt;br /&gt;- Open the file in a hex editor and search for the databse file name and ....&lt;br /&gt;&lt;br /&gt;BAM!!&lt;br /&gt;There was the password just a few bytes away.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Leg Twelve: Ah, The Sweet Smell of..... aw crap.&lt;br /&gt;&lt;/strong&gt;- After opening the database in the AbsoluteDatabase UI using the newly discovered password, I find that the data I was expecting to see in it was not there.&lt;br /&gt;&lt;br /&gt;Ah well. I still learned a lot.</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/114972687275398447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=114972687275398447' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/114972687275398447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/114972687275398447'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/06/dig-ity-dig-part-2.html' title='Dig-ity-Dig: Part 2'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12919771642509799568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-114968854866134922</id><published>2006-06-07T08:40:00.000-05:00</published><updated>2006-06-07T08:55:48.710-05:00</updated><title type='text'>Binary Sons</title><content type='html'>I have two sons who are 9 and 6. The oldest of the two is 9. {don&#39;t ask me. it sounded funny in my head}. They are the most opposite two siblings can be who have come from the same parents. { yes, I am sure that they are from the same parents ;-) }&lt;br /&gt;&lt;br /&gt;My dad observed behavior the other day that further established their opposite-ness when he took them to a restaurant.&lt;br /&gt;&lt;br /&gt;When the waitress brought the food to the table, my oldest said about the food, &quot;Nice presentation.&quot; At the same time my other was slurping a big blob of mustard off his plate through a straw.&lt;br /&gt;&lt;br /&gt;I rest my case.</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/114968854866134922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=114968854866134922' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/114968854866134922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/114968854866134922'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/06/binary-sons.html' title='Binary Sons'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12919771642509799568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-114968684320123903</id><published>2006-06-07T08:14:00.000-05:00</published><updated>2006-08-31T09:12:47.793-05:00</updated><title type='text'>Dig-A-Dig-A-Dig-ity-Dig</title><content type='html'>(This is a repost as a result of a few techinical difficulties)&lt;br /&gt;&lt;br /&gt;There&#39;s this cool application I use to look up things for one of my hobbies. It&#39;s very handy, but is missing a feature that would make it easier to use. I sent a few emails to the author requesting the feature or the necessary information to create it myself, but he or she has failed to answer so far. But instead of waiting, I decided to dig into his application to try to discover what I need.&lt;br /&gt;&lt;br /&gt;That exploration lead me into some areas in which I have never been. Strange languages, new databases, encryption, compression and disassemblers. here is the 50¢ tour.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Leg One: The Lay of the Land&lt;/strong&gt;&lt;br /&gt;- This app has an exe and a .dat file. Obviously the .dat file is the database (of wich is fillled with data that is not explicit property of the author, btw) into which all the data is based... er, stored. I need access to that database, so I had to find out what type it is. It could be Access (doubtful because the look and feel of the App&#39;s UI hinted that the author was not a Microsoft guy), XML (the .dat file looked too small for theamount of data it stored), binary sequential thingy, or some other database (of which there are many).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Leg Two: Database Discovery&lt;/strong&gt;&lt;br /&gt;- I opened the .dat file first in Notepad. That would tell me right off the bat if it was plain XML. Nope. It was gibberish. But it could still be a compressed XML file.&lt;br /&gt;- I opened it in a hex editor. The first line was &quot;41 42 53 30 4C 55 54 45 44 41 54 41 42 41 53 45&quot;, or, &quot;ABS0LUTEDATABASE&quot;. While that was quite a find, I never heard of Abs0lute Database and had no idea what to use to access it.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Leg Three: Database Management System&lt;/strong&gt;&lt;br /&gt;- I searched Google for Abs0lute Database and found countless sites featuring announcements from ComponentAce about their &quot;BDE Replacement that ... &quot;. I&#39;ll skip the advertisement since the Sales Department did a very thorough job of spamming all the Newsgroups and Techie Sites all over the web.&lt;br /&gt;- I downloaded the installer and ran it. At first I was not able to install it because it said it needed Delphi or C++ Builder, but I misunderstood and failed to check thenecessary boxes at install time. After correcting myself I was able to install the DBMS for Abs0lute Database.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Leg Four: Password?! @%$# &lt;/strong&gt;&lt;br /&gt;- I opened the .dat file and was prompted with the dreaded &quot;Password&quot; dialog box. Well, dreaded for me because I didn&#39;t know the password.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Leg Five: Newbie Attempt&lt;/strong&gt;&lt;br /&gt;- I createdd a new password-protected Abs0lute Database in the DBMS and opened each in a hex editor - which was a newbie attempt to see what the differences were and if a section of one could replace a section of the other. See, the database encrypts the data and uses a unique key - maybe based on the password. Regardless, replacing the header section did not let me open it with my password. heh, I&#39;m embarrassedd to admit that I thought it would work.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Leg Six: Into the Executable&lt;/strong&gt;&lt;br /&gt;- Since the database needed a password, I figured it would be in a string resource section in the executable.&lt;br /&gt;- I opened the exe in a hex editor to look for the resource table. Experiments on other exe&#39;s yielded promising results, but nothing could be located in the actual exe.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Leg Seven:Disassembly&lt;/strong&gt;&lt;br /&gt;- Thinking maybe the author used hex values to instantiate the password, I Searched Google for a decompiler, a Delphi/C++ Builder decompiler.&lt;br /&gt;- I found several, but settled on one initially; Resource Hacker.&lt;br /&gt;- Resource Hacker opened the exe and very nicely displayed a treeview of all the resources in the it. I expanded the String Table and selected the first one and the following message popped up; &quot;This file has a non-standard resource layout...it has probably been compressed with an &#39;Exe compressor&#39;.&quot;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Leg Eight: Decompress as Pressure Builds&lt;/strong&gt;&lt;br /&gt;- I search Google for &quot;&#39;exe compressor&#39; uncompress&quot;&lt;br /&gt;- Amid the gaggle of Shareware sites that include misleading keywords in their pages, I found UPX.&lt;br /&gt;- Tried UPX but &quot;This file was not compressed with UPX&quot;&lt;br /&gt;- More searching found Petite, but it&#39;s README states, &quot;There is no Petite decompressor.&quot;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Leg Nine: Back to the Database&lt;/strong&gt;&lt;br /&gt;- Maybe if I could find an Abs0luteDatase ODBC Driver I could strong-arm it.&lt;br /&gt;- Found mention of a driver in a &lt;a href=&quot;http://www.elists.org/pipermail/delphi-3p/2004-June/004557.html&quot;&gt;Spam Post from Ed Larson&lt;/a&gt; but the link he provided just went to the main page of the ComponentAce web site. A search for ODBC on his site returned no results.&lt;br /&gt;- Sent feedback about Mr Larson&#39;s erroneous post via their web site.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Leg Ten: Step Back and Think&lt;/strong&gt;&lt;br /&gt;- Wait for the author to respond to my inquiries.&lt;br /&gt;- Wait for Component Ace to provide the driver it said it had.&lt;br /&gt;&lt;br /&gt;It was a journy of discovery and I learned alot even though I did not get to the destination... yet ;-)</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/114968684320123903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=114968684320123903' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/114968684320123903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/114968684320123903'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/06/dig-dig-dig-ity-dig_07.html' title='Dig-A-Dig-A-Dig-ity-Dig'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12919771642509799568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-114960230340566946</id><published>2006-06-06T08:03:00.000-05:00</published><updated>2006-06-06T10:49:00.336-05:00</updated><title type='text'>Subroutines</title><content type='html'>Subroutine is a term usually associated with computer programming. Generally speaking, they are a small part of a larger process. These parts could be made up of a set of instructions, or even one discrete command. Regardless of scope, they likely have a related subject or a common goal.&lt;br /&gt;&lt;br /&gt;Regardless of association, any day is made up of several subroutines; the WakeUpAndGetReady subroutines, the DriveToWork, or the StartTheWorkDay subroutine.&lt;br /&gt;&lt;br /&gt;My StartTheWorkDay() subroutine goes something like this;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;protected void StartTheWorkDay()&lt;br /&gt;{&lt;br /&gt;EnterAt6thFloor();&lt;br /&gt;EnterKitchenette();&lt;br /&gt;MakeCoffee();&lt;br /&gt;EnterCubicle();&lt;br /&gt;StartComputer();&lt;br /&gt;EnterKitchenette();&lt;br /&gt;PourCoffee();&lt;br /&gt;EnterCubicle();&lt;br /&gt;LogOnComputer();&lt;br /&gt;SetupApplications();&lt;br /&gt;CatchUpOnWebStuff();&lt;br /&gt;StartProjects();&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;As we can see, that subroutine is made up of several subroutines. Let&#39;s look at one of the more interesting ones, SetupApplications().&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;protected void SetupApplications()&lt;br /&gt;{&lt;br /&gt;ThwartTrackIt();&lt;br /&gt;StartApp(Apps.Outlook);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;StartApp(Apps.WindowsExplorer);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;StartApp(Apps.IE);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;StartApp(Apps.VS2005);&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;More Subroutines. And what&#39;s that &lt;span style=&quot;font-family:courier new;&quot;&gt;ThwartTrackIt()&lt;/span&gt;? What is TrackIt and why do we need to Thwart it?&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.numarasoftware.com/Track-It.asp&quot;&gt;TrackIt!&lt;/a&gt; is a spybot application. It audits your system, allows someone to watch what you are doing, and even lets them take control of your system. The official stance is that it &quot;&lt;span style=&quot;font-family:arial;&quot;&gt;delivers the tools you need to cost effectively manage your companyÂs IT assets and deliver superior support to your end-users&quot;.&lt;/span&gt; Bah!! It&#39;s SpyWare.&lt;br /&gt;&lt;br /&gt;I&#39;m a developer, I need neither auditing, monitoring nor support. well, not the support in the level anyone at the help desk here can provide ;-)&lt;br /&gt;&lt;br /&gt;So what does &lt;span style=&quot;font-family:courier new;&quot;&gt;ThwartTrackIt()&lt;/span&gt; do? Let&#39;s look at it.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;protected void ThwartTrackIt()&lt;br /&gt;{&lt;br /&gt;StartApp(App.TaskManager);&lt;br /&gt;KillProcess(&quot;TIREMOTE.exe&quot;);&lt;br /&gt;KillProcess(&quot;Tiremote.exe&quot;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;StopApp(App.TaskManager);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&lt;br /&gt;StartApp(App.MMC.Services);&lt;br /&gt;StopService(&quot;Track-It! Remote Control&quot;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;StopApp(App.MMC.Services); &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&lt;/span&gt;And that&#39;s that! The spies will not spy today! Mwhahahaha!!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Subroutines are little,consistentt, comforting snippets of life - routine and predictable.&lt;br /&gt;&lt;br /&gt;I had more to say, but the morning routine is running a bit long.</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/114960230340566946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=114960230340566946' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/114960230340566946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/114960230340566946'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/06/subroutines.html' title='Subroutines'/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/blank.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-114926155322384981</id><published>2006-06-02T10:10:00.000-05:00</published><updated>2006-06-02T10:19:13.240-05:00</updated><title type='text'>Visual Studio 2005 Feature Request</title><content type='html'>Why can&#39;t I set Auto Hide for the accessroy windows to be contextual based?&lt;br /&gt;&lt;br /&gt;When I&#39;m in Form Designer mode, I want to see the Toolbox and Properties windows. If they are set to Auto Hide, they slip away about the time I need them. Additionally, the toolbox covers the form with which I am working so it makes it difficult to place the control I selected.&lt;br /&gt;&lt;br /&gt;When I&#39;m in the Code View, I don&#39;t need either the Properties or the Toolbox, yet, if I broke down and pinned them while in Form Designer view, it needlessly reduces the usable screen by covering it with blank windows.&lt;br /&gt;&lt;br /&gt;I think I&#39;ll send in a Feature Request to Microsoft. There&#39;s probably already a setting somewhere to do this, so I&#39;ll search for it before I send it. If I&#39;m not back in a few days, send help.</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/114926155322384981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=114926155322384981' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/114926155322384981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/114926155322384981'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/06/visual-studio-2005-feature-request.html' title='Visual Studio 2005 Feature Request'/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/blank.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18357892.post-114925571334581201</id><published>2006-06-02T08:13:00.000-05:00</published><updated>2006-06-02T09:00:53.253-05:00</updated><title type='text'>Rewriting the Wheel</title><content type='html'>My youngest son is in kindergarten. And he&#39;s quite ... animated? active? Yes, let&#39;s go with active. My active, 6 year-old son has a 20 minute bus ride after school. Add all that up and it&#39;s a recipe for trouble. We know, we&#39;ve seen the menu.&lt;br /&gt;&lt;br /&gt;So, in tandem with a few behavioral lessons, my wife occasionally picks him up from school ... as sort of a reward for good behavior. I know what that sounds like; kid misbehaves to get what he wants and we give in. But that&#39;s not the case. Nor is it the topic of this post, so I&#39;ll skip the excursion into our parental theories ;-)&lt;br /&gt;&lt;br /&gt;On the days she picks him up from school, she sends a note stating her intentions.&lt;br /&gt;&lt;br /&gt;One day I was off work and she suggested I pick him up. &quot;And don&#39;t forget to write the note.&quot;&lt;br /&gt;&lt;br /&gt;&quot;Ok, what do I write?&quot; I asked.&lt;br /&gt;&lt;br /&gt;Silence came from the kitchen.&lt;br /&gt;&lt;br /&gt;I go into the kitchen and repeat myself since it appeared as though she didn&#39;t hear me. &quot;What do I write on the note?&quot;&lt;br /&gt;&lt;br /&gt;&quot;Are you serious?&quot; she asked with &lt;em&gt;that look&lt;/em&gt; on her face. &quot;You can&#39;t figure out what to write?&quot;&lt;br /&gt;&lt;br /&gt;&quot;Well....&quot;&lt;br /&gt;&lt;br /&gt;Standing there like a headlighted deer, I trace my thought process back to my job. See, so much code has been written by so many programmers that love to share, that, if you need to do a certain thing, chances are it&#39;s already been done. All you have to do was Google a few keywords and &quot;Bam!&quot; you have something useful or at least something that can be tweaked to suit your needs.&lt;br /&gt;&lt;br /&gt;I was applying the same strategy to this Note. If she has already written one, or several in this case, why should I expend the brain cycles to rewrite it?&lt;br /&gt;&lt;br /&gt;After explaining that to her and getting another look, I decided to ask Google instead.&lt;br /&gt;&lt;br /&gt;That&#39;s not true. I did come up with some words that did an acceptable job of conveying the fact that I was going to pick my son up after school. But I&#39;ve been wondering about the wording ever since....</content><link rel='replies' type='application/atom+xml' href='http://mokee-mike-blog.blogspot.com/feeds/114925571334581201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18357892&amp;postID=114925571334581201' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/114925571334581201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18357892/posts/default/114925571334581201'/><link rel='alternate' type='text/html' href='http://mokee-mike-blog.blogspot.com/2006/06/rewriting-wheel.html' title='Rewriting the Wheel'/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/blank.gif'/></author><thr:total>0</thr:total></entry></feed>