<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>James Elgee</title>
    <description>Software Engineer from Portland Oregon</description>
    <link>http://blog.druegor.com</link>
    <atom:link href="http://blog.druegor.com/feed.xml" rel="self" type="application/rss+xml" />
    
      <item>
        <title>Back Online After Hiatus</title>
        <description>&lt;p&gt;My bots went through a bit of a perfect storm of unfortunate events.  When the client finally went from Beta to mainstream everything was working fairly well.  Then they released a bunch of updates to the ways trades and trade windows are shown up on the screen. This of course managed to break my bot but not in such a way that they wouldn’t run.  However, they did fail more than they would succeed and that was unacceptable for me so I took them offline.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Then I got offered a new job opportunity.  Because of this I wasn’t able to spend the quality time I needed to fix my bot code.  Currently our work is on a somewhat hiatus for the holiday season so I’ve had an opporunity to finally get around to fixing my bots.&lt;/p&gt;

&lt;p&gt;I’m very happy with my changes for my first pass.  I haven’t gotten around to fixing other pieces of the code that are broken due to the trade changes like the Transfers between my bots or iterating over the cards I want to purchase.  But these should hopefully work themselves out now that I have fixed the initial trade view.&lt;/p&gt;
</description>
        <pubDate>Tue, 16 Dec 2014 00:00:00 +0000</pubDate>
        <link>http://blog.druegor.com/back-online-from-hiatus/</link>
        <guid isPermaLink="true">http://blog.druegor.com/back-online-from-hiatus/</guid>
      </item>
    
      <item>
        <title>Bots kept running during my entire vacation</title>
        <description>&lt;p&gt;When I left for vacation I wasn’t sure my bots would stay online and keep doing work especially during two separate update days.  But everything seemed to have worked pretty well.  They made a reasonable number of completed trades (reasonable being relative).  I did have one person manage to find a little loop hole in my pricing so they got a few extra tickets for a card that was being bought for about twice its price.  Oh well these things happen and their exploitation helped me figure out what I had done wrong and fix my auto update pricing code.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;I added a few more features to the actual bot site.  It now has an api to retrieve my buy and sell prices that I use for each card so someone else can take this and use it or they can just use it to look up card prices until I finish making a more friendly UI.  The api is mainly for use with other people’s bots if they want another price point of reference so they don’t have to try and figure out how to scrape the prices from my sales pages (which don’t exist yet).  I’ve also included a collection price checker that will let you know how much your collection is worth.  Its not very robust yet it only takes in a csv file in a very specific column layout.  But its a start and maybe someone will appreciate it.  I use it to determine if ebay lots are a worthwhile deal.  Right now the ebay sales are selling for only a few dollars less than my quote so not really a good deal.  I think when I get a chance after my first task this afternoon I will work to accept deck files instead of just csv since this is the method that I prefer to use when I’m exporting.&lt;/p&gt;

&lt;p&gt;Today I think I’m going to finish up the post code that will rotate through the standard cards that are worth some money so maybe I can get some people to sell me specific cards that I am looking for as they rotate.   I suppose I’ll have to add a bot setting similar to the Set filter that filters on which cards to show on the classifieds board.   I’m planning on showing the buy and sell price of each card with the buy or sell price marked out with a dash if I am not buying or selling the card.  Hopefully that will be self explanatory and will work out the way I want.  I think I’ll have the cards on the board rotate every two minutes so that it is somewhat fresh.&lt;/p&gt;

