October 15th, 2008 ·
If you use both VisualSvn + Trac (or another flavour of Subversion and Trac), and tried to integrate them with Fogbugz , you will have tried the TracFogbugzPlugin.
Trying to get this to work isn’t straightforward as it’s not compatible with Trac 0.11. You will come across the following error:
Traceback (most recent call last):
File “C:\Python25\Lib\site-packages\trac\web\api.py”, line 339, in
send_error
‘text/html’)
File “C:\Python25\Lib\site-packages\trac\web\chrome.py”, line 684, in
render_template
data = self.populate_data(req, data)
File “C:\Python25\Lib\site-packages\trac\web\chrome.py”, line 592, in
populate_data
d['chrome'].update(req.chrome)
File “C:\Python25\Lib\site-packages\trac\web\api.py”, line 168, in
__getattr__
value = self.callbacks[name](self)
File “C:\Python25\Lib\site-packages\trac\web\chrome.py”, line 460, in
prepare_request
for category, name, text in contributor.get_navigation_items(req):
File
“c:\Python25\lib\site-packages\tracfogbugzplugin-0.9u-py2.5.egg\fogbugz\fogb
ugz.py”, line 22, in get_navigation_items
yield ‘mainnav’, ‘fogbugz’, Markup(‘<a href=”%s”>FogBuz</a>’,
self.baseurl)
LookupError: unknown encoding: >/”>https://<<myurl>>/
To fix this line 22 needs changed, to read:
yield ‘mainnav’, ‘fogbugz’, Markup(‘<a href=”%s”>FogBuz</a>’%self.baseurl)
Or download the file below and use it as part of the installation instructions (if this is your first Python Egg you want to read about installing Trac plugins.
Now it is loading but the plugin doesn’t seem to work, haha.
Download: Patched tracfogbugzplugin-09u-py25
Tags:webdevelopment·
October 9th, 2008 ·
Maintaining code can be a real pain in backside. Especially when you’re using shared code, almost always at a later date you will want to make the code more versatile to accommodate a scenario you hadn’t thought of before.
I’ve had experience this in an ASP / VbScript environment, and therefore I’m going to use the terminology of page and functions as opposed to files and classes:
- Rework the code and update all pages. This is obviously a bad idea.
- To extend inflexible code: Rename the function and create a wrapper in its place to access the function using default parameters that are compatible with your existing codebase.
- Create functions that are extendable.
To use optional parameters, pass them in an Array or dictionary object. This way you can add additional ones. The benefit that Arrays have over Dictionary objects is that they use less resources. This can be important if you are developing for a popular website.
Another advantage of using Arrays is that you’ll use less code calling the function. Using a dictionary object you’ll have to add each parameter separately, then pass the dictionary object as the parameter of the function.
On the other hand, code will be more legible using dictionary objects. Dictionary objects use key value pairs to tell you that key A has a value B. You’ll not have to bother about the order of parameters, but you’ll have to know the keys of each function. It results in verbose, legible, resource intensive code.
Tags:webdevelopment·
August 8th, 2008 ·
Just been reading Gizmo’s article on disabling Google’s text advertisements. I’m realizing it has come this far: people have been increasingly annoyed by advertising on their favourite websites. N now even Google’s textads are targeted because a small percentage puts the ads on the page people have become annoyed. So they disable the ads. That’s their right.
However that leaves millions of bloggers without a possible revenue stream to support their writing so I am thinking what it can be replaced with. I’ve no idea. Personally I wouldn’t donate to a website because I liked a certain article, donationware works best for ‘tools’. I don’t think I can get paid for putting legitimate search results underneath a post, which would be a benefit to readers, which is a shame. Subscription services go against the nature of the web (hiding content from public). I wouldn’t buy a mug just because i read a website. Maybe that means that it’s just too hard for an individual to recoup their costs?
That said, the majority of people will not have Adsense blocked. And I think the majority of bloggers don’t blog for money, but because they like to discuss.
Credit: Photo by mwagner01
Tags:web·
August 4th, 2008 ·
Acquiring feedback on web projects can be harder than you’d think, especially when you’re working on internal projects that don’t get discussed on outside your organization. By making feedback a fun, easy and rewarding thing to do more people might be encouraged to help us and put in the effort.
I’m sure some of you are in a similar situation: you launch a project and silence follows. Trivial problems might emerge but a there’s no general response to the long hours you put in. That makes it much harder to evaluate the project and set a schedule for future developments.
To help with this we’ve created a UserVoice page. Let’s describe it as a digg-like FAQ. People are encouraged to leave a message, can vote on feedback they find important, and always have the full picture of what the development is focused on. Developers act on the consensus and theoretically will work on solving the most urgent issues.
Of course this model will work best when both users and developers care enough to communicate. So Uservoice is engineered to make it trivial to leave a message. It can be easily integrated into an existing site. Some functionality requires a user account, which is a stumbling block. But you can leave feedback without it, which is a bonus. Oh and it doesn’t integrate with any bug trackers which is a shame.
Will it work and will there be enough participation? Ask me again in 6 months time. I’m not sure how to make it any easier though.
Tags:developing·feedback·uservoice·webdevelopment·
July 23rd, 2008 ·
Upgraded to Wordpress 2.6 without any trouble.
WordPress › Blog » WordPress 2.6.
Tags:site·
July 14th, 2008 ·
James Houston, a Glasgow School of Art’s graphic design graduate created a live performance of Radiohead – Nude on a bunch of pc components. Very impressive.
Sinclair ZX Spectrum – Guitars (rhythm & lead)
Epson LX-81 Dot Matrix Printer – Drums
HP Scanjet 3c – Bass Guitar
Hard Drive array – Act as a collection of bad speakers – Vocals & FX

Tags:epson·funny·hp·music video·spectrum·vimeo·
June 18th, 2008 ·
It’s good practice to make code easy to maintain, so sometimes you’ll want to use less code using recursive functions. In order to find out how to this works in Second Life I created this small recusive example:
integer i = 0;
integer top = 0;
integer Monkeys()
{
llOwnerSay("monkeys");
i++;
if (i <= top)
return Monkeys();
else
return i;
}
default
{
state_entry()
{
llSay(0, "Hello, Avatar!");
}
touch_start(integer total_number)
{
i = 0;
top = Monkeys();
llOwnerSay((string)top);
}
}
This script says monkeys an increasing amount of times every time you touch it by calling itself if and keeping track of the total amount of times the function is called. First time there will be 1 monkey, next time 2 monkeys etc. Find more products at our shop in Badmoon.
Tags:lsl·secondlife·