Easy Web Design ::
Easy Web Design
We will put your business online and teach you how to succeed. Easily. Click to get a quick
Quote. or HERE to read more.
More info MMK Web Design
Easy Marketing/Hosting ::
Easy Marketing and Hosting Packages
We combine your hosting and marketing costs to make it easy and affordable for you to get listed on the search engines.
Click to get your easy account.
Jump to MMK Host Website
Easy Media Security ::
Jump To MMK Secure Stream Web site
We can effortlessly help you protect your media or secure meetings and conversations online.
Jump To MMK Secure Stream Web site
Instant Assistance<% session("instantasst") = "YES" %>
Name area Pre Number
Your Name 800 555 3358
Internet Presence :: Words that mean much more then 'web site'. A presence on line is about being found. It's about being noticed, and it is about interactivity with your client.


Building a Wine Finder website
An ongoing project of mine has been to create a 'wine finder' website. This will allow people to search for wine using a variety of methods. Example queries might be 'What wines are produced that contain Cabernet Pfeffer?', 'Which wineries produced a Bien Nacido Vineyard Syrah in 1998?' or 'What wines that received a 90+ rating in both Wine Enthusiast and Wine Spectator are available online for < $30?'. To support queries like this, I needed to create a relational database to store information about wine.This seems fairly straightforward at first. The 2000 Franciscan Oakville Estate Chardonnnay Napa Valley has 4 data elements - the vintage (2000), the producer/brand (Franciscan Oakville Estate), the varietals used (Chardonnay), and the appellation (Napa Valley). However, things can get a bit more complicated.(continued...)
read more:

Burke Marks

CompassThere are currently 736,425 benchmarks in the database at geocaching.com. Overall, 82,517 benchmarks have been found and recorded in 114,528 logs. In the last 7 days, 1,007 benchmarks have been logged by 407 users. Four of them were found by me in Greentown, Pennsylvania near Exit 20 of Interstate 84.

I had tried to find a 1959 benchmark named "Burke" a couple of months ago. The eXplorist 600 indicated that I was within a half-mile of and then I realized I would have to trespass on private property to get to the mark -- something I do not do, at least on purpose. I saw a sign nearby labeled Robert Burke Consulting. Upon visiting his web site and seeing that he works with Linux, I concluded he must be a nice person and likely would not mind me giving him a call. Not only did he not mind, he offered to escort me to the benchmark -- he had noticed it in the past and knew right where it was. I met Bob and his four-year old son at his driveway and off we went in his four-wheel drive truck down a dirt road and off into a field. Turns out that Bob's father owns hundreds of acres of land where the benchmark is located. Five generations of his family have lived in Pennsylvania.

Turns out that there are actually four benchmarks (Burke, Burke 2, Burke Reference Mark 1, and Burke Reference Mark 2) all within a couple of hundred feet of each other. Three were placed in 1959 and one in 1967. The descriptions given are accurate for finding them -- but don't rely on lat/lon because those are not accurate. One of them was off by nearly 200 feet. Ater many a wild goose chase, I have learned that the best way to find benchmarks is to carefully read the datasheet. Here is a typical description for finding a reference mark...

REFERENCE MARK 1, A STANDARD DISK STAMPED BURKE NO 1 1959, IS CEMENTED IN A DRILL HOLE IN TOP OF A 2 X 3 FOOT BOULDER IRREGULAR IN SHAPE AND PROJECTING ABOUT 2 INCHES ABOVE THE SURFACE OF THE GROUND. IT IS 85.9 FEET SOUTHEAST OF AN 8-INCH TRIANGULAR BLAZED MAPLE TREE, 72.8 FEET SOUTH-SOUTHEAST OF A STANDARD METAL WITNESS POST AND MARKER, 37 FEET SOUTH-SOUTHEAST OF THE CENTER OF A TRACK ROAD AND THE MARK IS ABOUT THE SAME ELEVATION AS THE STATION

The disks were all readable, although there is some corrosion. All are in plain view and the main mark (Burke) has a witness post. If you ever noticed a 3-4 foot long orange stick in the ground with some wording on it, that would be a witness post. It says basically, there is a benchmark nearby and don't mess with it! The marks would have been useful to surveyors and civil engineers decades ago, but with the advent of inexpensive and accurate GPS devices, they have become unnecessary. In spite of this, they are fun to find -- 72 for me so far and only three-quarters of a million or so to go! Lastly, remember the Honda ads from years ago -- "You meet the nicest people on a Honda"? Well, this past weekend I discovered the same thing about looking for benchmarks. If you need any systems or Linux consulting in the northeast Pennsylvania area, pay a visit to Robert Burke Consulting.

bullet Other patrickWeb stories about benchmarking


read more:

The Farm
The Tucows Developers' Hangout is a weblog that features articles of interest to software developers from beginner to expert, from casual hobbyist to enterprise systems programmer and whose target platform ranges from a handheld unit to the Internet.
read more:

SkimCSS
Features a keyword tagged and searchable database of CSS resources. Visitors may submit suggestions, and vote on the quality of existing articles thus creating a social rating system. A tag cloud is provided, as well as RSS feeds for recent additions.
read more:

Who works with whom in the search engines market?
Search engines and directories interrelate with other search engines, for instance, they share their database contents to cover more web pages. In addition, the search engines partner with pay per click search engines to supplement their revenue.It's essential to know which search engines and directories work together. If you want to plan an effective search engine optimization strategy, you must know which search engines cooperate and who gets results from whom.
read more:

Solving big business problems in our little toolbox application. A use case for Project Distributor.

Project Distributor: Introduction to our distributed web service model
So Darren and I have put in about a month now on the Project Distributor website. We are starting to reach that critical point where the site is pretty cool, we have plenty of users, we are thinking about running out of the allowable bandwidth for the demo site, and all sorts of other things that tend to happen all at once. Now, there are some problems you can design yourself out of, and others that you really have to throw some money at. Our latest enhancements can be summed up in a short list.

  • Buy a domain name and start hosting in two places. Project Distributor.com should be up fairly soon to accompany MarkItUp.ASPXConnection.com
  • Have people host their own versions of the application. And that means a big source release is in the future. At this juncture risk fragmentation.
  • Design away fragmentation with a series of ingenious features that will make everyone want to use the application at hand.

I'm here to talk about the last two, since Darren already bought some additional hosting for us. The concept will be to release a fairly stable version of the application so that groups can host tools, code snippets and other source/binary releases for their teams to share. The application is very lightweight and easy to set-up, so it won't require a bunch of hand holding and configuration to get up and running initially. From our standpoint we solve a number of issues at this juncture. The most obvious problem is what we classify the Lutz Roeder use case. .NET Reflector is the key type of application we'd love to get hosted because it makes it a bit easier to find, not that Google does a bad job, we'd just like to get a bunch of tools in one place, with some features for feedback, new releases, and some cool client tools for publishing.

Now, Lutz would put his application up and he'd whack our bandwidth. He is the prime example of someone that should be hosting their own tools, but possibly using our interface. He doesn't have to, we haven't even asked him yet in fact, but if he decides to do so, then all the better for the web application moving forward. Users such as Lutz probably want a certain level of control over their own sites as well in terms of branding and controlling access. This will only come from hosting the application yourself (and maybe some other features we'll see later).

From a security standpoint many teams will also want to host their own servers. In this manner they get control over the hardware their sources and binaries are stored on. They can accept tools up to any maximum (instead of our imposed limits) and provide unlimited download bandwidth if they choose. Or they can take advantage of our gating mechanisms to make sure their server doesn't get overloaded with downloads and open their tools up to the public.