&lt;p&gt;After I finish these little tweaks I’ll probably get to work on the automated tests I am lacking.&lt;/p&gt;
</description>
        <pubDate>Fri, 21 Mar 2014 00:00:00 +0000</pubDate>
        <link>http://blog.druegor.com/bot-worked-while-on-vacation/</link>
        <guid isPermaLink="true">http://blog.druegor.com/bot-worked-while-on-vacation/</guid>
      </item>
    
      <item>
        <title>Learning how to deal with update day</title>
        <description>&lt;p&gt;I guess I had wanted to figure out how to handle downtimes and the EULA screen so today’s work was a good thing.  However, my first pass at the EULA screen caused the application to shut down.  It did agree but something else happened.  I think I tried to read the screen mid click while pressing the agree button.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;I also implemented a basic waiting / retry for logging into the server.  However, after I finally got logged in I discovered that WotC in a show of progressive coding has actually provided an API endpoint that lets me know if the server is available.  I found this while looking at their online website to see the server status.  So I don’t have to try and login then sleep on it for a while.  Now I can just poll the service every little bit and login after it comes back online.  Of course if the bot gets a little bigger I’m going to have to route this traffic through my own server so I don’t spam hundreds or thousands of calls a second to their server.  Wouldn’t want them to get mad at me for something that ridiculous.  So I will have to store the value on my server and allow people to ping my server hundreds of times a second and I’ll just update once a second myself.  I doubt they will mind me pinging their status API once a second.  It wouldn’t be much of an API if they cared about that frequency.&lt;/p&gt;

&lt;p&gt;Unfortunately with every release I feel like they change the colors or some feature that cause my bot to malfunction when I’m trying to get everything to run smoothly.  I’m just glad that they still have the small window in the bottom that shows when a user submits the trade and that the program sends a sound command when the trade is started/ended so I can use these windows based change events to kick start my program instead of just continually polling the screen to see if anything changed like I did with my last bot.  I did have to slow down some of the functionality because I wasn’t reliably getting the results I was expecting.  So now I limit the number of cards I read from the screen and the scrolling that I have to do to shave off the time I lost by slowing things down.&lt;/p&gt;

&lt;p&gt;I have started the process of doing the automated transfer bot.  It is currently setup to just move cards based on a bot priority.  Trying to spread four versions of each card out to each bot.  However, I want to setup a few bulk sell bots and for these I need to move cards over that will make me a profit.  I’m not sure the best way to do that along with keeping my other bots stocked.  Maybe I’ll have to designate one bot to be stocked and then the others get stocked based on product they need for what they are trying to do.  Buy bots get tickets, sell bots get cards of the appropriate sell value.  So on and so forth.  I’ll have to look into that more as it progresses.&lt;/p&gt;
</description>
        <pubDate>Fri, 28 Feb 2014 00:00:00 +0000</pubDate>
        <link>http://blog.druegor.com/mtgo-client-update-date/</link>
        <guid isPermaLink="true">http://blog.druegor.com/mtgo-client-update-date/</guid>
      </item>
    
      <item>
        <title>MTGO Trade Bot Beta release almost ready</title>
        <description>&lt;p&gt;So I’m not quite sure where I left off before I left for Mexico and what I’ve gotten done since I got back.  But I’ve added some key new features for sure.&lt;/p&gt;

&lt;!--more--&gt;

&lt;ul&gt;
  &lt;li&gt;Now when the executable for the bot is started it will start up the MTGO beta client getting the newest version and then log in when the screen becomes available.&lt;/li&gt;
  &lt;li&gt;On initial start-up of the bot it will update the collection cards / trade able cards based on your bot settings.  This is in case you decided to use your account and do some trading or managing of cards on your own.  That way the database will properly reflect the cards that your group has and which account has those cards, etc.&lt;/li&gt;
  &lt;li&gt;The chat window is still causing some issues since I have been using the chat window to send messages by actually clicking the button which was not always enabled since apparently I type in the text box and try to click too fast.  It’s been a pain to figure out when the button is enabled but I believe I have resolved this issue by slowing some things down.&lt;/li&gt;
  &lt;li&gt;I was able to find a few more online price points for initial card pricing of all types.  So now I can have my bots sell/buy commons and uncommons at their appropriate values.  It will also allow me to have more focused bulk buying bots.
    &lt;ul&gt;
      &lt;li&gt;This is because when you run a bulk bot the point is to get some increased value from the whole bulk purchase.  So my bots run on the idea that if buying the card individually would cost the same or more than the bulk price I’m offering then I’ll purchase it.  Otherwise its more cost effective to find it elsewhere.&lt;/li&gt;
      &lt;li&gt;This is also why my bots will progressively take more and more copies of a given card.  My bots that buy the most expensive cards will take the least number of copies 6-8.  Where the bots that buy cards buy the hundreds will usually take about 4 per bot I’m running.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;remaining-bot-features&quot;&gt;Remaining Bot Features&lt;/h2&gt;
