How do I get the domain name from a URL?A: If you want to extract a domain name from an existing URL object, use the URL's getHost() method.
read more:
What Google knows about your domain nameThere's a lot of speculation about the information that Google has about domain names. What does Google know about your domain name and what do they not know?
read more:
Oct 1, Was ist eine Domain?Eine Domain ist wie ein Name. Schnell und einfach zu merken. Und genauso einfach erklären wir Ihnen hier den Aufbau und die Verwaltung von Domains.
read more:
Web Hosting DenverThe domain name must then be registered for a specific period of time. Once registered, the name will need to be reregistered every several years, or the name will revert back into the "available" category and would become available to anyone who decided to register it. Domain name selection needs to be seriously considered.
read more:
Oct 1, Der Domain Guide: Alle Informationen über DomainsLernen Sie das Konzept und die Technik hinter der Domain kennen. Informieren Sie sich über die verschiedenen Arten von Domains und deren Vorteile.
read more:
Oct 1, Brauche ich überhaupt eine Domain?Über 65 Millionen registrierte Domains beweisen, daß eine Domain heutzutage unentbehrlich für den Erfolg eines Online-Unternehmens ist.
read more:
Oct 1, Die Domain und Ihre verschiedenen EigenschaftenEine Domain hat ganz bestimmte Eigenschaften und Beschränkungen, die Sie kennen sollten, um später leidvolle Missverständnisse zu vermeiden.
read more:
Oct 1, Wie kann ich eine Domain registrieren?Man muss eine Domain registrieren, denn kaufen kann man sie nicht. Erfahren Sie hier, wo Sie Domains registrieren können, wie es funktioniert und was Sie davon haben.
read more:
J2EE minus the doodle-hypeIn this post, we will look at the details of J2EE and find out the reason of its popularity as a platform and the reasons of its phenomenal growth in the enterprise domain. Specifically we will try to cut the hype and the related myths and concentrate to bring out the essence of J2EE as a technology, Once we have established this, we will look at specific details of J2EE as used in an EAI domain.
read more:
Oct 1, Generische Domain-Endungen versus geografische Top-Level-DomainsDie generische Top Level Domain ".com" z.B. steht beim Betrachter für langes Bestehen und Seriosität. Doch auch geografische TLDs haben Vorteile, die nicht zu unterschätzen sind.
read more:
Time Domain Signs Exclusive License to Provide Ultra Wideband Products to the Healthcare IndustryParco Merged Media and Time Domain sign exclusive worldwide license agreement for UWB RFID in the healthcare industry. New product lines and performance criteria for RTLS and tracking announced. (PRWEB Jun 26, 2006) Trackback URL: http://www.prweb.com/chachingpr.php/Q3Jhcy1QaWdnLUluc2UtQ291cC1JbnNlLVplcm8=
read more:
SEO Chat Forums - Mirror BanningDate: July 17th, 2006 07:15 AM - alemcherry - UntitledPost: 301 redirect from new domain to the old is the best option. Better be safe than...
read more:
SEO Chat Forums - Old domain name still shows up.Date: July 17th, 2006 08:29 AM - berryonline - UntitledPost: I think I messed this up bad. Now both domains show a pagerank of 3. This is so messed up. Can anyone tell me what I did wrong or even...
read more:
United States Of America 28 State Domain Names Are For SaleNew Real Estate Investors, rich and poor, large and small, are created via Cyberspace Properties. Cyberspace properties have become the leading preference for D.I.P.S. or Diversified Investment Portfolio Strategies. (PRWEB Jul 3, 2006)
read more:
Improving Developer Productivity With Domain-Specific Modeling Languages By Steven Kelly, PhDWhat is DSM? How is it different from UML and MDA? Can DSM languages produce significant programming productivity gains? Can software development be truly model-driven?
Click here for the full article.
read more:
Oct 1, Die größte Illusion bezüglich Domains überhaupt!Ich habe eine Domain, also bin ich reich! Genießen Sie diese Vorstellung mit Vorsicht, denn nicht alle Domains sind wirklich Goldes wert. Lernen Sie hier, wie wertvoll Ihre ist.
read more:
Google ranking secrents revealed - Part 2Google has recently filed a patent that details many points that Google uses to rank web pages. This article series discusses Google ranking secrets that have been revealed in that report. This time: how your domain name can affect your rankings.
read more:
HostGator Web Hosting CouponJust a short posting here today. Many folks have inquired about finding a host gator discount or Host Gator Coupon. We got something even better. How about the famous 1 Cent hosting at HostGator with unlimited domain option? Sounds great, ok let’s go for it. The only requirement is that the coupon code needs to [...]
read more:
Oct 1, Finden Sie Antworten zu den wichtigsten Fragen bezüglich Domains!Welche Voraussetzungen brauche ich, um eine Domain registrieren zu können? Brauche ich eine Website, wenn ich Domains registrieren will? Die Antworten finden Sie hier.
read more:
How do I get a domain name from an IP address?A: The Java network class InetAddress provides a getHostName method to do reverse name resolution. The main difficulty in this scheme is that InetAddress is a final class that has no public constructor, it's static instance methods take a named host argument and it has no mutator methods. For practical purposes, you are most likely to get an instance from a Socket type, such as the ServerSocket's accept method.
read more:
THE 8 STEPS OF WEB DESIGNThe steps:•Figure out what the focus of the website will be.•What specific features do you want in the website•Create a list of sections for your website and give them a hierarchy of importance.•Write out your content and finalize it.•Find a style / look that meets your website’s and your industry’s requirements.•Build the website.•Evaluate the website and make the required changes / updates.•Go live – register a domain, find a host, upload the website
read more:
Can web service adoption usher-in a collaborative development process?Service Oriented Mass Customization (SOMC) asks us to stop thinking of an application as an isolated island lacking a semantic bridge to the rest of the user's world. Instead allow users to build bridges by explicitly mapping elements from your application domain to others available in their burgeoning Service oriented architecture (SOA). Once these bridges are built, users can take your application to strange and exotic places.
read more:
Rationalizing Relational and OOMoving 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:
Web API authentication for mashupsJason Levitt has been teasing me in our discussions on cross-domain requests about Yahoo's upcoming authentication API.
The recurring problem: how to offer web APIs that can be mashed up but involve personal data?
You want to allow for a large number of third parties to integrate with your services, but don't want phishing sites to abuse them.
Let me do a quick re-cap of the problem space before analyzing the pieces of Yahoo's solution.
Communication techniques:
Here is what is possible today for web browsers and what some people have recommended for the future:
In all these cases, there is no good authorization story, that would allow for working with personal data stored in the service in a secured way.
Authorization techniques:
A number of techniques for controlling access to web APIs are generally used: user authentication cookies (or HTTP auth), API keys and crossdomain policy files.
The problem is that API keys and crossdomain policy files are too restrictive because the service needs to decide which third-parties to let in.
On the other end, access control based on the user authentication cookies are very open to un-planned integration, but also create a huge phishing risk.
This is a classic example of the confused deputy problems that appear in principal-based security models.
As a result, most web APIs today don't involve any user data (search, maps, ...) or non sensitive user data.
Yahoo APIs:
Yahoo appears to be tackling the challenge with its
announced 'browser-based authentication' (bbauth). From the
little information I could gather so far, from Drew Dean's slides, it seems less of an authentication than an authorization system. Unlike cookie based approaches, which give access to any agent presenting user credentials (principal-based security), it appears to follow a
capability-based security model, which only grants access if the agent uses the proper 'secure handle' or 'capability' to call the service. Such capabilities are sufficient to gain access to the service and don't need any additional authentication, they are communicable tokens of authority.
Let me re-iterate that I don't think this protocol is about Identity, unlike Passport, TypeKey or CardSpace (aka. InfoCard), but rather simply authority and access. This characteristic is important: we want services to cooperate without being tighly coupled at the identity level. Drew Dean's slides frames the issue as allowing 'Pseudonymous delegation of partial rights', which means the names of a user in different services don't have to match and the authority that is granted is granular.
What's great about this model is that the authority carried by a capability can be as granular as the design and scenario require, and are only be given out to third-parties under certain conditions, which again are chosen to fit the desired requirements and user experience.
For example, the authority granted could vary in range in action and scope: a handle could give access to the user's entire data, or maybe only partial access to part of the user's data.
The design of the capabilities could also comprise additional dimensions, such as a time restriction. For example, a capability could be only valid for 24 hours.
One of the myths of capability systems is that capabilities cannot be revoked. It is actually possible and in Yahoo's design, any granted authority can be revoked by the user at any time.
One common policy for giving out capabilities is to get consent from the user. The screenshots of the F-Spot integration with Flickr (found on this thread) show the Yahoo consent UI.
Although I don't like the desktop/web integration in this scenario and I have some concerns about repeatedly prompting the user for consent, I believe that this approach has a lot of potential for cross-domain service integrations on the web.
Cross-domain support in browsers will be the main remaining link missing to unleash some really cool web apps. In the meanwhile, you can use FlashXMLHttpRequest or some other cross-domain workaround.
I look forward to reading the documentation when the protocol is released and trying out the resulting user experience in practical scenarios. Let me know if you find any other information.
Jason mentioned that the protocol is open and can be simply implemented, which means that it could be supported by other services and hopefully used in a wide variety of mashups.
read more:
FlashXMLHttpRequest: cross-domain requestsI've been working with Jason Levitt (from Yahoo) recently to iron the wrinkles out of my Flash-based technique for making cross-domain requests. The main focus was to extend the reach of the technique to a larger audience, by adding support for Flash 7, which is more widely deployed than Flash 8.
Try the new FlashXMLHttpRequest demo.
Brad Neuberg's awesome work on DojoExternalInterface gave us a major boost. It emulates the most recent javascript to flash communication API (ExternalInterface, in Flash 8) accross platforms including Flash 7. The library hides differences with browsers and flash versions as much as possible, and works around various performance limitations.
Thanks again to Jason for his interest, feedback and support. I'm pretty excited to see what cool stuff he'll cook using this and the new web APIs from Yahoo.
If you only want to deploy this component, you can download the 'binary' package.
To modify the flash source files and re-build them, get the 'source' package.
As you can see in the demo/index.html file, after including dojo.js and FlashXMLHttpRequest.js, you'll need to initialize dojo and the flash object by calling InitFlash with the name of a function. That function will be invoked once the flash object is loaded and ready to make requests.
From there on, you can create FlashXMLHttpRequest instances and use the 'open', 'onload' and 'send' methods almost as you would with a regular XMLHttpRequest object. You can also call 'setRequestHeader', but only to set the content type request header.
More generally, FlashXMLHttpRequest still has some limitations, due to the native Flash capabilities.
First, access to other domains is restricted by use of a crossdomain.xml file.
Second, you can only make GET and POST requests. It will become possible to support other verbs, such as PUT, DELETE or HEAD, with the new APIs provided by Flash 8.5.
Let me know if FlashXMLHttpRequest is useful to you and if you encounter any bugs. Here's a more convenient permalink to this post: http://blog.monstuff.com/FlashXMLHttpRequest.
read more:
Organizational Knowledgebase Article PublishedKnowledge is power. Yet, it is a power that is not trivial to maintain. The organizational body of knowledge is always growing, since new people are joining the enterprise, more projects are being developed and more experience in the problem domain and the relevant technology is gained. However, the fact that the sum of knowledge in the organization is ever growing, does not guarantee that this vast amount of knowledge will indeed be used when and where needed. On the contrary, in some cases, the more knowledge there is in the organization, the less accessible it is to people who really need it, when they need it. Thus, the main concern in this context is not how to gain more knowledge, but how to maintain it: how to make it accessible in such a manner that will make it useful.
Read the article...
read more:
At War with OurselvesI read this a while ago but it seems somewhat relevant recently.
The Vietnam of Computer Science "Although it may seem trite to say it, Object/Relational Mapping is the Vietnam of Computer Science. It represents a quagmire which starts well, gets more complicated as time passes, and before long entraps its users in a commitment that has no clear demarcation point, no clear win conditions, and no clear exit strategy."
Solutions:
"Developers simply give up on objects entirely, and return to a programming model that doesn't create the object/relational impedance mismatch. While distasteful, in certain scenarios an object-oriented approach creates more overhead than it saves, and the ROI simply isn't there to justify the cost of creating a rich domain model. ([Fowler] talks about this to some depth.)"
Fowler's piece I believe is, "
GetterEradicator" which links to "
Tell, Don't Ask", which makes an important point about Design by Contract, "According to Design by Contract, as long as your methods (queries and commands) can be freely intermixed, and there is no way to violate the class invariant by doing so, then you are ok. But while you are maintaining the class invariant, you may have also dramatically increased the coupling between the caller and the callee depending on how much state you have exposed."
"Developers simply give up on relational storage entirely, and use a storage model that fits the way their languages of choice look at the world."
"Developers simply accept that it's not such a hard problem to solve manually after all, and write straight relational-access code to return relations to the language, access the tuples, and populate objects as necessary."
"Developers simply accept that there is no way to efficiently and easily close the loop on the O/R mismatch, and use an O/R-M to solve 80% (or 50% or 95%, or whatever percentage seems appropriate)..."
"Developers simply accept that this is a problem that should be solved by the language, not by a library or framework...bring relational concepts (which, at heart, are set-based) into mainstream programming languages, making it easier to bridge the gap between "sets" and "objects". Work in this space has thus far been limited, constrained mostly to research projects and/or "fringe" languages, but several interesting efforts are gaining visibility within the community, such as functional/object hybrid languages like Scala or F#, as well as direct integration into traditional O-O languages, such as the LINQ project from Microsoft for C# and Visual Basic. One such effort that failed, unfortunately, was the SQL/J strategy; even there, the approach was limited, not seeking to incorporate sets into Java, but simply allow for embedded SQL calls to be preprocessed and translated into JDBC code by a translator."
"Developers simply accept that this problem is solvable, but only with a change of perspective. Instead of relying on language or library designers to solve this problem, developers take a different view of "objects" that is more relational in nature, building domain frameworks that are more directly built around relational constructs."
read more:
Site Launch > LudemaBoyinkSod.comLudema & Boyink Sod Farm is located 1/2 hour east of Grand Rapids, MI in Clarksville, MI and provides residential and commerical sod sales and delivery to all of West Michigan. You can also pick it up yourself at our farm.http://www.LudemaBoyinkSod.com/
I'm pleased to announce the launch of
http://www.LudemaBoyinkSod.com Yes, this is nepotism at work as the 'Boyink' portion of that domain does represent another family member, in this case my uncle and cousins who own and operate the sod farm.The site is their first one on the web, and was done with a focus on providing basic business, product, and contact information for potential customers. From an implementation perspective the focus was on developing a site with a low cost of entry, so rather than implement at content management system the small site is hand-coded and static. For a design we 'mashed up' a couple of pre-existing templates available on the internet. I will admit - this is one time where I knew immediately what background image the site would have and the rest of the design was figured out after that...;)The icons are from
http://www.famfamfam.com, and hosting is provided by
pMachineHosting.Please welcome another Boyink to the web!
read more:
Upgrading to Mandrake 10Upgrading to Mandrake 10
Last night I decided to upgrade my home Linux box, which was running Mandrake 9.2, to the newly-released Mandrake 10.
I run Mandrake at home, and until recently, on my work machine, too. Now at work I run Red Hat 9, but only because we use ClearCase (don't get me started) as our version control software, and it patches into the kernel, and only supports Red Hat. So I was forced (kicking and screaming) to switch to Red Hat at work.
Now, this is just my personal opinion, and I'm sure I'll get flak for it, but Mandrake beats Red Hat for ease-of-installation and use. Not by a whole lot, but enough that I perfer Mandrake. My upgrade to Mandrake 10 is a good example of what I'm talking about.
Mandrake has not yet released the ISO files of the 'official' version of Mandrake 10, as they want their preferred (read that, paying) customers to be able to get it first. But you can get 'official' Mandrake 10 if you are willing to follow a few simple steps.
- First, find a Mandrake mirror site. I used raven.cslab.vt.edu.
- Using any modern browser that lets you access an ftp site, go to the directory containing the official Mandrake 10 release, which on that site was '/pub/linux/mandrakelinux/official/10.0/i586'. Then go into the 'images' subdirectory.
- Download 'boot.iso', and burn it to a CD.
- Using your existing Mandrake 9.2 installation, write down the following information: system name, system domain, system IP address, DNS IP address, gateway IP address (if you use a gateway to access the internet)
- Insert the CD you just burned, and reboot your system so that it boots from the CD
- A Mandrake 10 special boot loader will come up. It will ask you for the info I had you write down, including the location of the ftp site and the directory for the Mandrake 10 source. Use the raven site from above.
- If you have broadband, it will spend almost 3 hours downloading Mandrake 10. If you are on a dial-up, this may take all night. Fire up your Windoze game machine and play 'Splinter Cell' for a while.
- Once the download is done, the installer will walk you through the normal installation steps. Tell it you are upgrading an existing system. It will recognize all of your current drives, partitions, setting, everything.
- Done. You now have a Mandrake 10 system.
Once Mandrake does the wide release of Mandrake 10, installation will be even easier. Find a site hosting the ISO files, download them using Bittorrent, burn the CDs, reboot from CD1, and off you go. But the fact that I can do a full upgrade over the Internet using only the steps I gave above, with no problems what so ever... well, bravo to Mandrake.
Oh, and Mandrake 10 comes with Python 2.3.3.
read more:
Web Patterns: Q&A with John AllsoppFollowing up on part one of the
Design Patterns conversation, I recently had the pleasure of speaking with John Allsopp about Web patterns. John is the lead developer of the
Style Master CSS Editor and founder of
Webpatterns.org, a site focused on the intersection of design patterns and Web development. In John’s own words: “The purpose of identifying patterns is to use them in our work as designers, information architects, and developers.” We chatted about doing just that.
Q: You've pointed out that HTML has a long way to go to support the semantic structure Web developers and designers need to build today's generation of Web applications. As evidence you pointed to the myriad of CLASS and ID attributes in use across the Web. Are there any particular components or structures that really stand out as recurring needs that HTML is not addressing?
A: A combination of
my -and others-
empirical research as well as more qualitative research like
that of François Briatte would suggest that to a significant extent, Web design is gravitating to a number of strong patterns, at least at the page and site architecture level.
Multi column layouts with headers and footers, breadcumb trails, tree-like page and site navigation, skip to content, search site boxes and other common elements recur frequently.
But, beneath this, at the level of the code, there is little if any consensus as to how these patterns should be coded, to the extent that in no case has a consensus emerged as to what to call these page components -as reflected in the various class and id values used to identify and classify them.
Now, in one sense, HTML addresses the need for all these components and structures, because they can be implemented with HTML and CSS. The question is should HTML provide any or all of these commonly used structures? I'd argue no. HTML is a low level language for creating more complex structures.
HTML also provides a generic mechanism for adding rich semantics to documents - the class and id attributes - which works in all browsers going back the best part of a decade. So HTML, in a sense, does address the need for these components and structures. It's really up to developers to form some kind of consensus regarding semantics and implementation of these components.
The key idea here is consensus. Individual approaches to rich HTML semantics are unlikely to gain widespread adoption. Projects like microformats show what a collaborative and cooperative approach can achieve. We need something similar which focuses on architectural semantics rather than data semantics, which is the prime focus of microformats.
Q: To what extent are these omissions tied to the fact that HTML is a mark-up for pages and, as a result, focuses on defining components like headings, paragraphs, lists, etc.? Surely this becomes problematic when building robust applications online that do a lot more than present information?
A: Certainly, the fact that HTML has its origins in analogues with the printed page means there is a tension between the kinds of patterns emerging that are unique to online use, and the built-in patterns of HTML -headings, paragraphs and so on.
Ideally, HTML would be a more generic language, with semantics added in specific domains -more like the XML model. But HTML is here to stay for a very, very long time. Fortunately, there are well-supported, non-hack mechanisms for extending its semantics -primarily id and class, but also the rel attribute.
So yes, the legacy of the printed page looms large with HTML, and potentially this causes difficulties when adapting its use to more sophisticated online applications than we typically saw over the first decade of the web. But HTML is also a reality we have to deal with for at least the best part of the coming decade.
Q: So what's the right way to address this lack of semantic definition present in HTML? Microformats? Shared CLASS and ID conventions? A user interface mark-up language like XUL?
A: Yes, Yes and Yes. In the near term, microformats (which rely heavily on id and class, as well as the rel attribute of link elements) illustrate a more general solution “for today’s web”. XUL (and XAML and XForms) point in the direction of potential future ways of building web-based user interfaces - declarative languages - but realistically, it will be the best part of a decade before these are widely supported.
Q: Seems like you've settled on patterns as a good way to build an extended Web vocabulary and your
Pattern Quiz seems to be helping you work through that vision. What have you learned to date from the Pattern Quiz? What are the things folks seem to agree on and where has there been the most discussion or divergence?
A: Patterns are a widely used way of capturing problems and their potential solutions in a variety of fields, not least of all in many facets of IT.
In my discussions on this issue with many people over several years, it seems that when people initially think of ways of solving this problem of standardizing page and site architectures they think in terms of 'templates'. The idea being that if you can only capture the best possible solution for any given problem, then standardize its implementation, then everyone can use it and its a win for all.
What people soon realize, even in quite controlled environments like a single organization, is that a one size fits all approach doesn't work, it is far too inflexible - so people customize, 'polluting' the one true solution, and you quickly return to the chaos you had earlier. Patterns offer far more flexibility, and as a result, potentially a workable way of solving the problem.
The idea behind pattern quiz was to get people to start thinking about what they do in terms of patterns in a more formal way. The weakness of most pattern language approaches to web development I've seen so far is that they are idiosyncratic - they rely on the work of an individual or small number of people, often in a close knit team. In this context it is reasonably easy to see consensus and a common way of working. This doesn't necessarily scale.
For standardization to work, it needs to work across the web of developers more generally. So pattern quiz was also an attempt to glean how this broader web of developers thinks about the common problems they are solving.
The quiz has not progressed as far as I would have hoped, which is largely my responsibility. My daughter was born shortly after the quiz started, somewhat curtailing my ability to keep several balls in the air at once. But one thing that did emerge was that people commonly think in terms of content, when it comes to patterns.
For example, when asked to classify the kinds of sites people could think of, I was thinking in terms of 'blog', 'search engine' 'portal' and so on (largely content neutral), whereas many people suggested sites for a band, or a gallery or a bank (which to my mind could use different patterns to solve their problems - a band site could be a blog, or a more traditional static site, and so on.)
Another thing that emerged was a not uncommon attitude that by codifying patterns, somehow a developer's creativity would be stifled. This is an argument I hear commonly against the adoption of web standards. In the case of patterns, it comes in part from a misunderstanding of what a pattern is supposed to do. I put this misunderstanding down in large part to my inability to articulate what a patterns is and how it is useful more clearly.
Patterns are not supposed to dictate solutions, or suggest 'one true way' of solving a problem. Rather, in Alexander's famous formulation a pattern 'describes a problem which occurs over and over again ... and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice '.
But hopefully we'll learn a lot more in the coming months and more.
Q: How about flexibility? Have you found patterns to be flexible enough to accommodate the rate of change in typical Web applications?
A: To tell the truth I don't know. Patterns are meant to capture emergent behavior - not possible or tentative solutions, but problems which developers actually face, and the core of a solution to those problems.
So in theory, and I guess the longevity of patterns in other fields suggests that in practice, a pattern language approach does have the ability to adapt to the changing problems and solutions a profession encounters in its practice.
Q: Jenifer Tidwell has argued that we shouldn't tie design patterns to any particular technology or code-base:
'I worry about the longevity of technology-specific patterns. If patterns are closely tied to current technology, won’t they become obsolete really quickly?'
You've taken steps to ensure integration between Web patterns and semantic mark-up. What's the life cycle of a system like this? How long can it stay relevant?
A: I think that is a really good question, with a number of dimensions.
Firstly, if a particular methodology, like a pattern language, is going to be widely useful then it needs to be widely adopted. Wide adoption requires wide understanding of the methodology and its benefits. Technology neutral methodologies are a very hard sell, because in my experience as an educator, many people learn through concrete examples within a problem domain they understand. Hence 'Web Patterns' focusing on patterns in the sphere of web development.
But there are two not so theoretical reasons why I think patterns are probably to a reasonable extent technology specific. As mentioned earlier, patterns capture problems and their solutions in a specific domain.
Patterns become obsolete when the problems they capture aren't problems anymore. For example, having a low resolution and high resolution image for fast loading slow connection pages isn't really a problem so much any more, so the pattern is obsolete.
The second thing is that patterns are not theories or conjectures - they are actual problems and their solutions. Right now, HTML and CSS are more or less the only technologies relevant to solving web problems when developing for the web. S its inevitable they ill be to an extent technology specific.
The Web Patterns project is designed to capture patterns associated with designing and developing for the web. But the association between the technologies, of say, HTML, CSS and Javascript and web patterns is not hard and fast. Right now, by and large, these technologies provide pretty much the only widespread way of implementing solutions on the web (Flash to a lesser extent, and perhaps increasingly SVG will also become a relevant technology in the near term).
Above all, I think it’s a matter of giving it a go, then seeing what happens. Pattern languages have proven very useful in a number of domains. I have a gut feeling they'll also prove useful on the web. But I think in order for them to do so, any such project or projects need to be well explained, and have broad developer buy in.
Thanks John!Tags:
patterns,
UI components,
Web conventions,
xmlread more:
Working With Fixed Record Length CSV FilesWorking With Fixed Record Length CSV Files
Yesterday I wrote about working with fixed record length files, and presented a class for making it easy. Today I'll extend that idea to handle records containing csv data.
The new CSVRecordFile class inherits from the RecordFile class, overriding the read and write methods to add csv parsing and formatting. This allows you to read and write fixed length csv data records in random order. The StringCSVAdaptor class (presented earlier) is used to enable us to use Python2.3's csv module with strings. This is necessary since the csv modules reader and writer functions expect to work with interables, such as a file-like object or a sequence.
Matt Goodall took me up on the need for the StringCSVAdaptor class, rightly pointing out a simpler way of handling the problem (thanks, Matt! I think you are reader #4 of this weblog, and the first person to leave me a comment!) Sadly, Matt's suggestion does not fit with the problem domain I'm using CSVRecordFile for. For one thing, I need both a csv reader and writer. I only want to create these objects once per CSVRecordFile instance, and then use them to parse/format many records in random (not sequential) order. Matt's solution, while useful for simple one-shot csv needs, looks to me to require the creation of the reader and writer for each record that is to be parsed (because he wraps the string to be parsed in a list to make it an iterable). You can read Matt's comments from yesterday's post.
Put this code in a file called csvrecfile.py:
"'This file contains the CSVRecordFile class, for working with fixed length
record files, where the records contain csv data."'
__author__ = 'Mike Kent'
__version__ = '$Id$'.split()[-2:][0]
import recfile
import csv
import csvadaptor
class CSVRecordFileFmtError(Exception): pass
class CSVRecordFile(recfile.RecordFile):
"'This class provides a standard way to handle files which are layed out
as fixed-length records containing csv data, where each record is padded
to its proper length with a padding character, and may be optionally
terminated with a record terminator string."'
def __init__(self, filename, mode, reclen, recpad=', recterm=None,
**csvKwParams):
recfile.RecordFile.__init__(self, filename, mode, reclen, recpad,
recterm)
self.csvAdaptor = csvadaptor.StringCSVAdaptor()
self.csvReader = csv.reader(self.csvAdaptor, **csvKwParams)
self.csvWriter = csv.writer(self.csvAdaptor, **csvKwParams)
return
def read(self, recNum):
"'Read a record containing csv data by record number, and return a
list of strings.
Record numbers start a 1. An empty list will returned on end of
file."'
self.csvAdaptor.data = recfile.RecordFile.read(self, recNum)
try:
rec = self.csvReader.next()
except csv.Error:
raise CSVRecordFileFmtError
return rec
def write(self, recNum, valueList):
"'Write a list of mixed-type values to a record, in csv format,
by record number.
Record numbers start with 1. The record will be
padded to the correct length using the padding character, and
optionally terminated by the record terminator string.
You can seek to, and write, records beyond EOF. However, to
append a new record to the current actual EOF, give a record number
of 0. This function returns the actual record number written to."'
try:
self.csvWriter.writerow(valueList)
except csv.Error:
raise CSVRecordFileFmtError
return recfile.RecordFile.write(self, recNum, self.csvAdaptor.data)
Here are the unit tests. Put this code in a file called test_csvrecfile.py:
#! /usr/bin/env python
import sys
import unittest
import csv
import csvrecfile
class TestCases_01_RecordFile(unittest.TestCase):
def test_01_instantiate(self):
recFileObj = csvrecfile.CSVRecordFile('test.txt', 'w+b', 20, ' ',
'r', lineterminator=', quoting=csv.QUOTE_NONNUMERIC)
self.assert_(recFileObj is not None)
return
class TestCases_02_RecordFileWriteAdd(unittest.TestCase):
def test_01_writeAddOne(self):
recFileObj = csvrecfile.CSVRecordFile('test.txt', 'w+b', 20, ' ',
'r', lineterminator=', quoting=csv.QUOTE_NONNUMERIC)
self.assert_(recFileObj is not None)
rec = [ 1, 2, 'three' ]
recFileObj.write(0, rec)
recFileObj.flush()
testFileObj = file('test.txt', 'rb')
expected = '1,2,'three' r'
newRec = testFileObj.read(20)
self.assertEqual(newRec, expected)
return
def test_02_writeAddSeveral(self):
recFileObj = csvrecfile.CSVRecordFile('test.txt', 'w+b', 20, ' ',
'r', lineterminator=', quoting=csv.QUOTE_NONNUMERIC)
self.assert_(recFileObj is not None)
for count in range(5):
rec = [ 1, 2, 'Record %d' % (count + 1) ]
recFileObj.write(0, rec)
recFileObj.flush()
testFileObj = file('test.txt', 'rb')
for count in range(5):
expected = '1,2,'Record %d' r' % (count + 1)
newRec = testFileObj.read(20)
self.assertEqual(newRec, expected)
return
class TestCases_03_RecordFileWriteRandom(unittest.TestCase):
def setUp(self):
recFileObj = csvrecfile.CSVRecordFile('test.txt', 'w+b', 20, ' ',
'r', lineterminator=', quoting=csv.QUOTE_NONNUMERIC)
self.assert_(recFileObj is not None)
for count in range(5):
rec = [ 1, 2, 'Record %d' % (count + 1) ]
recFileObj.write(count + 1, rec)
recFileObj.close()
return
def test_01_writeRandomOne(self):
recFileObj = csvrecfile.CSVRecordFile('test.txt', 'r+b', 20, ' ',
'r', lineterminator=', quoting=csv.QUOTE_NONNUMERIC)
self.assert_(recFileObj is not None)
recNum = 2
rec = [ 3, 4, 'New record %d' % recNum ]
recFileObj.write(recNum, rec)
recFileObj.flush()
testFileObj = file('test.txt', 'rb')
expected = '3,4,'New record %d'r' % recNum
testFileObj.seek(20)
newRec = testFileObj.read(20)
self.assertEqual(newRec, expected)
return
def test_02_writeRandomSeveral(self):
recFileObj = csvrecfile.CSVRecordFile('test.txt', 'r+b', 20, ' ',
'r', lineterminator=', quoting=csv.QUOTE_NONNUMERIC)
self.assert_(recFileObj is not None)
recNumList = [ 1, 5, 3, 2, 4 ]
for recNum in recNumList:
rec = [ 1, 2, 'New record %d' % recNum ]
recFileObj.write(recNum, rec)
recFileObj.flush()
testFileObj = file('test.txt', 'rb')
for count in range(5):
expected = '1,2,'New record %d'r' % recNumList[count]
testFileObj.seek((recNumList[count] - 1) * 20)
newRec = testFileObj.read(20)
self.assertEqual(newRec, expected)
return
class TestCases_04_RecordFileReadRandom(unittest.TestCase):
def setUp(self):
recFileObj = csvrecfile.CSVRecordFile('test.txt', 'w+b', 20, ' ',
'r', lineterminator=', quoting=csv.QUOTE_NONNUMERIC)
self.assert_(recFileObj is not None)
for count in range(5):
rec = [ 1, 2, 'Record %d' % (count + 1) ]
recFileObj.write(count + 1, rec)
recFileObj.close()
return
def test_01_readRandomOne(self):
recFileObj = csvrecfile.CSVRecordFile('test.txt', 'r+b', 20, ' ',
'r', lineterminator=', quoting=csv.QUOTE_NONNUMERIC)
rec = recFileObj.read(3)
expected = [ '1', '2', 'Record 3' ]
self.assertEqual(rec, expected)
return
def test_02_readRandomSeveral(self):
recFileObj = csvrecfile.CSVRecordFile('test.txt', 'r+b', 20, ' ',
'r', lineterminator=', quoting=csv.QUOTE_NONNUMERIC)
recNumList = [ 1, 5, 3, 1, 2, 2, 4 ]
for recNum in recNumList:
rec = recFileObj.read(recNum)
expected = [ '1', '2', 'Record %d' % recNum ]
self.assertEqual(rec, expected)
return
if __name__ == '__main__':
unittest.main()
sys.exit(0)
read more:
Design Globalization: Part 4Part four of
Design Globalization: a conversation aabout the impact of large scale global changes, outsourcing, and international design training/firms on design and designers (be sure to check out
part three first).
Luke WroblewskiFirst of all, let me acknowledge Dirk’s point about needing to look beyond design for global business success. Product Design, Design Thinking, and Design Principles all are an important part of the equation but they are not the only variables involved. As I mentioned in
the Lifecycle of Design conversation: “sometimes a strategic business partnership is what enables a superior customer experience”. In the case of global markets, this is very often the case.
It’s also true that the design community has a tendency to discuss the importance of issues like context and culture amongst themselves but not with a broader audience. As evidenced by a recent quote from the Silicon Valley Product Group:
“[the design community] does a good job communicating among themselves, but in general I think these guys spend a lot of time preaching to the choir, and that the message about the value they deliver needs to get to those teams that need them the most, and these are the teams without designers.”
If you amplify this problem globally, it’s great if we get an international contingent of designers talking amongst themselves –but will that really address the state of global flux in which many companies find themselves? Let me suggest an additional approach.
A number of California-based user experience professionals (including myself) just attended the
SHiFT 2006 conference in Portugal. The Portuguese attendees were quite eager to learn about the state of user experience design and strategy in the United States. At the same time we were eager to hear what made Portuguese and European design considerations unique. This state of mind was echoed an in-person conversation I had with Joseph. He pointed out that designers outside the United States are hungry for our domain knowledge (based on experience) and we have keen interests in their unique contexts (culture).
This was made quite transparent in a talk by Celso Martinho from
Sapo (Portugal’s number one Web site). Martinho outlined Sapo’s inability to compete with the resources of global Internet companies. Due to the design and development talent of companies like Google and Yahoo!, Sapo was losing email, social networking, and instant messaging customers. To address this competitive situation, Martinho encouraged Sapo to focus on their key strength: understanding the language, culture, and Internet users of Portugal.
It seems to me that this situation is ripe for a partnership. Local companies may not be able to match a global corporation’s resources, but they can manage local implementation of those resources and adapt products accordingly. This type of collaboration might provide a sense of co-ownership that the current situation does not.
It was apparent at SHiFT that the Portuguese that spoke up had a strong distaste for their dependency on Microsoft software. They wanted to implement homegrown open-source solutions. Perhaps if they played a role in transitioning Microsoft products to need the needs of Portuguese language and culture, they might feel more like partners and less like technological colonies.
Joseph O'SullivanI want to bring this to a close by revisiting the original question: What do designers and design firms need to focus on and be aware of to be successful in this changing hyper-global market? We started with Dirk’s definition of 'Globalization' that was driven by words like 'create' and 'extend'. But what I find interesting about our conversation is that it has been dominated by the ideas of flux, understanding, and sharing.
I agree with Dirk's earlier comment that design is not uniquely positioned to take advantage of the current surge in globalization. But, I do believe Design has the ability to reframe the issues and opportunities regarding globalization. This conversation is a case in point. Countries and culture became “context”. Rapidly growing markets in unstable economies became “flux”. Additionally, “open source sharing” became a tool to manage our lack of knowledge about user needs and behavior in countries we may never visit.
Ultimately what we are talking about, and I’m glad you got us there Luke, is all this work we do will eventually end up in the hands of a person in a singular location having an experience with a product or service that they will enjoy or dislike. They will decide at every click, flavor, color, smell, etc. The product will either need to address their local sensibility such as the example from your time in Portugal, Luke, or it will need to connect to a world far away like the influence of the U.S on Korean youth.
And who knows how to deal with this flux in context?
We will.
And we will do this through understanding and sharing. Just like we always have, except now the world will take advantage of it.
Tags:
global design,
design organizations,
creative classread 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.
You Searched for domain regestration
Click domain regestration to go to MMK Directory
SEARCH RSS NEWS USING THE WORDS BELOW
domain regestration |
webmaster resources |
webmaster forum |
web design forum |
search engine |
website Design |
Web Design links |
web design directory |
webmaster |
programmer |
programming |
hosting |
web marketing |
ecommerce |
web development |
developer |
designer |
graphics design |
traffic swap |
traffic trade |
trade links |
domain hosting |
internet marketing |
domain regestration |
sign media systems truck decal printing fleet decal printing trailer decal printing trailer sign printing fleet sign printing truck sign printing truck signage
www.mmkdirectory.com(c) Copyright 2005 MMK Directory.