tag:blogger.com,1999:blog-6325061182406345752024-03-13T13:04:38.641-07:00MountAbbeyAnother blog about Flash, ActionScript, Online Games, and related topics. The focus is on MountAbbey.com -- an ActionScript repository -- and SiriGames.Unknownnoreply@blogger.comBlogger51125tag:blogger.com,1999:blog-632506118240634575.post-65183917306945786182021-05-05T00:47:00.000-07:002021-05-05T00:47:31.476-07:00<p>Mendocino Forest Fifty! 50 miler trip report</p><p>Apr 17, 2021<br />Distance: 58 miles<br />Elevation: 7k feet gain<br />Duration: 13hr 6min</p><p>This was my first 50 mile run. My previous longest was along the Rogue River in Oregon for about 42 miles (October 2020). I ran this solo with two crew supported aid stations and pizza delivery at the finish. I'm over fifty and a slow runner. I have a long distance backpacking history which means I've hiked 12+ hours in a day before. But never this distance -- the running is relatively new. </p><p>The course is inspired by the Mendocino 50k and a section I discovered by going down the wrong trail on a previous run. The Aug 2019 run was supposed to be a 50k but ended up being 65k. Foreshadowing?</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-Pwsuy5SFi00/YJIm9uAiwgI/AAAAAAAACao/jnQ2bTQ2qewXWLdgez5tduS31_ph-A79QCLcBGAsYHQ/s2048/caltopo_mendofifty-1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1583" height="320" src="https://1.bp.blogspot.com/-Pwsuy5SFi00/YJIm9uAiwgI/AAAAAAAACao/jnQ2bTQ2qewXWLdgez5tduS31_ph-A79QCLcBGAsYHQ/s320/caltopo_mendofifty-1.png" /></a></div>The run started at Big River Beach with the first section heading west along the edge of the town of Mendocino, following the the bluffs at the headlands, a short road section, and then heads north into the Russian Gulch state park. My crew (thanks Sophia!) dropped me off just before sunrise (6:45). I had 13 hours of sunlight and the beach and bluffs to myself. <div><br /></div><div>The goal on this first 4 miles was to go slow. I kept telling myself it was going to be a long day so "pace yourself." To finish in 12 hours, I would have to go just faster than 4mph (15 minute miles). I like to think in min/km ... the course was around 85km and during training and previous runs I knew that 8 min/km was doable for the distance and elevation. That meant around 11 1/2 hours with some bonus time for a few breaks. </div><div><br /></div><div>I started out with a long sleeve shirt and beanie. I considered gloves but I knew I would warm up quickly and early morning start meant less wind. The temperatures were going to be in the high fifties on the coast and mostly overcast (warmer inland but not hot). Perfect running weather. <br /><div><br /></div><div>The second hour consisted of traversing Russian Gulch along Fern Canyon to the waterfall and then up to the boundary trail and the east trailhead where my crew was going to meet me. The transition from roads to trails starts at the end of Woodstock Dr when you enter Russian Gulch SP. There's a trail that runs along the bluffs with views of Keesbury Bays, the Russian Gulch bridge, and back towards Mendocino. The SP website had the fern canyon trail closed, which would have meant a detour and a longer run along the boundary trail. It looked open (no signs/gates) despite having some obvious stretches being repaired. </div><div><br /></div><div>The first people I met were at the waterfall. Taking photos. I ran past and then walked as the trail snaked to the top. The first real climb followed (+400 ft) and then a gradual incline to Road 409. The first 14km was on pace and I was met by my wife and greyhound for a pit stop. I switched to a short sleeve shirt and sunhat. But mostly this resupply was for water and food. The next resupply was 6 hours away and so I was carrying 2L of water, a sandwich, several granola bars, an apple, trailmix, and assorted candy. I ate a peanut butter and jelly tortilla at the car (messy) and topped off with gatoraide. Call it an 8 minute transition.</div><div><br /></div><div>From there, I ran north on 409 for a short bit before dropping into the Jackson Demonstration Forest. The trailhead has two trails down to Road 600. I dropped 500 feet down on EZ-Out. Many of the trails are mountain bike friendly which means banked corners. The forest transitions to older trees more redwoods. Each section has highlights: this one is about the change to a forest run. At the bottom, I contour over a bit to catch EZN trail up 500 feet to the ridge. </div><div><br /></div><div>This section is scheduled for a timber harvest this summer. I discovered this when checking the online maps for closures and the local paper running a story about protesters sitting in the trees. I came across their camp and ground crew making coffee up on near Rd 410. At the moment, the trees are tagged for thinning. I'll be interested to see how this changes. I'm neither for nor against logging. I hope it is done sustainably and that the trails are preserved.</div><div><div><br /></div><div>I startled my first (and only) mountain biker on the next trail section. Neither were expecting anyone else. There is a network of trails that parallel the road on the ridge. I've run them once before and so I felt comfortable picking my path. The ridge has a pretty decent ascent, up another 300ft before a high point where the trails converge and the road splits. I expected some significant walking and this was one of those sections where conserving energy and eating was important.</div></div></div><div><br /></div><div>After a brief run along the dirt forest service road, trail 508 splits off. This is a fairly wide and rolling section that is perfect for some speed (6 min/km). And if you aren't paying much attention, you hit the 4 hour milestone and 30km mark. The fun ends with a mile or so of uphill on a dirt road that intersects with the primary north/south dirt road (Rd 409 Little Lake Road). Another 1.5 miles and you can escape to Hwy 20. Instead, I'm going south towards Observation Hill. This was another planned walking section for me... lunch! And then running the downs and walking the ups as 409 follows the ridgeline.</div><div><br /></div><div>I encounter my first runner, someone doing a long loop. And a few cars and mountain bikes. I cross over the intersection with the 6?? trail I'm going to run in another hour or two to head back towards Russian Gulch and I start thinking more seriously about time and distance. I'd started to drift a bit behind schedule because the estimates from the map were longer and the big 6 mile loop from Observation Hill was definitely going to take longer than an hour. I've run this section multiple times and forget how it drags on forever. Then there's the abandoned boat and the clear cut signaling I'm nearing the trailhead and cell service!</div><div><br /></div><div>I'd considered another aid station here. Water here would be nice. But I figured my timing would be harder to predict. It is around the 35 and 45km points. I text my support crew with an update. I waste valuable batteries with banter. And decided that I should have carried the recharger and thus turn off my phone (no strava today!) And then a fun and fast 900ft descent of Manly Gulch. The trail passes thru the group campground and then up the other side. Eagle's Roost is crazy steep. And goes on longer than I remember. But it does take time to get up 700ft. The ridge trail is when I realized I wasn't going to make my target because the distance was growing beyond the 50 mile target. But I knew I would be able to finish, I felt strong and focused. </div><div><br /></div><div>At Big Tree, the trail leaves the old roadway and descends 600ft of gentle forest trail cutting a nice contour down towards Big River. And my first day hikers! The Mendocino Woodlands day use parking area is close. I reach the bottom, hoping for an outhouse and instead get sunshine and a bench. I take my shoes off for the first time in 6 hours and officially stop trying to go the next 10-12 miles in 2 hours, accepting 4mph. I eat my second lunch and prepare for the last big hill... 3 miles and 900ft gain up Forest History Trail to Observation Hill. </div><div><br /></div><div>I run when I can but power hike everything but the mostly flat. The last bit, I slow down to let a group of mountain bikers push their rides up the last stretch. In reality, I was tired and my legs were showing the wear of nearly 50km. I debated taking the new trail that connects back towards the pit stop (4+ miles instead of the 8 planned), but instead I texted to my crew saying I was still 2 hours out (instead of 1hr). There's some fun running ahead and I didn't want to potentially need to add some miles at the end to make sure I hit 50. So off I went, just thinking about the next 8 mile block... rolling along the 409 and then a sweet fast downhill before a mostly flat grind above Caspar Creek, followed by a crazy hill, and then East trailhead of Russian Gulch for resupplies!</div><div><br /></div><div>Sounds easy enough. Walk/run on the 409 while eating and recovering from the big climb and preparing for the downhill. The 610 trail is a converted road with a perfect down. Too fast but nothing you can do! A mtn bike passed me. At the switchback, I walked a bit. Then ran some more... until a stumbled on rock. It is a good reminder to rest. So I did. And hurried on because I remember this bit going on longer than it should when I ran a training run. One of the last running podcasts I listened to before the run was "science of ultra" that talked about "suffering being the state of wanting to be in another state." I embraced this and enjoyed the trail, the trees, the window, the sap stuck to my running shorts, the empty water bag, the boring nature of trail mix, and remembering that smiling makes you 10% faster.</div><div><br /></div><div>When the trail hits the logging road, I know I'm almost to the canyon floor. I eat a honey stick and force myself to try another granola bar. But then I go back to shuffling along because I'm nearly back to civilization. Well, 500 feet climb up Purple Skirt first. The lower part of that trail is too steep to run. Nope... the entire bit was walked until Rd 409 was in nearly in view, and then the calm and happiness overflowed again. And before long, I was at the car and new snacks! 66km and 9 hours. Thanks Sophia for being my support crew. </div><div><br /></div><div>I ate some chips and cookies. I ate some carrots and refilled my water. I took the battery pack for my phone and the headphones. I knew the stretch along the river was 10 miles, and 3-5 miles to get back to Mendocino Woodlands. I was hoping for the shorter more direct route this time. The first time I ran this section I zigzagged and explored. Today I'd have around 4 hours of light. I figured I'd need at least 3 hours and so only stayed around 12 minutes before waving to my wife and dog. She offered to drive me down the road because I only need 10 miles, not 13. Nope.</div><div><br /></div><div>I turned on some music and shuffled along. The network of trails spreads out but I was trying to follow the specific and shortest path. The bikers love a hill and steep descent. And this section has all of that. Parallel Action was empty of people and I got to escape into my headphones, shuffling along. Walking any hills. Calculating time and distance remaining. Optimistic. And then over the road and cutting off a section. This goes down, then up, then down, then up. Over the road to "Endo". This has a steep up and slalom like down bit. And then finding Oh No! for more downhill. I switch to glasses from sunglasses here. New trail though. Thankful I chose to run down not up, forgetting about the Forest History climb earlier which was the alternate.</div><div><br /></div><div>And without much worry besides the time and tiring feet (no injuries or pain), I hit the the junction for Boiler/Fury III and the last downhill. You can watch the trees coming up at your from the canyon floor to anticipate the bottom. The trail runs into a swamp and then follows it for a bit before coming to a fireplace and Mendo Woodlands day use area. From the highpoint on Endo, probably 800 feet descent. But closer to 6 miles from the car. I knew better than to lose my concentration here though as the path isn't obvious. And then the Big River appears and the footpaths merge into the trail. Somewhere here I thought about adding 10 km (6 miles) to get to 100k. The internal voices all voted for no more than required.</div><div><br /></div><div>Only 10 miles to go! I told myself I wouldn't look at my GPS hoping I was closer. I did the math and would let the fitbit count down the miles. The trail along the river is mostly flat. It starts with lots of bridges, and so my mini mental game was to run to the bridge when I saw one and walk across it and a bit on the other side. I felt good and tried to run. But after 45+ miles, my body and mind would find ways to get me to walk... do I have to pee? stop. Nope. Is that the fitbit shaking after another kilometer? Nope... 25%. Run some more. Shuffle some more. Walk some. Go away. My pace wasn't too far off the 8min/km goal. It was creeping higher though. At some point, you realize the best strategy is to run though. Faster than crawling.</div><div><br /></div><div>I hit the 81km point before 12 hours. And then took a 5 minute break sitting in the trail. Another 20 minutes, and I was looking at my GPS to confirm my location. Yep. Still there. Nope, no cellular service so I can't call for rescue. No one else was out, or I might have asked for a ride on their bike. And not suffering, because I still wanted to be there. I still wanted to finish. And my legs mostly worked.</div><div><br /></div><div>At 86km, I ran a 6:30min/km. Fastest one since the downhill around KM 55. At KM 88, I realized there was more than just 2 km left. I forced myself to eat some trail mix. At KM 90, I got a blip of service and texted my crew that I had 1 KM left. At KM 91, I begged for the bench overlooking the estuary to appear. At KM 92, there it was. I sat for a couple of minutes and realized I was cold and would rather be done than sleep. Because I closed my eyes laying on the bench. Not hoping I was done, but needing to regroup to bring forth my last reserves. And then you start walking again. Which turns into a shuffle. And ... not quite a run.</div><div><br /></div><div>I hope she parked at the east end of the lot not where we started. She did. I saw the car. And a glorious outhouse! And done! A photo. A hug. A smile of satisfaction.</div><div><br /></div><div>Not dark. Not sore (tired). Ready for something other than water. Pizza tasted good but hard to focus on eating. I got into warmer clothes and we drove off. </div><div><br /></div><div>After a shower, I had a hard time staying warm. Into bed solved that. I had weird dreams and trouble sleeping. Next day, I was mostly fine walking... stairs required a little extra attention and slower. Two days later, I could have run. I had an enforced two week break (no running or exercise, just walking).</div><div><br /></div><div>Two weeks later, my legs are still a little heavy after my first couple of runs. But I'm dreaming of my next adventure: Wonderland Trail around Mt Rainier in August - 3 days, 93 miles, 22K elevation gain.</div><div><br /></div><div>Which 100k next year? Will I come back for the Mendo 50k or run the 50mile course with modifications to be closer to 50? Is there a 50 miler in December I want to run? </div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-16322850472498264992014-08-29T12:13:00.002-07:002014-08-29T12:13:27.229-07:00Unique IP in a logI have a log file with fields and an IP address. I got asked to find the unique IPs today.<br />
<br />
It took some internet searching to piece this together. So recording for later:<br />
<br />
<div style="font-family: Menlo; font-size: 11px;">
tail -1000 error.log | grep from | awk '{print $14}' | sort -n | uniq</div>
<br />
Tail -N <file> Gets the last N lines from the log file. </file><br />
Grep <text> Filter out the lines for the ones I wanted. It has many lines without IPs</text><br />
<br />
Those could be replaced with grep from error.log.<br />
Or "cat error*.log"<br />
<br />
awk is used to access fields in a record. This says... show field 14.<br />
That's the space delimited field were the IP is in this particular log.<br />
<br />
sort sorts. uses -n to sort numerically.<br />
uniq only keeps the unique records.<br />
<br />
<div style="font-family: Menlo; font-size: 11px;">
<br /></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-12375385087238322402014-07-02T19:52:00.001-07:002014-07-02T19:52:39.013-07:00Code challenge: IP to country with redis<b>The challenge: </b><br />
Lookup country code by IP address using redis and python.<br />
<br />
<b>The solution:</b><br />
A quick google search found several free sources of data.
http://dev.maxmind.com/geoip/legacy/geolite/<br />
<br />
I only care about country and not city or lat/lon or timezone.
The "GeoLite Country" data will work. It is 95,000 lines of csv data updated once a month.<br />
<br />
The format is "start IP","end IP", "start decimal", "end decimal", "country code", "country name". I'm using the csv module to parse it.<br />
<br />
The redis sorted set takes a score and a unique element. Note that country code gets repeated in the data and so I made the country code unique by appending the IP.<br />
<br />
Converting an IP address to decimal value would work easily with netaddr module. I don't have that on my mac, so I'm using the struct.unpack("!L",socket.inet_aton(ip))[0] method.<br />
<br />
I also detect missing ranges in the data and insert "empty" for those ranges into the data.<br />
<br />
<br />
<b>The Lookup code:</b><br />
<br />
<code>import redis</code><br />
<code>import GeoIP </code><br />
<code>red = redis.Redis() </code><br />
<code>CC = GeoIP.ip_to_country("xx.xx.xx.xx") </code><br />
<code>print CC </code><br />
<br />
GeoIP.ip_to_country(ip) will return the country code from the data or "empty" for empty blocks - say 127.0.0.1.
It will return "unknown" for things outside the range or invalid formatted IP addresses<br />
<br />
The data is about 20MB.<br />
<br />
<br />
<b>The module:</b><br />
<br />
<code>
# The GeoLite databases are distributed under<br />
# the Creative Commons Attribution-ShareAlike 3.0 Unported License.<br />
# The attribution requirement may be met by including the following<br />
# in all advertising and documentation mentioning features of or use of this database:<br />
#<br />
# This product includes GeoLite data created by MaxMind, available from<br />
# <a href="http://www.maxmind.com/">http://www.maxmind.com</a>.</code><br />
<code><br />
import redis<br /><br />
def data_to_redis( myRedis, key, filename ):<br />
import csv<br />
<br />
# the data is csv. "start","end","d_start","d_end","country code","country"<br />
# the redis data is a zlist. note the country code repeats<br />
<br />
fp = open( filename, "r" )<br />
count = 0<br />
empty = 0<br />
lastEnd = 0<br />
csv_reader = csv.reader( fp )<br />
for line in csv_reader:<br />
#print line<br />
try:<br />
startIP,endIP,startDec,endDec,CC,country = line<br />
except:<br />
print line<br />
<br />
#print "{0} {1} {2} {3} {4}".format( startIP, endIP, startDec, endDec, CC )<br />
# use the startDec as the score<br />
score = int(startDec.strip('" '))<br />
endDec = int(endDec.strip('" '))<br />
if score-1 > lastEnd:<br />
# assume a missing block.<br />
#print "missing block: {0} to {1}".format( lastEnd+1, score-1 )<br />
myRedis.zadd( key, "empty|{0}".format(lastEnd), lastEnd+1 )<br />
empty += 1<br />
<br />
lastEnd = endDec<br />
# use CC|startDec as the<br />
member = CC.strip('" ')+"|"+str(score)<br />
myRedis.zadd( key, member, score )<br />
#if count > 10:<br />
# print "early exit for debug"<br />
# return<br />
count += 1<br />
print "added {0} records to {1}. empty blocks {2}".format( count, key, empty )<br />
<br />
<br />
def ip_to_country( myRedis, key, ip ):<br />
dec = ip_to_dec( ip )<br />
data = myRedis.zrevrangebyscore( key, dec,0, num=1, start=0 )<br />
if len(data) > 0:<br />
CC,start = data[0].split("|")<br />
else:<br />
CC = "unknown"<br />
return CC<br />
<br />
def ip_to_dec( ip ):<br />
import struct<br />
import socket<br />
"convert decimal dotted quad string to long integer"<br />
# note the big vs little indian packing<br />
return struct.unpack('!L',socket.inet_aton(ip))[0]<br />
</code>
<br />
<div>
<br />
<br />
<b>Todo:</b><br />
add some more error checking and perhaps create a CC to country name hash in redis.</div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-86375578355317781242012-08-04T10:48:00.003-07:002012-08-04T10:49:04.029-07:00Dear AmazonDear Amazon.
I realize this is an issue that impacts less than 0.001% of your customers. But we live in rural California and do not get mail delivery to our house. So we can either get USPS sent to our post office box or FedEx/UPS to our house address.
Is it possible to flag our account to indicate mail only? Or FedEx only?
Or more generally, that a PO Box can only be USPS?
I realize you try to ship the cheapest way possible. I appreciate that.
And when stuff comes, it is brilliant. But the stress of a package coming via FedEx to our PO Box that won't get delivered is dreadful.
I'm not sure what language you write your software in, but perhaps one additional conditional would be able to resolve this for all of us on The Sea Ranch and other rural locations without mail delivery.
Thanks for your help.
bobUnknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-50936788343945341122012-05-27T22:30:00.001-07:002012-05-27T22:30:14.604-07:00Speech to Text with timeline dataI'm working on a book project where I have audio output of a reader and the associated text. I want to sync the two.
My tool has a simple method... press the mouse down for each word as the audio is playing. Record the time.
But sometimes (often), more fine tuning is needed. I figured that someone must have solved this already.
I did a search and played with some tools. None of them were magic.
The best thing so far is Audacity. A free audio tool.
It has an automated bit that gets close. But I find having to edit that is harder than just going at it with the label track.
My process:
- zoom in.
- use left-mouse and shift-left-mouse to change the selection.
- then ctrl-left-mouse to play.
- adjust the selection if necessary
- ctrl-b to create a new label (I don't enter the work-- potentially useful)
Walk through the text on a page.
Export the label data.
It creates a text file with two columns, start and end time.
Adjusting my code to take start & end.
And writing a perl/python script to convert to the Flash array.
Only real question remaining is the format desired.
The data files can be imported for editing.
I think the logical thing to do would be to outsource someone. $5/page?
It takes me about 10 minutes or so per page. Current book has 26 pages.
I suspect I'll get faster.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-71122021735323485172011-02-24T18:32:00.000-08:002011-02-24T18:34:26.539-08:00AMFPHP treats all ints as uintsNegative ints across the wire are deserialized as unsigned ints. Really big unsigned ints. Not sure how old of a version we are using. <br /><br />Solvable though.<br />http://www.visible-form.com/blog/sending-negative-integers-through-amfphp/Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-33444813893270902542011-01-30T00:41:00.000-08:002011-01-30T00:42:49.243-08:00Player.io - for reals?http://playerio.com/<br />Free basic system.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-69184905264229352442011-01-29T23:09:00.000-08:002011-01-29T23:10:10.497-08:00Game jam 2011Game jam update #1: Downloaded Flixel (an actionscript game engine) and went through some tutorials. Outlook: No finished game from me this weekend. If I had 48 hours of actual coding (and sleep at regular intervals), I know I could have something. However, I'm too likely to get distracted by the Mochi APIs or Amazon Web Services (for the server side) or a walk along the bluffs to make much progress tomorrow.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-80959644644515724132011-01-28T12:31:00.001-08:002011-01-28T12:32:54.149-08:00LostFrom a <a href="http://www.nytimes.com/2011/01/30/arts/television/30lost.html?hp">story in the NY Times</a><br /><blockquote>Even here in this remote spot I could not escape the last six years of my life. I had spent that time working an average of 80 hours a week writing and producing a TV show. After “Lost” ended last May, the first thing I wanted to do was go someplace far away and clear my brain. But I quickly discovered there was a big difference between getting away and leaving the show behind.</blockquote><br /><br />I haven't worked 80 hours for the duration. And not for 6 years. I hope I get another project like that in my life.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-18300320602912703722011-01-27T19:59:00.000-08:002011-01-27T20:05:56.064-08:00Sports story?Quitting something you once loved is a process.<br /><br />Jason Whitlock wrote that about a pro athlete quitting in his<br /><a href="http://msn.foxsports.com/nfl/story/chicago-bears-qb-jay-cutler-might-have-quit-way-before-sunday-012711">Foxsports.com column</a>.<br />That he himself quit and it took four years.<br /><br />I'm glad to have found the passion for hiking again. Dreaming about a long hike makes a gloomy day nice. And walking along the bluffs makes anyday worthwhile. A good day even.<br /><br />And I'm looking forward to finding it in life again.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-51810609367677240062010-12-16T08:34:00.000-08:002010-12-16T10:28:35.144-08:00Settlers of CatanI think game makers need to play and analyze more games. <br /><br />On this path, I downloaded the iPhone version of Settlers of Catan so I could play lots of iterations without having to spend the 90+ minutes required to play in real-life (and gather 2-3 friends). If you are thinking of an iPhone game or a board game, this game is as fun as the reviews. http://boardgamegeek.com/boardgame/13/the-settlers-of-catan<br /><br />A good technical summary of the game can be found here: http://www.skotos.net/articles/TTnT_107.shtml<br /><br />Much of the game is decided in the setup phase. And I think someone that has played before has an unfair advantage over guests playing for the first or 10th time. I'm working on an app to help. But I'm still working on my 10 game plays to fully understand. Lots of strategy guides exist for this game. Go read some. And play!Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-11256925868619454112010-10-23T09:08:00.000-07:002010-10-23T09:35:23.353-07:00Pandemic and co-op gameplayPlaying around with these games:<br /><br />http://www.boardgamegeek.com/boardgame/30549/pandemic<br />http://www.boardgamegeek.com/boardgame/57139/infection-expressUnknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-84816045569353455832009-03-26T09:09:00.001-07:002009-03-26T09:19:01.112-07:00Bracket: Another $25I posted another bracket (2009) onto Kongregate. 250+ players this time. The changes I made after last season to get the scoring data from the results xml file has made the management side of things much easier. Essentially setup requires that I have to update the teams, copy the database table, and turn it on. Then add games to the results xml with a date/time (add as you go or all at once). And then once the tournament begins, lock out new players with a switch. After each game (block of games) I update the score/winner/loser values and run a script that updates the scores.<br /><br />Fixes I made this year:<br /><ul><br /><li>Don't accept Kongregate guests<br /><li>NoCache code for the results and score data<br /><li>show date of the game until current day - then show time. Or score if it exists<br /></ul><br /><br />The next big change will be to automate the results; I imagine I can find a sports page someplace that I can get the scores/winners.<br /><br />And if I run it again, I need to figure out a way to get 100x the users. That will reveal another set of bugs to fix.<br /><br />I'll likely want to rewrite the client too. I no realize the value of some fancy tweens to make the app seem cool. People love effects.<br /><br />And now the bad news: $5. That's the current total I made. spider solitaire is starting to bring in that much per week (with I think mostly spider traffic and not real players). The source for all of this is still out there so if you are interested, search for it.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-27255098507659058772009-03-20T07:59:00.001-07:002009-03-20T08:00:03.258-07:00RememberingTest first. Automated builds. Regression tests. Load tests. Release procedures. Bug tracking. Simplest solution. No crunch... remembering.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-71500129313583343652008-07-27T06:25:00.001-07:002008-07-27T06:33:59.436-07:00Fuppes take 2Well, the ipkg version of fuppes for unslung doesn't have virtual foldes (so I can put songs/artists/albums into subfolders -- say ABC,DEF,etc). And it crashes processing my images. And so, the adventure began to upgrade to the latest from SVN.<br /><br />It installs and runs...but a lot of the secondary elements were not enabled. Translation, no music (m4a files) on the PS3. So I had to install another 10+ packages and figure out how to use ./configure. I think I finally have LAME and FAAD2 enabled. Rebuilding one last time.<br /><br />If that does not work, I'm going to convert the files to mp3s.<br /><br />And there is a crash in nanosleep. Caused by the console loop but most likely caused by running out of memory. In the meantime, I now have firefly (itunes server), ushare, mediatomb, nethack, gdb, and more installed on the little machine that could. It is empowering to be able to build your own applications. But the promise of "ipkg install fuppes" and a few configuration changes is not the case.<br /><br />The downside is that it really was that easy on the Windows box.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-18081043761643277232008-07-21T23:16:00.000-07:002008-07-22T00:41:20.533-07:00Slug to UnslungTrying to do this with a 2GB thumb drive. But it in the end, decided the existing drive was going to work. Backed it up for safe keeping first.<br /><br />My box is slow (133MIPS) so I'll need to Turbo it soon.<br /><br />Went to unslung 6.10-beta. No issues.<br /><br />Installed openssh and fuppes (media server).<br />Installed python and perl.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-25920665352489320092008-07-18T00:07:00.000-07:002008-07-18T00:17:59.992-07:00PS3 Media ServerDay 2 with the PS3 was all about setting up a media server. It started with a test on my desktop before going to the planned production location: the NSLU2 NAS. But no luck tonight. Ends up my router is pre-universal plug-n-play. Had to update the firmware. Then things acted a lot better -- just not just from the laptop. I should have rebooted the wireless router but time for sleep.<br /><br />Bad luck of the night besides spending two hours to discover the router firmware issue = changing the router admin password to something I no longer know. Very likely I'll have to reset to defaults and reconfigure. Writing stuff like that down is extremely useful.<br /><br />This weekend, turning my SLUG into something it wasn't meant to be. unslung me baby! Very likely, fuppes is the media server of choice. SimpleServer was a great test bed because it was simple to configure under windows.<br /><br />Day 1 was all about PAIN. And most of Day 2 too. I'm downloading lots of other demos which will be Day 3-N.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-6397781584821594412008-05-18T14:10:00.000-07:002008-05-18T22:29:26.992-07:00Python and EclipseFirst a book recommendation:<br /><a href="http://www.diveintopython.org/index.html">Dive Into Python</a><br /><br />Things I've installed today:<br />- <a href="http://www.python.org">Python 2.5</a><br />- <a href="http://www.fabioz.com/pydev">PyDev</a> (eclipse editor plugin)<br />- <a href="http://subclipse.tigris.org/">Subversion for Eclipse</a><br />- <a href="http://pyunit.sourceforge.net/">PyUnit</a> Comes with Python 2.1+<br />- Cruise Control...<br /><br /><br />Some eclipse hints: (from an IBM site)<br /> Ctrl+Shift+L - show page of keyboard shortcuts<br /> Ctrl+3 - search menus for a command<br /> Local history on files!<br /><br />Mylyn:<br />Now part of Eclipse. A tool to make task management easier. Added a task to figure this out.<br /><br />Other cool stuff...<br />-<a href="http://simile.mit.edu/timeline/">Timeline and timeplot from Simile @ MIT</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-19845197976939734912008-05-17T14:20:00.000-07:002008-05-18T09:31:51.656-07:00Python, Twisted, Rally, CruiseControl, and ?Today I am setting up a new development environment.<br /><br />Goals:<br />- continuous builds<br />- scrum (for one?)<br />- Python and server framework<br />- External source control<br /><br />Tools:<br />- <a href="http://python.org">Python</a> and <a href="http://http://twistedmatrix.com/">Twisted</a><br />- <a href="http://www.rallydev.com/">Rally</a><br />- <a href="http://buildbot.net/trac">BuildBot</a> for Continuous Builds<br />- subversion for source control<br />- Eclipse as editor<br /><br />Alternatives:<br />- <a href="http://trac.edgewall.org/">Trac</a> instead of Rally<br />- CruiseControl instead of BuildBot<br /><br /><br />BuildBot uses Twisted and Python. So that seemed like a good fit.<br /><br />I'm not so happy about Rally being a hosted solution but one thing at a time.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-19417574342455183442008-05-17T00:39:00.000-07:002008-05-17T00:42:51.583-07:00Code campWoody summarized my talk at the Fullerton Code Camp:<br /><a href="http://zuill.us/WoodyZuill/2008/01/28/socal-code-camp-excellent-weekend/">summary</a><br /><br /><blockquote>Overall, it was very useful to me to see his approach.</blockquote><br /><br /><br />I thought of this today as I ran into someone visiting SOE that saw my presentation in Seattle on Wednesday.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-74559521047857624342008-04-16T08:39:00.000-07:002008-04-16T08:40:42.151-07:00API: Google Social Graphhttp://code.google.com/apis/socialgraph/<br /><br />Looks interesting.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-9928132843697326172008-04-09T13:08:00.000-07:002008-04-09T13:09:47.508-07:00Flash 9I finally upgraded to Flash 9 and ActionScript 3.0. My work still requires AS2 and so don't expect tons of AS3 stuff. But I'm ready to join to bleeding edge of technology again.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-58974125204467455772008-04-06T23:04:00.000-07:002008-04-06T23:06:26.639-07:00Technology: Amazon Web Services<a href="http://www.amazon.com/Facebook-Apps-Partners/b/ref=sc_fe_c_1_3435361_7?ie=UTF8&node=391557011&no=3435361&me=A36L942TSJ2AJA" >Facebook and Amazon Web Cloud</a><br /><br />I need to go take a look at this technology. I'm interested to see if I can run a SmartFox server there too. Runs about $75/month for a server. Definitely something to look into instead of using a dedicated server someplace.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-58962492532767054662008-04-06T23:00:00.000-07:002008-04-06T23:04:26.880-07:00Project: Bracket ChallengeI created my own basketball bracket and ran the tournament at Kongregate.com. The Flash part was easy. The server (mySQL) was simple. The challenge was tracking the winners and losers and all the admin stuff. And so rev 1.n has better tools.<br /><br />I released the entire project under the zlib license today on MountAbbey.com at <a href="http://mountabbey.com/projects/bracket.html">Bracket Challenge</a>. This is my first real code release for the site. <br /><br />Coding is more fun than running a tournament. I came in 30th of around 300 -- most of them one time users. I was hoping for 2000. At least next time, I'll have the bugs removed.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-632506118240634575.post-49693425336963090092007-08-19T13:18:00.000-07:002008-12-12T20:04:31.332-08:00MochiBot and MochiAds<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-g2F3uHDy8U/RsimveyOWuI/AAAAAAAAABQ/v1cbGXto67Q/s1600-h/mochibot.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_-g2F3uHDy8U/RsimveyOWuI/AAAAAAAAABQ/v1cbGXto67Q/s320/mochibot.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5100509912644868834" /></a><br /><br />Two free services. One tracks your SWF if you share it. The other puts ads in it so you can make money. <a href="www.mochibot.com">MochiBot!</a>Unknownnoreply@blogger.com0