&lt;p&gt;There are still a few features for the bot itself that I want to finish before I would want to consider it ready to progress from beta.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;I want to get some automated tests for the core functional logic.&lt;/li&gt;
  &lt;li&gt;I need to switch the logging from local file logging to instead store the logs in a queue and push them to the server using the API when the queue fills up or an error is encountered.&lt;/li&gt;
  &lt;li&gt;I want to get the logic implemented to do the automated transfer of cards between two bots so you can move play sets up to each of your bots in order.  I think this shouldn’t be too hard it just didn’t seem like as important of a priority for initial release.&lt;/li&gt;
  &lt;li&gt;Currently if you lose internet connection or the application disconnects you that is pretty much it.  There is no good way implemented to handle internet connection loss, disconnection or most importantly the program shutting down from an error.&lt;/li&gt;
  &lt;li&gt;The last is just the automation of the agreement to the Terms and Conditions screen when the software as had an update.  This should be simple but I’ll have to wait until the next time I see the screen before I can code for it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;bot-website&quot;&gt;Bot Website&lt;/h2&gt;
&lt;p&gt;The site is slowly coming together.  I just added the feature to sign up for an account but I haven’t yet implemented the ability to add groups or bots to groups yet.  I’m working on the functionality to edit the bots current running settings first.  Since having the ability to add the name of your bot to my server seemed like a bit of a waste if you couldn’t even see what the available settings are for the bot.&lt;/p&gt;

&lt;p&gt;I’m about done with the settings edit screen I’m just trying to make it a little cleaner by separating it into tabs.  After that I’m going to add a brief counter to the page that lets you know when you can expect the bot settings to go live on your current running bot.  This won’t be seen by anyone but me currently since I’m the only one with running bots.  But the update timer for changes happens every 10 minutes.  So it will be a timer based on how much time has elapsed since the bot was last updated from the server.&lt;/p&gt;

&lt;p&gt;The bot updates from the server so frequently to make sure that each bot knows how many copies of any given card the entire group has as a whole.  This way the max copies to buy setting actually means something.  This value can be different for each bot so if you have one that buys rares at a dollar a piece and you only want to get 4 of any card on that bot that is fine.  Your other bot that buys at 50 cents can be set to buy 8 so that a customer can sell their cards for prime value to one but still offload them to another bot when you’ve met your quota if they want.&lt;/p&gt;

&lt;p&gt;When I finish the bot settings feature I’m going to open up the ability to add a group and your bots to that group.  This will allow people to start providing feedback on the settings page and the customized message page when I finish that.  Also they can get everything set-up and ready to go for when I release the live product.&lt;/p&gt;

&lt;p&gt;I’m still fudging with the numbers one how I would like to fiscally get reimbursed for the bot.  I am currently working off the idea of a flat 2% across the board for the initial release with some sort of incentive program for each month.  Maybe a few trades free based on the amount paid the month before, similar to a cash back program.  I think for the first month of two I’ll provide free use to anyone that wants to try it out since essentially everyone that uses it right away is going to be part of my beta program.  We all know that beta programs should be free.  No point in paying for a product that only works some of the time.&lt;/p&gt;
</description>
        <pubDate>Wed, 26 Feb 2014 00:00:00 +0000</pubDate>
        <link>http://blog.druegor.com/mtgo-trade-bot-beta-release-almost-ready/</link>
        <guid isPermaLink="true">http://blog.druegor.com/mtgo-trade-bot-beta-release-almost-ready/</guid>
      </item>
    
      <item>
        <title>Mexico Bound</title>
        <description>&lt;p&gt;I have to leave town for a few days to do some goodwill work in another country.  So I’ve decided I’ll just leave my bots online and let them either run out of money or cause the client to crash.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;However, I’d like to take a second to give a huge thanks to Jesse Reeves without whom I would not have been able to resolve some of the key issues that were causing my bot to unsuccessfully trade for the last day.&lt;/p&gt;

