tag:blogger.com,1999:blog-280533432024-03-05T11:08:09.262+01:00TRENTTRansform conTENT into Value -
all about information lifecycleAnonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.comBlogger110125tag:blogger.com,1999:blog-28053343.post-37654268660380216462014-04-23T00:07:00.001+02:002014-04-23T00:07:55.714+02:00The small scale approach: How to cleanup messy data, standardize enrich dataYou ever faced to the following challanges:<br />
<br />
<ul>
<li>You have a huge amount of master data needs to be cleaned up. Over time the same terms are used differently, buildup of the names using different styles, etc.</li>
<li>Have to split data currently part of one column into different one, e.g. a product name contains dimension which should be processed in a different column in the future, etc.</li>
<li>common faults in the data needs to be harmonized (multiple whitespaces, upper vs. lower case letters, etc.)</li>
<li> Transform well structured data into a table for relational usage of the data, e.g. </li>
<li>The data needs to be enriched based on public available or internal services, e.g. you have the address of your customer available and want to add latitude, longitude to display amount of customer on a map.</li>
<li>You have to merge two sets of data from two different systems and want to identify same entries even if the both lists does not share a common key.</li>
<li>....</li>
</ul>
For those tasks you have several ways to work with.<br />
<br />
One interesting tool which is very useful in those kind of tasks is "<a href="http://openrefine.org/" target="_blank">OpenRefine</a>" (formerly known as Google Refine). <br />
You can easily download the latest version and install it on your local client (or server) and start it just by following the easy installation instruction provided on the homepage.<br />
<br />
A good overview of the main functions is shown in : <a href="https://github.com/OpenRefine/OpenRefine/wiki/Screencasts">https://github.com/OpenRefine/OpenRefine/wiki/Screencasts</a><br />
<br />
The tool is very easy to use. It works for huge amount of data and for the most tasks it is pretty fast (especially compared to doing the same with spreadsheet software). It is more likely used for ad-hoc tasks compared to fully automated and repeated tasks in the enterprise - but it provides handy functions to reapply and reuse already created rules.<br />
<br />
For more sophisticated analyses goes out of the scope of one columns and rows of one table tools like <a href="http://rapidminer.com/" target="_blank">RapidMiner </a>are more sufficient. But those kind of tools require a bit more upfront invest to get the first problem solved.Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com1tag:blogger.com,1999:blog-28053343.post-73280474059587870862014-04-22T00:55:00.000+02:002014-04-22T00:55:02.719+02:00Copy tables from PDF for further processingYou ever tried to extract data part of a table from PDF to further process it in MS Excel or any other Spreadsheet application? That can be a painful job.<br />
<br />
You might use one of the many PDF to Excel conversion tools - but most of them cannot be used without submitting your PDF to an online service or buying a commercial license. In addition you have to evaluate the quality of the results especially for data part of tables.<br />
<br />
Few days ago I stumbled upon the tool <a href="http://tabula.nerdpower.org/">Tabula</a>. Still marked as experimental but the results are still pretty useful at least for data oriented tables.<br />
<br />
<h4>
Example</h4>
<h4>
</h4>
The PDF "<a href="http://www.atkearney.com/documents/10192/760890/The_Mobile_Economy_2013.pdf" target="_blank">The Mobile Economy 2013</a>" contains a table on page 56 which you want to process in Excel:<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs0m0077oAzAZr9JovEpsiSNItOION-Gccy8UiUD2-J-gdGbQ5xJ2o9-hqZayYNlbcNZ8Hk9MpA2ULu8JvHMkDLNh3z-lwroLnY_rh7CZFgBvmeC1fF6AqGtiANKhParIiI-tkeA/s1600/ARPU.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs0m0077oAzAZr9JovEpsiSNItOION-Gccy8UiUD2-J-gdGbQ5xJ2o9-hqZayYNlbcNZ8Hk9MpA2ULu8JvHMkDLNh3z-lwroLnY_rh7CZFgBvmeC1fF6AqGtiANKhParIiI-tkeA/s1600/ARPU.png" height="190" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<h4 style="text-align: left;">
You have to follow the following steps to extract as csv: </h4>
<ul>
<li>Download the file to your local disk</li>
<li>install and start the tool follow the instructions on the homepage</li>
<li>upload the PDF and select "Submit"</li>
<li>navigate to the table and select the table:</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7Q8SIuEZPTgWwEy0CV6uLS6e4N-0SxDxFuXHXq2tFKil31kWSXIv4zYT4kXjzrO5kRBHPG4VMhowMom762vnY7Vhbe7sfrSEcQ4VprCw3UecLNXdeRefVZPQpoWsHYew7X9ds8g/s1600/select.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7Q8SIuEZPTgWwEy0CV6uLS6e4N-0SxDxFuXHXq2tFKil31kWSXIv4zYT4kXjzrO5kRBHPG4VMhowMom762vnY7Vhbe7sfrSEcQ4VprCw3UecLNXdeRefVZPQpoWsHYew7X9ds8g/s1600/select.png" height="207" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<ul>
<li>choose "Repeat this selection" if you want to select the following tables as well using the same coordinates.</li>
<li>choose "Download all data" and you get:</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpv9k0Yw6ahrlm9SWdOv1QmaQEhV2wPu4Ob13meZ8mcxsSpeQq5qI4kYoXff7XPDD0UvLV7SLdqvB4XxfO2rzompaj8VU6pK28HAc-LrsxCTP6zCnWPUaYOjog1Wjx21Epaon3nw/s1600/result.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpv9k0Yw6ahrlm9SWdOv1QmaQEhV2wPu4Ob13meZ8mcxsSpeQq5qI4kYoXff7XPDD0UvLV7SLdqvB4XxfO2rzompaj8VU6pK28HAc-LrsxCTP6zCnWPUaYOjog1Wjx21Epaon3nw/s1600/result.png" height="167" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<ul>
<li>choose "Download data" to get a csv file with the extracted tables. This
file can be open with MS Excel or any other application which can read
the csv format for further processing.</li>
</ul>
The results are very useful and it works for those kind of data as well:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSi9g6WeAqNheGG77NqhrHqUg6FHTC36WYszAuGsbIBj26ND4remdlQVkvGSlfbH829bV2MqSaYuJP_Ln6dFA5HbWvOuWUZubMMUYVTNgIyel_YD7sp3_99brxDwzajWAJAsy0Ug/s1600/labor+force.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSi9g6WeAqNheGG77NqhrHqUg6FHTC36WYszAuGsbIBj26ND4remdlQVkvGSlfbH829bV2MqSaYuJP_Ln6dFA5HbWvOuWUZubMMUYVTNgIyel_YD7sp3_99brxDwzajWAJAsy0Ug/s1600/labor+force.png" height="210" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnQAf0fJf8ZTqYoDfiB2n9CO52GsJiBmQLA7PcjdFooZ_-XQiboSV5bShvJa1jru7ZA4nR2Jg4CyjZn9rHhxmZBCH53AjszJncVMY46u5iWNEhOZnLyG1o3_UFmmhyX8U1mn3u_w/s1600/sample-2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnQAf0fJf8ZTqYoDfiB2n9CO52GsJiBmQLA7PcjdFooZ_-XQiboSV5bShvJa1jru7ZA4nR2Jg4CyjZn9rHhxmZBCH53AjszJncVMY46u5iWNEhOZnLyG1o3_UFmmhyX8U1mn3u_w/s1600/sample-2.png" height="169" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />Won't work with data provided as graphic as part of the PDF this is an topic for another story.<br />
<ul>
</ul>
Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com0tag:blogger.com,1999:blog-28053343.post-50220143707954093382013-01-06T23:26:00.000+01:002013-01-06T23:26:07.327+01:00HTML5 to PDF to HTML5PDF is still the most used format to distribute electronic documents - especially for "paper based" workflows. There are obvious reasons still using PDF even if evolving technologies brought alternatives to the table.<br />
<br />
On the other hand HTML and related technologies (namely CSS and JavaScript) has made a major step forward to produce enterprise looking documents with additional value a PDF cannot provide.<br />
<br />
I do not want to compare the pro and cons - just want to mention well suited tools to convert from one format into the other.<br />
<br />
<h3>
HTML5 to PDF</h3>
Whenever you have to create "paper based" workflows based on data you already have a HTML (5) version from the best tool I'm aware of is <a href="http://www.princexml.com/">PrinceXML</a>. Styling is done using CSS and JavaScript - no additional technology you need to learn.<br />
<br />
This technology is not able to fully replace advanced rendering technologies like XSL-FO (and corresponding commercial layout engines) or even more advanced ones based on vendor specific layout definitions.<br />
But there are many use-cases where you just have the HTML you have to distribute as PDF (e.g. confirmation of orders, archiving of a business transaction, etc.) this product might enable this for a reasonable price.<br />
<br />
<b>Note</b>: there are many commercial and open source alternatives out there for this approach - non of them are as robust as the mentioned solution based on my experience.<br />
<br />
<h3>
PDF to HTML5</h3>
You already have PDF created within your workflow and need HTML5 to support more advanced integration in your content distribution you can tryout <a href="http://www.idrsolutions.com/html_products/">PDF2HTML5 Converter</a>.<br />
<br />
There are different options you can choose from how the content is transformed (one of them is creating SVG instead of HTML5 but this is a different story). The most useful conversion mode if the content should be further integrated creates:<br />
<ul>
<li>one HTML file per page </li>
<li>all distinct block of content is stored within a div tag</li>
<li>layout is applied using CSS</li>
<li>some JavaScript</li>
</ul>
<b>Note</b>: The created HTML5 does not result in a responsive design (using absolute positioning and non semantic markup) - but that is more or less by design and cannot be solved in a general purpose implementation.<br />
<br />
Both tools are commercial but in case you have a good use-case for one of the two mentioned conversion the price is reasonable. Try out first - both tools provide ways to easy try out the results.<br />
<br />
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com2tag:blogger.com,1999:blog-28053343.post-6003579778570107552013-01-06T00:55:00.000+01:002013-01-06T00:58:29.538+01:00Regular Expressions: Still Two Problems?<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="margin-left: 1em; margin-right: 1em;">
</div>
<br />
<br />
You sometimes stumble upon regular expressions which are difficult to understand, e.g. what exactly means:<span style="font-family: "Courier New",Courier,monospace;"></span><br />
<blockquote class="tr_bq">
<span style="font-family: "Courier New",Courier,monospace;">?:(?!(foo1|foo2)).)*</span></blockquote>
The most common problem is to get the structure out of deeply nested regular expressions. <br />
Using the online service <a href="http://www.regexper.com/">http://www.regexper.com/</a> makes it much easier to see the structure: <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="data:image/png;base64,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" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" border="0" src="data:image/png;base64,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" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Now you see that this regular expression matches all content beside "foo1" or "foo2" using the pattern explained here: <a href="http://trent-intovalue.blogspot.de/2010/01/negating-regexes.html">http://trent-intovalue.blogspot.de/2010/01/negating-regexes.html</a><br />
<br />
Using the example taken from<a class="title-link" href="http://www.codinghorror.com/blog/2008/06/regular-expressions-now-you-have-two-problems.html"> Regular Expressions: Now You Have Two Problems:</a><br />
<br />
<blockquote class="tr_bq">
<span style="font-family: "Courier New",Courier,monospace;"><\/?p>|<br\s?\/?>|<\/?b>|<\/?strong>|<\/?i>|<\/?em>| <\/?s>|<\/?strike>|<\/?blockquote>|<\/?sub>|<\/?super>| <\/?h(1|2|3)>|<\/?pre>|<hr\s?\/?>|<\/?code>|<\/?ul>| <\/?ol>|<\/?li>|<\/a>|<a[^>]+>|<img[^>]+\/?> </span></blockquote>
<br />
Try it out - you probably see what the author try to achieve.<br />
<b>Note</b>: you have to use regular expressions in JavaScript style to use the service.<br />
<br />Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com0tag:blogger.com,1999:blog-28053343.post-17605323895464208942012-11-01T23:17:00.000+01:002012-11-01T23:18:13.910+01:00interactive timelinesYou have to create, view and provide interactive timelines for your articles you might try out <a href="http://whenintime.com/">http://whenintime.com/</a>.<br />
<br />
Easy to use and customize with only a few bugs all of them can be easily worked around.<br />
And last but not least the service is free of charge right now... but you should not contribute confidential content.Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com0tag:blogger.com,1999:blog-28053343.post-32235674258116826712012-11-01T21:27:00.001+01:002012-11-01T21:27:56.976+01:00Legacy leads to complexity? Windows 8!If you ever tried to understand why the success of the past introduce complexity for the future you should read "<a href="http://arstechnica.com/features/2012/10/windows-8-and-winrt-everything-old-is-new-again/">Turning to the past to power Windows' future: An in-depth look at WinRT</a>".<br />
<br />
A massive summary of what WinRT (Windows 8) is and how the bunch of existing technologies fits together creating their next big thing. Read the complete article with a bit IT experience background gives you a very good overview of what they build.<br />
<br />
Do you really think that such a complex beast will lead to more consistent and improved user experience "on any device"?Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com0tag:blogger.com,1999:blog-28053343.post-7600759637769328222012-11-01T21:05:00.000+01:002012-11-01T21:05:15.594+01:00WebPlatform.orgThe site "<a href="http://webplatform.org/">WebPlatform</a><a href="http://draft.blogger.com/blogger.g?blogID=28053343">.org</a>" was introduced to collect best practices for new web technologies like HTML5. Many major vendors are contribute to the platform, e.g. W3C, Google, Microsoft etc.<br />
<br />
Worth to take a look at.<br />
<br />
To understand the state of the technologies so far - the site is provided as HTML5 - but try to play the <a href="http://www.youtube.com/embed/Ug6XAw6hzaw?autoplay=1">intro</a> on the homepage...still Flash on FF16 (yes I know it is simple a YouTube hosted video).<br />
<br />
Time will change...Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com0tag:blogger.com,1999:blog-28053343.post-41840923214272944042012-11-01T20:48:00.002+01:002012-11-01T20:48:23.116+01:00Decision oriented user assistanceIf you think about business applications (e.g. ERP, PLM, CMS) you get aware that the amount of functions in all kind of application increasing in each new version and most of those application are feature complete in terms of critical functions which are relevant for daily operations.<br />
<br />
Does this means that the users are happy with the applications they have to work with? What is the problem of the most application which are available today? <a href="http://pespmc1.vub.ac.be/COMPLEXI.html" target="_blank">Complexity </a>is the major pain of todays software applications.<br />
<br />
All major IT trends during the last couple of years leads to additional functions, additional user interfaces and at the end to complex applications.<br />
<h3>
Examples </h3>
<ol>
<li><b>IT trend "mobile devices"</b><br />The trend to access services using mobile devices leads to additional UI which make an application accessible from a mobile device. Vendors wants to make their application mobile ready and therefore provide existing functions or a selected subset of the functions to mobile devices. In the best case they optimized the application behavior to the look and feel of the specific mobile devices.</li>
<li><b>IT trend "social media"</b><br />The trend to socialize daily operation leads to new functions as well. You can now comment the work of your colleague right from within your application - great. In the best case you can collaborate on the same peace of object within your team.</li>
</ol>
<h3>
Paradigm "Automation" </h3>
But all kind of extensions are focused around one single paradigm. "Automation" of tasks which substitute manual operation. This approach is the major topic for business oriented application since at least 20 years until now. You can calculate return on invest based on this approach without too much effort and thinking.<br />
On the other hand most of the applications with adequate market penetration already implemented the tasks with measurable value otherwise they didn't win any software selection process.<br />
<br />
So far so good. But what should happen next. Does the next two functions really provide enough return on invest to take the effort to upgrade the application? What might be a structure improvement and unique buying point for a business application in the future?<br />
<h3>
Paradigm "Decision"</h3>
Automation is all about efficiency. But at the end of the day each business process or each operational step results contains at least one valuable decision which drives the success of the process output and in many cases the value of result now and in the future.<br />
<br />
Making the right decision is more related to ensure the effectivity of the process output without loosing efficiency.<br />
<h3>
How-To?</h3>
To setup an decision oriented application you need two basic principles:<br />
<ol>
<li>The application must know the business context of the user who operations within the application. </li>
<li>The application must reuse the knowledge of already realized processes</li>
</ol>
<h3>
Knowing the business context </h3>
This means the application is driven by the business process (the relevant subset which is in the scope of the application). In the most of todays business application the process simple fulfills the job to automate certain tasks and notify different users on certain events (based on states of a resources and state transitions). But the real process is not in scope of the application.<br />
<br />
The IT Trend <a href="http://en.wikipedia.org/wiki/Business_process_management">BPM</a> has found his way into many products and projects up to now. Even some business application using a BPM approach and infrastructure to implement workflows.<br />
<br />
But there is no application out there which core is based on BPM. This mean that each operation takes place as part of an underlying business process, each function is more or less just a decision of the user how to proceed in the process and each automation is just a replacement of a human task.<br />
<br />
Creating such an application means, you have to provide:<br />
<ul>
<li>A collection of automated tasks</li>
<li>A collection of human tasks to request human input and choices. </li>
<li>Triggers for a user or software to make a decision for the next step (e.g. select "edit content", "send to review", etc.)</li>
<li>A backend that lets you model the process using the above building blocks and a back end which let you create, run and complete those processes </li>
<li>A UI makes all of the items above visible to the user</li>
</ul>
Now all functions of the application a invoked in a well know context. So far so good. Sounds like a traditional BPM project, right? And yes there are already <a href="http://en.wikipedia.org/wiki/Line_of_business">LOB</a> projects out there following this approach.<br />
<h3>
Reusing the business context</h3>
What is the next big thing? You are able to store all decisions of your users in the context of your persistent process and use the results to improve the decisions of other users.<br />
<br />
In each process different users can learn from the experience of others or individual users can be guided to avoid making a wrong decision again - or reusing best practices from the past. To achieve this goal you have to use the collected information from previous processes and transform them into valuable guidelines for your users:<br />
<ul>
<li>show them what other users did when they are in the same context as the user currently have to do an operation</li>
<li>prevent them from doing an operation which leads to errors later on in the following steps of the process based on the experience of previous processes</li>
<li>show them additional information other users searched for in the same situation as the current user</li>
<li>let them add guidelines for later steps in the same process</li>
<li>let them attach additional information they always need if they are in the same context again (e.g. reference material for an operation, etc.)</li>
<li>etc.</li>
</ul>
Also very obvious and easy things can be done:<br />
<ul>
<li>Only provide functions which makes sense in the context of the process (real context aware function) to reduce the amount of choices a individual user can choose from</li>
<li>Identify functions no one use in a particular context to simple remove them or add hints / best practices for the users which makes this function usable</li>
<li>Identify best and bad practices from what the users did and improve the process (the application) based on real world usage.</li>
<li>etc.</li>
</ul>
With the availability of tools in the area of "Big Data" you might think of enhanced KPIs like<br />
<ul>
<li> identify patterns in the process leads to results not valuable to your business through querying the process, corresponding data and decisions and the results according of the question you have to answer.</li>
<li>identify related choices in the process and the corresponding information as a baseline for process improvement</li>
<li>etc.</li>
</ul>
<h3>
Results</h3>
This kind of approach leads to<br />
<ul>
<li>structural usability<br />The application is possible to guide the users as much as possible and provide as much information as possible for its next relevant decision (operation)</li>
<li>reduce complexity<br />Only provide relevant information, functions and user information which leads to reduced complexity for the user of the application.</li>
<li>social experience (common improvement)<br />The application can share information, discussion and best practices in the context those information is relevant for.</li>
<li>improved effectivity<br />Best practices can be established for all users based on real world experience - not only on theoretical thoughts.</li>
<li>improved efficiency<br />Critical operations can be identified and additional automation can be added based on real world business value.</li>
</ul>
<h3>
Too complicated and complex?</h3>
<br />
No that is not the case. Using todays IT tools available on the marked place makes this kind of application easy to implement (even the core subset of the mentioned approach as baseline for future extension).<br />
BUT it is not possible to simple extend existing products with this kind of approach without re-implementing the core part of the application from scratch.<br />
<br />
This means existing and strong vendors might struggle to do this - but in case you thinking about creating a new line of business application think about using a different approach than your competitors...<br />
<br />
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com0tag:blogger.com,1999:blog-28053343.post-21569653408202032662012-10-01T22:48:00.000+02:002012-10-01T22:49:52.551+02:00Stumbled upon: Write the Freaking ManualI stumbled upon the thread "<span id="title-38220005"><a href="http://developers.slashdot.org/story/12/09/30/2112230/wtfm-write-the-freaking-manual">WTFM: Write the Freaking Manual</a>" triggered by the following blog post <a href="http://www.floopsy.com/post/32453280184/w-t-f-m-write-the-freaking-manual">http://www.floopsy.com/post/32453280184/w-t-f-m-write-the-freaking-manual</a>.</span><br />
<span id="title-38220005"><br /></span>
<span id="title-38220005">I would recommend to follow the thread (which already contains more than 200 thoughts) in case you want to understand:</span><br />
<ul>
<li><span id="title-38220005">the different views of the developers</span></li>
<li><span id="title-38220005">the different views of users of a certain software</span></li>
<li><span id="title-38220005">the different views of tech writers</span></li>
</ul>
I also had discussions with companies creating software products what needs to be documented, is it possible to create a software product which doesn't required additional documentation because of "intuitive usability" etc.<br />
<br />
The answer is easy and difficult at the same time:<br />
<h4>
You have to deliver relevant information for your audience.</h4>
This means you have to understand:<br />
<ul>
<li>What is your audience?<br />and</li>
<li>What is relevant?</li>
</ul>
And always keep in mind that "Your user does not have the same context compared to you". <br />
<h3>
<b>Example</b></h3>
If you develop a software infrastructure should support other developers to do their job faster you should deliver:<br />
<ul>
<li><b>orientation for your user</b> (which tasks does the library support)<br /><br />the concept of all major parts of your framework from top to down<br />=> basic overview of all implemented concepts and than describe each concept <br /><br />good example is provided by IBM for their ICU library (http://userguide.icu-project.org/)<br />This library isn't very trivial but you have well described concepts for all components of the library.</li>
<li><b>how-to setup</b><br />provide how-to to setup the software for initial use</li>
<li><b>how-to use</b><br />provide as many code samples / demos / real working code for the operation of your user<br />e.g. by providing your well-documented unit-test library. </li>
</ul>
<h3>
How can you identify which information your audience needs? </h3>
You have to understand their daily operation with your software and all questions which cannot be answered by the software itself without additional information in a short amount of time.<br />
<br />
If you identified those areas well the resulting documentation will add value to the software and will increase the audience using your software.<br />
<br />Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com0tag:blogger.com,1999:blog-28053343.post-25544298779671268152012-09-14T21:33:00.002+02:002012-09-16T19:56:13.068+02:00HTML5 for any device? yet?Mark Zuckerberg made an widely recognized statement on the usage of HTML5 for mobile devices:<br />
<br />
<blockquote class="tr_bq">
When I’m introspective about the last few years I think the biggest
mistake that we made, as a company, is betting too much on HTML5 as
opposed to native… because it just wasn’t there. And it’s not that HTML5
is bad. I’m actually, on long-term, really excited about it. One of the
things that’s interesting is we actually have more people on a daily
basis using mobile Web Facebook than we have using our iOS or Android
apps combined. So mobile Web is a big thing for us.</blockquote>
source: <a href="http://blog.tobie.me/post/31366970040/when-im-introspective-about-the-last-few-years-i" target="_blank">http://blog.tobie.me/post/31366970040/when-im-introspective-about-the-last-few-years-i </a><br />
A more technical detailed feedback is provided here: <a href="http://lists.w3.org/Archives/Public/public-coremob/2012Sep/0021.html">http://lists.w3.org/Archives/Public/public-coremob/2012Sep/0021.html</a><br />
<br />
This means two major things:<br />
<ul>
<li>HTML5 is not ready yet (that is no real news) for a simple replacement of native apps</li>
<li>HTML5 is the major enabling technology to deploy feature rich content to the mobile web.</li>
</ul>
If you ever tried to create a productive web application using the HTML5 stack which should run on "all" common mobile devices you are aware that this is a pretty tough job and still requires to limit the functions to a small subset of functionality and as a result UI experience. In case you have to provide a feature rich application like Facebook you obviously have to workaround hundreds of issues and the result is still not sufficient for an individual user on one device.<br />
<br />
A very helpful overview of the state of the different mobile browsers Facebook introduced <a href="http://www.rng.io/" target="_blank">ringmark</a> a test suite (including results for most common mobile browsers) which shows which relevant API function is implemented on a particular mobile browser prioritized by different levels of importance.<br />
<br />
The current state of the standards is published by W3C on a regular basis, latest release<a href="http://www.w3.org/Mobile/mobile-web-app-state/" target="_blank"> http://www.w3.org/Mobile/mobile-web-app-state/</a><br />
<br />
What you see in the test results is that HTML5 can be used in case:<br />
you want to deploy content driven application focus on online access and integration.<br />
<br />
In any case you just have to start small, test and verify the behavior for your defined target audience. The HTML5 path is definitely the right path to follow but still requires lot of work from either the vendors and the standardization groups.<br />
<br />Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com0tag:blogger.com,1999:blog-28053343.post-8727381819854558632012-09-13T23:38:00.000+02:002012-09-13T23:38:28.529+02:00First web page of the INTERNETI'm not 100% sure but according to this <a href="http://info.cern.ch/" target="_blank">article</a> the first web page of the INTERNET was published by the W3C and is still available here <a href="http://www.w3.org/History/19921103-hypertext/hypertext/WWW/TheProject.html">http://www.w3.org/History/19921103-hypertext/hypertext/WWW/TheProject.html</a>.<br />
<br />
All links still OK.<br />
<br />
In case you create a web page today with this amount of links and come back in 10 years - how many links still pointing to the correct content? Even if you only have links to self owned content. Do you think you are able to reproduce your targets in ten years?<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com0tag:blogger.com,1999:blog-28053343.post-59392807516892833942012-09-13T23:22:00.002+02:002012-09-13T23:22:45.181+02:00Compare PDF in automated test scenariosDo you ever had to test a process which creates a PDF based on well defined test data? You want to ensure that the result is equal or confirms to an given acceptance criteria which you can describe by an existing PDF? You want to automate this operation?<br />
<br />
In this case you looking for a tool which compares two PDF files and at least provide you the answer to the question "are those two files the same?". Based on your use-case this means:<br />
<ul>
<li>the contained text is the same on the same page of the PDF</li>
<li>the contained appearance (layout) is the same</li>
</ul>
In addition you need an command line interface to use the function within automated test procedure.<br />
<br />
As you might know Adobe Acrobat provides a compare function which is very sufficient (see <a href="http://tv.adobe.com/watch/acrobat-tips-and-tricks/comparing-two-pdf-documents/">http://tv.adobe.com/watch/acrobat-tips-and-tricks/comparing-two-pdf-documents/</a>) but requires a commercial license and to integrate this function in your automated test environment isn't simple (from technical and commercial point of view).<br />
<br />
Fortunately the tool <a href="http://www.qtrac.eu/comparepdf.html" target="_blank">comparepdf</a> is available as free software. It is very simple to install, integrate and use. It provides different compare modes for the scenarios mentioned above. In addition a rough overview of the kind of difference is provided and can be used to integrate in automated test reports.<br />
<br />
Once you have identified a difference you might be interested what and where the difference appearce. Therefore the GUI based <a href="http://www.qtrac.eu/diffpdf.html" target="_blank">DiffPDF</a> tool can be used free of charge. Not as powerful as the Adobe Acrobat compare function but in many scenarios it helps to see whats going wrong without the need to buy a Adobe Acrobat license.Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com1tag:blogger.com,1999:blog-28053343.post-28687041431288843032012-05-06T23:34:00.002+02:002012-05-07T00:13:43.159+02:00Not Open Source but Free CCMS (2)The already mentioned XML based CCMS "<a href="http://sourceforge.net/projects/calenco/" target="_blank">Calenco XML CMS</a>" still available (see also my post "<a href="http://trent-intovalue.blogspot.de/2010/08/open-source-ccms.html" target="_blank">Open Source CCMS</a>").<br />
<br />
There is one more system which lately offers an already existing DITA based CCMS without any license cost: "<a href="http://www.siberlogic.com/products/keyproducts/CMS_DITA_Edition.html" target="_blank">SiberSafe DITA CMS</a>". Read the <a href="http://www.siberlogic.com/listboxes_data/documents/access_control.jsp?doc=/documents/datasheets/EULA_SiberSafe_DITA_CMS.zip&url=/products/keyproducts/CMS_DITA_Edition.html" target="_blank">EULA</a> carefully but in case you need something to play with....<br />
<br />
Both are no more open source. Their goal is not to get an open and shared development. They simple heading for lowering the barrier for customer entry. <br />
<br />
What you see is that both cases are the company driving the implementation want to get in tough with you and both companies offers additional features with dedicated license costs. <br />
<br />
I personal expect more product in this domain following the same approach. Why?<br />
<br />
The specific domain of "technical documentation" is pretty small and there are many different and small companies out there which providing specific products to support this domain.<br />
<br />
Even in huge installations the amount of licenses required to support the users dealing with technical information isn't very huge - this means the opportunity to sell a huge amount of licenses is limited. In addition most of the available tools are similar to each other - with individual advantages but with no structural differences.<br />
This means this business model does not really scale and the amount required to sale the license is high.<br />
<br />
On the other hand having a tool does not improves your information process and therefore does not add any business value to your organization. At the best case it supports your process with automated tasks. But first of all you need a optimized methods and processes (information process) at all before any tool can assist you as best as possible.<br />
<br />
This means - the future is not to create and develop products looks like the today's CCMS system available on the market. The future is to create either information process driven productions where technical information is just one use-case OR focus on integration services to get the value out of existing information.<br />
<br />
What are the limitations of todays CCMS system. And how more future oriented designs will look like? More to come in future blog posts....Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com1tag:blogger.com,1999:blog-28053343.post-45719252767163880222012-05-06T22:30:00.003+02:002012-05-06T22:30:43.997+02:00Search and Replace on multiple filesSearch & Replace is a common task in data processing environments. You cannot avoid to build process your data to replace or add a word, syntax or even multiple lines of text in several different resources.<br />
<br />
If the task can be fully automated, means there is a unique algorithm to transform a resource A to A' based on the content of A than you will look for available methods and tools supporting you to do this kind of operation.<br />
<br />
<b>Methods</b><br />
<br />
<a href="http://en.wikipedia.org/wiki/Regular_expression" target="_blank">Regular expressions</a> are very powerful rules to express not only finding common pattern in text based resources but also a good foundation to replace or extend existing content.<br />
Compared to simple phrase based pattern most imaginable rules can be expressed and used as a source for the required transformation. <br />
But regular expressions come with high cost of complexity. It is very likely to defines rules which results in "false positives", means matches that you didn't want to match.<br />
<br />
<b>Tools</b><br />
<br />
Doing Search & Replace in the file system on multiple resources (files) is easy for IT people using linux tools like grep, ....<br />
On Windows you also can install those tools and make them a powerful foundation for those kind of operations (see <a href="http://gnuwin32.sourceforge.net/packages/grep.htm">http://gnuwin32.sourceforge.net/packages/grep.htm</a>).<br />
<br />
<b>TextCrawler</b><br />
<br />
But not all people like to become an IT expert for simple replacing the term "foo" with "delicious" . On Windows you can use <a href="http://www.digitalvolcano.co.uk/content/textcrawler/manual" target="_blank">TextCrawler </a>for this. One of the best UI based tools I'm aware of.<br />
<br />
It provides <br />
<ul>
<li>simple phrase based operation "Replace phrase A with B" on multiplier files</li>
<li>more complex regular expression based operation </li>
<li>and in addition a fuzzy search operation for more advanced search operations</li>
</ul>
It also supports the use of Unicode characters to search and replace and the processing of files encoded in Unicode (utf-8, utf-16).<br />
<br />
To avoid false positives you can<br />
<ul>
<li>preview the hits before actual performing the replace operation</li>
<li>use a dedicated regular expression tester to see what exactly match and what will replace</li>
</ul>
Search and Replace is something you have to consider harmful but in case you have to do it on a Windows Desktop using this tool is something I can recommend.<br />Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com0tag:blogger.com,1999:blog-28053343.post-34061645933675305152012-05-06T21:57:00.002+02:002012-05-06T22:00:35.892+02:00Concurrency: low-level design still mattersTodays design very focused on application level design. Using optimized operation for a given software service.<br />
<br />
This means you try to create simple, atomic operations which can be called from your business process. Each service can be distributed and scale using mainstream deployment pattern.<br />
<br />
So far so good. What you might see once you do this. Running one thread on a single hardware gives you the predictable performance you have to achieve, running 8 concurrent threads each single operation takes a much higher execution time.<br />
<br />
You also seen this behavior in one of your applications? Than you probably faced with concurrency issues and once you eliminated all application related issues you get aware of that even today hardware related optimization is something you have to take care of. Really?<br />
<br />
I see and know some application in my daily work doesn't scale very well on a single hardware - they are very basic in terms of application related algorithm but they using algorithm patterns causing memory contention....<br />
<br />
Thus you still have to understand the low level architecture and ways to optimize the basic algorithm in your code.<br />
<br />
<b>Lock-Free Algorithm</b> <br />
<br />
Have a look at "<a href="http://nosql.mypopescu.com/post/22315383790/lock-free-algorithms-how-intel-x86-64-processors-and" target="_blank">Lock-Free Algorithm</a>" to get a very good overview on how such things still affect concurrency behavior of your application. You should also read "<a href="http://bad-concurrency.blogspot.de/2012_02_01_archive.html" target="_blank">Beginners guide-concurrency</a>" from the Trisha Gee and Michael Barker.<br />
<br />
You also gets hints and estimation how virtualization might affect you performance.<br />
<br />
<b>Summary</b><br />
<br />
Choosing the right hardware still matters in operation scenarios where concurrency is used to scale your application AND scalability is a core success factor of the application.Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com0tag:blogger.com,1999:blog-28053343.post-69478721615703643882012-04-23T23:06:00.000+02:002012-04-23T23:06:07.115+02:00Open Source: data management and transformation librarySumbled upon the following post <a href="http://flowingdata.com/2012/04/23/miso-an-open-source-toolkit-for-data-visualisation/">http://flowingdata.com/2012/04/23/miso-an-open-source-toolkit-for-data-visualisation/</a> <br />
<br />
Relational data (or data can be stored in a table or matrix) is "old style" but still an an common use-case in todays web applications. <br />
<br />
A new JavaScript library called "<a href="http://misoproject.com/" target="_blank">Miso Project</a>" starts to implement components that simplifies the management and transformation of this kind of data (and will be extended with visualization use-case). This means that you are easy manage relational data on client side which can be very handy in certain use-cases. So its like a client side database with corresponding query syntax.<br />
<br />
<blockquote class="tr_bq">
One of the most common patterns we've found while building
JavaScript-based interactive content is the need to handle a variety of
data sources such as JSON files, CSVs, remote APIs and Google
Spreadsheets. Dataset simplifies this part of the process by providing a
set of powerful tools to import those sources and work with the data.
Once data is in a Dataset, it becomes simple to select, group, and
calculate properties of, the data. Additionally, Dataset makes it easy
to work with real-time and changing data, which pose one of the more
complex challenges to data visualization work.</blockquote>
<br />
In case you have to develop a e.g. simple, standalone HTML application without a permanent server backend this library will help you without adding too much complexity in your (implementation) infrastructure.<br />Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com1tag:blogger.com,1999:blog-28053343.post-43678479980401761752012-04-08T14:20:00.003+02:002012-04-08T14:28:52.050+02:00QR Codes in your documentsQR codes are one method to ease the information exchange between classical medias and mobile devices (common usage direct link to the corresponding web page in paper based catalogs, manuals, ....).<br />
<br />
But how to create those QR codes without too much complexity?<br />
<br />
<a href="https://developers.google.com/chart/" target="_blank">Google Chart API</a> provides:<br />
<ul>
<li><a href="https://developers.google.com/chart/image/docs/chart_wizard" target="_blank">chart wizard</a> to create QR codes and corresponding styling</li>
<li><a href="https://google-developers.appspot.com/chart/infographics/" target="_blank">infographics API</a> to create static images based on posted chart definition (URLs)</li>
</ul>
viola. You now have a easy to use backend for creation of QR codes using e.g XSL-T.<br />
<br />
The following code is taken from "QR Codes in DTIA Output" which shows how to create QR codes for PDF output of the <a href="http://dita-ot.sourceforge.net/" target="_blank">DITA-OT</a> using XSL-FO:<br />
<br />
<blockquote class="tr_bq">
<pre><!-- Insert QR code -->
<xsl:template match="*[contains(@class,' topic/xref ')]
[contains(@outputclass, 'qrcode')]">
<fo:external-graphic>
<xsl:attribute name="src"><xsl:value-of select="concat('https://chart.
googleapis.com/chart?cht=qr&amp;chs=100x100&amp;chl=', .)"/>
</xsl:attribute>
</fo:external-graphic>
</xsl:template></pre>
</blockquote>
see: <a href="http://ditanauts.org/2012/03/14/qr-codes-in-dita-ouput/">http://ditanauts.org/2012/03/14/qr-codes-in-dita-ouput/</a><br />
<br />
Sample (code: <img src="http://chart.apis.google.com/chart?chs=200x100&cht=qr&chl=http%3A%2F%2Ftrent-intovalue.blogspot.de%2F2006%2F05%2Ftrent-definition.html" width="200" height="100" alt="" />): <br />
<br />
<img alt="QR Code Sample" height="100" src="http://chart.apis.google.com/chart?chs=200x100&cht=qr&chl=http%3A%2F%2Ftrent-intovalue.blogspot.de%2F2006%2F05%2Ftrent-definition.html" width="200" />
<span style="background-color: #fff4c2; color: black; display: inline ! important; float: none; font-family: monospace; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"></span><br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com0tag:blogger.com,1999:blog-28053343.post-25834737358766857822012-04-08T10:25:00.000+02:002012-04-08T10:25:04.522+02:00how to preserve the value of big data over time....Today the buzzword "Big data" getting more and more popular. Nice label for a common statement "the amount of data and the valuable usage getting important". <br />
<br />
There are millions of information and products out there which promise to help you storing and analyzing those data. But one of the major issues with data is not current usage it is the maintenance of the information over time.<br />
<br />
The "Web of Data" is one common example. It is the biggest data store we currently faced with. Pretty simple to access and analyze. So far so good. But there is one maintenance of this data (required?). Collect 100 links to resources on the web today. than 24 month later try access them...how many of those links still work, and if they work the resulting information still using the same semantic as it was once you build up the link?<br />
<br />
The "Web of Data" currently decided not to maintain data just provide them now, enrich them and just replace them with different semantic...The Web Wayback machine (<a href="http://archive.org/web/web.php">http://archive.org/web/web.php</a>) is an approach to help individual users to keep their individual value of data for some scenarios.<br />
<br />
Now think about your cooperate information you collect right now. The speed and adaption rate of this data will increase and new demands to enrich the data will appear. Do you ever thought about how you ensure that all that data can be adapt to new needs? Based on my personal experience at least more than 60 % of the over all project costs are related to data migration in IT project dealing with information in a certain domain of the organization. Those costs are related to adapting data to the new tools which maintains the data, converting data between different data models and formats and ensure the quality of the data and their usage in existing business processes.<br />
<br />
What does this mean for each IT project dealing with data?<br />
<br />
<ul>
<li>Initial load is important<br />You always have to define how to get the data you need for the initial start (and not only during the regular operation of your business process) and how to verify that this data is valid for your future need.</li>
<li>Expandability of your data might be important<br />You can use static data models and tools (e.g. classical relational data models) compared to more flexible approaches like typed graphs of data where content using different models can simpler coexist.</li>
<li>Adaptability of your IT systems might be important<br />What happens to your existing data once the model will be extended, changed. Do not only take care of the data itself also take into account the relation to the data. Today you only access a specific level of your data few years later some use-case requires you to access the individual step or introduce an additional level not yet exists.</li>
<li>Ensure the maintenance of your data.<br />Do not "use" any data which you do not have any value in your primary business process. The usage of information requires the correctness of data. Your data will never be correct if the process creating this data does not have any value out of the data itself. This means that the data will be simple partially incorrect, incomplete.</li>
</ul>
It is and will be the most expensive IT task in your organization "how to preserve the value of big data over time...."<br />
<br />
<ul>
</ul>Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com0tag:blogger.com,1999:blog-28053343.post-29043578352819939782011-11-07T21:38:00.001+01:002011-11-07T21:38:48.822+01:00Data-Driven DocumentsData-Driven Documents. What's that? <br />
<blockquote class="tr_bq">
<a href="http://mbostock.github.com/d3/"><strong>D3.js</strong></a> is a small, <a href="https://github.com/mbostock/d3/raw/master/LICENSE">free</a> JavaScript library for manipulating documents based on data.</blockquote>
You have a data source requires visualization and a chart library is not enough for that purpose. This little library helps you to develop the visualization using the DOM model and data driven transformation.<br />
<br />
A good example of whats can be done is available here: <a href="http://www.visualizing.org/full-screen/16266">http://www.visualizing.org/full-screen/16266</a><br />Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com0tag:blogger.com,1999:blog-28053343.post-69524986793021340012011-10-24T22:55:00.001+02:002011-10-24T22:57:30.091+02:00Reactive documentsStumbled upon a JavaScript library to simplify the creation of reactive documents, called <a href="http://worrydream.com/Tangle/">Tangle</a>.<br />
<br />
Whenever you have to explain scenarios / alternatives in a sensible manner a reactive document is one possible way to do so. Changing a parameter and directly see the impact for all dependent parts of the information / document is a very sufficient way to teach certain problems / solution scenarios.<br />
<br />
This library makes the creation very simple (from a technical point of view) and you are able to concentrate on the content scenario which is of course the harder part.<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com0tag:blogger.com,1999:blog-28053343.post-31702934545872626062011-10-24T22:33:00.001+02:002011-10-24T22:33:40.948+02:00XQuery - rare used but ramp-up gets easierA very nice overview of what XQuery is, what are the relation to other XML based standards and why it is still very rare used is summarized here <a href="http://grtjn.blogspot.com/2011/10/xquery-novelties-revisited.html">http://grtjn.blogspot.com/2011/10/xquery-novelties-revisited.html</a>.<br />
<br />
Once you want to dive into XQuery a bit deeper, get a feeling if the approach is sufficient for your use case you should try out <a href="http://basex.org/">BaseX</a>. A XML database, open source. The main advantage for tryouts which are not available on alternative solution is a lightweight but very useful UI fronted for the content stored in the database. <br />
<br />
Adding XML documents, try out queries and see how / what they match and last but not least a noticeable view of how information in a XML store looks like (from a conceptional point of view) comes aligned with easy install and ramp-up costs.<br />
<br />
Alternatives (commercial and open source) are collected here: <a href="http://trent-intovalue.blogspot.com/2010/08/xquery-design-patterns.html">http://trent-intovalue.blogspot.com/2010/08/xquery-design-patterns.html</a>Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com0tag:blogger.com,1999:blog-28053343.post-85897462936148988722011-09-13T23:34:00.001+02:002011-09-13T23:36:37.756+02:00Valuable InformationToday I stumbled upon the following twitter post:<br />
<br />
<blockquote>
Every human intervention in a business process introduces a 4% chance of error. - B. Beims </blockquote>
<br />
Sounds interesting and relevant in the context I'm working in. Than I tried to verify the source and basis for this statement.<br />
<br />
<ul>
<li>Using google to search for the statement</li>
<li>Using google to search for the author</li>
<li> Finding second / third source for this statement</li>
</ul>
To be honest I wasn't able to verify what I have to verify and therefore use any bit of this information. Therefore I take this statement as a trigger for this blog post - better than nothing.<br />
<br />
That is a example of todays most common topic today:<br />
<ul>
<li> more and more "characters" are accessable and flowing around the world, like "Chinese whispers" posted, re-posted, extended, ....</li>
<li>less and less of the accessible" information" (in terms of percent based on the complete available total amount of "information") is relevant or valid</li>
<li>Shorten / context less "information" does not lead to human usable information chain </li>
</ul>
That is just a fact and reality - everyone has to deal with. To improve your personal ability to make "characters" to "information" you still have to go the hard way:<br />
<br />
Don't use and post a information which is not verified by at least <br />
<ul>
<li>a second, independent source <br />or</li>
<li>personal verification<br /> or</li>
<li>background information which provides you with considerable background to trace the information </li>
</ul>
If you do not have time for this kind of verification - just leave the "characters" as they are and mark them as irrelevant for you. This should make your personal information chain much cleaner and helps you to divide relevant from irrelevant information.<br />
<br />
Don't forget: It is never cheap to gather valuable information. It was never and will never.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com0tag:blogger.com,1999:blog-28053343.post-44425866643761812002011-09-04T22:39:00.000+02:002011-09-04T22:39:41.386+02:00Kevin Slavin: How algorithms shape our world<object height="374" width="526">
<param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf">
</param>
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always"/>
<param name="wmode" value="transparent">
</param>
<param name="bgColor" value="#ffffff">
</param>
<param name="flashvars" value="vu=http://video.ted.com/talk/stream/2011G/Blank/KevinSlavin_2011G-320k.mp4&su=http://images.ted.com/images/ted/tedindex/embed-posters/KevinSlavin-2011G.embed_thumbnail.jpg&vw=512&vh=288&ap=0&ti=1194&lang=eng&introDuration=15330&adDuration=4000&postAdDuration=830&adKeys=talk=kevin_slavin_how_algorithms_shape_our_world;year=2011;theme=to_boldly_go;theme=a_taste_of_tedglobal_2011;theme=what_s_next_in_tech;theme=new_on_ted_com;event=TEDGlobal+2011;tag=Technology;tag=complexity;tag=computers;tag=social+change;&preAdTag=tconf.ted/embed;tile=1;sz=512x288;" />
<embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="526" height="374" allowFullScreen="true" allowScriptAccess="always" flashvars="vu=http://video.ted.com/talk/stream/2011G/Blank/KevinSlavin_2011G-320k.mp4&su=http://images.ted.com/images/ted/tedindex/embed-posters/KevinSlavin-2011G.embed_thumbnail.jpg&vw=512&vh=288&ap=0&ti=1194&lang=eng&introDuration=15330&adDuration=4000&postAdDuration=830&adKeys=talk=kevin_slavin_how_algorithms_shape_our_world;year=2011;theme=to_boldly_go;theme=a_taste_of_tedglobal_2011;theme=what_s_next_in_tech;theme=new_on_ted_com;event=TEDGlobal+2011;tag=Technology;tag=complexity;tag=computers;tag=social+change;&preAdTag=tconf.ted/embed;tile=1;sz=512x288;"></embed>
</object><br />
<br />
<a href="http://www.ted.com/talks/kevin_slavin_how_algorithms_shape_our_world.html">http://www.ted.com/talks/kevin_slavin_how_algorithms_shape_our_world.html</a><br />
<br />
Writing code in most cases does not mean that you can ever control the usage and implication of the results.....Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com0tag:blogger.com,1999:blog-28053343.post-80785999474269216032011-09-04T20:54:00.002+02:002012-09-14T21:27:13.085+02:00HTML5 and XML<a href="http://en.wikipedia.org/wiki/HTML5">HTML5</a> will be the main syntax for the Internet in the next few years and will replace the today most frequently used HTML 4.01. Main driver for this shift was Google and is now adapted by all major browser / OS vendors and organizations.<br />
<br />
The main advantage of HTML5 are the new amount of build in features which reflect most of the todays common requirements for web based applications.<br />
<br />
<br />
Why XHTML 1.0/1.1 failed so far? It mainly was much to strict for the web community - the web and also the world is a non perfect place and therefore HTML5 is much more suitable to fit into this world than the XML based approach of XHTML can provide.<br />
<br />
Does this mean XML for the web has loose and does not make sense at all. No there is still space for the XML based standards beside HTML5:<br />
<ul>
<li>XHTML5<br /><abbr>XML</abbr> serialization of <abbr>HTML</abbr> 5 with stricter parsing rules<br />mime-type: application/xhtml+xml</li>
<li>Polyglot XHTML (see <a href="http://dev.w3.org/html5/html-author/#polyglot-documents">http://dev.w3.org/html5/html-author/#polyglot-documents</a>)</li>
</ul>
Major advantage of using XML to express the content on the web is a much more easier way to integrate the resulting content into XML processing chains using regular XML transformation tool chains.<br />
<br />
<ul>
<li>Easier Reuse content for different channels using XSLT / XQuery</li>
<li>Retrieve content as XHTML and extract only dedicated parts (views) required for different use-case</li>
<li>Store and request the content using XQuery based infrastructure</li>
</ul>
The drawback is that today only the newest browser support the mime-type "application/xhtml" therefore for a while Polyglot XHTML might be a good opportunity to deliver the mass and keep processing use-cases doable.<br />
<br />
A good summary of Polyglot XHTML and related XML based alternatives for HTML5 can be found here: <a href="http://www.xmlplease.com/xhtml/xhtml5polyglot/">http://www.xmlplease.com/xhtml/xhtml5polyglot/</a>Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com4tag:blogger.com,1999:blog-28053343.post-65151468034594015742011-09-01T20:49:00.001+02:002011-09-04T23:02:00.795+02:00analyse and process DTDsWorking with DTD is still a common task for XML (/SGML) driven use-cases. Knowing this it is very amazing that there is no well know DTD visualization tool available supporting this task.<br />
<br />
The good old "Near&Far Designer" is gone many years ago and the source is probably lost in the space of Open Text (the company bought Microstar Software Ltd in 1999). This tool is still in use by many organization having to deal with SGML DTDs (e.g. in the military or aircraft industry).<br />
<br />
<b>DTD documentation</b><br />
<br />
<br />
There are a few open source scripts out there which converting a DTD into HTML pages for documentation purpose which are available free of charge:<br />
<ul>
<li>DTDDoc<br /><a href="http://dtddoc.sourceforge.net/">http://dtddoc.sourceforge.net/</a></li>
<li>LiveDTD<br /><a href="http://www.sagehill.net/livedtd/">http://www.sagehill.net/livedtd/</a></li>
</ul>
There is one tool out there supporting graphical visualization, documentation and a few function to report key function within the given DTD:<br />
<br />
TreeVision (<a href="http://www.ovidius.com/meta/download/treevision.html">http://www.ovidius.com/meta/download/treevision.html</a>) from German company Ovidius. The tool is available free of charge and provides a very sufficient way to analyze XML / SGML DTDs.<br />
<br />
<br />
<b>Convert to XML Schema alternatives</b><br />
<br />
<br />
If you have to process the content of a DTD for specific use-cases like analyzing the model based on custom specific rules the easiest way is to convert the DTD to RELAX NG (XML syntax) or W3C Schema language. Both are based on XML and therefore can be processed using regular XML based tools.<br />
<br />
The best tool to do support this is trang (<a href="http://www.thaiopensource.com/relaxng/trang.html">http://www.thaiopensource.com/relaxng/trang.html</a> source is hosted on <a href="http://code.google.com/p/jing-trang/">http://code.google.com/p/jing-trang/</a>) initially created by James Clark. Compared to commercial alternatives the result is very predictable and for many use cases as good as possible.<br />
<br />
DTDs will still exists for many years just because of the many legacy applications created around them. The amount of support is limited but still exists....<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/10596772335058180412noreply@blogger.com0