Published March 31st, 2008, updated April 9th, 2008.
What makes magazine readers cancel their subscriptions? This is an interesting question that gains in importance for magazine publishers and their service providers. Within a fully developed market, retaining customers is seen as a key to market dominance and long-lasting profits (Rowley and Dawes, 1999). To achieve this, it is important to understand the factors that lead to abating customer loyalty counter these factors.
From the figures of the advertising market, one finds that the German market spans a volume of 12 billion Euros per year (Rüdell, 2007). It is dominated by traditional media, whereof television, newspapers, magazines and journals are the most important players. About 25 percent of this market is assigned to popular magazines and professional journals. Nearly 6000 different titles have been published in 2004 with a steady upward tendency during the preceding decade (ibid).
However, this trend might be finished soon. As the magazine market is believed to be fully developed, rivalry among competitors emerges (Gassmann, 2006). This proposition is confirmed by the figures for the German advertising market. Where the number of published magazines increased by 20 percent within the last decade, the net advertising income had a peak in 2000 and then, fell down by 25 percent (Rüdell, 2007).
Besides this emerging rivalry, changes in European legislation additionally increase the pressure towards the industry. Whereas the national markets were protected by strong market entrance barriers in the past, the ongoing unification of European law might erode these barriers soon.
For instance, whereas subscriptions in France have to be actively renewed, subscriptions in Germany continue unless a subscriber gives notice. Regulations like this supported separate distribution channels and fragmented the European market into smaller national markets. This leads to a specialisation of many companies within the industry. In Germany, a diverse supply chain emerged with many small companies with a dedicated focus. Today, this supply chain consists of publishers, content holders, news agencies, print offices, distributors, call centres, data processing companies, retailers and others.
However, with the ongoing unification of European law, these barriers are likely to fade and competitors from other national markets might enter the market. Though, many of the smaller companies are highly specialised and thus, very sensible to changes in this isolated market.
So, the companies within this market face new challenges and are forced to take action. Due to the unifications in European law and the increasing rivalry with foreign competitors, they have to adopt their current strategies and prepare for stronger competition. From the Boston Matrix (Henderson, 1970), one can find two generic strategies to counter this. First, companies can enter new markets and grow therein. Second, they can focus on their competitors and try to increase their market share within an existing market.
According to Blank (2006), some US companies decided for the first option: they have placed large investments in online communities and portal sites. This enables them to diverse their investments and allow further growth. However, a similar trend cannot be identified for European companies. Gassmann (2006) states that German publishers are doubtful as most of them have no web strategy at all.
From there, it is consequential to investigate the second option from the decision matrix: increasing the current market share. To do so, it is important to understand the rules of the market and to perform better than competitors. One important component to achieve this superior performance is seen in customer retention. Therefore, it is essential to understand the motivation that makes customers cancel their subscriptions and to create an authoritative strategy to counter this. It is the aim of this thesis to examine the factors that lead to abating customer loyalty to magazine subscriptions and thus, enable companies within the market to adopt their strategies and increase their customer base.
Entropy is a password generator. It generates two kinds of passwords: i) low entropy passwords that humans can easily remember and ii) high entropy passwords as commonly used in stored sessions. The low entropy passwords are generated from the Basic English vocabulary by C.K. Ogdeni. The high entropy passwords are random alpha numeric passwords where similar looking characters are stripped.
This application is writte in Python and supports both, a CGI interface for your web server and a command line interface. From a security perspective, I strongly recommend the command line version after reading the source code.
Published March 5th, 2008, updated September 11th, 2008.
Pysqlite-2.3.2 accepts binary data on inserts but selects return unicode strings. This results in unicode conversion bugs when non-unicode bytes are stored in the database.
As sqlite3 accepts binary data in text fields, this seems to be a bug in pysqlite. To fix it, one could i) either restrict inserts to unicode strings or ii) change the result from unicode to binary.
However, the first would break compatibility with sqlite and that latter would break compatibility with existing code. Thus, this should be discussed with the authors.
import sqlite3
connection = sqlite3.connect(':memory:')
cursor = connection.cursor()
cursor.execute('''CREATE TABLE test (t TEXT)''')
cursor.execute('''INSERT INTO test (t) VALUES (?)''', (chr(128),))
cursor.execute('''SELECT t FROM test''')
# Traceback (most recent call last):
# File "pysqlite_utf8.py", line 10, in
# cursor.execute('''SELECT t FROM test''')
# sqlite3.OperationalError: Could not decode to UTF-8 column 't' with text '?'
print cursor.fetchone()
connection.close()
Today, Google announced the release of Gears for Mobile Devices. This is good news as it empowers mobile developers to create mighty applications in a wise known from modern web applications. So, what does this mean and what is it good for?
The mobile world consists of cell phones, smart phones and PDAs/handhelds. Leaving aside the cell phones, one finds useable devices with and without a stylus, capable of getting an Internet connection on their own or via some bluetooth or wifi link. These devices are dominated by two major operating systems: i) Windows Mobile and ii) Symbian OS. There are also some Linux platforms out there (Maemo, OpenMoko, Android), but their market share is not yet relevant. Thus, it is straight forward to focus on the two established platforms in the first instance.
Developing applications for Windows Mobile is pretty easy; all you need is Visual Studio (not the Express Edition) and you can start with C++, C#/Visual Basic, JScript or ASP.NET. It is quite the same with Symbian OS, wich gives you C++, C#/Visual Basic, Java, Ruby, Python and Perl among others. However, creating cross platform applications gets a bit more complicated – and it is unlikely that you can port them to an emerging platform easily.
Tough, what both platforms have in common is a capable web browser. From the diversity of microbrowsers, one finds Internet Explorer, Opera Mobile, Web Kit- and Mozilla-based browsers to be the common ones. All those browsers support JavaScript, XMLHttpRequests, CSS and what else you need to create rich client applications.
What these browsers are lacking is permanent storage: when you loose your internet connection, you cannot save or load any data. This issues was solved for the fully featured desktop browsers recenty (see Adobe Air, Google Gears, or Microsoft Silverlight) and Gears is now available for mobile devices, too. According to the Google Code Blog, they currently support IE Mobile and plan the integration of other mobile browsers in the near future.
Published February 29th, 2008, updated August 31st, 2008.
At sickos.org, Andreas and I run a copy of the social bookmarking software Scuttle. Basically, it is an open source implementation of del.icio.us (or at least, as delicious was back in 2006). Scuttle development has slowed down, but we keep up running this service and patch bugs every now and then. If you want to join us, read the documentation here and feel free to add your bookmarks there.
Published February 10th, 2008, updated September 6th, 2010.
This chart shows the lifecycle of major enterprise operating systems. The end of life is marked by the end of official security support. The chart will be updated every now and then.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
Solaris 8 + Vintage Patch Service
Feb, 2000 – Mar 31, 2012
Published February 10th, 2008, updated July 2nd, 2010.
Hi there!
my name is Benjamin Schweizer and I’m an IT consultant from Heilbronn/Germany.
I work at Steinle Solution-Factory where we provide commercial IT services to business customers. In my job, I design and implement IT infrastructure based upon Internet- and Open Source technologies. I have a strong background in Unix/Linux, programming, networking and distributed systems.
Aside of my job, I enjoy creating free software and security related topics. I have contributed to various Open Source projects including recent submissions to the Python language and Linux in general. Thus, you can meet me on many FOSS and Hacker conferences like the HAR 2009, Linux Tag or the GPN.
Organizations
Sharing ideas with like-minded people improves things greatly and makes a lot of fun. So, I am member in a few organizations that do amazing things and those I want to promote here; these are:
AGJF Heilbronn e.V., the umbrella organization of youth centers in the Heilbronn-area,
Published January 21st, 2008, updated January 24th, 2008.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse erat orci, condimentum vel, dictum vitae, interdum non, massa. Duis sed nunc nec dolor interdum porttitor. Integer blandit cursus risus. Duis sagittis, pede sit amet porttitor posuere, purus nisl mollis dolor, ac mollis est justo id arcu. Etiam placerat ligula at quam. Proin ante. Morbi suscipit tincidunt eros. Nulla vitae elit in quam blandit vulputate. Sed non nunc. Aenean arcu. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin egestas velit quis tortor viverra rutrum.
Cras erat. Vestibulum cursus rutrum nulla. Praesent velit. Vivamus lacus dui, tincidunt a, pretium eu, sagittis id, nisi. Proin at elit. Nunc pretium pede ac leo. Nam sem velit, egestas nec, tristique at, venenatis eu, nisl. Mauris a enim. Aenean hendrerit faucibus velit. Duis nonummy condimentum quam. Suspendisse convallis arcu at mauris. Sed neque lacus, volutpat a, congue eget, convallis et, sapien. Pellentesque placerat mattis nulla. Nullam mollis lacus in pede. Nam ac arcu. Vivamus ipsum sapien, convallis vitae, mollis id, ullamcorper at, libero.
Nam lectus. Cras quis arcu. Vestibulum ultricies orci eget est. Nunc in arcu eget nulla pretium hendrerit. Fusce porttitor auctor arcu. Pellentesque et felis. Nunc posuere hendrerit diam. Vivamus tellus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Praesent hendrerit elementum nunc. Aliquam at ipsum id eros aliquet ultrices. Maecenas rutrum, magna at luctus malesuada, quam nisi egestas nunc, ut venenatis metus mi vulputate neque. Pellentesque quis sapien. In hac habitasse platea dictumst. Pellentesque lectus nibh, tempus sed, dictum vitae, imperdiet non, ipsum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
Integer posuere dolor at augue. Etiam dictum tellus lacinia enim. Phasellus posuere hendrerit nulla. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Maecenas sed tortor. Vivamus sem enim, varius non, viverra quis, sagittis eget, nisl. Proin pulvinar imperdiet sem. Vestibulum eu odio. Proin dapibus egestas diam. Suspendisse potenti. Curabitur dapibus nulla et lectus. Nunc consequat elit vitae erat. Sed blandit, sem sit amet tempus fringilla, nisl diam condimentum nibh, adipiscing fermentum orci eros sed nibh. Aenean sit amet odio in pede sagittis auctor. Quisque mi. Nam feugiat. Vestibulum ipsum. Nullam ut leo ut justo porta posuere.
Cras vulputate nisi et lectus. Maecenas at lorem ac ligula suscipit condimentum. Mauris in dui et tortor bibendum dignissim. Nam a diam. Aenean molestie, justo sit amet tincidunt iaculis, libero odio imperdiet odio, nec ultrices lectus libero ut lacus. Vivamus iaculis tellus sit amet leo. Maecenas non nulla in tortor mattis ultricies. Praesent turpis mauris, mattis non, vestibulum sed, egestas quis, metus. Aenean venenatis viverra felis. Sed ultrices mauris id lorem. Vestibulum bibendum est non lorem.
Published November 28th, 2007, updated March 7th, 2008.
The Web Watchdog notifies you when a website gets updated. Instead of continuously returning to blogs, forums or discussion boards, you can ask the Web Watchdog to do this for you.
Published October 17th, 2007, updated April 10th, 2008.
Ipmap is a GTK-based IP address grapher, inspired by an XKCD comic and glTail. It reads data from standard input and maps IP/size pairs on a grid (see the screenshot). Due to this simple interface, it is easy to create filters for a variety of data sources. The program comes along with some example filters, including tcpdump ouput, Apache/ProFTPd’s access logs and Squid logs.
Published June 6th, 2007, updated February 29th, 2008.
“The pickle module implements a fundamental, but powerful algorithm for serializing and de-serializing a Python object structure.” Pedit is an interactive editor for such data structures, making them handy on the command line. The code is work-in-progress but yet useful…
Published May 9th, 2007, updated February 29th, 2008.
This is a proposed patch for squid_auth_ldap, the authentication helper of the Squid Cache. It increases the maximum filter length to 32k and thus, enables long search filters. Wow:-)
# patch for squid-2.6.STABLE11, enables long search filters
# author: Benjamin Schweizer
# diff -r squid-2.6.STABLE11/helpers/basic_auth/LDAP/squid_ldap_auth.c \
squid-2.6.STABLE11-sickos/helpers/basic_auth/LDAP/squid_ldap_auth.c
32a33,34
> * 2007-05-09: Benjamin Schweizer
> * - Increased buffer size to support long search filters.
343c345
< char buf[256];
---
> char buf[32768];
566c568
< while (fgets(buf, 256, stdin) != NULL) {
---
> while (fgets(buf, sizeof(buf), stdin) != NULL) {
653c655
< char filter[256];
---
> char filter[32768];
Published April 18th, 2007, updated March 7th, 2008.
This is a wiki plugin for the Unix editor Vim. It enables you to use syntax highlighting, hyperlinking etc. within your favourite text editor. Based upon Tim Hemel‘s original wiked, the code perceived many changes to fit the needs at sickos.org.
We use it here (sickos.org) for server documentation, notes, logbooks, howtos and many other tasks where we savor syntax highlighting and hyperlinking. In contrast to Tim Timewaster’s original wiked, we have found that many wiki-like syntax highlightings are useless within a text environment. So, we have limited on these features:
**bold**
//italic//
__underline__
[[link]]
Words within brackets are interpreted as hyperlinks and automagically added to the tags file. You can jump to the target using Vim’s tag feature (as in ctags/etags). This is achieved by either entering
:tag <link>
into the ex status line or by the keyboard combination <ctrl>-<+>. (This is <strg>-<alt-gr>-<9> on German keyboard layouts, see the vim manual for details on tagging).
To install this wiked release, simply copy .vim/ and .vimrc/ to your home directory. If you understand what you do, you can also integrate it with your existing configuration; you need at leat “syntax on” and “filetype plugin on” in your vimrc and the Perl scripts and .vim files at the appropriate places.
Published January 18th, 2007, updated February 29th, 2008.
This is a patch for GnuDIP‘s minidip server. It switches the password storage format from plain text to md5 hashes, so you can copy passwords from GnuDIP to MiniDIP and vice versa. Furthermore, this allows you to use arbitrary characters in your passwords without breaking the format of the config files. Use GnuDIP’s encpass utility to encrypt passwords.
Published December 28th, 2006, updated February 29th, 2008.
Shinypages is an easy to use publishing platform. It enables you to create instant websites, empowers your friends to contribute and limit access to the people that you want to view your pages. Both, an easy to use interface and latest Web 2.0 technology ensure that what you see is what you get.
Published November 16th, 2006, updated November 25th, 2009.
This is a plugin for the Munin monitoring system. It graphs the cache efficiency of your Squid proxy servers and shows nice graphs for average byte and request hits.
Published July 5th, 2006, updated February 21st, 2008.
Preface
Here are some short notes on the installation of GroupWise 7.0 Web Access on SUSE Linux Enterprise Server 9 (SLES9). The setup consists of a NetWare/Groupwise server that holds the web access agent and a Linux box that runs the web application (a Tomcat container).
Installation
get the installation files from the GroupWise 7 Linux CDs (gw700lnx.iso) and make them accessible, say in /tmp/gw700lnx/
locate and install the WebAccess RPM, “rpm -ivh novell-groupwise-webaccess-7.0-20050803.i386.rpm”
copy the GroupWise directory holding your domain directory from yout NetWare box to some local directory; you’ll need at least your wpdomain.db in, say /tmp/gwweb-root/
install Apache2, Tomcat5, J2EE and the “apache2-jakarta-tomcat-connectors” RPMs from the SLES9 installation media
ensure that Apache2 runs with Jakarta (mod_jk)
run ./install from the GroupWise 7 Linux CDs (/tmp/gw700lnx/install); you’ll need an X server
enter your settings, using the local domain directory (/tmp/gwweb-root/)
if it crashes during LDAP browsing, enter the values without browsing
this creates the essential file /opt/novell/groupwise/webaccess/commgr.cfg
and it copies the defaults from /opt/novell/groupwise/webaccess/default to the same directory
Apache Configuration
(assuming /etc/apache2/ as current working directory)
add these lines to your webserver’s config (vhosts.d/something.conf), they will include the Novell configuration file:
<ifmodule mod_jk.c>
Include /etc/opt/novell/gw/gw.conf
</ifmodule>
Tomcat Configuration
(assuming /usr/share/tomcat/ as current working directory)
chmod /opt/novell/groupwise/webaccess/commgr.cfg so that it is readable to Tomcat
symlink /var/opt/novell/gw/ to ./webapps/gw, so that Tomcat finds the webapplication
Testing
start Tomcat and Apache
try to login at http://localhost/gw/
check the logs of the involved applications, Tomcat/Catalina (/usr/share/tomcat/logs/), Apache (/var/log/apache2/) and GWWA (/opt/novell/groupwise/webaccess/logs/); when you find the compile error in GWWA’s logs reporting that “draftfldrsel.inc” cannot be found, ignore this (it is at least not the reason why the web application hangs)
Published April 24th, 2006, updated February 29th, 2008.
This is a caching and scaling proxy for images that are accessible via http. It is designed for the use in weblogs where you want to refer to images on foreign hosts without the need of manual mirroring or scaling. After an initial fetch, the (scaled) pictures remain in the local cache directory. It is tried to reload the image when the cache expires, otherwise the old image is delivered.
Published October 12th, 2005, updated February 10th, 2008.
Here are some notes on the Kerio Mailserver, version 6.1. My interest lays on the storage as I’m going to do some data injection :-)
kerio/$ ls
store/mail/domain.tld/username/ - that's it. see below.
store/mail/domain.tld/#public/ - shared user?
store/logs/ - ascii text log files and index for each of them
store/queue/nn/* - hashes or maildir or somewhat?
store/queue/pickup/ - working directory?
store/spamassassin/* - uninteresting
store/tmp/* - not interesting
kerio/store/mail/domain.tld/username/$ ls
Calendar - Calendar data, vcal + index
Contacts - Contacts, vcard + index
Deleted Items - All types + index
Drafts - mail?
INBOX - mail?
Junk E-mail - mail?
Sent Items - mail?
Tasks - unknown
filter.siv - mail filters, perl-like syntax
folder.map - shared folders mapping, simple xml
settings.usr - serialized php structure
stats.usr - unknown
sub.fld - optional (mail) folders
kerio/store/mail/domain.tld/username/Folder/$ ls
#assoc/ - unknown
#msgs/*.eml - VCALENDAR, VCARD, Mail, whatever
subfolders/ - like Folder, unsure where they are linked
deleted.fld - ??? unix timestamp + filename
index.fld - see below.
properties.fld - unknown
search.fld - sqlite2 database, somewhat broken; useless (or other format???)
sort.fld - unknown, may be cache
status.fld - unknown
Format:
T – unknown
G – unique id, probably used to identify folder
V – timestamp, folder create date
U – next filename to use
C – counter?
M – folder type?
D – unknown, some delete flag?
R – unknown
N – unknown
S – unknown
A – mail address / user id + permissions?
That’s all. May be it helps you to tinker with the backend.
Published October 5th, 2005, updated February 29th, 2008.
Preface
wp_flickr_sidebar is a plugin that shows a moblog in a WordPress sidebar. It can be configured to display any Flickr feed with a specified width and number of pictures. The plugin supports caching and resolution-dependent fetching.
Installation
Shorts steps for the impatient:
extract the files to the plugin directory (currently one file)
drop a copy of magpierss in /magpierss (or symlink it or fix the constants)
ensure that you have libgd2 and the php bindings installed
activate the plugin somewhere on the WordPress setup page
configure the plugin using the WordPress options dialog from within the admin menu
add <?php wp_flickr_sidebar_feed() ?> to your template/sidebar
If something went wrong (missing libs, wrong permissions, typos), you should see an error message as long as the bug is in stage 1. To see error messages in the standalone jpeg section, set this line as a comment:
// (header("Content-type: image/jpeg");)
When you’ve fixed your problem, come back here end tell us, please.
q: after commenting the header line, i see an error message that says there is no imagecreatefromjpeg()
a: install/update the gd graphics library and php bindings q: it does not work anymore a: flickr changed the uri schema, update to version 0.2
Published May 11th, 2003, updated February 29th, 2008.
wconsd is a serial console server for Windows NT/2k/XP. It maps local com ports to an IP socket and makes it accessible with any TCP/IP terminal. I use it with PuTTY to set up routers when no IP address is assigned… PuTTY just feels better than Hyperterminal or TeraTerm;)
Published December 29th, 2002, updated February 29th, 2008.
Echolot is a network station monitor. It sniffs ARP packets on ethernet network devices and stores them in an IPTraf-compatible database. These unique addresses could be used to find known hosts on any LAN (a popular FTP server at a LAN party), or to find unknown hosts on a company LAN (such as intruders).