The only major problem from this source release is that the initial problem we were trying to solve, promoting the visibility of tools, starts to erode. You see, the more sites that host their own tools the harder it is to find the right site with the right tools. We are trying to solve this in a number of ways. The first is allowing users of a site to store bookmarks to other projects and external resources. This is only a temporary fix, because it still doesn't allow a mass search and categorization infrastructure required to truly promote the visibility of the tools being hosted. We have to come up with a solution that brings all of the sites, but we don't want to create just another portal or gateway site. That is boring. Now you have the background, so how will we solve the fragmentation issue?

Designing away Fragmentation
I won't lie to you, I've implemented this model several times, but have never had a project that was capable of really showing off the feature set we are about to talk about. The concept is to unify all of the sites, by allowing them to easily manage views of data from all of the sites combined. Each site owns their own content, maintains their own users, but in turn peers with other sites to obtain additional content.

Web services provide a dual feature set in this model. At the current level they allow us to generate really great client-side tools for managing, well, your tools! We have a drop-client target right now so you can drag and drop new releases to existing projects in just a few seconds. Some new tools for working with build systems to promote the source code up to the server are in the works. We natively integrate with your RSS reader and will have our own alert services in the drop client just in case you don't have one. There aren't any search or local caching features, but those are also planned for the drop client so you can background download new releases, just like Windows Update.

That doesn't solve fragmentation though, that just makes me realize how much work I have left to do. The second feature of web services lies in the ability for each site to aggregate data from the many other sites that are out there hosting the application. Remember, everything we make available at the service layer can also now be remoted. The more caching we put into the data layer, the more performant the entire process will be, and we can even tune the caching depending on whether the data layer is merging off-site contents or database contents.

Peer Sites
I'm sure there is another name out there somewhere, but for the past 2 years I've called these peer sites. Each instance of the project distributor will have a number of options allowing for adding peers that will be aggregated and added to the local collection while users traverse the site. The first step is to get the peer sites running in a read-only mode. And set up some really great options so the entire process can be controlled. This solves a number of use case scenarios for us including the following.

  • Fragmentation can be mitigated through proper configuration. If everyone aggregates 5 or 6 sites into their peers, then we have a huge network now of interconnected peers and users can pick and choose which one they use for purposes of searching the tool network.
  • Peer connections are unidirectional or bidirectional. Access is configurable. Teams can include tools from external sites while keeping their own tools completely private. They can exist behind a DMZ or a private network.
  • Users can host their own personal tool sites in the same manner as the team sites. They can configure statically which projects to make available even. In this way you can build a collection of personal tools that you love, and have the latest information automatically update on your machine for your perusal.

Peer sites solve plenty of visibility issues, but that is pretty much all they solve for now. We still want to enable all of the features available to the client tools. After all, the web service methods and proxy infrastructure is in place to do so much more.

Master Sites
Well, we want to solve another problem. That is where you edit your data. A master site is where the users, groups, projects, etc... are all hosted, but thankfully, you'll be able to log in through any site (assuming it is peered with your master site) and then edit your own projects and such. This is a remote principal context and is actually one of the cooler features associated with the peering functionality of project distributor. We'll be fully secure in our login and credentials region, but unfortunately we'll still be transferring data in open text in the short term. Maybe we'll fix that with enough push back.

Clone Sites
A clone site is where we empower a site to act on behalf of a master site. For me, my local project distributor is currently cloned to the main project distributor site. What does this mean? Right now it means I get all of the data from PD, and that users who trust my site can log-in to their project distributor accounts and cross edit data. Pretty nice if you ask me. It basically means you can fully host a project distributor installation and never, ever have to install a database server. Users can just act on behalf of a remote server.

Configuration
This isn't a super reusable model like some of those you read about in the popular software architecture books, and it probably accounts for why master/peer/clone sites don't exist very often. The considerations for every option are heavily customized to the problem being solved, and I'm sure we'll be making modifications or updating the configuration context for a while. Right now you can independently configure your primary server type, whether master or clone, whether or not users can use you for a pass-through authentication and edit server, whether or not web services are enabled so peers can enable unidirectional only communications, setting up asymmetric security credentials. Man, you name it and it is in there

For the peer section we have full and selective modes. A full peer pulls all of the data on the remote peer locally for display (in a delay caching manner, just like you'd expect, unless you set up a scheduled pull which is also possible). I expect most people to configure full peers because they really are really easy to set up and maintain. A selective peer is where you specify the groups/projects that you want to display. This is best for a user setting up their own personal toolbox who wants to select a couple of items from many different peers.

We have an extensively exhaustive configuration module already and we'll be continuously adding more to it. The concept is to easily modify your toolbox to your own designs without having to touch the code. If we haven't given you enough options to satisfy your need then we'll have to make something up, because I'm just about running out ;-)

These are the basics of the model ideas I have for project distributor. That doesn't mean Darren doesn't have other great ideas happening as well. He has some pretty extensive UI enhancements, but I'll let him talk about those. We even have another product idea that is kind of a bolt-on for project distributor, but that is probably a couple of months out putting it into next year. Unfortunately we have too many ideas for our own good right now. Better than not having any ideas I guess. I'll try to drop some code with some of the ideas above, that way you can get a look at how the entire system is implemented. I have some diagrams as well, but I'm far too tired right now to add the img tags to the HTML view.

Share this post: Email it!
read more:

Accessing Information through Natural Language Interface
The natural language interface (NLI) is a module that allows the user to access the information stored in the underlying database by typing requests expressed in a natural language. Kovacs, Laszlo and Sieber, Tanja
read more:

What Is A Professional Programmer? By Sarah George
So what does it mean to be a professional programmer? What does it mean to be a professional anything? Some definitions simply say to be a professional is "to make money from a skill," but true professionals also have a set of qualities often described as "professionalism." In my opinion, these qualities are...
Click here for the full article.
read more:

Two Principles of Conversation By Kevin Cauble
So whatâ??s a programmer to do? Short of waiting for MIS managers to become enlightened, not much--except try to work around the problem as best we can.
Click here for the full article.
read more:

Amazon DBD DBI interface
There's a new perl module out that interfaces Amazon web services like a database...
read more:

Threadwatch overload
Really keen to know what's going on at threadwatch.org Warning: mysql_connect(): Too many connections in /home/wilson/public_html/includes/database.mysql.inc on line 31 Too many connections Nick &Co were slashdotted or something like that :-) ... or are those link injection tricks the reason???...
read more:

JSP Login Page
I am working on a login page in JSP using NetBeans 5.5 beta and I am having some issues with connecting to the database to verify account


read more:

Rationalizing Relational and OO
Moving forward with relational: looking for objects in the relational model, Chris Date finds they were there all the time. "The question is how to integrate the good ideas of object-oriented database with relational ideas. The wonderful thing is, it turns out you don't have to do anything to the relational model. Absolutely nothing. The relational model is so solid and so robust..."

"The key notion underlying The Manifesto is thus the equation: domain = object class. A domain, or an object class, is a data type that is encapsulated, which means that the only way you can operate on values of that type is through operators that are defined for the type. You don't actually see the way the data is represented. That's not relevant. You only know that there are certain functions you can perform. It might be a primitive system-defined data type. More generally, it's going to be a user-defined data type. The values of these data types can be arbitrarily complex."

