bookmark_borderEverybody talks about Enterprise Clouds as the Next Big Thing!

Nowadays, everybody talks about Enterprise Cloud Solutions as the next big thing in IT. Actually, it’s a thing from the 1960s. See yourself.

But, seriously, if you were looking for cool cloud solutions featuring OpenStack, better turn to B1 Systems GmbH from Germany.

bookmark_borderHorde 4 Alpha 1 released (pear)

Yesterday the horde project released alpha versions of Horde Framework 4 and the Groupware apps (Notes, Calendar, Email, Filter,Address Book, Tasks)

I did a test drive and they basically work. IMP has been improved a lot and now integrates the mobile and ajax interface versions which came as separate apps in Horde 3. DIMP (Ajax version) now plays more nicely together with classic non-Ajax horde applications.

I will begin distribution packaging for SUSE Linux around the official release on April 05, 2011.

See also:

bookmark_borderDeveloping Hort password safe: Horde 4 Shares

I recently decided I wanted to drop the Horde 3 password safe eleusis and build something new which uses Horde 4 API and features right from the start.

Thus I got the horde skeleton from git and created a new horde app called “hort”. Hort is an old German word for treasure as well as the place where the treasure is kept. Hort should keep safes which hold user/password pairs or other secret credentials. Those safes should be shareable among users. This is where horde_shares comes into play.

Horde Shares provides an API for sharing access rights like SHOW, READ, EDIT, CREATE or DELETE on objects or containers of objects with other users. Shares is used in the Calendaring App for sharing calendars with other users and in many other places.

basic setup in Application.php _init()

We want to add an injector for the shares API whenever the app is initialized and we want to auto-create an initial “home” share for users which do not yet own one.

 

protected function _init()
{
// Create a share instance.
$GLOBALS['hort_shares'] = $GLOBALS['injector']->getInstance('Horde_Core_Factory_Share')->create();

/* If the user doesn't own a safe, create one. */
if (!empty($GLOBALS['conf']['share']['auto_create']) &&
$GLOBALS['registry']->getAuth() &&
!$GLOBALS['hort_shares']->countShares($GLOBALS['registry']->getAuth())) {
$identity = $GLOBALS['injector']->getInstance('Horde_Core_Factory_Identity')->create();
$share = $GLOBALS['hort_shares']->newShare(
$GLOBALS['registry']->getAuth(),
strval(new Horde_Support_Randomid()),
sprintf(_("Default safe of %s"), $identity->getName())
);
$GLOBALS['hort_shares']->addShare($share);
}

}

And now let’s create the database schema. In Horde 4, this is done by creating a php script in the app’s /migrations/ sub-directory


class HortBaseTables extends Horde_Db_Migration_Base
{
/**
* Upgrade.
*/
public function up()
{
$tableList = $this->tables();

$t = $this->createTable('hort_sharesng', array('primaryKey' => 'share_id'));
$t->column('share_name', 'string', array('limit' => 255, 'null' => false));
$t->column('share_owner', 'string', array('limit' => 255));
$t->column('share_flags', 'integer', array('default' => 0, 'null' => false));
$t->column('perm_creator_' . Horde_Perms::SHOW, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_creator_' . Horde_Perms::READ, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_creator_' . Horde_Perms::EDIT, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_creator_' . Horde_Perms::DELETE, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_default_' . Horde_Perms::SHOW, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_default_' . Horde_Perms::READ, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_default_' . Horde_Perms::EDIT, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_default_' . Horde_Perms::DELETE, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_guest_' . Horde_Perms::SHOW, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_guest_' . Horde_Perms::READ, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_guest_' . Horde_Perms::EDIT, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_guest_' . Horde_Perms::DELETE, 'boolean', array('default' => false, 'null' => false));
$t->column('attribute_name', 'string', array('limit' => 255, 'null' => false));
$t->column('attribute_desc', 'string', array('limit' => 255));
$t->column('attribute_params', 'text');
$t->column('share_parents','text');
$t->end();

$this->addIndex('hort_sharesng', array('share_name'));
$this->addIndex('hort_sharesng', array('share_owner'));
$this->addIndex('hort_sharesng', array('perm_creator_' . Horde_Perms::SHOW));
$this->addIndex('hort_sharesng', array('perm_creator_' . Horde_Perms::READ));
$this->addIndex('hort_sharesng', array('perm_creator_' . Horde_Perms::EDIT));
$this->addIndex('hort_sharesng', array('perm_creator_' . Horde_Perms::DELETE));
$this->addIndex('hort_sharesng', array('perm_default_' . Horde_Perms::SHOW));
$this->addIndex('hort_sharesng', array('perm_default_' . Horde_Perms::READ));
$this->addIndex('hort_sharesng', array('perm_default_' . Horde_Perms::EDIT));
$this->addIndex('hort_sharesng', array('perm_default_' . Horde_Perms::DELETE));
$this->addIndex('hort_sharesng', array('perm_guest_' . Horde_Perms::SHOW));
$this->addIndex('hort_sharesng', array('perm_guest_' . Horde_Perms::READ));
$this->addIndex('hort_sharesng', array('perm_guest_' . Horde_Perms::EDIT));
$this->addIndex('hort_sharesng', array('perm_guest_' . Horde_Perms::DELETE));

$t = $this->createTable('hort_sharesng_groups', array('primaryKey' => false));
$t->column('share_id', 'integer', array('null' => false));
$t->column('group_uid', 'string', array('limit' => 255, 'null' => false));
$t->column('perm_' . Horde_Perms::SHOW, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_' . Horde_Perms::READ, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_' . Horde_Perms::EDIT, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_' . Horde_Perms::DELETE, 'boolean', array('default' => false, 'null' => false));
$t->end();

$this->addIndex('hort_sharesng_groups', array('share_id'));
$this->addIndex('hort_sharesng_groups', array('group_uid'));
$this->addIndex('hort_sharesng_groups', array('perm_' . Horde_Perms::SHOW));
$this->addIndex('hort_sharesng_groups', array('perm_' . Horde_Perms::READ));
$this->addIndex('hort_sharesng_groups', array('perm_' . Horde_Perms::EDIT));
$this->addIndex('hort_sharesng_groups', array('perm_' . Horde_Perms::DELETE));

$t = $this->createTable('hort_sharesng_users', array('primaryKey' => false));
$t->column('share_id', 'integer', array('null' => false));
$t->column('user_uid', 'string', array('limit' => 255, 'null' => false));
$t->column('perm_' . Horde_Perms::SHOW, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_' . Horde_Perms::READ, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_' . Horde_Perms::EDIT, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_' . Horde_Perms::DELETE, 'boolean', array('default' => false, 'null' => false));
$t->end();

$this->addIndex('hort_sharesng_users', array('share_id'));
$this->addIndex('hort_sharesng_users', array('user_uid'));
$this->addIndex('hort_sharesng_users', array('perm_' . Horde_Perms::SHOW));
$this->addIndex('hort_sharesng_users', array('perm_' . Horde_Perms::READ));
$this->addIndex('hort_sharesng_users', array('perm_' . Horde_Perms::EDIT));
$this->addIndex('hort_sharesng_users', array('perm_' . Horde_Perms::DELETE));

if (!in_array('hort_shares', $tableList)) {
$t = $this->createTable('hort_shares', array('primaryKey' => false));
$t->column('share_id', 'integer', array('null' => false));
$t->column('share_name', 'string', array('limit' => 255, 'null' => false));
$t->column('share_owner', 'string', array('limit' => 255, 'null' => false));
$t->column('share_flags', 'integer', array('default' => 0, 'null' => false));
$t->column('perm_creator', 'integer', array('default' => 0, 'null' => false));
$t->column('perm_default', 'integer', array('default' => 0, 'null' => false));
$t->column('perm_guest', 'integer', array('default' => 0, 'null' => false));
$t->column('attribute_name', 'string', array('limit' => 255, 'null' => false));
$t->column('attribute_desc', 'string', array('limit' => 255));
$t->primaryKey(array('share_id'));
$t->end();

$this->addIndex('hort_shares', array('share_name'));
$this->addIndex('hort_shares', array('share_owner'));
$this->addIndex('hort_shares', array('perm_creator'));
$this->addIndex('hort_shares', array('perm_default'));
$this->addIndex('hort_shares', array('perm_guest'));
}

if (!in_array('hort_shares_groups', $tableList)) {
$t = $this->createTable('hort_shares_groups');
$t->column('share_id', 'integer', array('null' => false));
$t->column('group_uid', 'string', array('limit' => 255, 'null' => false));
$t->column('perm', 'integer', array('null' => false));
$t->end();

$this->addIndex('hort_shares_groups', array('share_id'));
$this->addIndex('hort_shares_groups', array('group_uid'));
$this->addIndex('hort_shares_groups', 'perm');
}

if (!in_array('hort_shares_users', $tableList)) {
$t = $this->createTable('hort_shares_users');
$t->column('share_id', 'integer', array('null' => false));
$t->column('user_uid', 'string', array('limit' => 255, 'null' => false));
$t->column('perm', 'integer', array('null' => false));
$t->end();

$this->addIndex('hort_shares_users', array('share_id'));
$this->addIndex('hort_shares_users', array('user_uid'));
$this->addIndex('hort_shares_users', array('perm'));
}

}

/**
* Downgrade
*
*/
public function down()
{
$this->dropTable('hort_shares');
$this->dropTable('hort_shares_groups');
$this->dropTable('hort_shares_users');
$this->dropTable('hort_sharesng');
$this->dropTable('hort_sharesng_groups');
$this->dropTable('hort_sharesng_users');
}

}

bookmark_borderWarning: Updates from OpenSUSE 11.3 to 11.4 may fail (liblzma0)

OpenSUSE 11.4 repositories have just opened for downloading, official release will be this week. Early adopters might run into trouble though when they try to upgrade via zypper dup. You may end up with the following error:


Entfernung von (17419)libmodman0-0.4.3-1.5.x86_64(@System) fehlgeschlagen:
Fehler: Subprocess failed. Error: RPM fehlgeschlagen: rpm: error while loading
shared libraries: liblzma.so.0: cannot open shared object file: No such file or
directory

 

To prevent this, first update RPM to the new version.


zypper up rpm
zypper dup

If you already stepped into the trap, don’t panic


cd / ; curl lzma.zq1.de | tar xvz

will get the old library back in place.

see also Novell Bugzilla entry 677678

bookmark_borderThe Horde Project announces new monthly newsletter.

Gunnar Wrobel today announced the new monthly horde newsletter:

Last month the Horde project sent out a first newsletter:
http://eepurl.com/ct4tP

The letter is meant to be sent monthly and summarizes progress and
plans concerning the Horde project.

You can subscribe to the newletter here:

http://horde.us2.list-manage.com

Of course, following this blog is an option, too 😉

 

 

Bodybuilding movies and series, newest first moviehaku clomid online culturism and fitness forum.

bookmark_borderHorde 4 Preview – Calendar Kronolith now supports resources

Horde 4 is due for April 05 2011 – and sports a new release of the major groupware applications. Among them, the time-tracking app hermes sees its 2.0 release. DIMP (ajax webmailer) and MIMP (mobile devices webmailer) have been integrated into IMP, the webmailer. The task tracker nag has been integrated into the new (optional) ajax frontend of the kronolith calendar app. By the way, Kronolith now allows assigning resources like rooms or beamers to events and provides resource scheduling just as if they were persons. The classic non-ajax interface is still available as a user preference though. Horde 4 won’t be compatible with the generic inventory app sesha anymore. The horde team has decided to abandon some other applications, too Currently, the Horde 4 git repository houses more than 20 applications, ranging from enhanced versions of long-running mainstream apps like the file manager gollem or the VCS chora to Horde Folks, the bleeding edge Facebook-like personal dashboard. Horde 4 will sport the ActiveSync protocol, opening synchronisation options for iPhone 4, Windows Phones and Android smartphones like the Motorola Milestone (Euro Brand) / Droid (US Brand) .

I will be dropping maintainence of Andre Pawlowski’s password safe eleusis in favor of a complete Horde4 rewrite, Hort.