&lt;p&gt;Hopefully if anyone is reading this you will take advantage of this time to use my bots and see what process you like or don’t like about its operation.  Feel free to give me feedback the bot is still very much an in progress work.&lt;/p&gt;

&lt;p&gt;Initially I listed the full value of your account when you logged in, or at least the value of the cards visible for trade.  I felt this was causing some confusion as to why I didn’t want to buy the cards available for trade since there is a max limit.  It also caused considerable slow down since scrolling through the entire list of the large card sets and getting the appropriate screen values is not free.  However, I’m trying to put a price checker on the site so you can upload a deck file or collection file and get the value of your cards from me as a buyer.&lt;/p&gt;

&lt;h2 id=&quot;thanks-management&quot;&gt;Thanks, Management&lt;/h2&gt;
</description>
        <pubDate>Sun, 16 Feb 2014 00:00:00 +0000</pubDate>
        <link>http://blog.druegor.com/out-of-town/</link>
        <guid isPermaLink="true">http://blog.druegor.com/out-of-town/</guid>
      </item>
    
      <item>
        <title>The too rushed effect</title>
        <description>&lt;p&gt;I want to apologize for some of the bad user experiences that you guys have had using my bots thus far.  As I mentioned I wrote this in a little under five days while working full time.  So my quality control in a few areas is somewhat lacking.&lt;/p&gt;

&lt;!--more--&gt;

&lt;ul&gt;
  &lt;li&gt;Logging:  If you are force to write your own version of logging from some reason keep in mind that multiple threads will cause a locking issue (took two days to figure this out which is why my bot kept puking)&lt;/li&gt;
  &lt;li&gt;Timing:  Its really hard to decide what an appropriate user experience is with timing.  While at the same time not overloading the application with hundreds of calls a second to try to add / remove cards from the collection panes.  It’s also hard to determine if I’ve already clicked on a card to return it back and forth if the application is running slow so I constantly have to keep track of my clicks and poll the screen areas.&lt;/li&gt;
  &lt;li&gt;My communication skills are lacking with this application.  It seems to be very difficult to communicate that the bot acts after you take the first ticket/card.  So I see people typing in the chat window since I think they are used to having the bots respond to chat commands rather than just responding to their interaction with the client.
    &lt;ul&gt;
      &lt;li&gt;Along the same lines people are not used to just submitting their trades when they are done which hopefully I can reteach.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are having a bad experience with the bots please leave me a comment about what happened and I will do everything I can to make it a better experience and reward you with credits towards future trades to try and incentive your future business.&lt;/p&gt;

&lt;p&gt;Feel free to try your best to steal my money and cause my bot to shut down since you might get something out of it either way if you can tell me the process you went through.&lt;/p&gt;

&lt;h2 id=&quot;thanks-management&quot;&gt;Thanks, Management&lt;/h2&gt;
</description>
        <pubDate>Sun, 16 Feb 2014 00:00:00 +0000</pubDate>
        <link>http://blog.druegor.com/bad-user-experiences/</link>
        <guid isPermaLink="true">http://blog.druegor.com/bad-user-experiences/</guid>
      </item>
    
      <item>
        <title>Finishing up a few more features</title>
        <description>&lt;p&gt;Today I managed to wrap up what I considered to be a few of the missing features.  I wanted to lock down the specifics on how the bot would know which user to run as and log in as if someone wanted to us that option.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;I also hadn’t gotten the tab switch mechanism down correctly for moving between the Main, Collection and Trade tabs.  Since the trade tab needs to be opened to post the trade messages and the collection scene needs to be opened to bot get a users current collection and make cards tradable as they are purchased I thought this was an important feature.  Fortunately it all feel into place very nicely and now I’m only trying to figure out a way to programatically show all versions of the cards on the collection screen.  I’m not sure why the default is to have it stack the same versions but it is a bummer.&lt;/p&gt;

&lt;p&gt;So following along with the break through I made with the above features.  I wanted to be able to add cards and tickets to be trade-able after completing trades.  So I needed to be able to do this consistently and quickly and ensure that I am adding to the active trade binder.  This also all fell together very nicely and I am now able to add cards and tickets as trade-able after a successful trade, it takes into account the bot settings for max trade-able for all items except tickets and booster packs.  If its requested enough I’ll add the settings in to limit the number of these that will be marked trade-able as well but it seems odd to do that if you are going to buy and sell these items.&lt;/p&gt;

&lt;p&gt;To keep track of this information I had to modify the database a little but it was work that needed to be there.&lt;/p&gt;

&lt;h2 id=&quot;logging&quot;&gt;Logging&lt;/h2&gt;

&lt;p&gt;I also took some time to add trace logging to almost every method in the code to ensure that if errors were encountered that caused the program to close I can track down which area and hopefully which line is the offending piece of code.&lt;/p&gt;

&lt;p&gt;I do not and will never log password information since I feel very strongly in respecting property.  Which is why although there is an option to have the bot log in for you it works just fine if you are already logged in when you run the code.  However, when I get the restart functionally implemented that will only work if the user is willing to put their password in the execution file.&lt;/p&gt;

&lt;h2 id=&quot;upcoming&quot;&gt;Upcoming&lt;/h2&gt;
&lt;p&gt;I’ve gotten the functionality incorporated to initiate trades between buddy list users.  So I need to get the functionality for adding buddies and then write the transfer logic for moving cards between two bots in the same trade group so that I can do collection smoothing (the act of trying to keep a set number of cards in all your bots based on bot priority).&lt;/p&gt;

&lt;p&gt;I want to get the functionality for starting the MTGO client from the bot itself.  Then build on that to handle MTGO client crashes so that I can do a restart whenever necessary.&lt;/p&gt;

&lt;p&gt;The website for creating your Bot Grouping and adding individual Bots.  Then modifying the settings for each individual bot.  I’ll leave the functionality for setting individual card prices for last since I’m not sure how I want that UI to look yet.&lt;/p&gt;
</description>
        <pubDate>Sat, 15 Feb 2014 00:00:00 +0000</pubDate>
        <link>http://blog.druegor.com/druegbot-feature-polish/</link>
        <guid isPermaLink="true">http://blog.druegor.com/druegbot-feature-polish/</guid>
      </item>
    
      <item>
        <title>AirPort Extreme Experience</title>
        <description>&lt;p&gt;It has been a while since I was completely anti-apple.  During the nineties when the only machines I could use were the Power-PC mac clones in school I was supremely pissed with the quality of the product.  The first introduction of the iMac and its bubble case with its ridiculous colors didn’t inspire any more confidence any me.  However, after the third generation of the iPhone and multiple iterations of their pro series laptops I finally decided that the quality may have reached the level their cost.  Since then I’ve gone through multiple iPhones with mixed feelings and three laptops.  After using these products and my lack of success with different high end models of wireless routers I decided to try out the airport extreme.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;I am not sure how I feel now about the design of the extreme.  It is a rather large tower that can’t really be placed anywhere but on your desk.  But it does look nice so sitting on your desk it doesn’t do anything but add aesthetic value.  I’m not going to deny that I was a little pissed plugging it in initially that I couldn’t just log in with via the browser to do the setup on my main windows machine.  I didn’t know I was supposed to download a AirPort Utility if I wanted to set it up on my main machine.  So I had to get my work macbook so that I could do the initial setup.&lt;/p&gt;