"The values in row and column slots can then be anything you like. They can be simple integers. They can be strings. They can be arrays. They can be books. They can be engineering drawings. They can be videos... They can be anything you like - as long as you can define the data type. In fact, I believe do one of the reasons we're hearing so much hype about object-oriented is because of a failure on the part of the relational vendors to step up to the mark. They haven't supported the relational model. If they had, we wouldn't be having these silly arguments now."

"In my opinion, there are precisely two good ideas. One is the data type concept - user-defined data use of arbitrary complexity, with encapsulation and user-defined functions. The other is inheritance. For example, in a geometric database you might have an object class called polygons, and one called rectangles, where rectangles are a subclass of polygons because every rectangle is a polygon. Therefore it follows that everything that works for polygons automatically works for rectangles too."

"If under the covers, the representation changes - if polygons are represented by a sequence of points for the vertices, and rectangles are represented by just the bottom left and the top right corner or something like that - the code to implement the operator has to change too, but that's implementation. From the model's point of view, if you have a function called area that returns the area of a polygon, automatically it means that you can invoke the area function on a rectangle and get the right answer. Under the covers, it may be desirable to reimplement that function. I don't care. That's implementation."
read more:

JRudy now does Rails**
"** We are able to generate and run the cookbook demo from rolling with rails tutorial (http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html) with what we have and all appears to work. With this said, it is likely that there are several aspects of rails that are not working correctly. See docs/README.rails for known issues/instructions in release."

JRuby "WEBrick runs...Ruby on Rails runs on top of WEBrick (and generation scripts work)**"

Time for a free lunch:

"I believe I've found a 'free lunch' in Ruby on rails. Oh, it's not always free. If I need to do two-phased commit or hardcore object relational mapping, this lunch may cost me more than I'm willing to pay. But often enough, it's for all practical purposes free.

* I can train a team of Rails developers faster than I can teach a new Java developer Spring plus Hibernate plus whatever web mvc you want plus all of the other frameworks and tools Java developers have to know.
* I can build my applications much faster than I could before.
* For many applications, the latency in the database is the overriding concern, so I don't even notice differences in performance.
* I can trivially expose web services, letting other applications, potentially written in other languages, quickly access my Rails services.

Now, I know that some will tell me that the lunch really isn't free. But you can tell that to my customers that pay a fraction of the price they'd pay for a Java application, and get something that's easier to maintain, just as fast, and on an earlier schedule. From that exec's perspective, the lunch is free."
read more:

MGMA's Dan Stech Joins Denver's Pinnacle Group; Former MGMA Survey Director Slated to Lead Pinnacle's Healthcare Innovation Initiatives
Dan Stech has been named Executive Director of Innovation for the Pinnacle Group, a Denver-based healthcare consulting, physician practice management and medical billing company. Stech is a longtime Medical Group Management Association (MGMA) executive and national authority on physician practice benchmarking and best practices analysis. As MGMA’s Director of Survey Operations for the past five years, Stech led the association’s efforts to improve physician practice performance through data collection and analysis. Under Stech’s leadership, the association enhanced its database of practice performance measures, expanded its line of analytical products and firmed up its position as the market leader in physician data resources. (PRWEB Jul 11, 2006) Trackback URI: http://www.prweb.com/dingpr.php/WmV0YS1FbXB0LVNpbmctU3F1YS1JbnNlLVplcm8=
read more:

Finding the Gold in Your Denial Database
Most providers track denials to measure the overall extent of the denial problem in their organization and to establish the success of their appeal efforts. But what more should providers be getting out of their denial database? And how else can they use the denial database to reduce denials and increase the effectiveness of recovery efforts? (PRWEB Jun 21, 2006)
read more:

Aware IM 2.0 Makes Creation of Web Database Applications Easier than Ever
Awaresoft Pty Ltd today announced the release of Aware IM 2.0 - a new, more powerful version of its popular easy-to-use web database management software. Aware IM™ 2.0 allows solution-focussed developers and experienced computer users to create comprehensive Web database applications without programming. (PRWEB Jul 17, 2006) Trackback URI: http://www.prweb.com/dingpr.php/Q291cC1TdW1tLVBpZ2ctU3F1YS1JbnNlLVplcm8=
read more:

Jigsaw Business Contacts Marketplace Soars Past 3 Million Contacts; MySQL Open Source Database to Power User-Generated Growth
Jigsaw Data Corp., the online global marketplace for buying and trading business contact information, announced that it has selected MySQL, the world's most popular open source database software, to power its popular online user-generated database of over 3.3 million business contacts at more than 360,000 companies. (PRWEB Jul 17, 2006) Trackback URI: http://www.prweb.com/zingpr.php/Q291cC1Db3VwLVpldGEtU3F1YS1JbnNlLVplcm8=
read more:

McObject?s Perst Pure Java Embedded Database Integrated with Solutions from CA?s Wily Technology Division
McObject today announced that the Wily Technology Division of CA (NYSE: CA) has leveraged McObject’s pure Java embedded database, Perst™, in the development of its industry leading enterprise application management solutions. Adopting McObject’s proven database has enhanced the performance of Wily solutions while accelerating product development. (PRWEB Jul 11, 2006) Trackback URI: http://www.prweb.com/zingpr.php/TG92ZS1JbnNlLVByb2YtUGlnZy1JbnNlLVplcm8=
read more:

Data Guard Systems Consolidates Hardware and Slashes Data Center Power Consumption by 80%
Data Guard Systems has consolidated 45 backup database servers on their network with virtualized Dell servers to help reduce power consumption in their data center. Utility costs are reduced by as much as US $10,000 per month, with power consumption slashed by 80%. (PRWEB Jul 11, 2006) Trackback URI: http://www.prweb.com/zingpr.php/Q3Jhcy1JbnNlLVByb2YtUGlnZy1JbnNlLVplcm8=
read more:

TheFreeDictionary.com Welcomes 350,000,000th Visitor
Farlex, Inc., publisher of the world’s most comprehensive online database of reference information (www.thefreedictionary.com), announced that it has welcomed its 350,000,000th visitor since the website’s launch in the spring of 2003. (PRWEB Jul 10, 2006) Trackback URI: http://www.prweb.com/dingpr.php/UHJvZi1NYWduLUNyYXMtUGlnZy1JbnNlLVplcm8=
read more:

Fighting the Evil-Doers: A Database Security Workshop on Tuesday, July 11
3 horror stories and how to be victorious in the battle to protect your customer database and your network. (PRWEB Jul 9, 2006)
read more:

Kognitio and IBM BladeCenter provide fastest, scalable database platform for Data Analytics
Kognitio has completed a highly successful benchmark of its WX2 analytical database software on IBM BladeCenter System X hardware. The joint solution is targeted at business users who want to gain fast access to data for reporting, data exploration and analysis. Following the benchmark, IBM and Kognitio will run targeted seminars on 12 and 13 July in London to educate end-users about the joint solution. (PRWEB Jul 7, 2006) Trackback URI: http://www.prweb.com/zingpr.php/Q3Jhcy1QaWdnLVRoaXItUGlnZy1JbnNlLVplcm8=
read more:

SPAMfighter Choose ScimoreDB Database
Scimore UAB, a developer of distributed/parallel high-performance RDBMS, today has announced partnership with SPAMfighter, Europe's leading anti spam developer. (PRWEB Jun 30, 2006)
read more:

DataHub Scripting Puts Live Data into ODBC Databases
Any ODBC-compliant database can now track live financial or process data with up-to-the-millisecond accuracy. [PRWEB Nov 2, 2005]
read more:

Online Trends for e-fulfilment Retailers Look for Alternatives
Presenting accurate and a well researched database has become a priority for bricks+clicks as well as online retailers. The need for retailers is to populate their websites with detailed product information. [PRWEB Nov 12, 2005]
read more:

Browser security versus virtual autism
I tend to ignore articles on security because I don't have a lot of respect for the security companies. As far as I can tell, most security stories are credulous regurgitations of these companies' misleading press releases. Their vested interest in FUD, their conflict of interests with their own customers, their alarmist and uninformative tendencies: all these things make it hard to take them seriously.

Just this last week there was one or other of this motley crew claiming 'Windows more secure than Linux'. The numbers were blatant nonsense, counting any Linux vulnerability once per distribution, for example, and I'm not interested in that non-story.

In amongst the usual stream of commercial effluent, I found myself reading a couple of interesting papers on phishing.

If you're anything like me (and I hope you're not) you receive several hundred spam messages a day. For my home account, one of the mod3 Solaris zone hosting dudes set up a greylisting system that pretty much squashed the problem. Work uses a commercial filtering system that doesn't work nearly as well, and doesn't even let me say 'drop anything in any non-European language', which would be a very effective work-around for me. I'll admit to having been nervous about the greylisting idea ('but won't it delay genuine mail?'), but I've only been inconvenienced once so far, and that wasn't for long. I waste far much more time wading through the obvious spam at work every day than I did on the one occasion I've had to wait for a web site to retry its confirmation mail.

Anyway, given the amount of spam that gets through at work, I see quite a lot of phishing attempts. Some would be worryingly convincing if I had any connection with the alleged institutions, many are fairly obviously bogus if you give them more than a second's glance, and some are laughably bad. That last class has always interested me the most. My assumption was always that such mails wouldn't fool anybody, leaving me wondering why the prospective phisher didn't try a bit harder?

Now I'm starting to wonder if the criminals aren't just being clever, expending no more effort than necessary to fool the foolable.

Reading Why Phishing Works, I was shocked by the lack of acumen displayed by the experiment's subjects. The sample size was, I felt, small: only 22 people. I'm also not sure how representative of the general public university staff and students are. All the same...

Even if you don't care about security, if you're a programmer it's worth reading the paper just to see how far out of touch with technology many users are. In particular, they have no idea what's easy to fake and what's hard to fake.

That text and graphics inside the page are more trusted than text and graphics in the browser's own UI shows you just how much the disconnect between the user's model and system's model can cost.

It's also interesting to see how much of the browser people just ignore. I was thanked for adding a 'new' feature to Terminator the other week when all I'd done was add a tool tip to draw attention to a feature that had been there much longer. That was understandable because the feature was otherwise invisible and only enjoyed by people who had just assumed it would be there. This paper, though, suggests that browser features that you and I probably consider highly visible just aren't seen. Or they're seen and misunderstood, which is potentially worse when they're security features.

Not all of the problems identified in the paper are anything to do with technology, though. Except insofar as they suggest that people are bad at transferring real-world common sense to the 'virtual' world, or bad at realizing that they're the same world.

I wonder if the woman who 'will click on any type of link at work where she has virus protection and system administrators to fix the machine, but never at home' would agree to be beaten by said system administrators with baseball bats in the grounds of a local hospital. Presumably that would be fine, because the hospital can fix things up afterwards? So no harm done, right?

And there's the woman who types in her username and password to see if a site's genuine. Presumably she'd be happy to give me her life savings to see whether I can be trusted to return them?

I do hope those two are now starred out. But I know they aren't, and I know there are millions like them, sharing LANs (or even machines) with us.

I showed the paper to my girlfriend. She didn't know about https: versus http:, didn't know there was a padlock icon anywhere (and I'll admit that I had to look for it in Safari; I'll be switching to Firefox completely as soon as it has spelling checking), or what the padlock means, and definitely didn't know anything about certificates. It had never really occurred to me before that there were millions of people out there typing their financial details in to HTML forms without the vaguest idea of which end of the firestick the boom comes out.

We've accidentally created a whole race of virtual autists, devoid of their usual ability to infer trustworthiness.

If you think that's an over-statement, read the paper and look at the cues the participants were using. In ignorance of the high-tech stuff the browser was offering, they were falling back to tried-and-tested visual cues, despite the fact that it's trivial to copy any image, text, or video on-line.

The authors have a suggestion, if you're not too depressed to keep reading. The Battle Against Phishing: Dynamic Security Skins describes a way of improving the browser's security indicators, but I didn't really get how it's supposed to address what seems to be the more fundamental problem: people just don't know what they're looking for. If Firefox's yellow location bar is as invisible as it appears to be, is that battle not already lost?
read more:

'Designing Effective Database System' put up for sale in eZine
StoreFront
read more:

Protect yourself from BigBrother
Regardless of the government you live under, your actions on the internet are being tracked. Your every search recorded and kept in a database for future use/abuse. US citizens have had their web traffic monitored by the NSA and AT&T, and their every search history subpeaned by a Federal Judge. As we move towards a more wired and connected society, the potentials for abuse grow exponentially. Imagine a future where your past searches label you as a threat to your government. Or where your browsing history is known by everyone. It's possible now.

http://www.travelingforever.com/index.php?option=com_content&task=view&id=21&Itemid=45

read more:

Gravity exerts an irresistible pull....

Last night was our fourth hockey game of the season. We lost the first two, both by a single goal; the first one we really should have won, the second was just a hard-fought game. We won the third game, 7-1. To be honest I felt kind of bad about that one. You’d think it would be fun to have a game like that, but I always remember the times I was on the losing end of those games and it’s hard to enjoy it.

Anyway, like I said, last night was the fourth game of the season. We ended up coming back from a 2-0 deficit to tie it, but it felt like a win, the way we played. Our opponents were the best team in the league (same team that won the championship last season), so a tie isn?t bad at all (we can do better, though. ;)) After the game, our goalie stood up in front of everyone and announced that I had had a ?monster? game, my ?best game of the season, by far?, and that I was ?absolutely everywhere on the ice?. I think I blushed. :) Anyway, it was a really good game; I had lots of great defensive plays, stopping breakaways, cutting off passes, etc.

I did have one big fall, though, which everyone teased me about mercilessly. The captain said he was taking up a collection to have my skates sharpened. :) We had the puck in their zone, 2nd period, we were getting lots of good pressure. Curry, one of the forwards, got the puck at the left wing and saw me completely open at the blue line. He passed it to me, perfect pass, and right as he did my legs just shot out from under me. Nobody within 20?, a perfect pass, and I just BAM! fell down. What?s worse is that, as I was laying on the ice, the puck was coming straight towards me. I mean, STRAIGHT towards me. If I hadn?t moved it would have hit me right in the middle of my stick. Of course, like a total idiot I tried to lift my stick (as I?m laying flat on the ice) to take the pass with the blade, and the puck goes under the stick, under me, and out of the zone. Brilliant!

Anyway, like I said, I had a good game—almost had a goal. I had the puck all alone against 3 defenders, I faked past one, ended up right in the center of the ice with the 2 defenders in front of me. I seem to find myself in that situation about once a game, so I’ve been trying to make it work for me. My current move is to cut right just a bit to get the defender between me and the goalie, and then shoot the puck through the defender’s legs, so the goalie has trouble seeing the shot at first. This time, I?m pretty sure the shot hit the post on the far side, it was a really nice shot and I don?t think the goalie really saw it. Eventually one of those shots is going to go in, it just didn?t happen that game.

I’ve also noticed a number of Spoonerisms coming out of my mouth lately. After the game I wanted to talk about the fact that especially in the second period, it’s important to keep our shifts short so we don’t get tired and caught out of position (which is why we were down 2-0), only I said it was important to keep our “shorts shifted”. You can guess what kind of jokes were made at my expense at that point. ;) I actually really like this team. Everyone on it is always in a good mode, there’s teasing and camaraderie in the locker room. Jen says she approves of their teasing me all the time, and frankly I agree; it’s a really great group of guys and I’m glad to be a part of it. What’s even better is that I know other guys on nearly every team in the league (last nights’ opponents are pretty much the exception), so there’s always someone to say hi to or trash talk before the game. It’s a lot of fun, and it makes me wish I could play hockey every night. :)

Playing games without Jen in the audience is kind of weird. She’d only missed a few games before this season, and I was pretty used to looking up and seeing her in the second or third row, reading her book at period intermissions or cheering during play. I keep looking for her, and of course she’s not there. She’ll get to see my game this Saturday, though, so hopefully I’ll have another good game. :)

As far as work goes, it’s pretty busy right now. We have our second-most-major deadline of this entire release coming up, and everyone’s scrambling to get ready. I’m in the middle of a really frustrating problem (been working on it about 14 hours thus far, with no resolution). It doesn’t help that making brand new code work exactly like the old code did six months ago—which is what we’re doing—is one of the more tedious, uncreative jobs in programming. It has to be done, and it will be worth the effort at the end, but any programmer will tell you that solving new problems and writing new code is much more fun.

Aside from work and hockey I haven’t done much; I have a million things to do to the house that I just haven’t had the time to do, and we’re supposed to hang out with some friends for July 4th, but other than that my social life is essentially nonexistant. :) Sorry. No new baby news, either; we won’t know the sex for another 5 weeks, and that’s really the next big milestone. I’ve actually only told 3 people at work, partially because everyone who knows Jenny is pregnant seems to only talk to her about that sometimes, and I don’t want that to happen. Of course I’m also a pretty private person in general.


read more:

Latest LINQ CTP available for download

Latest LINQ CTP released for download.

The list of goodies is here:

What?s new?

Enhanced DLinq Support: This CTP adds support for Inheritance, Stored Procedures, User-Defined Functions, and Optimistic Concurrency Conflict Resolution (OCCR).  The new DLinq Designer provides a visual design surface for creating DLinq entity classes from database tables.

LINQ over DataSet: The full power of LINQ can now be applied to the DataSet, allowing you to use the Standard Query Operators and some DataSet-specific extensions to query against DataRows.

?Group By? Query Comprehensions: The compiler now supports ?Group By? as a valid clause in LINQ Queries. 

Outlining support for XML Literals in the Editor: In this release, we added outlining support for XML literals. You can now expand or collapse any Xml element literal that spans across more than one line. 

Value extension property for XML axis properties: We added a Value extension property to the collections that are returned from the XML axis properties (i.e. IEnumerable(Of XElement) and IEnumerable(Of XAttribute)). This extension property does two things, it first picks up the first object in that IEnumerable, and if this object exists, it calls the 'Value' property on this object (either XElement or XAttribute). The following code show the use of this Value extension property:

       Dim contact = <Contact City='Seattle'>

                         <Name>Joe</Name>

                      </Contact>

        Console.WriteLine(contact.@City.Value)

        contact.@City.Value = 'Portland'

        Console.WriteLine(contact.@City.Value)

        Console.WriteLine(contact.<Name>.Value)

        contact.<Name>.Value = 'Sam'

        Console.WriteLine(contact.<Name>.Value)

 

        Results:       

                Seattle

                Portland

                Joe

                Sam

Global Xml namespace support: XML namespaces that are declared using the Imports statement can now be used in the XML literals. The following is an example:

Imports ns = 'http://www.w3.org/1999'

 

Module Module1

  Sub Main()

    Dim book = _

      <ns:Book>

              <ns:Title>Learning Programming Using VB</ns:Title>

             </ns:Book>

    Console.WriteLine(book.<ns:Title>.Value)

  End Sub

      End Module

What?s changed?

Select/From syntax: The previous tech preview supported using Select before From.  In an effort to provide better IntelliSense?, we?re switching to the From/Select format for this CTP.

Joins don?t require ?It?:  You don?t need to use the iterator variable ?it? anymore when performing a join operation, though it?s still required for grouping operations.

Xml axis properties syntax: The late bound Xml feature has a new name and a new distinct syntax where we wrap the element name with angle brackets. This new syntax makes the Xml axis properties visually distinct and solves problems that the previous CTP syntax had. See more information in this blog


read more:

A test-driven design style for database-based applications with VSTS

If you are designing an application test-drive using Microsoft Visual Studio 2005 Team Edition for Testers whose logic includes access to a database, then consider the following mechanism for the database related assertions (also known as specifications: SpecificationByExample):

For a simple example, if you have a business object (also known as processor, unit of work, façade, etc.) ?the kind of business objects suggested by Microsoft for application architecture since Windows DNA? called PatchOperation that receives patch installation status messages over the network from one or thousands of clients then an initial and possible TestMethod for it could be like this:

string PCNetworkID='PCx';string PatchID='Patch123';//this data structure is what the invocation receives//both locally or over the network, sample values follow:InstallStatusInfo status=new InstallStatusInfo();status.PatchID=PatchID;status.Status='Installed';//PatchOperation is the business object,//the following two lines appears in //production code exactly like this:PatchOperation patchoperation=new PatchOperation();patchoperation.ReceiveInstallStatus(PCNetworkID,status);//Asserting post-conditions:DataTable result = Util.SqlQuery('SELECT ... WHERE pc=@PCNetworkID ...');Assert.AreEqual(1,result.Rows.Count);Assert.AreEqual('Installed',result.PatchStatus);// etc.
In order to fully grasp the relative value of the code above, there are a number of assumptions about the perspective from which the observer could be seeing it; I will defer those clarifications for a later post by now check this preamble, by now let's cover the overall database test mechanism.

Chances are that the unit test assumes a particular database state before executing, like particular rows on particular tables, but the same state must be deleted before the next unit test starts. In that case, lets think in terms of a base class for all database-related unit tests:

/// /// Base clase for database-based application design./// Intented to be derived./// Derived test classes must override InsertTestData method./// Derived test classes may override GetIsolationLevel method./// Derived test classes must use TransactionalContext in TestContext property./// TransactionalContext is under 'tx' key in TestContext property./// [TestClass]public abstract class DatabaseTestClass{  [TestInitialize]  public virtual void Setup()  {    IsolationLevel isolation = GetIsolationLevel();    TransactionalContext tx = TransactionalContext.Create(isolation);    TestContext.Properties['tx'] = tx;    InsertTestData();  }  protected abstract void InsertTestData();  protected virtual IsolationLevel GetIsolationLevel() { return IsolationLevel.Serializable; }  [TestCleanup]  public virtual void Clean()  {    TransactionalContext tx = TestContext.Properties['tx'] as TransactionalContext;    tx.Transaction.Rollback();    tx.Connection.Close();  }  private TestContext testContextInstance;  public TestContext TestContext  {    get { return testContextInstance; }    set { testContextInstance = value; }  }}
The TransactionalContext class usually is part of a data access assembly or namespace whose types are mainly data access components:
public enum TransactionalContextMode{  Read,  Write}public class TransactionalContext{  public SqlConnection Connection;  public SqlTransaction Transaction;  public static TransactionalContext Create()  {    return Create(TransactionalContextMode.Write);  }  public static TransactionalContext Create(IsolationLevel isolation)  {    TransactionalContext result = new TransactionalContext();    string dbconn = System.Configuration.ConfigurationManager.AppSettings['conn'];    result.Connection = new SqlConnection(dbconn);    result.Connection.Open();    result.Transaction = result.Connection.BeginTransaction(isolation);    return result;  }  public static TransactionalContext Create(TransactionalContextMode mode)  {    switch (mode)    {      case TransactionalContextMode.Read:        return Create(IsolationLevel.RepeatableRead);      case TransactionalContextMode.Write:        return Create(IsolationLevel.Serializable);      default:        throw new Exception('TransactionalContextMode undefined');    }  }}

