I’m very impressed. Experimental distribution AND I like what I’ve heard.
Do you know they’ve already sold out of the 2500 limited edition $300 package? Not that it’s about the money, but that’s already a minimum of $750k of business right there. I’m glad this distribution model is working so well.
And it’s interesting on so many levels. Everything that went into the Saul Williams model, but along with: acceptance of the pirate bay / torrents for distribution, creative commons licensing, incentive to pay more for exquisite editions AND the artistic aspect of the project being something DIFFERENT and previously unfeasible.
Great stuff. I hope everything is going well for you, David. I’m glad you liked Mass Effect and Super Mario Galaxy!
[...] porcupine treeOwn a Wordpress blog? Make monetization easier with the WP Affiliate Pro plugin. The Colour of Air saved by 12 others ErroR0390 bookmarked on 03/20/08 | [...]
[...] Posted by Steven Westwell on March 27, 2008 I was glad to see that my previous post provoked an interesting article by David, a good friend of mine who’s blog you can find in my blogroll. David posted an article on fractured online identities. [...]
[...] the same way I believe that it’s really important that people control their own identities in the “digital future”, I really believe that it’s your own responsibility to [...]
Hi David. Thanks for the VGC plug and for encouraging people to play Grim Fandango. Much appreciated! I hope we’re able to do justice to such a terrific and important game.
Interesting blog, although i have a few questions i’d like to put to you.
With any integration of separate or third party systems there is always a risk that it will need to change. Surly the best approach is to always provide Adapters (Providers) to these systems so when they do change they are easily replaceable?
I don’t think any architecture will reach entirely a state of perfection. This in mind i think it is important to learn to accept that not every system will reach our own idealistic standards and sometimes we have to learn to let small unavoidable smells go and abstract them best as possible with the above approach. The question i suppose boils down to “Would the cost of leaving the inconvenience in place outweigh the cost of implementing a new provider?”
Which leads me nicely onto the fact i’ve been going through this recently and i don’t think it is always a simple case of “hiding” an uncooperative system behind a idealistic interface either. Let me give you an example, to make my uncooperative system perform i either needed to create an API that slightly coupled it to the underlying component or provide over ten times the infrastructure to support it. So we have a choice either Abstraction or Performance which do you choose?
I suppose my goal here is to point out there is a difference between ideology and fit-for-purpose which sometimes we as developers get caught up in. And also that while we should strive for perfection we sometimes have to accept imperfections.
You’re absolutely right. Adapters / providers are the correct way to couple yourself to an external system in a clean room implementation.
I also conceed your point about abstraction vs. performance being a factor.
I specificly choose “uncooporative” rather than “obsolete / legacy” systems as the target of this piece because I think the challenge presented by them differ. If the system you were replacing was simple an old system then adapters and a little bit of hard work during the migration would likely be more cost effective, however an “uncooperative” system, in my mind at least, is a system where the design has become practically untenable and potentially the relationship with the company that produces the system has soured.
I view this as the “hostile takeover” methodology of system migration as opposed to the retirement of a dear friend.
The cost / benift for one of these cases would likely be negligible in the sense that if you were driven to a drastic replacement, it could well be the difference between continuing to operate as a business or having to sustain serious losses due to an untennable environment.
As a footnote, I think that the encapsulated system would be best accessed using adapters to prevent this situation reemerging in the future but I’d almost expect that as a part of good software design. I think that ideology and fit-for-purpose software design should go hand in hand, otherwise whatever your design looks like, it’s not ideal.
When I installed the flash plug-in for it I noticed that op.com was “identified” by flash, which heavily points towards opera still being in there somewhere.
I was willing to forgive most of the issues with it as it was a Beta, until the EULA caught my eye.
You’d pick Braid over LBP? Seriously? I will take a stab and guess that you have never seen, nor played this absolute masterpiece. Nothing compares to it, most certainly not Braid.
I’d say it’s just a matter of opinion, but then again with the widespread critical acclaim and universal love the game is getting, it goes a bit further than that…
@SnazzyD: You’re 100% correct, I’ve not played it, so the above is really based on the media flurry around the game. I’m not sure if it’s the fault of the coverage or my interpretation of it. I’ve only really seen the press released videos on the major gaming sites, so I’d guess that it’s a game that you just “don’t get” until you have some hands on time with it.
I don’t understand how the game they’re advertising can possibly earn such wholehearted praise. Don’t get me wrong, I hope they deserve it, I just don’t understand it currently.
Yeah but who buys add on drives? (answer: no one).
They have really never worked for consoles, if people wanted a separate Blue ray device they would go out and buy one, there really isn’t much of an argument to tie it into the xbox so really I agree with their decision even more than you do :P
Hi David. Absolutely fantastic example. Not only does it work without a hitch, more importantly it’s a great beginner’s guide for p2p applications written in WCF. Your code is also well documented and easy to follow. Highest marks.
I appreciate coming across posts like yours as it helps foster discussion around the software release process and configuration management. I’m biased to the version control and change management product for complex parallel, geographically distributed and Agile development known as AccuRev, as I am hte company’s corporate communications manager. One very simple low level feature this product provides is the ability to “Keep” a file to your local workspace as many times as you like before integrating with the team.
Let’s say you have just finished something and you aren’t ready to commit it just yet, but you want to version it. In AccuRev, you just do a Keep to create private versions. Do it as many times as you want. When you are done, you do the commit (we call it promote) and it is just as though you never had a private stream (branches in other tools) and it is just like you no longer have a private stream. So, most of the time you might do update/commit and then sometimes you will want update, keep, and commit. Some folks really like keep and they will have update, keep, keep, keep, keep, keep, and commit (and then perhaps
a bit more keep).
When you create private versions you can then do things like revert back to a prior keep, diff against prior keeps, annotate, see comments, let other folks see your private versions, access your private versions over the Web, and generally do all of the operations that are usually only done against public versions you can now do with your private versions.
If parallel development is becoming a tricky endeavor, or if you have remote teams that are always getting bogged down or you’re unable to reallocate resources or projects easily, take a peek at the tool sometime by reviewing the 2-minute demo at the link above on my name.
David,
Great post! I definitely subscribe your advice to “aim for a one-click install”.
If you manage to set-up your environments in a way that your deployment process is almost all automatic, then you’ll reach a state of Deployment Zen.
The more you automate deployment, the more Agile you can be (fear of deployment makes it impossible to follow an Agile methodology where you are expected to release often – to any environment).
I think that the problem you describe has also to do with the divide between the development and deployment activities.
These are still looked at as separate pieces, and usually have different people working on each of them.
I think that’s one of the break points that limits the ability to automate the process.
At OutSystems we’ve been following the 1-click Mantra for a long time. When we include a new feature into the Agile Platform, we make sure it has zero impact on the deployment automation.
Today, deploying a web application (and rolling it back to a previous version) is really a 1-click activity.
Hello.
I was trying to use the PNRP for the peer resolver but i am experiencing some troubles talking to my peers. Did you ever come across problems with PNRP? Sometimes everything is ok, some other times…
Tnks you for any input..
Telmo Sá
You’re going to have to be a bit more specific regarding your actual issue.
Do your peers always discover each other and then vanish over time and start to loose communication?
Do they sometimes fail to make the initial connection?
It’s probably useful to understand exactly how the Peer Name Resolution Protocol works before trying to decipher the problem.
The very simple gist is, that the Peer Resolver keeps a glorified list of the nodes in a mesh (acting as a registration server). Those nodes then “check in” with the registration server periodically. That way, when new nodes join the mesh, they get given a list of their nearest neighbours to communicate with.
If the nodes don’t check in after a configurable time out (I tend to use ten minutes) they get removed from the registration database. This doesn’t always mean that they’re no longer in the mesh however (there isn’t REALLY a concept of “online” in a peer mesh, it’s difficult to define) as they could have lost connectivity to the resolver yet still be accessible to other nodes.
I’ve found when this happens that the “missing” peers tend to correct themselves if you leave them as they’ll attempt to re-register with the resolver.
The other scenario that I’ve seen is that the peer resolver crashes (for whatever reason) and is restarted. If you have no mechanism to persist the registration states in the resolver, the registration database will effectively be reset until the peers re-register with the resolver. If this happens you’ll find new nodes struggle to join the mesh until the existing nodes have started to re-register and share their registration databases with the resolver.
I’ve only ever used a custom resolver so I’m not sure how your mileage may vary with the resolver built in to Vista and Server 2008.
I agree. You need requirements. I’m amazed at the number of people that don’t ‘get it’ as you put it. Would you ask someone to build you a house without architect plans? as that’s effectively what your’re doing.
Well actually it’s more like not stating how many windows your want, how many stories, what colour. Same diff you’d end up with a crappy house that’s not what you wanted.
You also need the right people coming up with the requirements for a project and that means ‘buy-in’. Without buy-in from main stakeholders requirements are flawed. I’m shocked when the wrong people compile the requirements. Cringe.
Hey, thank you for the post on this. I’ve been looking for this sample for over a week. Would you mind posting what your main Product.wxs file looks like for this install? I’m wanting to know how to properly link these in and finalize the package. We don’t really have an install directory need since we are just installing certs…so do you have the directories in there? Seeing the final wxs main product file should help answer our final questions.
nice article. Not very surprisingly in the result (”Content is king”), however interesting to do the maths (salary of SEO Manager vs. AdWord campaign).
Pls allow some remarks:
1) SEM is usually understood as Search Engine Marketing (http://en.wikipedia.org/wiki/SEM) which would include SEO and AdWords (among others). At least in Germany SEM nowadays is a synonym for buying traffic via AdWords. However, it does not change your analysis much.
2) PPC is also the model behind AdWords – you pay (Google) per click they provide you. For me is “SEM/PPC/AdWords/Analytics” therefor like saying the same thing three times: Buy traffic at Google (and measure it through Analytics). Still, it does not change your analysis much.
BUT:
3) Your experience and article refers to a e-Commerce site. Have a look at a newssite for instance. There running a keyword campaign is much more work, it changes daily, sometimes even within minutes (e.g. breaking news). The SEO-guy should provide the editors with the right keywords, make the analysis the editors can not do because they have to write an article – and do it FAST. Additionally, the result (traffic/views) of each article should be measured – does this lead article perform as good as the benchmark? This can not be done with Google Analytics, you need a real-time webtracking tool. Additionally, as the monetization of such a website is mostly depending on (reach based) CPM-advertising, the calculation of the “break-even”-point of Adwords is not that easy like in e-Commerce.
Okay, to sum it up: I agree, that there are a lot of “SEO experts”, “SEO Manager” etc which are not worth the money they request. However, for content driven sites I believe there should be someone taking care for Keywords, AdWords, and SEO-results. If this person is worth 35.000 GBP/year… I don’t know :-)
Boy you’re a genius!!! I’ve been annoyed with no alarms when a push mail came to my diamond, I was also thinking about selling the diamond!!!! I’m sooooo happy today!!!! thanks a loooooooot!
Hi there, how did this go?
I want to do something simple, say, have a Crossplatform (or multiplatform) game that retrieves data in windows and forecast it (as a game state) to the Xbox360 one…
I haven’t found a way to do this just yet, in fact, I have not found any tutorial or info on how to connect a game trough cross platforms :(
Unfortunately you’re out of luck and that’s why you’ll not have found any tutorials on the issue.
When XNA games (or in fact, any game at all) is compiled targetting the xbox, Microsoft does not allow any communications outside of the walled garden of Xbox Live – this is good in a way, as it ensures platform consistency (there’s a good story related to id software enabling multiplayer for Quake 3 on the dreamcast cross compatible with the PC – short version, deathmatch was unplayable for dreamcast owners due to the technical advantages of PC players). The downside is that all your XBLA “indie games” as they’re now termed, don’t have access to any outside resources (no online leaderboards, master servers etc) and have to use the xbox live peer to peer model for game hosting where one of the clients is elected as the server.
Sorry for the bad news.
As for my project, it’s temporarily on hold while I’ve been moving house and job but with any luck I hope to continue shortly!
Since stopping WoW I’ve mainly been playing Civ 4 a lot, along with finally playing Mass Effect, still need to finish it though, pretty near the end and all the Fallout DLC. Oh and GTA 4 on teh xbox, borrowed Saints Row 2 off my brother’s mate too which is apparently GTA 4 + betterness. Need to stop playing so much Civ and finish the others and then borrow prototype off my brother, it looks pretty mental.
I keep getting the message – ‘An error message cannot be displayed because an optional resource assembly containing it cannot be found An error message cannot be displayed because an optional resource assembly containing it cannot be found’
I’m on a HTC Touch HD.
any ideas?!
Thanks!
Scott
There’s currently a (non-critical) bug in the application as the source for the TFL data has changed slightly (in certain circumstances). I’ve fixed it in my trunk repository but I’m currently without internet access during a house move. A new version should be uploaded shortly.
The error message your refering to is a supporting assembly that lets you view exception details from applications written in the .NET Compact Framework. It effectively means that the app is throwing an exception, but because you don’t have the developer tools installed on your device that you don’t have the information to parse that error.
If this is happening when you start up the application and not during the use of it, it’s possible you don’t have the .NET Compact Framework installed on your device – that could fix the issue.
There’s currently a (non-critical) bug in the application as the source for the TFL data has changed slightly (in certain circumstances). I’ve fixed it in my trunk repository but I’m currently without internet access during a house move. A new version should be uploaded shortly.
I am using HTC HD touch, this app did installed properly on my handset but its displaying an error message “error message can not be displayed because an optional resource assembly contaning it can not be found” when I am trying to run this app. I am sure it will be a very usefull app if it will work.
Unfortunately the app stoppped working approx 6 hours after i installed it. Get the same error message as before ( optional resource assembly etc…) hOpe u can check and resolve this soon
Thanks for this useful application which I really like.
Are you thinking about expanding the functionality of this application? What about including the live departure boards which are available for most Tube lines on the TfL website? And what about location-based services like using the GPS of many devices to display the nearest Tube station? Both of these features would be amazing…
Something may have changed with the feed. Whenever I run the program, I now get the following error …
“An error message cannot be displayed because an optional resource assembly containing it cannot be found An error message cannot be displayed because an optional resource assembly containing it cannot be found”
Nope, that’s not a mistake, the message is displayed twice.
Hi David,
I have found a couple of hairy problems with your solution.
1. The use of delegates and events in this manner opens a known (and painful) memory leak that your solution doesn’t allow to be plugged. (you know the one i mean…)
2. The reconnect design you use is both unstable when dealing with several clients (say 2 seconds per connection, 15 cliens and the service won’t start [30 strat rule for windows]). you can get round this by triggering the recover reconnect asynchronously, but his opens mesh stability issues, and nothing can successfully connect while the process is taking place.
I have got a straight p2p solution as well, but as you know it won’t run on server 03 which is a shame. (will post the modifications for the p2p soon).
I really like your MobileTFL app! Is there any chance of getting hold of the source code? I am a VB.Net/C# developer and would like to see how you have written your mobile application.
Arghhhh sharepoint is driving me insane ;) I thought I would learn to like it, but its far to painful for a developer to customize (a project I’ve currently been assigned at the moment).
basically I think the same functionality can be achieved with tech that cost’s much less and is far easier to work with.
Maybe Sharepoint 2010 will be a significant improvement over this incarnation, but I can’t see myself recommending 2007 anytime soon…
now, i think i shall have a nice relaxing cup of warm milk and seclude myself in a darkened room somewhere…
(4 cups of coffee and Sharepoint don’t mix)
oh and i found this site by typing ’sharepoint is rubbish’ into google :)
[...] Writing Presentable Code Pt.1 – Properties and Variables – David Whitney discusses his coding style in detail, providing his justifications to certain decisions. This one is probably most useful if you don’t agree with the standards David uses as it provides the reasoning you might need to see why people do do things that way. [...]
Very nice article. Could you explain a little more about why you have declared the TotalNumberOfStudents get and set method twice? I understand the second one you are setting a private variable to the class object.
Am a little confused about the double declaration.
Not sure about the underscore for private members. I tend to avoid it and also “this.”. Trying to keep my classes small and cohesive everything should be obvious (yes, that’s not always possible…).
[...] This post was mentioned on Twitter by Elijah Manor and Jon Erickson, David Whitney. David Whitney said: New blog post – Writing Presentable Code Pt.1 – Properties and Variables – http://tr.im/EanW [...]
I have only one objection and it is (IMHO) a very logical objection, and that is the usage of the _ anywhere in code and especially for member variables.
I use the “m” for member variables, other than that, I’m in agreement with you. This is a pet peeve of mine, in order to type _ you have to use the two weakest fingers, AND on most Fullsize keyboards you need to take your fingers off the home row.
After a long day of typing (which like you I hate to do) one of the most common typing characters is the hardest to type, and puts the most strain on the weakest fingers of my hands, my RSI is in full painful swing.
I bought an app called tuberun on the market place which did a similar thing to this, and it didn’t even work! I then found this. It’s simple and it works – perfect. You should think about putting it on marketplace, maybe expanding it to a route planner. I’m sure people would buy it; I certainly would.
Thank you
It just looks horribly embarrassing. The sickly English accent, the ludicrously long legs and silly storyline… I’d be more likely to admit to playing it if she was fully naked and talked entirely in sexual euphemism.
Thanks for this excellent app. Like Neal, I also tried buying Tuberun via the Windows Mobile Marketplace, but it didn’t work, and Microsoft’s CS was useless when it came to assistance.
hello mate, i was wondering to give a try can u plz let me know how it really works for windows mobile…. can u give me few breif procedure to use it by the way i was also trying to use this with WPF and trying to make it bigger.
please post on both market places microsofts and opnmarket, opnmarket prefered tho. i have an interview this week london so looking forward to trying this out
[...] David Develops (Software) » Writing Presentable Code Pt.1 – Properties and Variables discussing coding standards, specifically to synchronise development in two countries and keep the style consistent across the teams. You know, the usual stuff. (tags: dev programming c# guidelines standards) [...]
Yep, this works. I had entered my preferred DNS servers before, but it somehow got switched to auto. Of course, when I switched to manual, it remembered my DNS IPs from last time. If anyone needs some, my favorite are OpenDNS (google it, you really should know what DNS does and how it works before you go entering them in). 208.67.222.222 and 208.67.220.220
I downloaded this excellent app some weeks ago and it ran perfectly. Suddenly it doesn’t and I now continually get the response ‘An error message cannot be displayed because an optional resource assembly containing it cannot be found’. I am running an HTC HD2 with windows mobile 6.5 with Microsoft .NET CF 3.5 installed. I’d be grateful for any advice as I would use the program a great deal (if I could!) Many thanks.
Have used this app for a while but like the comment 30 April I to can no longer get access withe error messages, downloaded latest version, seems it their maybe a problem with tfl information site. when it app works it works well my Thanks to Mr Whitney for creating the app in the first place.
I’ve been trying to resolve this off and on for months now man, I can’t believe it was something so simple and stupid. But it’s solved!! …I …I think I love you.
Hi all, im really happy :) i just got my new IPhone 4G for FREE lol!. I didn’t think it would work but it pulled through. I followed the steps on http://freeiphone4g4u.blogspot.com and i just thought ide share it!
March 6th, 2007 at 4:54 pm
Comment.
December 17th, 2007 at 8:53 pm
Testing.
March 4th, 2008 at 4:50 pm
I’m very impressed. Experimental distribution AND I like what I’ve heard.
Do you know they’ve already sold out of the 2500 limited edition $300 package? Not that it’s about the money, but that’s already a minimum of $750k of business right there. I’m glad this distribution model is working so well.
And it’s interesting on so many levels. Everything that went into the Saul Williams model, but along with: acceptance of the pirate bay / torrents for distribution, creative commons licensing, incentive to pay more for exquisite editions AND the artistic aspect of the project being something DIFFERENT and previously unfeasible.
Great stuff. I hope everything is going well for you, David. I’m glad you liked Mass Effect and Super Mario Galaxy!
March 20th, 2008 at 12:18 pm
[...] porcupine treeOwn a Wordpress blog? Make monetization easier with the WP Affiliate Pro plugin. The Colour of Air saved by 12 others ErroR0390 bookmarked on 03/20/08 | [...]
March 27th, 2008 at 1:41 pm
[...] Posted by Steven Westwell on March 27, 2008 I was glad to see that my previous post provoked an interesting article by David, a good friend of mine who’s blog you can find in my blogroll. David posted an article on fractured online identities. [...]
March 28th, 2008 at 6:26 pm
[...] « Fractured Online Identities [...]
May 6th, 2008 at 11:29 pm
[...] the same way I believe that it’s really important that people control their own identities in the “digital future”, I really believe that it’s your own responsibility to [...]
May 20th, 2008 at 11:22 pm
[...] wii (1) « Stop Holding My Data Hostage – Data Ownership and Web 3.0 [...]
July 14th, 2008 at 5:53 am
Thanks for the very helpful information.
Best Regards
Offshore Software Development
http://www.softwebsolutions.com
July 17th, 2008 at 2:32 pm
Hi David. Thanks for the VGC plug and for encouraging people to play Grim Fandango. Much appreciated! I hope we’re able to do justice to such a terrific and important game.
August 5th, 2008 at 10:52 pm
Interesting blog, although i have a few questions i’d like to put to you.
With any integration of separate or third party systems there is always a risk that it will need to change. Surly the best approach is to always provide Adapters (Providers) to these systems so when they do change they are easily replaceable?
I don’t think any architecture will reach entirely a state of perfection. This in mind i think it is important to learn to accept that not every system will reach our own idealistic standards and sometimes we have to learn to let small unavoidable smells go and abstract them best as possible with the above approach. The question i suppose boils down to “Would the cost of leaving the inconvenience in place outweigh the cost of implementing a new provider?”
Which leads me nicely onto the fact i’ve been going through this recently and i don’t think it is always a simple case of “hiding” an uncooperative system behind a idealistic interface either. Let me give you an example, to make my uncooperative system perform i either needed to create an API that slightly coupled it to the underlying component or provide over ten times the infrastructure to support it. So we have a choice either Abstraction or Performance which do you choose?
I suppose my goal here is to point out there is a difference between ideology and fit-for-purpose which sometimes we as developers get caught up in. And also that while we should strive for perfection we sometimes have to accept imperfections.
August 6th, 2008 at 2:25 pm
You’re absolutely right. Adapters / providers are the correct way to couple yourself to an external system in a clean room implementation.
I also conceed your point about abstraction vs. performance being a factor.
I specificly choose “uncooporative” rather than “obsolete / legacy” systems as the target of this piece because I think the challenge presented by them differ. If the system you were replacing was simple an old system then adapters and a little bit of hard work during the migration would likely be more cost effective, however an “uncooperative” system, in my mind at least, is a system where the design has become practically untenable and potentially the relationship with the company that produces the system has soured.
I view this as the “hostile takeover” methodology of system migration as opposed to the retirement of a dear friend.
The cost / benift for one of these cases would likely be negligible in the sense that if you were driven to a drastic replacement, it could well be the difference between continuing to operate as a business or having to sustain serious losses due to an untennable environment.
As a footnote, I think that the encapsulated system would be best accessed using adapters to prevent this situation reemerging in the future but I’d almost expect that as a part of good software design. I think that ideology and fit-for-purpose software design should go hand in hand, otherwise whatever your design looks like, it’s not ideal.
September 3rd, 2008 at 6:43 am
I have a 24″ and my laptop is 17″ so… I have a bit of real estate too. I love it. Except, the fonts on the 17″ are smaller. And hurts my eyes.
September 3rd, 2008 at 10:04 am
For some reasons your comments on my blog keep getting marked as Spam, I’ve unblocked it for now and I’ll try to keep an eye on it in future :)
(response to comment posted over there)
I nice 24″ monitor caught our eye the other day, very tempting :)
September 4th, 2008 at 8:35 am
When I installed the flash plug-in for it I noticed that op.com was “identified” by flash, which heavily points towards opera still being in there somewhere.
I was willing to forgive most of the issues with it as it was a Beta, until the EULA caught my eye.
I think I pretty much lost interest after that.
September 4th, 2008 at 8:36 am
Oh and if you type “Evil: ” into the address bar, it crashes :)
September 4th, 2008 at 10:21 am
[...] and also here Possibly related posts: (automatically generated)It’s all in the fine print.FEMA TicketLesley [...]
October 20th, 2008 at 11:34 pm
You’d pick Braid over LBP? Seriously? I will take a stab and guess that you have never seen, nor played this absolute masterpiece. Nothing compares to it, most certainly not Braid.
I’d say it’s just a matter of opinion, but then again with the widespread critical acclaim and universal love the game is getting, it goes a bit further than that…
October 20th, 2008 at 11:46 pm
@SnazzyD: You’re 100% correct, I’ve not played it, so the above is really based on the media flurry around the game. I’m not sure if it’s the fault of the coverage or my interpretation of it. I’ve only really seen the press released videos on the major gaming sites, so I’d guess that it’s a game that you just “don’t get” until you have some hands on time with it.
I don’t understand how the game they’re advertising can possibly earn such wholehearted praise. Don’t get me wrong, I hope they deserve it, I just don’t understand it currently.
January 10th, 2009 at 4:19 am
Yeah but who buys add on drives? (answer: no one).
They have really never worked for consoles, if people wanted a separate Blue ray device they would go out and buy one, there really isn’t much of an argument to tie it into the xbox so really I agree with their decision even more than you do :P
February 3rd, 2009 at 4:53 am
Dude, thanks! I’ve been banging my head against this issue all weekend.
March 4th, 2009 at 1:24 pm
Stand Up Meetings :)
March 12th, 2009 at 12:00 pm
[...] (3) home about david blog life stream visual exits « Game Development XNA Game Development: Coding For Multiplatform Multiplayer 2 [...]
March 14th, 2009 at 10:10 pm
Hi David. Absolutely fantastic example. Not only does it work without a hitch, more importantly it’s a great beginner’s guide for p2p applications written in WCF. Your code is also well documented and easy to follow. Highest marks.
-Thomas, CEO Aurathon.com
March 23rd, 2009 at 2:30 pm
Hi David,
I appreciate coming across posts like yours as it helps foster discussion around the software release process and configuration management. I’m biased to the version control and change management product for complex parallel, geographically distributed and Agile development known as AccuRev, as I am hte company’s corporate communications manager. One very simple low level feature this product provides is the ability to “Keep” a file to your local workspace as many times as you like before integrating with the team.
Let’s say you have just finished something and you aren’t ready to commit it just yet, but you want to version it. In AccuRev, you just do a Keep to create private versions. Do it as many times as you want. When you are done, you do the commit (we call it promote) and it is just as though you never had a private stream (branches in other tools) and it is just like you no longer have a private stream. So, most of the time you might do update/commit and then sometimes you will want update, keep, and commit. Some folks really like keep and they will have update, keep, keep, keep, keep, keep, and commit (and then perhaps
a bit more keep).
When you create private versions you can then do things like revert back to a prior keep, diff against prior keeps, annotate, see comments, let other folks see your private versions, access your private versions over the Web, and generally do all of the operations that are usually only done against public versions you can now do with your private versions.
If parallel development is becoming a tricky endeavor, or if you have remote teams that are always getting bogged down or you’re unable to reallocate resources or projects easily, take a peek at the tool sometime by reviewing the 2-minute demo at the link above on my name.
Thank you again for a great educational post.
Alex
March 23rd, 2009 at 6:49 pm
David,
Great post! I definitely subscribe your advice to “aim for a one-click install”.
If you manage to set-up your environments in a way that your deployment process is almost all automatic, then you’ll reach a state of Deployment Zen.
The more you automate deployment, the more Agile you can be (fear of deployment makes it impossible to follow an Agile methodology where you are expected to release often – to any environment).
I think that the problem you describe has also to do with the divide between the development and deployment activities.
These are still looked at as separate pieces, and usually have different people working on each of them.
I think that’s one of the break points that limits the ability to automate the process.
At OutSystems we’ve been following the 1-click Mantra for a long time. When we include a new feature into the Agile Platform, we make sure it has zero impact on the deployment automation.
Today, deploying a web application (and rolling it back to a previous version) is really a 1-click activity.
Check this video to see how it looks like http://www.outsystems.com/evaluationcenter/DemoScreen.aspx?SelectedMovieFolderId=4506 (you’ll need to fill in a small form to see this one).
You can also take a look at this other video, which also shows the 1-click-deployment process in action and doesn’t need any sign-up http://www.outsystems.com/evaluationcenter/DemoScreen.aspx?SelectedMovieFolderId=4504
Let me know what you think!
Michel
April 14th, 2009 at 3:21 pm
Hello.
I was trying to use the PNRP for the peer resolver but i am experiencing some troubles talking to my peers. Did you ever come across problems with PNRP? Sometimes everything is ok, some other times…
Tnks you for any input..
Telmo Sá
April 14th, 2009 at 3:45 pm
You’re going to have to be a bit more specific regarding your actual issue.
Do your peers always discover each other and then vanish over time and start to loose communication?
Do they sometimes fail to make the initial connection?
It’s probably useful to understand exactly how the Peer Name Resolution Protocol works before trying to decipher the problem.
The very simple gist is, that the Peer Resolver keeps a glorified list of the nodes in a mesh (acting as a registration server). Those nodes then “check in” with the registration server periodically. That way, when new nodes join the mesh, they get given a list of their nearest neighbours to communicate with.
If the nodes don’t check in after a configurable time out (I tend to use ten minutes) they get removed from the registration database. This doesn’t always mean that they’re no longer in the mesh however (there isn’t REALLY a concept of “online” in a peer mesh, it’s difficult to define) as they could have lost connectivity to the resolver yet still be accessible to other nodes.
I’ve found when this happens that the “missing” peers tend to correct themselves if you leave them as they’ll attempt to re-register with the resolver.
The other scenario that I’ve seen is that the peer resolver crashes (for whatever reason) and is restarted. If you have no mechanism to persist the registration states in the resolver, the registration database will effectively be reset until the peers re-register with the resolver. If this happens you’ll find new nodes struggle to join the mesh until the existing nodes have started to re-register and share their registration databases with the resolver.
I’ve only ever used a custom resolver so I’m not sure how your mileage may vary with the resolver built in to Vista and Server 2008.
April 20th, 2009 at 8:15 pm
I agree. You need requirements. I’m amazed at the number of people that don’t ‘get it’ as you put it. Would you ask someone to build you a house without architect plans? as that’s effectively what your’re doing.
Well actually it’s more like not stating how many windows your want, how many stories, what colour. Same diff you’d end up with a crappy house that’s not what you wanted.
You also need the right people coming up with the requirements for a project and that means ‘buy-in’. Without buy-in from main stakeholders requirements are flawed. I’m shocked when the wrong people compile the requirements. Cringe.
Bad requirements = Bad solution.
– Lee
April 22nd, 2009 at 1:18 pm
Hey, thank you for the post on this. I’ve been looking for this sample for over a week. Would you mind posting what your main Product.wxs file looks like for this install? I’m wanting to know how to properly link these in and finalize the package. We don’t really have an install directory need since we are just installing certs…so do you have the directories in there? Seeing the final wxs main product file should help answer our final questions.
Thanks!
April 22nd, 2009 at 2:17 pm
[...] I’ve previously provided a code snippet illustrating how to use WiX (the “new” Win… [...]
May 10th, 2009 at 8:27 pm
Thanx heaps for all the effort in creating this handy app!
(tested on Hermes, Kaiser)
May 13th, 2009 at 5:01 pm
Hi,
nice article. Not very surprisingly in the result (”Content is king”), however interesting to do the maths (salary of SEO Manager vs. AdWord campaign).
Pls allow some remarks:
1) SEM is usually understood as Search Engine Marketing (http://en.wikipedia.org/wiki/SEM) which would include SEO and AdWords (among others). At least in Germany SEM nowadays is a synonym for buying traffic via AdWords. However, it does not change your analysis much.
2) PPC is also the model behind AdWords – you pay (Google) per click they provide you. For me is “SEM/PPC/AdWords/Analytics” therefor like saying the same thing three times: Buy traffic at Google (and measure it through Analytics). Still, it does not change your analysis much.
BUT:
3) Your experience and article refers to a e-Commerce site. Have a look at a newssite for instance. There running a keyword campaign is much more work, it changes daily, sometimes even within minutes (e.g. breaking news). The SEO-guy should provide the editors with the right keywords, make the analysis the editors can not do because they have to write an article – and do it FAST. Additionally, the result (traffic/views) of each article should be measured – does this lead article perform as good as the benchmark? This can not be done with Google Analytics, you need a real-time webtracking tool. Additionally, as the monetization of such a website is mostly depending on (reach based) CPM-advertising, the calculation of the “break-even”-point of Adwords is not that easy like in e-Commerce.
Okay, to sum it up: I agree, that there are a lot of “SEO experts”, “SEO Manager” etc which are not worth the money they request. However, for content driven sites I believe there should be someone taking care for Keywords, AdWords, and SEO-results. If this person is worth 35.000 GBP/year… I don’t know :-)
May 23rd, 2009 at 6:12 pm
Many thanks–same here–I bet there are many others in search of this bit of information!
June 14th, 2009 at 4:48 pm
Thanks for this man, been bugging me for a while but was too lazy to troubleshoot. Finally did a quick google and found your solution! :)
June 20th, 2009 at 2:08 am
hello, tried running your downloading your program and runnung setup on my PC, how do I install it properly please.
June 20th, 2009 at 2:57 pm
You’ll need to copy the cab file to your Windows Mobile device and open it on the device.
June 27th, 2009 at 10:40 am
Boy you’re a genius!!! I’ve been annoyed with no alarms when a push mail came to my diamond, I was also thinking about selling the diamond!!!! I’m sooooo happy today!!!! thanks a loooooooot!
June 29th, 2009 at 9:58 pm
Hi there, how did this go?
I want to do something simple, say, have a Crossplatform (or multiplatform) game that retrieves data in windows and forecast it (as a game state) to the Xbox360 one…
I haven’t found a way to do this just yet, in fact, I have not found any tutorial or info on how to connect a game trough cross platforms :(
June 30th, 2009 at 8:07 am
Unfortunately you’re out of luck and that’s why you’ll not have found any tutorials on the issue.
When XNA games (or in fact, any game at all) is compiled targetting the xbox, Microsoft does not allow any communications outside of the walled garden of Xbox Live – this is good in a way, as it ensures platform consistency (there’s a good story related to id software enabling multiplayer for Quake 3 on the dreamcast cross compatible with the PC – short version, deathmatch was unplayable for dreamcast owners due to the technical advantages of PC players). The downside is that all your XBLA “indie games” as they’re now termed, don’t have access to any outside resources (no online leaderboards, master servers etc) and have to use the xbox live peer to peer model for game hosting where one of the clients is elected as the server.
Sorry for the bad news.
As for my project, it’s temporarily on hold while I’ve been moving house and job but with any luck I hope to continue shortly!
July 6th, 2009 at 10:59 pm
Bad platform fanboy!
Since stopping WoW I’ve mainly been playing Civ 4 a lot, along with finally playing Mass Effect, still need to finish it though, pretty near the end and all the Fallout DLC. Oh and GTA 4 on teh xbox, borrowed Saints Row 2 off my brother’s mate too which is apparently GTA 4 + betterness. Need to stop playing so much Civ and finish the others and then borrow prototype off my brother, it looks pretty mental.
July 14th, 2009 at 4:53 pm
This seems to have stopped working? Any ideas if it will ever work again. I presume TFL have changed something their end.
July 22nd, 2009 at 9:37 am
I keep getting the message – ‘An error message cannot be displayed because an optional resource assembly containing it cannot be found An error message cannot be displayed because an optional resource assembly containing it cannot be found’
I’m on a HTC Touch HD.
any ideas?!
Thanks!
Scott
July 22nd, 2009 at 9:54 am
@Scott
There’s currently a (non-critical) bug in the application as the source for the TFL data has changed slightly (in certain circumstances). I’ve fixed it in my trunk repository but I’m currently without internet access during a house move. A new version should be uploaded shortly.
The error message your refering to is a supporting assembly that lets you view exception details from applications written in the .NET Compact Framework. It effectively means that the app is throwing an exception, but because you don’t have the developer tools installed on your device that you don’t have the information to parse that error.
If this is happening when you start up the application and not during the use of it, it’s possible you don’t have the .NET Compact Framework installed on your device – that could fix the issue.
July 22nd, 2009 at 9:55 am
There’s currently a (non-critical) bug in the application as the source for the TFL data has changed slightly (in certain circumstances). I’ve fixed it in my trunk repository but I’m currently without internet access during a house move. A new version should be uploaded shortly.
July 29th, 2009 at 4:12 pm
Hi David,
I am using HTC HD touch, this app did installed properly on my handset but its displaying an error message “error message can not be displayed because an optional resource assembly contaning it can not be found” when I am trying to run this app. I am sure it will be a very usefull app if it will work.
August 6th, 2009 at 12:36 pm
Good Job David!! It works perfactly fine..
Good Luck ahead.
August 7th, 2009 at 5:30 pm
Excellent work mate. App works brilliantly. Thanks so much
August 8th, 2009 at 3:42 pm
Hi David
Unfortunately the app stoppped working approx 6 hours after i installed it. Get the same error message as before ( optional resource assembly etc…) hOpe u can check and resolve this soon
Thkz
August 9th, 2009 at 12:51 am
Yep, I’m on it.
I’m entirely redoing the way the feed is parsed to stop it bombing out when they subtley change the format.
Should be way more robust now. ETA an hour or so, most likely in the morning after I’ve slept.
August 20th, 2009 at 2:30 pm
Thanks for this useful application which I really like.
Are you thinking about expanding the functionality of this application? What about including the live departure boards which are available for most Tube lines on the TfL website? And what about location-based services like using the GPS of many devices to display the nearest Tube station? Both of these features would be amazing…
September 1st, 2009 at 4:29 pm
Brilliant, thanks.
For me, I needed to enter the DNS settings manually from my router config page, rather than leaving it to Auto.
1 reboot later, all fixed.
Cheers!
September 6th, 2009 at 9:39 pm
Something may have changed with the feed. Whenever I run the program, I now get the following error …
“An error message cannot be displayed because an optional resource assembly containing it cannot be found An error message cannot be displayed because an optional resource assembly containing it cannot be found”
Nope, that’s not a mistake, the message is displayed twice.
September 17th, 2009 at 4:34 pm
Hi David,
I have found a couple of hairy problems with your solution.
1. The use of delegates and events in this manner opens a known (and painful) memory leak that your solution doesn’t allow to be plugged. (you know the one i mean…)
2. The reconnect design you use is both unstable when dealing with several clients (say 2 seconds per connection, 15 cliens and the service won’t start [30 strat rule for windows]). you can get round this by triggering the recover reconnect asynchronously, but his opens mesh stability issues, and nothing can successfully connect while the process is taking place.
I have written a stable and safe alternative, feel free to take a look at my blog for more info.
http://simonsdev.blogspot.com/2009/09/c-wcf-peer-to-peer-solution.html
I have got a straight p2p solution as well, but as you know it won’t run on server 03 which is a shame. (will post the modifications for the p2p soon).
September 28th, 2009 at 2:02 pm
Hi David!
I really like your MobileTFL app! Is there any chance of getting hold of the source code? I am a VB.Net/C# developer and would like to see how you have written your mobile application.
Regards,
Alan
September 30th, 2009 at 4:00 pm
I am glad you can answer yes to all three questions, shame there are four, I think that is what you meant :)
James
September 30th, 2009 at 5:43 pm
Hey Dave!
I realise that I’m linking to two articles on Cracked, but you might find these bits interesting: http://www.cracked.com/article_15748_gamers-manifesto.html and http://www.cracked.com/article_15732_life-after-video-game-crash.html. Both of them are by David Wong and he writes with some mental clarity about video games without either taking them too seriously or claiming that they are the idiot’s heroin.
Phil “We Should Meet Up” Calvert
October 8th, 2009 at 4:30 pm
[...] to Vote[FriendFeed] Reusable Editable Fields for ASP.net MVC Using jQuery (10/8/2009)Thursday, October 08, 2009 from [...]
October 20th, 2009 at 11:24 am
Hey Dave,
Thought you might like to know a search of ’sharepoint shit’ in google brought me here :)
having a nightmare setting up TFS.
October 27th, 2009 at 1:09 pm
Arghhhh sharepoint is driving me insane ;) I thought I would learn to like it, but its far to painful for a developer to customize (a project I’ve currently been assigned at the moment).
basically I think the same functionality can be achieved with tech that cost’s much less and is far easier to work with.
Maybe Sharepoint 2010 will be a significant improvement over this incarnation, but I can’t see myself recommending 2007 anytime soon…
now, i think i shall have a nice relaxing cup of warm milk and seclude myself in a darkened room somewhere…
(4 cups of coffee and Sharepoint don’t mix)
oh and i found this site by typing ’sharepoint is rubbish’ into google :)
November 5th, 2009 at 8:33 am
[...] Writing Presentable Code Pt.1 – Properties and Variables – David Whitney discusses his coding style in detail, providing his justifications to certain decisions. This one is probably most useful if you don’t agree with the standards David uses as it provides the reasoning you might need to see why people do do things that way. [...]
November 5th, 2009 at 9:30 am
Very nice article. Could you explain a little more about why you have declared the TotalNumberOfStudents get and set method twice? I understand the second one you are setting a private variable to the class object.
Am a little confused about the double declaration.
Thanks!
November 5th, 2009 at 11:41 am
[...] this is wrong: Writing Presentable Code Pt.1 – Properties and Variables via [...]
November 5th, 2009 at 1:18 pm
The first is TotalNumberOfStudents and the second is TotalNumberOfTeachers.
November 5th, 2009 at 1:21 pm
I agree with most of the points you mentioned.
Not sure about the underscore for private members. I tend to avoid it and also “this.”. Trying to keep my classes small and cohesive everything should be obvious (yes, that’s not always possible…).
November 5th, 2009 at 9:31 pm
[...] This post was mentioned on Twitter by Elijah Manor and Jon Erickson, David Whitney. David Whitney said: New blog post – Writing Presentable Code Pt.1 – Properties and Variables – http://tr.im/EanW [...]
November 9th, 2009 at 7:06 pm
I have only one objection and it is (IMHO) a very logical objection, and that is the usage of the _ anywhere in code and especially for member variables.
I use the “m” for member variables, other than that, I’m in agreement with you. This is a pet peeve of mine, in order to type _ you have to use the two weakest fingers, AND on most Fullsize keyboards you need to take your fingers off the home row.
After a long day of typing (which like you I hate to do) one of the most common typing characters is the hardest to type, and puts the most strain on the weakest fingers of my hands, my RSI is in full painful swing.
you can see my coding standards at http://www.longcloud.co.nz/Blogs/archive/2009/03/14/the-worst-syntactically-naming-convention-in-vogue-today-.aspx
November 22nd, 2009 at 6:31 pm
Thanks! Very helpful, worked like a charm :)
December 9th, 2009 at 9:03 am
Thanks for a good article, i was scratching my head since last 2 days. you solved the prob..
thank a Lot..
Anil Pandey
Mumbai India
December 11th, 2009 at 10:44 am
Brilliant little program, does exactly what it says with a lovely clean interface. Easy to understand extra features and fast to start.
This is the type of program which really needs to be in the Windows Mobile Marketplace.
January 9th, 2010 at 12:18 am
I bought an app called tuberun on the market place which did a similar thing to this, and it didn’t even work! I then found this. It’s simple and it works – perfect. You should think about putting it on marketplace, maybe expanding it to a route planner. I’m sure people would buy it; I certainly would.
Thank you
January 10th, 2010 at 5:31 pm
Thanks for the quote. ;)
It just looks horribly embarrassing. The sickly English accent, the ludicrously long legs and silly storyline… I’d be more likely to admit to playing it if she was fully naked and talked entirely in sexual euphemism.
In fact… take a memo.
January 18th, 2010 at 9:19 pm
Thanks for this excellent app. Like Neal, I also tried buying Tuberun via the Windows Mobile Marketplace, but it didn’t work, and Microsoft’s CS was useless when it came to assistance.
January 19th, 2010 at 12:14 am
hello mate, i was wondering to give a try can u plz let me know how it really works for windows mobile…. can u give me few breif procedure to use it by the way i was also trying to use this with WPF and trying to make it bigger.
January 19th, 2010 at 1:13 am
[...] to Vote[FriendFeed] ASP.NET MVC View Engine That Supports View Path Inheritance (1/18/2010)Monday, January 18, 2010 from [...]
January 24th, 2010 at 12:55 pm
please post on both market places microsofts and opnmarket, opnmarket prefered tho. i have an interview this week london so looking forward to trying this out
January 25th, 2010 at 11:03 pm
[...] David Develops (Software) » Writing Presentable Code Pt.1 – Properties and Variables discussing coding standards, specifically to synchronise development in two countries and keep the style consistent across the teams. You know, the usual stuff. (tags: dev programming c# guidelines standards) [...]
February 24th, 2010 at 5:17 pm
Thanks alot, I messed about with my DMZ and xbox and got this problem….. all fixed now with manual DNS. Phew!!
March 29th, 2010 at 6:35 am
Yep, this works. I had entered my preferred DNS servers before, but it somehow got switched to auto. Of course, when I switched to manual, it remembered my DNS IPs from last time. If anyone needs some, my favorite are OpenDNS (google it, you really should know what DNS does and how it works before you go entering them in). 208.67.222.222 and 208.67.220.220
April 5th, 2010 at 7:26 am
hi, Do you sample code on how to transfer file using wcf p2p? Would greatly appreciate it.
Thanks
April 30th, 2010 at 9:15 am
I downloaded this excellent app some weeks ago and it ran perfectly. Suddenly it doesn’t and I now continually get the response ‘An error message cannot be displayed because an optional resource assembly containing it cannot be found’. I am running an HTC HD2 with windows mobile 6.5 with Microsoft .NET CF 3.5 installed. I’d be grateful for any advice as I would use the program a great deal (if I could!) Many thanks.
May 2nd, 2010 at 7:19 am
Have used this app for a while but like the comment 30 April I to can no longer get access withe error messages, downloaded latest version, seems it their maybe a problem with tfl information site. when it app works it works well my Thanks to Mr Whitney for creating the app in the first place.
May 2nd, 2010 at 9:33 am
Really Great piece and really useful for clarifying what web services are and why people would like to use it. WELL DONE
May 20th, 2010 at 5:19 pm
Love it.
May 24th, 2010 at 10:16 am
TFL have just broken it by adding “DLR” and “Overground” to the list, there’s now 13 lines not 11
May 27th, 2010 at 1:14 pm
PLEASE update your app. No longer works and I use it daily :)
May 28th, 2010 at 6:46 am
I’ve been trying to resolve this off and on for months now man, I can’t believe it was something so simple and stupid. But it’s solved!! …I …I think I love you.
May 29th, 2010 at 12:04 am
I got blinded after reading through this.
June 2nd, 2010 at 7:39 am
David, this is a great app. Please can you update it to the 13 lines! Many thanks!
June 4th, 2010 at 12:42 am
thanks for the update, much appreciated.
all lines work now. works great on my hd2.
June 23rd, 2010 at 9:29 pm
just another guy thankful for this post. I knew it was something stupid, but it’s hard to anticipate stupid bugs like this. Thanks again.
July 29th, 2010 at 7:37 am
Hi all, im really happy :) i just got my new IPhone 4G for FREE lol!. I didn’t think it would work but it pulled through. I followed the steps on http://freeiphone4g4u.blogspot.com and i just thought ide share it!