&lt;p&gt;For my initial setup I tried to just let the router determine the best settings.  I had to spend quite a while power resetting my modem before it finally would work.  After I finally got the utility installed on my windows machine I had to do a reset of the router to get most of the functionality to work.&lt;/p&gt;

&lt;h2 id=&quot;periodic-internet-outages&quot;&gt;Periodic Internet Outages&lt;/h2&gt;
&lt;p&gt;After I got everything setup I started experiencing some weird outages when I would hit certain websites.  Not only would the internet stop working on my computer for the site in question but it would kill any streaming services I had for a few seconds to almost a minute.  It took me quite a while to finally figure out what the problem was that was messing with what I wanted to be a great new device.&lt;/p&gt;

&lt;h2 id=&quot;ipv6&quot;&gt;IPv6&lt;/h2&gt;
&lt;p&gt;The settings for my IPv6 had been defaulted to tunnel.  Which I assumed was fine.  But I finally fixed all of my issues when I switched the setting to Router.  I wish there had been some clearer way to determine that it wasn’t my router or a bad router.  But in the end everything smoothed itself out and the reason I bought the router has been functioning perfectly.&lt;/p&gt;

&lt;h2 id=&quot;streaming&quot;&gt;Streaming&lt;/h2&gt;
&lt;p&gt;I have gone through multiple modems of different makes and models most of which were not exactly cheap.  But none of them seemed to have the two pieces of functionality that I wanted: range and speed between multiple devices.  I’ve been using PS3 media server to stream high quality video from my main machine downstairs and across the house from my tv room.  The last routers I had worked but would frequently puke when trying to stream some of the high action HD tv shows.  I have yet to experience this with my new router and all the while I haven’t had any slow down when using multiple devices or hosting a home web server.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I would recommend this device to anyone looking for a better streaming experience in a spread out environment.&lt;/p&gt;
</description>
        <pubDate>Mon, 27 Jan 2014 00:00:00 +0000</pubDate>
        <link>http://blog.druegor.com/airport-extreme/</link>
        <guid isPermaLink="true">http://blog.druegor.com/airport-extreme/</guid>
      </item>
    
      <item>
        <title>Silent much!?</title>
        <description>&lt;p&gt;I’ve been a little off the radar for a while in regards to my automated bot project.  I’ve decided to put up what I worked on in &lt;a href=&quot;https://github.com/Druegor/MTGO_Automated_Trader&quot;&gt;Github&lt;/a&gt; with the hopes that someone else can improve upon my initial code.  Also it seems like a bit of a waste to spend a lot of time on this project and then not have anything to show for it.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Right now I’m not a 100% sure that the code will compile right now.  I was in the process of moving towards doing all the data driven functionality in dapper and using ServiceStack apis for the data back and forth.&lt;/p&gt;

&lt;p&gt;I would like to get back into working on this project.   However, I’m a little tired of working on this alone.  So as I said I’m throwing this code out in the wild with the hope that people will work on branches and make formal pull requests to add functionality that is missing.&lt;/p&gt;

&lt;h2 id=&quot;why-i-stopped&quot;&gt;Why I stopped&lt;/h2&gt;
&lt;p&gt;I learned a lesson the hard way about doing backups to offsite storage.  I managed to lose all my personal projects, at least the databases that I had been using for the last few years.  After I lost all my historical data for screen positions, colors, cards, prices and credits I just lost all of my motivation.  Not only did I lose my motivation at this time I had to replace all my hardware which wasn’t cheap so I sold my online collections after I had redeemed what I could.   Without my data and without my collection it seemed less than worthwhile to keep working on this code.&lt;/p&gt;
</description>
        <pubDate>Sun, 26 Jan 2014 00:00:00 +0000</pubDate>
        <link>http://blog.druegor.com/long-silent-night/</link>
        <guid isPermaLink="true">http://blog.druegor.com/long-silent-night/</guid>
      </item>
    
  </channel>
</rss>