So the initial unit test above could be written like this:

[TestClass]public class StatusReception : DatabaseTestClass{  protected override void InsertTestData()  {    Util.SqlExecute(this, 'EXECUTE Computer_Insert 'PCx");    Util.SqlExecute(this, 'EXECUTE PCStatus_SetStatus 'PCx',NULL ');  }  [TestMethod]  public void StatusReception_flat()  {    TransactionalContext tx = TestContext.Properties['tx'] as TransactionalContext;    string PCNetworkID='PCx';    string PatchID='Patch123';    InstallStatusInfo status=new InstallStatusInfo();    status.PatchID=PatchID;    status.Status='Installed';    PatchOperation patchoperation=new PatchOperation();    patchoperation.ReceiveInstallStatus(tx,PCNetworkID,status);    DataTable result = Util.SqlQuery('SELECT ... WHERE pc=@PCNetworkID ...');    Assert.AreEqual(1,result.Rows.Count);    Assert.AreEqual('Installed',result.PatchStatus);    // etc.  }}
At the beginning of each TestMethod, the SetUp method from the base class is invoked and the Transactional context is created and stored as part of the TestContext object, from which the TestMethod can get it in order to propagate that very same Transactional context to the business objects under test.
Later, the Clean method from base class ins invoked and the transactions is rolled back, leaving the database in the same state as of the beginning of the test case.


read more:

Running a software company

An absolutely essential factor in running a software company effectively is the vision from a real, actual professional programmer, period.

Indeed, the technical profile of Mr. William Henry Gates III has been an important factor at Microsoft. Of course, MBAs have their role at any company but please MBAs, consider this: do not try to run a company which does something you think understand but actually don't.

My First BillG Review

Geeks Rule and MBAs Drool

Why eBay Bought Skype


read more:

A basic and focused utility to send SQL statements with ADO.NET

Sometimes, I just need to quickly send SQL queries or commands to a SQL database one by one or in group.

Of course there are serious and full-fledged utilities from SQL Server to doing just that, and have their own use cases.

The point of doing my own basic and focused utility is to test and hence to gain a sense of trust on a particular way of using a basic piece of SQL data access functionality with ADO.NET. That is to say, while in the process of designing a ?say? enterprise architecture of a software service for a given customer and want to check, in that particular point in time how it feels some aspect or aspects of my current design decision that involve SQL data access and if any of those full-fledged utilities are handy, then I just invoke my basic and focused utility, like:

>query 'select au_fname,city from authors'CLR:2.0.50727.42dbcon:Data Source=someserver;Initial Catalog=pubs;Integrated Security=True;Connection Timeout=120Query: select au_fname, city from authorsrowset:au_fname        cityJohnson		Menlo ParkMarjorie		OaklandCheryl		BerkeleyMichael		San Jose
Or sending a SQL command:
>query 'cmd:exec a_stored_procedure'CLR:2.0.50727.42dbcon:Data Source=someserver;Initial Catalog=pubs;Integrated Security=True;Connection Timeout=120Non query: exec a_stored_procedureaffected rows count: -1
Or executing several queries and commands stored in a text file:
>query @sequence.sql
Or a combination of both
>query @sequence.sql 'cmd:exec a_stored_procedure' 'select au_fname,city from authors'
C# 2.0 iterators were handy for doing the argument processing of this utility.


read more:

Pillars of our trade

Very good article in IEEE Software January/Februry 2006 magazine:

Looking for Powerful Abstractions by Rebecca J. Wirfs-Brock

'Finding the right level of abstraction
takes practice and experimentation.
There are times when both concrete
classes and their common abstraction
add value to a design, and there are
times when they don?t. To find good
classes, experienced designers make
distinctions based on significant behavior
differences.'

There are words and phrases from experienced people in our industry of software design and programming that just feel right, it is like they are describing a higher level of truth I need to aspire.

Another example from How do we tell truths that might hurt?:

'Besides a mathematical inclination,
an exceptionally good mastery
of one's native tongue
is the most vital asset of
a competent programmer' -Edsger W. Dijkstra

That is a reason why these people are pillars of our trade.


read more:

Eclipse 3.2 (Callisto) Create EJB/CMB Wizard
So I'm trying to create an CMP EJB from an existing database. <br><br>I am using Eclipse-3.2 (Callisto), WebSphere Comm. Ed, MySQL-4.1 and


read more:

Daily Journaling Notes
<p>Jeremy Hylton <ahref='http://www.python.org/%7Ejeremy/weblog/031009b.html'>notes</a>the importance of keeping good notes, along with a good chunk of soundadvice from the article <ahref='http://www.acmqueue.org/modules.php?name=Content&amp;pa=showpage&amp;pid=69'>CodingSmart: People vs. Tools</a> by Donn M. Seeley, which I finallygot around to reading. I'd love to hear his review of <ahref='http://www.cvstrac.org/'>CVSTrac,</a> and whether it'sfeasible <a href='http://zwiki.org/CVSTrac'>in a Zopescenario</a>.</p><p>Ed Taekema has <ahref='http://www.pycs.net/users/0000177/weblog/2003/10/16.html'>noted</a>the use of wiki's in this area, along with several relatedarticles.</p><p>'Coding Smart' felt slightly dogmatic, but appropriately so.The initial <em>watch out--that new languages may kill yourdevelopment time</em>bugged me, as it's one of the reasons I've used to avoid writingtesting apps in Python and redundantly tested manually. His otherpointthat the new language may not be transferable to other workers I feelis a non-issue with Python. Idioms. Ouch, they are the differencebetween 'Pythonic' and 'Python', eh? I admit here I was setbacked. Wasthis general purpose programming language was leading down anotheresoteric path, reducing my psuedocodish Python to n00bish dribble or<ahref='http://www.enac.northwestern.edu/%7Etew/archives/000072.html'>unreadable</a><ahref='http://www.python.org/doc/current/tut/node6.html#SECTION006750000000000000000'>shortcuts</a>?(*What cocky programmer wouldn't claim to be able to pick up anotherlanguage in a few days, let alone <ahref='http://fishbowl.pastiche.org/2003/10/08/sig_quote_of_the_day'>debugit</a>? ) </p><p>Later Seeley moved into 'use psuedo-code', which I dug butraised aneyebrow to, Given Python's readable code and experiment and validationcapabilities. Python does add a lot of value here, and of course noteverwhere. I'd like to tie in frustrations of trying to communicate inuser stories when peer coder speaks in schema tweeks and algorithms,orthat generally good problem statements inherit the solution, butwon't.Peer reviews are also cool when common values are apparent andpersonaldogma is chained.</p><p>Outlining. +1. This is what <ahref='http://www.pycs.net/sqr/2003/09/24.html%20'>I use Word</a>for.</p><p>My college business professor (and many others) repeatedlyrecommended keeping a profesional journal. I've never been able tokeepup a paper journal. My <ahref='http://zwiki.org/PersonalWikiExplanation'>personal wiki</a>isprimarily 'notes to self' and similar links. Good notes in change logsare critical, and prefer then to be tacked within the source, as a'blog within a file' type of thing. Code diff's are no replacement,andare far from convenient--<em>especially</em> when trying togrok code and it's hi<em>story</em>. My personal wiki has a<a href='http://webseitz.fluxent.com/wiki/FrontPage'>blogapsect</a>with entry form on the front page. This causes more blog and lesswiki,but without it the time it took me to figure out where to put theresource would derail many of my intentions.</p><p>Thought of the day: When folks complain about documentation,what part of knowlege management has failed?</p>
read more:

Thoughts on code audience

CP4E get's regularly noted when folks talk about expanding Pythons m???share by commencing more programmers. Similar to the 'create, don't overtake, markets' thought.

Mats Wichmann threw this discussion an appropriate curveball by asking: 'If Python is so easy for humans to program in, shouldn't it also be an easy language for programs to program in ...?'

Fredric Lundh addresses the literal issue here.

I have never analyzed code generation from UML tools before, but a comparison of model to code from a C++, Java and Python example would add insight here, although the tip of the iceburg for Mats thoughts. 

Jeff Sutherland threatens: 'Therefore, American programmers must find a way to be ten times as productive or they are history', following it up with the dire need for Model Driven Development and resources.  Hmmmm... Python & Java: a Side-by-Side Comparison opens with 'A programmer can be significantly more productive in Python than in Java. How much more productive? The most widely accepted estimate is 5-10 times'. 

Wizards fall in there somewhere also, but are just one slice of that taxonomy. I like task automation wizards and that let me save the steps for later use, ideally in a plain text editable fashion. Which leads to...

Embedded Python for 'code that pushes applications' is also an area where python could use more face time. VBScript is a tired poster-boy, and it seems that with the latest OpenOffice/STAR Office, the window of opportunity is being addressed with Python-UNO.

Also, of note: Learning Tree's Python training is no longer supported! Many alternatives exist, including this one during October in Colorado by a University of Wisconsin graduate.


read more:

Python and X10 Home Automation, Part 1

Python and X10 Home Automation, Part 1

I recently saw an ad from x10.com for a free (you pay shipping) X10 starter kit, including a 'Firecracker' computer interface.  That was a deal I couldn't pass up, so I ordered it through their web site, and 3 days later, the kit arrived.

The kit consists of the CM-17a 'Firecracker' serial computer interface, which transmits via radio, a transceiver module which receives the radio commands from the Firecracker and retransmits them via the X10 protocol over your house wiring, a lamp modules for controlling... lamps, and a PalmPilot-sized hand-held remote control that lets you manually do what the computer interface does.  Oh, and the transceiver module also double as an appliance module, allowing you to control appliances of up to 500 watts.

With the hand-held controller, you can control any X10 modules you have, either the ones that come with the kit, or any add-on modules you may want to buy.  You could go wild, like many do, and completely automate your home -- lights, appliances, garage door, pool heater, ferret feeder, whatever.

But with the computer interface, things get much more interesting.  You can, for example, download from x10.com a free application that duplicates the appearance and functionality of the hand-held controller on your computer screen.  Or, you can download, for $20, an application that fully utilizes your computer and the x10 interface to do full automation.  Want your hot-tub to turn on at a certain time every day?  No problem.  Want your lights to simulate an occupied house while you are on vacation?  Easy.

Naturally, hand an X10 computer interface to a Python programmer, and he'll immediately start writing code for it.  Or that was my intent, anyway.  The first thing I did was google around for any existing Python projects for X10. I found two, Pyxal and Pyx10.  Both projects seem to be unmaintaned.  Pyxal is pure Python, and does not support the recent X10 controllers, like the Firecracker.  Pyx10 uses a wrapper to turn the XAL library into a Python extention module.  It supports recent X10 controllers, including the Firecracker.

I downloaded and examined both.  Pyxal was right out, as it has no Firecracker support (why not add it yourself, you ask?  I'll get to that in a moment...).  Pyx10 and XAL looked good.  After compiling and installing XAL (a snap), I tried compiling Pyx10.  Nope.  The wrapper code for XAL would not compile.  From a quick exam, it looked like it was out-of-sync with XAL.

I could have continued hacking at it to get it to work, but further googling (the trademark police are gonna get me), I found Project WiSH, a project for turning X10 device drivers into... well, Linux device drivers.  Super!  Instead of having to do low-level device handling from my code, I can simply open a linux device driver and write commands to it, just like I was writing text to a file.  And WiSH was a snap to compile and install.  Just make sure you have your kernel source loaded on your machine.  (For the CM-17a 'Firecracker', be sure to download the 1.6.10 version of WiSH.  The later 2.0.1 version does not yet support it.  But both versions support the CM-11a, which is the other modern popular X10 computer interface controller.)

Now, I do my work under Linux, so this is just what the code doctor ordered.  Actually, it's even better than it sounds.  You see, there's this little bit of info about that Firecracker X10 controller...

If you look at one of the other X10 computer interfaces, say the CM-11a that comes with another of the home automation intro packages that x10.com sells, you will see that it is controlled via the computer in a manner rather like an external serial modem.  Connect it to your serial port, and send it strings of ASCII characters.  Not so with the CM-17a 'Firecracker'.  This little guy is a serial pass-thru 'dongle', very small.  From what I can tell from my Google research, you must directly control the radio transmitter in it via bit-tiddling the RTS and DTR lines of the serial port.  You must assemble a 5-byte command via bit masking, then bit-shift it out to the CM-17a by directly controlling the states of the RTS and DTR lines, doing the timing yourself.  There are no smarts.  Ouch.  No wonder this is the bargain-basement controller.

The CM-11a controller has another advantage, too.  It's smart, it has its own processor.  So you don't even need to leave your computer on to do real-time home automation.  Use the scheduling software to send it commands, like 'turn on my security light at local-time dusk, and turn it off at dawn', and the CM-11a will do it, all by itself.

But I don't have the CM-11a.  I have a CM-17a and a Linux box.  Add in the device drivers from Project WiSH, and from a Linux command line, I can execute 'echo 'on' >>/dev/x10/a1', and send the 'on' command to the X10 device at house code 'A', unit code '1'.  How cool is that?

OK, how can we combine equal portions of X10, Project WiSH, Linux, Python, and fun?  (OK, fun gets a bigger portion.)

Here's the deal.  I work for a major software house.  We do automated nightly compiles of our code on all of the platforms we support (Linux, various flavors of UNIX, Windoze).  The last thing you want is for some code change you made that day to 'break the build'.  The automated process sends out email giving that night's build status.  If you broke the build, it's supposed to be your first priority to fix it.

I keep forgetting to check my email.  I have many projects, they grab my attention, and it may be hours before I check my mail.  Yes, I have a little task bar thingie that tells me if I get new mail.  I don't look at it if I'm concentrating on a problem.

Python and X10 to the rescue!  (This is a fun solution looking for a problem.)  I now have a Python script that is run via cron every 10 minutes.  It uses the poplib and email modules to grab and parse my email, looking for the specific patterns that a 'you broke the build' message will contain.  If it finds such a message, it opens and writes an 'on' command to the proper X10 device driver, which then turns on the BIG RED ROTATING LIGHT.  I kid you not.

This is so much fun!


read more:

Human Ageing Genomic Resources
The Human Ageing Genomic Resources (HAGR) website provides tools and curated databases relevant to the genetics of human ageing. GenAge is a database of genes related to human ageing, and AnAge is a multi-species database facilitating the comparative biology of ageing. The Ageing Research Computational Tools (ARCT) is a collection of Perl modules to assist comparative genomics research.
read more:

My Legend

The new PodShow+ site, unleashing pretty darn soon, has a personal bio feature called 'The Legend of me'. I just filled mine out. Here's what I wrote:

I'm a programmer with an apetite for timeshifted media. That pretty much sums it up. In 2000, before I'd heard of RSS, I was using Voquette Media Manager to record Real streams of This American Life, which I'd lovingly burn to CD and listen to on long car trips. Later, in the days of 'audio blogging', I used the Radio Userland news aggregator to automatically pull MP3 files from enclosure-bearing RSS from Dave Winer, Chistopher Lydon and Doug Kaye. I'd then locate these on my hard drive and drag them, one at a time, into the media management software for my Neuros MP3 player. It worked, sort of, but was too much effort, and there was still too little content (especially after Chris took a break) for practical daily use. Adam Curry switched me back on in 2004 with a steady stream of daily content, developer feedback, feature ideas and a critical insight that made the medium: we needed automatic sync to the listening device. The early innovations in podcasting were nearly all Mac-only, which as a Windows user drove me nuts. Erik de Jonge's 'iSpider' project had a decent command-line Python/Applescript codebase, and were up for doing a cross-platform GUI product, which is where I wanted to go. Bringing in some modest COM knowledge that Pieter Overbeeke's 'i-podder' javascript helped me learn, I joined the iSpider team and Lemon was born. Nearly two years and one Ceast and Desist later, Lemon is now known as Juice and has accumulated over 2 million downloads. Along the way, Martijn Venrooy and I built the GigaDial 'podstation factory' (October 2004), and in Fall 2005 I joined PodShow and moved my family from Boston to San Francisco. At PodShow I do a mix of engineering (DGAP, Golden Tickets), developer relations (developer.podshow.com, DevCasts), technical reviews of potential partners and, when anyone will listen :-), talent scouting. I'm bullish on New Media and on the lookout for cool new stuff to build, to make listening and viewing better.

Pretty verbose --- it fills the alotted space on my profile page --- yet it barely scratches the surface.


read more:

Happy New Year!

My New Year's resolutions are to....

  • Use FORTRAN on RAILS as my language of choice
  • Use Waterfall methodologies
  • Use Access for all my database needs

Here's to a productive and happy year!


read more:

Resources from recent talks

I have posted slides and demo code from my talks this month at Code Camp 5, DevTeach, and VSLive! on my site here. I have also posted each of these individually on the respected sites for the conference.

Each of these conferences went well. There were lots of great questions, and as with all speaking opportunities, I learn from those attending as well as become more comfortable with the material. One highlight for me was the great evals for each, and at DevTeach, I actually placed as the #1 speaker in the SQL/Data track based on evaluation results.

One issue I had with getting Service Broker to work at Code Camp 5 was resolved before DevTeach. I found that after I attached the new AdventureWorks database (included in the latest April SQL Server 2005 Samples), the authorization for the database was different than what I was using. This caused messages sent from an Initiator Queue to fail for Service Broker. My friend Rushi (a developer on the Service Broker team at Microsoft -- he has a great blog) mentioned I needed to do this:

ALTER AUTHORIZATION ON DATABASE::AdventureWorks TO sa ;
GO

After this step, things were right again and my demos WORKED!

Share this post: Email it!
read more:

Working, speaking, and generally busy
I haven't blogged for awhile (missed a month! -- wow, where does the time go?). I have been working various short-term gigs for several months now, typically flying onsite to a few locations, as well as one-three week assignments. I also spent a couple of days teaching a VB 2005 class at a company. Those are great opportunities, but sometimes you need to settle down a little in order to get some steady income again. I started a full-time contract in Boston this past week plus I am working a few other small projects.

I will be spending a little more time on the road over the next two weeks speaking at conferences. Here is my schedule:
  • May 6-7 - Code Camp 5, Waltham, Massachusetts - I have four talks I am doing: 'Threat Modeling for Web Applications', 'Reliable Applications with System.Transactions', 'Build Queuing Database Applications with Service Broker', 'Secure Data Applications' (This last one is new talk for me with a code-intensive demonstration of secure techniques to secure most kinds of data applications)
  • May 9-11 - DevTeach, Montreal - 'Reliable Applications with System.Transactions', 'Build Queuing Database Applications with Service Broker', Part of the 'SQL Server Round Table'
  • May 17 - VSLive!, Orlando - 'Leveraging .NET 2.0 Security Features' (Black-Belt session)
Regarding the upcoming TechEd 2006 in Boston, I found out yesterday the BoF I submitted was not picked (thanks to all who voted, though). I have been seeing quite a bit of discussion about issues with developing as non-admin on Vista, so this would have been a very interesting discussion, but it may be too early for this. I also found recently I was picked to be an expert again in the Connected Systems group at TechEd. That should be fun.

Share this post: Email it!
read more:

SQL Cheat Sheet: Query By Example - Part 2
In this article, we'll cover some more SQL tricks for accomplishing tasks such as getting the details of the newest record from a relational database.
read more:

Databases: Past, Present, and Future
This article is dedicated in memory of Edgar F. Codd - Father of Modern Relational Database Theory.In this article we will delve into the history of databases - how it started, where the industry is now and what its potential achievements will be.
read more:

PostgreSQL: An Open-Source Object Relational Database Management System (ORDBMS)
In this article we will delve into the features of the PostgreSQL object-relational database environment and what makes it special. We will focus on features that make PostgreSQL different from most relational database management systems (RDBMS).
read more:

Rendering the results of an Access Database in Excel
In this article we will demonstrate how to populate an excel spreadsheet with data from an Access database
read more:

Rendering the results of an Access Database in Excel (The code)
This is an accompaniment to the article
read more:


You Searched for

database programmer

Click database programmer to go to MMK Technologies
SEARCH RSS NEWS USING THE WORDS BELOW

database programmer | internet database | online marketing | ecommerce software | streaming media | video streaming | secure video streams | media streams | audio streaming | MP3 security | avi security | Windows Media Security | protect video | secure web cam | webcam security | video piracy | media piracy | windows media player security | secure media | protect audio | video stream protection | MMKTechnologies | MMK Technologies | prevent audio theft | prevent video theft | web page design | ecommerce shopping cart | shopping store ASP | sell online | sell products | products to sell online | web technology | website builders | web site builder | bradenton web design | florida web design | bradenton website design | protect MP3 | keep video from being copied | sarasota web design | secure upload video | web programming | cgi programming | net hosting | net development | flash design | flash programming | cool flash | action script | flash database programming | flash graphics | graphics design | graphics disign | flash disign | web disign | web design | website design | internet marketing | web marketing | web site marketing | programming | web sites designer | web designs | internet design | programming developer | website marketing | web development | marketing internet | web sites designing | site designs | sites designs | internet designer | internet designs | e-commerce store | web development | web site development | design webs | internet site marketing | internet hosting | internet host | web hosting | web host | sell on the internet | sell on the web | e-commerce store | internet development | webdesign | florida web site design | website development | ecommerce store | sell online | affiliate program | asp web store | marketing program | marketing software | submission software | asp programmer | cgi store | perl store | internet store | database programmer |


Socket World Socket World Automotive Sockets Special Sockets BMW Socket Audi Socket VW Socket Mercedes Socket


Web Design Hosting and internet marketing by MMK Technologies

(c) Copyright 2005 MMK Technologies.

 

  Design Forum   Support   Hosting   News   Flash Design
Copyright © 2006, MMKTechnologies. All Rights Reserved.