Archive for the 'php' Category



26
Mar

Back Online

After two weeks of nice holidays, I’m back online.

My father became 70 and we spend one week together as family to celebrate this. The other week we visited friends and enjoyed our free time.

Now, back in Office, I noticed that my colleges turned Tine 2.0 an other time inside out. I had to dig through more than 300 commits. Many cool new internal features and again simplifications in the backend. So I’ll have to spend a day to adopt the tasks application to the new standards.

Really cool is the new schemaproc we have now. We can manage tables and relations in a really advanced way. We havn’t found this features, needed for a complex application design, in the existing PHP frameworks and so we are pretty exited about the results. Maybe we can bring this stuff into the Zend Framework.

Also noteworthy are the beginnings of setup and migration. In short it should be possible to install Tine 2.0 without an existing egroupware installation. Also the migration of existing data from egroupware is on the way. Maybe I can manage to finish the infolog->tasks import this week. Really exiting with this migration approach is, that we are able to migrate from different databases/versions easily. So let’s se what future brings :-)

Also during my holidays, the usability efforts became a lot more concrete. I even found the first interface prototype in my Inbox. Next week I’ll start to implement the first results from this in the addressbook.

As a conclusion of all this progress I take that I realy should take more holidays, as Tine develops great in those times :-)

06
Feb

Topview compareism of eGroupWare and Tine codebase

While profiling the Tine code, I coudn’d resist, analysing how may lines of code we have in total, and how many of them we have to maintain ourselves.

I did this for Tine and for eGroupWare. Test target was the API. To have a comparable analysis I excluded the SyncML code from the eGroupWare contage as this is not covered by the Tine api at the moment.

code2maintain.jpg

Needles to philosophise on the conclusion and impacts of stability and quality or?

05
Feb

Status update of the Tine 2.0 effort

Two month after reaching milestone 1, we are glad to announce, that we passed milestone 2 last weekend.

What’s new?

Most noteworthy and surprising for us was the early adaption of our code-base into the eGroupWare project as official subproject [1]. From 2007-12-18 on the Tine 2.0 source-code is managed via the project’s svn server [2, 3] .

On request of the developers community we renamed the effort from “eGroupWare 2.0″ into “Tine 2.0″ to clarify the current state as a proposal for the next major release, but not being an eGroupWare release in this stage. Consequently “Tine” is an acronym for “This is not eGroupWare”. As the English word ‘tine’ stands for e.g. ‘tine of a fork’ this fits our self-conception for being the tine of eGroupWare, dealing with the latest and coolest web-technologies.

From the user’s point of view, milestone 2 brings a simple task manager and a CRM module. But this is of course only the tip of the iceberg, as in this stage Tine mostly is about building a framework for collaboration applications based on a Service Orientated Approach (SOA).

Building the client entirely in Javascript, getting deployed by the first browser request brings the exciting Rich Internet Applications (RIA) world to the user. Having the same user interface concepts in a web-application as the user already knows from desktop applications, increases productivity dramatically. Impatient users can convince themselves in the demo [4] even in this early stage.

Noteworthy technical details

Together with the eGroupWare developers team we worked out a schema for generalized history logging and concurrency management and implemented it in the Tine code-base. This is a big step towards making the software applicable in multiuser environments on the one hand, and also a preparation for mobile client synchronization protocols like SyncML and ActiveSync as well as fat-client live protocols like CalDAV and GroupDAV. The lack of such features is one of the major drawbacks in terms of data integrity in the old eGroupWare code-base.

On client side, we started building widgets for common and frequently used parts. It’s the first step towards a Rapid Application Development (RAD) framework. Originally this was considered as long term goal. However, as we got much requests from the eGroupWare 3rd party developers and ExtJS users community we decided to increase our priority in this field .

Next Steps

General topic of the 3rd phase is consolidating and documentation of the code-base. For sure we would also love to implement a great set of new features and back-end enhancements, but we strongly believe, that sticking to professional programming paradigms like this, will make both, the developers and users community, more satisfied with the new version.

As such there is only little innovation on the plan for milestone 3. First we need to find solutions for having tight integration of different independent components. This will be done on the basis of the existing applications Address-book, Tasks and CRM.

Moreover an implementation of a generalized tagging system could be found on the roadmap [5]. Aim of this effort is to find a solution which overcomes the performance and integrity problems we have to face within the current stable release of eGroupWare.

So far for the update, thank you all for the enormous interest in Tine 2.0. Please keep us provided with your ideas and feedback which help us redefining collaboration open minded and open sourced.
Your Tine 2.0 dev team

[1] eGW+administrator+decisions
[2] SVN repository viewer
[3] Tine 2.0 changelog
[4] Tine 2.0 demo
[5] Roadmap for Tine_2.0

01
Feb

Tasks manager for tine 2.0

I just finished the first draft for a new task manager in tine 2.0. I’m really amazed about a totally new dimension of user interfaces possible thanks to the extensive use of javascript.

Learning Javascript hurts, but seeing the results is compensation :-)

The task-manager is available in the demo now.
I made a little screencast, hope you enjoy it.

taskscast.jpg
01
Jan

change suffix of a ldap database

There are these days in life of an admin, when there is no way around touching the ldap setup. There is this stupid database suffix I gave my very first ldap setup.

As today is a public holiday, and there’s also a respectable rest of sparkling wine in the fridge, I took the chance to transform this suffix to one, fitting in the rest of my infrastructure.

As I haven’t found an adequate tool for changing the suffix in an ldif file, I post my script here. Hopefully there is someone out, I can help with it.

All you need to do, is to change the $to varibale in the top of the script. Than a
slapcat | changesuffix > my.ldif
should do the job.

20
Dec

serendipity as blog aggregator aka planet

While searching a planet software I only found planetplanet, which is written in python at a first glance. As a PHP freak, this is not an option for me.

After a while of hard googeling I found the combination serendipity plus the aggregator plugin, which claims to solve the problem in PHP.

Installing serendipity and the aggregator plugin is really easy, also configuring the aggregator to collect the feeds of the attending blogs is easy. But than the hard work starts.

The look and feel of a standard serendipity installation as planet is worse. After some more hard googeling I thought, that there is no other way as to hack the templates and to investigate the needed variables by searching in the code and database. It took me a few hours to find all the stuff in the template and core code to build a nice planet.

I was shortly before the point of frustration to code my own PHP planet. After finishing work, I took a look into the aggregator plugin itself to understand how a certain parameter makes it way into the database.

And here the surprise comes.All the documentation about how to build a planet with this plugin is in the code:
// LAYOUT NOTE:
// For best "planet experience" you are advised to create your own template and
// disable s9y-specific options which do not make sense in a planet environment.
// A suggestion is to display the originating feed URL inside entries.tpl via:
//
// {$entry.properties.ep_aggregator_feedname}
// {$entry.properties.ep_aggregator_feedurl}
// {$entry.properties.ep_aggregator_htmlurl}
// {$entry.properties.ep_aggregator_articleurl}
// {$entry.properties.ep_aggregator_author}
//
// See, eg. suggestions in file:
//
// [serendipity]/plugins/serendipity_event_aggregator/theme-patch.diff

It’s quite interesting that there information about this is so rearly spread over the net. Hopefully google finds this post and saves you from hours of code greping.

18
Dec

Similarities of eGroupWare and Typo3

On Friday I attended the Metaways Christmas-Party. By Chance I sat next to our chef Typo3 developer. By talking about the current situations in our both projects, we found a lot of similarities.

  • Both projects came a long road, are many years in production state, and have collected a huge userbase on this way.
  • Both projects started from zero and reached their current reputation with an ongoing evolution of the software.
  • Both projects consists of lots of tight bound procedural php4 code which became hard to understand and maintain over the years.
  • Both projects make only trivial usage of their DBMS features.
  • Both projects are quite limited in their userinterfaces due to the usage of typoscript on one side and etemplates on the other side.
  • In Both projects, developers felt the need to start a rewrite from scratch to face those problems with using latest techniques while still having a stable product.

Unfortunately the similarities end here. In eGroupWare this caused an ugly power struggle. In Typo3 the project leader (Kasper) solved the situation in a remarkable way.

Watch this two podcasts yourself [1,2]. Its content was told to me on Friday evening. Fortunately we changed our topic as it made me quite sad that I’m obviously not part of the winning community.

30
Nov

on the fly decoding of winmail.dat in felamimail

We all know these ugly mails in our mailboxes with an attachement called winmail.dat.

While we all are quite serious that people using a software constellation which produces this kind of attachements should be arrested, (Where is Mr. Scheuble when we really need him?) this attitude doesn’t help our users who just want to read their fu*ing emails.

A while ago I developed an enhancement for felamimail which decodes winmail.dat archives on the fly and just displayes the embedded files to the user. It’s based on the ytnef library which on debian system could easily be installed by a simple apt-get install ytnef.

As I can’t estimate the security related isues of this extension yet, I don’t dare to commit this into trunk. If you are a security guru, please comment the code!

01
Nov

MAMP and Xdebug

MAMP is an extremely easy to install and use web-server with php and mysql for mac.

Once, your projects become bigger, you’ll definitely feel the need for a php debugger. Xdebug is a powerful open-source php debugger i prefer over the other mostly closed source once. There is a powerful KDE tool for analysing Xdebug output, see this example.

But as for now, i had no Xdebug extension for my mac development system, cause i didn’t want to recompile the web-server stuff. Today i found, that Komodo has a dynamic Xdebug extension bundled with there commercial IDE.

As i use Eclipse, i don’t need this IDE, but i downloaded the IDE trial and extracted the xdebug.so for me.

If you have this xdebug.so, all you need to do is to place this into
/Applications/MAMP/Library/share/php/xdebug.so
and then edit your /Applications/MAMP/conf/php5/php.ini like this:

; xdebug config Mac OS X
zend_extension=/Applications/MAMP/Library/share/php/xdebug.so
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.idekey=