|
|
Top : Technical - Computer
Home | Add Site | Change Site | New | Cool | Top Rated | Random | Email Updates | Search
![]() |
dotServing, the number 1 choice for Islanders looking for web hosting. Setup your presence today with web design and development plans available. Rates starting at $5 a month. Or take advantage of our affilate program available with payouts as high as $100!! Visit us at www.dotserving.pe.ca. |
On September 2, 2008, Charlottetown Transit launched additional services, including increased frequency on the main University Avenue run. The Interactive Charlottetown Transit Map has been updated to include these new runs.
Under the hood, the application has been migrated to use jQuery.
After a year without an update, I've finally taken a stab at translating the new route system into the Interactive Transit Map.
The map is currently only showing the University Avenue Express route.
The map has been enhanced so that every scheduled time at each stop is a clickable link to the stops on that "run." This should make planning an actual trip much easier.
There are more details in this ruk.ca blog post.
I've finally had a moment to update the application completely to reflect the schedule changes that took effect on June 12, 2006.
While I'd actually updated the stops, routes and schedule for routes 1 to 4 last month, there were some loose ends related to route 5 that needed to be cleaned up.
The end effect is that:
The hiving off of a route "1a" from route 1 is a little bit of a kludge on my part -- there is no official route "1a" on the schedule, it's simply part of route 1. But the run out to Sears and Winsloe is tacked on to route 1 as a side-note on the printed schedule, and is different enough to warrant standalone representation on the map.
One important thing to note about route 1a is that it appears that you can get to Sears, but that you can never get back. This is simply an artifact of the schedule: the bus only stops at Sears on the way out to Winsloe, not on the way back. But to get back from Sears, you get simply get on the next outbound bus, go out to Winsloe, and ride back into town.
The source code and route data in the SVN repository have been updated to reflect these changes.
On Monday, March 13, 2006 service will begin on a new route, the #5 "Around Town Loop."
This route is a reconfiguration of the old "senior's bus" route, and is now available to everyone.
The route is shown in black on the route map.
Also being introduced on Monday is a hybrid route, #6 "Up Town, Across Toen, Downtown." I haven't yet added this route to the Interactive Transit Map, but hope to soon (it's a little more complicated because it's actually 5 different runs added at "certain times of the day for added customer service."
I've made some updates to the Interactive Charlottetown Transit Map application this evening:


It is always interesting (frustrating) following the upgrade/stick/switch turmoil that goes along with any consideration of moving from a stable devil you know tool versus the shiny new thing. Often the implicit upgrade cycle you would hope to happen is hindered by a slow release cycle on the tool of choice or lack of compelling features. These items have been beaten to death by others but I thought some personal insights from similar struggles I have seen may as well be added.
In any upgrade it is generally the "little things" that surface to haunt you so anyone that has been through a prior upgrade always entertains the idea that there are many of those gremlins just waiting for a chance to laugh at you publicly after you have deployed to your clients.
I participate in two significant products, one based on Delphi 6 and another still on Delphi 5. In both cases the volume of code, testing capacity, and potential re-platforming as are always cited as significant barriers to attacking the upgrade cycle. Due to 3rd party dependencies the latter project has an extremely high bar for upgrading. In both cases the problem is firmly rooted in not carrying out a natural and continuous upgrade cycle with robust testing. Until you have the "must have" in the new version you can't really afford to make the move. The business case simply does not exist and diminishes the further you get from the tip release of you development tool.
Rather than suggest you should not upgrade I think a pragmatic approach that I have found moderately successful is worth highlighting. For much of the server components of one of the products the code has been maintained in each new release of the Borland/CodeGear toolset but always back-compiled and tested using Delphi 6. So, all along the code was maintained in Delphi 7, BDS 2005, BDS 2006, and finally in RAD Studio 2007. That is great, after getting over the the initial hate for some of the IDE changes (SDI) you start to rely heavily on the new features like live templates, refactoring, code metrics, and models. Still nothing new is needed for the product that goes out the door though so upgrade sell is weak based on a "feature case."
But there are definitely reasons to upgrade. Recently, we were doing capacity testing and were a bit disappointed with our numbers and needed a quick hit. Without a single change to compiler options, code base, etc. we performed the same capacity testing with the application suite complied under RAD Studio 2007. We immediately saw a consistent 25-30% capacity volume increase. The majority of this is easily related directly to the the new memory manager (FastMM) and better inlining of key functions. Most of these items we could get if we were willing to alter the system to include or use 3rd party tools but the whole point was OOTB improvement. Since it was server-side code VCL changes really were not a factor.
We did not need the increased capacity immediately so we simply tucked it away in the "good to know" column. Had we needed it I am sure an upgrade on the server components would have happened right then (not a strong enough business case). We are now taking steps to assess a full upgrade on the client and server components and work out a process that will not leave us hung on an older version as we are now. What is the biggest hang up? Proper coverage for the testing. You can never have enough and dealing with tool related problems is never a good sell. An upgrade advisor tool that can run on a project would certainly be nice to have.
Over time though there has been a persistent set of issues that never quite seem to be addressed when you are trying to push a particular upgrade. Don't get me wrong, I am fully in the "upgrade often and stay upgraded" column but this list contains the items that most often leave me hesitant:
In the end the Delphi product is targeted at developers but the install process is so burdensome that it is difficult for a business application developer to potentially have to spend time on assessing and using the tool when the install experience takes up valuable time and leaves the wrong taste in the mouth and leaves little for a concrete experience in the software.
After all the non-positive comments above I still have to say that the upgrades are well worth the effort but that is more from the fact that I know the benefits are in there from constant exposure to them as opposed to looking at any given
information on the CodeGear site and going "Wow". So, if you have been hedging on upgrading I strongly encourage you to get past the OOTB experience and get used to the product. The benefits are there and your productivity will actually increase. You may even like the SDI interface after some time ;-).
Chris Bensen: Upgrading Delphi
Why aren't you upgrading Delphi- Reasons and myths
It was quite some time ago that I discussed an IFilter implementation using Delphi code. Here is the code for that blog post.
Some of the development I have been doing lately has had me searching through the OpenSSL online documentation quite frequently. While most times the OpenSSL site pops up first in the google results it is not always the case. Google allows you to constrain the search to a particular site by adding a site:site-name expression to the search. This is great but more typing than I care to do repeatedly. My solution was to add an OpenSearch to the IE7 search.
The great thing is that this works in both IE and FireFox through the simple inclusion of a <link/> HTML element. If you check your search drop down you should see that OpenSSL Search Provider is availabe for using to search.
<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<ShortName>OpenSSL</ShortName>
<Description>OpenSSL constrained search using Google</Description>
<Tags>OpenSSL SSL TLS</Tags>
<InputEncoding>UTF-8</InputEncoding>
<Url
type="text/html"
template="http://www.google.com/search?hl=en&q=site%3Awww.openssl.org+{searchTerms}"
/>
<Query role="example" searchTerms="SSL_new"/>
</OpenSearchDescription>
This <link> should really be in the <head> section of the HTML document but luckily both browsers will pick it up even when it is embedded in the body.
<link
title="OpenSSL Search Provider"
href="http://www.run-time-systems.com/blog/openssl-search-provider.xml"
type="application/opensearchdescription+xml"
rel="search"
/>
Well it looks like Borland will continue the pattern of introducing version control sub-systems that I like and then removing them from the line up after two or three years. It appears the Standard Edition of StarTeam does not meet with the Borland ALM direction so anyone using it can either move up to the Enterprise licensing or somewhere else. The notice indicates that version control is a commodity so I would expect they believe that anyone who thought that the standard SKU was satisfactory will transition to sub-version or some other free tool.
This is twice now that Borland has provided a version control solution with the Delphi license and then go on to drop support. Both times I was quite happy with the solutions and happily moved to them. TeamSource was a great small shop tool and I really liked the model and integration. I didn't mind switching to StarTeam either and had become rather attached to the great linking support and build tagging.
The problem with this announcement is that the it leaves StarTeam in an all or nothing (planned it would seem) position and if you already have the rest of the change request/ticketing/project management bits taken care of outside of the Borland suite of tools. So, the upgrade scheme isn't really going to fly with me :-(.
The documents that are linked below make no references to the status of StarTeam within the DevCo/DTG but I am sure something will pop up shortly.
Further reading:
Borland Support Newsletter October 2006
Borland StarTeam Standard Edition CR-only Sunset FAQ
Borland StarTeam Edition Sunset Customer Notification
This is just a quick post to confirm the install and use of the beta Windows Live Writer.
If this works it is pretty simple to install and get working.
We’ve been using free and open-source software at silverorange for years now. In the last year, though, we’ve begun releasing more of our internal web-development software stack under an open-source license.
While our Swat web application toolkit (it’s not a framework) has been open since it’s inception, it has been missing some of the key infrastructure required for a healthy open-source project. The code was available, that was about it.
Now, with the new code.silverorange.com website (based on Trac - a past nominee for silverorange employee of the year), we finally have the rest of the public project infrastructure in place.
Most importantly among these changes, we finally have a public bug-tracking system! This took longer than expected because we had Swat bug-tracking tied in with our internal (private client) project tracking. The two are finally separated, and everything that should be open is now out in the open.
We’re are also now in a position to grant SVN commit access to external contributors when appropriate.
The silverorange code site isn’t limited to Swat either. We have a whole set of packages we use for developing client sites, including a back-end website administration package, an e-commerce package, a photo-gallery package, and a (fledgling) weblog package. Each of these projects now has a section of it’s own on the code.silverorange.com site, and they share a mailing list and Jabber chat room with Swat.
For those who have been patient enough to follow and participate in our open-source projects so far, we’re appreciative. We hope to be much more open to external collaboration and contributions with this new infrastructure.
Each year at silverorange, we look back over the last twelve months and bestow honour to one deserving of the title of employee of the year. However, at silverorange, employees, family, and human beings are ineligible.
This leaves the coveted position opened mostly to inanimate objects. In the past three years, the Employee of the Year title has fallen on the following deserving candidates:
After getting our own Jabber instant messaging server, which allows us to manage our own secure instant messaging infrastructure just like we do with email. One of the benefits of such a service is way secure chat rooms can be easily created. Since then, an enormous amount of our company dialog has taken place in our “Office” Jabber chat room. It has been particularly helpful in keeping our few remote partners in touch with the mother-ship.
Up until this point, we had been a small enough team working on small enough projects that working on one shared code-based wasn’t too much of a problem. Even at this scale, there was still a need to occasionally yell out “Who’s editing index.php?!” Along with some other changes, bringing in a source code management system (we opted for Subversion) has significantly improved the stability of our general work flow. The history of each file is preserved, and perhaps most importantly, it is easy to watch what everyone else is doing on a project. The benefit of this peer-review (aka, fear of shame) is significant.
The third floor of our beautiful turn-of-the-century Victorian building in downtown Charlottetown had seen little use until 2006. Early last year, though, we set up a large communal desk, rife with power and network adapters. This became the place we would gather when we were working together on a project. When you ran into an issue that needed another the help or insight of co-worker, they were only a glance away. An LCD projector also helps with group reviews of current project sites.
As a result, many of us now spend most of our working time here at this large group desk. We’ve joked that we could sell our building and move into one room with one desk. We know, though, that working together in a room like this only works because we know we can retreat to our private desks and offices at any point if we need some time without distraction.
Earlier this month, we convened for our annual winter summit on the north shore of Prince Edward Island. Looking back over the year, we examined a few potential candidates for the 2007 Employee of the Year. Promising candidates included our BBQ, Trac, our crock pot (chili and beef stew on Wednesdays!), Firebug, our drink fridge, our Dell projector, our Wii (and Wii Sports), the toilet, and the improvised cardboard lids for our waste and compost bins. Considering two pieces of cardboard as the Employee of the Year might seem a bit odd, but it’s quite likely that they prevented a breakout of malaria in the office following a fruit-fly issue in the late summer.
After this superficial and possibly beer-fueled evaluation, we chose to name the 2007 Employee of the Year as follows:
The Drink Fridge
Having beer, tea, and juice has kept us hydrated, and helped us to speed up the process of passing the caffeine from our morning coffee through our systems. Firebug was a very close runner-up. Some even claim there was some vote tampering, however, given the one-raised-hand=one-vote system, it’s hard to imagine much room for fraud.
Better luck next year, crock pot.
Swat 1.2.35 is released and available for download. This release of Swat contains the usual bugfixes, code cleanups and feature improvements. Additionally, this release features several important IE6/7 JavaScript and CSS fixes relating to hasLayout. Many thanks to the contributors of On Having Layout.
Download the latest release of Swat. You can upgrade from an existing PEAR install using pear upgrade Swat.
JavaScript is a ubiquitous technology used on modern websites. With the rise of several prominent JavaScript libraries developers are realizing JavaScript is a legitimate language for complicated programs. With this understanding, larger and more complex JavaScript applications are developed.
To create and maintain large JavaScript applications, coding conventions and documentation are necessary. Unfortunately, coding conventions and documentation result in larger file sizes. Since JavaScript is often served over the web, developers should be concerned with file size. As a result, it is common practise to run JavaScript source files through a filter that strips comments and white-space.
I've been using Perl Compatible Regular Expressions (PCRE) for about four years of my web-development. PCRE gurus may scoff at me for not knowing this beforehand, but here is a neat feature of PCRE I discovered today.
You may specify a sub-pattern as non-capturing using PCRE syntax. To do this, use the ?: symbol after the opening parenthesis of the sub-pattern.
Here's the situation that led me to this discovery:
I needed to split a string at any known XHTML tag. To do this properly, I used PHP's preg_split() function. Because I also needed to include the matched tags (split delimiters in this case) in the returned array I specified the PREG_SPLIT_DELIM_CAPTURE flag.
$all_elements = 'div|span|p|ul|ol|li|strong|em|etc...';
$pattern = '/(<\/?(' . $all_elements . ')[^<>]*?>)/i';
$strings = preg_split($pattern, $string, -1, PREG_SPLIT_DELIM_CAPTURE);
The outside sub-pattern is the entire delimiter (tag), which is what I want in the returned array from preg_split(). The inside sub-pattern is only needed to match any XHTML element name. Because there are two sub-patterns, the array returned from preg_split() contains both the entire tag (desired) and the element name (undesired).
Using the optional non-capturing sub-pattern syntax, my pattern looks like this:
$pattern = '/(<\/?(?:' . $all_elements . ')[^<>]*?>)/i';
Using the revised pattern, my code works as intended; only the full tag match is returned in the split array. This feature turned out to be quite useful for me. I imagine this feature will be useful anywhere that a sub-pattern containing branch syntax is used inside a larger pattern, and the larger pattern needs to be captured.
Feel free to use this button on your site to link to PEIBlogs.com: