backgroundimage

marbetschar - Coldfusion, Klettern, Freizeit

Joint Venture von Apple und Ersatzgeräte: Das geht doch besser?!

0

Das Joint Venture Programm von Apple an und für sich ist ja ganz nett, aber man merkt deutlich das dieser sogenannte "Business Support" noch in den Kinderschuhen steckt:

  • Wenn gefordert sind immer zuwenig ausgebildete Fachkräfte vor Ort
  • Die Wartezeiten sind trotz Versprechungen einer bevorzugten Behandlung seitens Apple viel zu lang
  • Ersatzgeräte sind zwar prinzipiell vorhanden, werden aber mit veralteten Betriebssystem Versionen ausgeliefert

Ich hab für mein Macbook Air ein Ersatzgerät bekommen, dieses aber noch mit Snow Leopard - Resultat: Ich konnte zwar mein Time Machine Backup wiederherstellen, aber die Programme funktionieren nicht da diese für Lion konzipiert wurden.

Extrem ärgerlich dabei: Der Mac App Store wurde ebenfalls wiederhergestellt und lässt sich nicht starten, ein Upgrade auf Lion ist unter diesen Bedingungen unmöglich!! Vielen Dank Apple - ich muss nun Stunden damit verbraten das Ersatzgerät komplett neu zu installieren, nur weil ihr ein einfaches Update nicht ausführen konntet!

Ganz ehrlich, ein funktionierender Business Support der was taugt schaut anders aus!!

FW/1 2.0 Stable!

2

Bereits seit einiger Zeit als Release Candidate verfügbar, hat FW/1 nun den goldenen Sprung geschafft und ist in der finalen Version 2.0 zum Download verfügbar! Vielen dank Sean Corfield!

Bleibt jetzt nur noch abzuwarten wie lange es dauern wird bis DI/1 erwachsen wird!? Ich hoffe, dass dies auch bald geschehen wird!

Download Webseite
Mehr lesen Kategorien: ColdFusion

Kundendienst: Swisscom vs. Sunrise

1

Kundendienst à la Swisscom

Gerade eben hatte ich ein Telefonat mit dem Swisscom Kundendienst. Ich bin zurzeit stolzer Besitzer eines Nadel & DSL Pro Kombiangebots. Aufgrund meines Umzugs von St. Gallen nach Zürich, musste ich aber meinen DSL Vertrag kündigen.

Vertraglich bin ich leider bis Ende Februar an das DSL gebunden, die Nachmieterin zieht allerdings bereits Ende Januar in meine alte Wohnung ein und mich muss zusätzlich bis dahin doppelt Miete zahlen.

Nach Erklärung der Situation und einer kurzen Rücksprache der Kundendienstmitarbeiterin war die Situation nach nicht einmal 10 Minuten zu meiner vollsten Zufriedenstellung geklärt:

Abschaltung des DSL am Ende des Januars und Verzicht auf die 59.- Ende Februar! Das nenne ich einen super Kundenservice!!

"Kundendienst" à la Sunrise

Letztes Jahr bin ich (zum Glück) zu Swisscom gewechselt. Aus Kulanz und weil ich damals ebenfalls noch zwei Monate an den Vertrag gebunden war, hatte ich in den zwei Folgemonaten die Kosten ebenfalls doppelt bezahlen müssen (Sunrise und Swisscom). Ist zwar ärgerlich, aber ok. Im dritten Monat habe ich aber von Sunrise noch zusätzlich eine Rechnung erhalten, mit einem erneuten Monatsbetrag - dies obwohl ich die Nr bereits seit drei Monaten nicht mehr verwendet hatte!

Mehrere Telefonate, Blogeinträge und Mails später ist die Situation noch immer nicht geklärt und die Sunrise beauftragt doch tatsächlich wegen 20.- noch ein Inkasso Unternehmen! Geht's noch?!

Zic Zac Dörfli

0

Rustikales Ambiente, mit ausgefallener Dekoration. Grosse Portionen und ein guter Geschmack runden das Erscheinungsbild ab. Für ein Candle-Light Dinner allerdings mit Sicherheit nicht jeder-"Manns" Geschmack ;)

Webseite Kartenlink
Mehr lesen Kategorien: Geniessen

Unbewusst Inkompetent?!

1

Wie ich finde ein sehr schönes Beispiel um die vier Stufen der Kompetenzstufenentwicklung einfach zu erklären ist das Autofahren:

Unbewusst Inkompetent

Als ich drei war, sah ich bereits Autos auf den Strassen herumfahren, ich kümmerte mich aber nicht darum von wem oder wie sie gefahren wurden - ich war unbewusst Inkompetent.

Bewusst Inkompetent

Im Teenager Alter wurde mir klar, dass ich unbedingt Auto fahren lernen will. Leider war ich noch zu Jung um es zu dürfen. In diesem Stadium war ich bewusst Inkompetent.

Bewusst Kompetent

Endlich wurde ich volljährig und habe meine Führerscheinprüfung erfolgreich gemeistert; Ich war nun bewusst Kompetent.

Unbewusst Kompetent

Nach einigen Jahren Fahrerfahrung und etlichen Kilometern später, funktioniert alles wie von Geisterhand von alleine. Musste ich mich früher noch darauf konzentrieren das Setzen des Blinkers nicht zu vergessen, kann ich mittlerweile überlegen woher ich das Lied kenne welches gerade im Radio läuft. Ich habe mittlerweile das Endstadium des Lernprozesses erreicht: Ich bin unbewusst Kompetent.

blade Plugin Template

0

Heute bin ich über etwas sehr erfreuliches gestolpert: Das Template für mura Plugins auf blade Basis ist nun im offiziellen mura Marketplace zum Download verfügbar!

Ich möchte an dieser Stelle einen grossen Dank an Reinhard Jung aussprechen, der mich mit Rat und Tat unterstützt hat.

Und allen anderen wünsche ich: Happy Plugin Coding! :)

NACHTRAG: Der Download Link scheint zurzeit nicht zu funktionieren - das mura Team ist bereits informiert und wird diesen Fehler hoffentlich bald bereinigen.

Download
Mehr lesen Kategorien: ColdFusion

jqTransform und selectedIndex Problematik

0

Verwendet man jqTransform um Formulare optisch aufzupeppen und manipuliert das Formular gleichzeitig mit JavaScript, stolpert man leider relativ schnell über die selectedIndex Problematik bei Select-Boxen.

Über das selectedIndex Attribut kann das zurzeit selektierte Element in der Select-Box programmatisch gesetzt werden. Leider übernimmt jqTransform diese Auswahl nicht - man muss also ein wenig Hand anlegen, damit das auch mit jqTransform korrekt funktioniert. Leider ein Bug der bereits seit längerem Bestand hat - ich muss mal bei den Jungs anklopfen damit sie den Fehler beheben :(

Nichts destotrotz hier der jQuery Schnipsel zur Bereinigung des Problems:

el.prop('selectedIndex',0);
el.parent().find('ul > li > a').removeClass('selected');  //jqTransform hack
el.parent().find('ul > li > a:first').addClass('selected');  //jqTransform hack
el.parent().find('div > span').text(el.children(':selected').text());  //jqTransform hack

Webseite

Lebenszeichen

0

Nach einer sehr langen Abwesenheit melde ich mich nun endlich zurück auf meinem Blog. Sage und schreibe 8!! lange Monate ist es her, seit ich meinen letzten Blogeintrag verfasst habe. Seit her ist viel geschehen: Die komplette Neuprogrammierung der Blogsoftware blogFly, das Redesign meines eigenen Blogs, das cfCamp in München, die Hochzeit von Thierry und Christina Nischelwitzer und der Aufbau der eigenen Firma semnet sind nur einige wenige Eckpunkte der vergangenen Monate.

Da nun die gröbsten Baustellen rund um den Blog beseitigt sind, werde ich in Zukunft wieder alles was mir wichtig erscheint auf diesem Blog festhalten - und ich freue mich bereits wie ein kleines Kind darauf ;)

Mehr lesen Kategorien: Allgemeines

Introduction to blade

8

There are quite a few other application frameworks for ColdFusion out there, so why write another one? This is a very good question and in this blog post i’ll try to give you an answer and a brief overview of blade.

Why write another application framework?

I like the way how conventions work. There are a few rules you have to follow and behind the scenes the magic will happen. That’s why i really love FW/1. No need to write Xml configuration files such as in ModelGlue nor read over 600 pages of documentation such as in ColdBox. Just place your controllers in the controllers and the services in the services directory. It couldn’t be easier!

However, there are some things which FW/1 have not built in, since FW/1 is a small, lightweight MVC framework. Nothing more. BUT: The real worlds weight is far from “light”. So i’ve been digging around for an existing application framework but have nothing found which suite my needs of

  • MVC
  • built in ColdFusion ORM
  • BeanFactory
  • Validation
  • convention based
  • easy to learn and use
  • rapid development

I think the only way to go before blade was cfWheels. But I don’t like how cfWheels pushes you to over-simplify your code (such as scopeless variables).

Overview of blade

Installation

Download the zip file from RIAForge und unpack it. You will get three different directories:

  • blade (the application framework - see description below)
  • samples (sample applications)
  • skeleton (an empty application skeleton)

To install blade, copy the blade directory to your webroot.

The Framework

  • hyrule (the hyrule validation framework)
  • org (FW/1)
  • wirebox (the WireBox IoC framework)
  • Application.cfc
    The Application.cfc extends Sean Corfield’s FW/1, adds the BeanFactory and some functionality for validation purposes. You have to extend this CFC instead of FW/1.
  • Binder.cfc
    The Binder.cfc is used from within the Application.cfc and configurates WireBox how load your beans, controllers, models and services.
  • Injector.cfc
    The Injector.cfc adds the getBean() and containsBean() method to the WireBox Injector. Those methods are needed by FW/1.
  • Model.cfc
    The Model.cfc is a Wrapper for all ColdFusion ORM functions and your model cfc’s have to extend this object. This Wrapper adds the ability to inject any objects into your model cfc’s.
  • ValidationResult.cfc
    The ValidationResult.cfc is needed by the Application.cfc to simplify the validation process.
  • mappings.cfm
    You will have to cfinclude this file into your Application.cfc. It will create the mappings for the frameworks used inside of blade.

How to load blade

To load blade, just extend the blade.Application class and cfinclude the mappings.cfm:

<cfcomponent output="false" extends="blade.Application" hint="Applikationskomponente">
  <cfinclude template="/blade/mappings.cfm" />
</cfcomponent>

See the FW/1 docs for a deeper look into the framework configuration. Please note, that the setupApplication and the setupSubsystem functions are used by blade. So if you want to customize these, make sure you call super.setupApplication() or super.setupSubsystem(argumentCollection=arguments) from within them first:

<cffunction name="setupApplication" returntype="void" access="public" output="false" hint="Wird beim Applikationsstart ausgeführt">
  <cfset super.setupApplication() />
  ... do your own stuff ...
</cffunction>

The “model” directory

blade automatically threat all (not recursive!) of your objects in the “model” directory as transients. So you have the ability to store all of your ColdFusion ORM entities in this folder. Please make sure your entity objects extend the base model class of blade.

<cfcomponent accessors="true" output="false" persistent="true" extends="blade.Model" hint="Model">
...
</cfcomponent>

If you wan’t to inject a model cfc, just inject it with the id “cfcNameModel”.

<cfproperty name="userModel" inject="id:userModel" />

The “beans” directory

All of your objects in the “beans” directory will be recursively loaded and WireBox will store them as singletons. If you wan’t to inject your bean objects into your controllers, services, or model cfc’s please note, that the id of the object will be the reverted path inside of the beans directory. A bean called “profileChar” which is stored inside of the beans/util directory will get the id “profileCharUtil”.

  • beans
    • util
      • profilechar.cfc
<cfproperty name="profileChar" inject="id:profileCharUtil" />

That’s it! For a deeper look into the framework, see the samples directory of the download.

Mehr lesen Kategorien: ColdFusion

Eventbasierte Programmierung mit ColdFusion

0

Ein Konzept was mich aus der Java Welt schon von Anfang an begeistert hat, ist die eventbasierte Programmierung. Dieses Paradigma basiert darauf, dass ein Programm im Grunde keinen statischen Fluss aufweist, sondern von Eingaben / Aktionen abhängig ist. Von sogenannten Events.

Um das Konzept zu erläutern schweife ich kurz ins echte Leben ab: Als ich heute morgen auf der Jagd nach frischen Brötchen und einem schmackhaften Kaffee war, ereignete sich vor meinen Augen ein schwerwiegender Autounfall. Als Augenzeuge ist es meine Pflicht Hilfe anzufordern. Ich rufe also den Rettungsdienst und beantworte der sachlichen Dame brav die 6 W-Fragen. Nachdem ich den Hörer aufgelegt habe und den Verunfallten zur Hilfe eile, sorgt die Telefondame dafür, dass die Helfer schnellstmöglich am Unfallort eintreffen. Falls nötig alarmiert sie sogar die Polizei.

Zurück zur eventbasierten Programmierung: Der Anruf kann als Event und die Dame als Eventhandler betrachtet werden. Die Aufgabe des Eventhandlers besteht also darin, dafür zu sorgen das alle Stellen die am Event interessiert sind informiert werden.

Wie gesagt habe ich dieses Konzept als erstes in der Java Welt angetroffen und konnte das jetzt auch erfolgreich mit ColdFusion umsetzen. Massgeblich dazu beigetragen hat der super Blog Eintrag von Brian Rinaldi. Aber ich möchte euch natürlich meine Lösung nicht vorenthalten.

&lt;cfcomponent hint="Eventhandler"&gt;

&lt;cffunction name="init" returntype="any" access="public" output="false" hint="Konstruktor"&gt;

  &lt;cfset variables.instance = structNew() /&gt;
  &lt;cfset variables.instance.listeners = structNew() /&gt;

  &lt;cfreturn this /&gt;
&lt;/cffunction&gt;


&lt;cffunction name="announceEvent" returntype="void" access="public" output="false" hint="Publiziert einen Event"&gt;
  &lt;cfargument name="name"  type="string"  required="true"  hint="Event Name" /&gt;
  &lt;cfargument name="data"  type="any"    required="true"  hint="Daten des Events" /&gt;

  &lt;cfif structKeyExists(variables.instance.listeners,arguments.name)&gt;
    &lt;cfloop array="#variables.instance.listeners[arguments.name]#" index="local.listener"&gt;
      &lt;cftry&gt;
        &lt;cfinvoke component="#local.listener#" method="#arguments.name#" data="#arguments.data#" /&gt;

        &lt;cfcatch type="any"&gt;
          &lt;!--- todo: Error Handling  ---&gt;
        &lt;/cfcatch&gt;
      &lt;/cftry&gt;
    &lt;/cfloop&gt;
  &lt;/cfif&gt;

&lt;/cffunction&gt;


&lt;cffunction name="addEventListeners" returntype="void" access="public" output="false" hint="Fügt Eventlisteners hinzu"&gt;
  &lt;cfargument name="path"  type="string"  required="true"  hint="Pfad zu den Listeners" /&gt;

  &lt;cfif directoryExists(arguments.path)&gt;
    &lt;cfset local.cfcs = directoryList(arguments.path,true,'path','*.cfc') /&gt;
    &lt;cfloop array="#local.cfcs#" index="local.cfc"&gt;
      &lt;cfset registerCFCFromPath(local.cfc) /&gt;
    &lt;/cfloop&gt;

  &lt;cfelseif fileExists(arguments.path)&gt;
    &lt;cfset registerCFCFromPath(arguments.path) /&gt;

  &lt;cfelse&gt;
    &lt;cfset registerObject(createObject(arguments.path)) /&gt;
  &lt;/cfif&gt;

&lt;/cffunction&gt;


&lt;cffunction name="addEventListenersFromBeanFactory" returntype="void" access="public" output="false" hint="Fügt Eventlisteners aus der BeanFactory hinzu"&gt;
  &lt;cfargument name="beans"  type="string"  required="true"  hint="Liste mit allen Beans" /&gt;
  &lt;cfargument name="bf"      type="any"    required="true"  hint="BeanFactory" /&gt;

  &lt;cfloop list="#arguments.beans#" index="local.beanName"&gt;
    &lt;cfif arguments.bf.containsBean(local.beanName)&gt;
      &lt;cfset registerObject(arguments.bf.getBean(local.beanName)) /&gt;
    &lt;/cfif&gt;
  &lt;/cfloop&gt;

&lt;/cffunction&gt;


&lt;cffunction name="registerCFCFromPath" returntype="void" access="private" output="false" hint="Registriert eine Komponente anhand ihres Pfads"&gt;
  &lt;cfargument name="path" type="string" required="true" hint="Pfad zu der Komponente" /&gt;

  &lt;cfset arguments.path = replaceNoCase(replace(replace(getRelative(arguments.path),'/','.','all'),'\','.'),'.cfc','') /&gt;
  &lt;cfset registerObject(createObject(arguments.path)) /&gt;

&lt;/cffunction&gt;


&lt;cffunction name="registerObject" returntype="void" access="private" output="false" hint="Registriert ein Objekt"&gt;
  &lt;cfargument name="obj" type="any" required="true" hint="Objekt" /&gt;

  &lt;cfloop collection="#arguments.obj#" item="local.methodName"&gt;
    &lt;cfif left(local.methodName,2) EQ 'on'&gt;
      &lt;cfparam name="variables.instance.listeners.#local.methodName#" type="array" default="#arrayNew(1)#" /&gt;

      &lt;cfset arrayAppend(variables.instance.listeners[local.methodName],arguments.obj) /&gt;
    &lt;/cfif&gt;
  &lt;/cfloop&gt;

&lt;/cffunction&gt;


&lt;cfscript&gt;
/**
   * Returns a relative path from the current template to an absolute file path.
   *
   * @param abspath Absolute path. (Required)
   * @return Returns a string.
   * @author Isaac Dealey (info@turnkey.to)
   * @version 1, May 2, 2003
   */
private string function getRelative(abspath) {
  var aHere = listtoarray(getdirectoryfrompath(getcurrenttemplatepath()),"\/");
  var aThere = ""; var lenThere = 0;
  var aRel = ArrayNew(1); var x = 0;
  var newpath = "";

  aThere = ListToArray(abspath,"\/"); lenThere = arraylen(aThere);

  for (x = 1; x lte arraylen(aHere); x = x + 1) {
  if (x GT lenThere OR comparenocase(aHere[x],aThere[x])) {
  ArrayPrepend(aRel,".."); if (x lte lenThere) { ArrayAppend(aRel,aThere[x]); }
  }
  }

  for (; x lte arraylen(aThere); x = x + 1) { ArrayAppend(aRel,aThere[x]); }

  newpath = ArrayToList(aRel,"/");

  return newpath;
}
&lt;/cfscript&gt;

&lt;/cfcomponent&gt;
Mehr lesen Kategorien:

iPad Simulator auf OSX

0

Um auf dem OSX für das iPad oder das iPhone entwickeln zu können, kann man von Apple das Xcode SDK herunterladen. Das SDK wurde primär für die Entwicklung von nativen Apps entwickelt. Nach Erstellung eines neuen “Navigation Based” Projekts, lässt sich mithilfe eines Klicks auf “Build and Run” der Simulator starten und in genau diesem kann dann der Safari aufgerufen werden. Im Simulator lässt sich so das Verhalten einer webbasierenden Applikation im iPad oder iPhone austesten.

Natürlich bietet ein richtiges iPad oder iPhone mehr Features als hier getestet werden können, es ist aber schonmal ein guter Start um mit der Entwicklung zu beginnen.

Billigmöbelhäuser und deren Tücken - Teil 2

0

Wenn das so weitergeht gibts hier auf meinem Blog ne nette kleine Serie mit Anekdoten über meine Odyssee zu einer vollständig eingerichteten Wohnung.

Leider habe ich den Fehler gemacht und mich erneut mit dem bereits behandelten Möbelhaus eingelassen: Das Conforama. Zu meiner Verteidigung muss ich sagen, dass das nicht ganz freiwillig passiert ist. Objekt meiner Begierde war eine Nussbraune Kommode mit weissen Türen. Genau so eine Kommode hatte ich gesucht - aber leider keine preisgünstige Alternative gefunden. Also entschied ich mich, es doch noch einmal mit dem Denner der Möbelhäuser zu versuchen.

Als ich zur Kasse ging, lächelte mich ein überraschend aufgeweckter und freundlicher Verkäufer gutmütig an. Vielleicht hatte ich das letzte Mal wirklich nur Pech? Der Junge Herr nahm die Bestellung auf und sein Lächeln verwandelte sich zu einem breiten Grinsen: Ich hatte die letzte Kommode seiner Art erwischt. Vielleicht hätte mir das eine Warnung sein sollen?

Erstaunlicherweise gab es keine Probleme an der Kasse und mal abgesehen von der 30 Minütigen Wartezeit im Warenlager ging alles glatt.

Zuhause angekommen, machte ich mich also frohen Mutes mit meiner Freundin daran die Kommode aufzubauen. Kurz vor Fertigstellung unseres Werkes dann der Schock:

Die Löcher für die Schubladen und Tablare waren allesamt falsch gebohrt! Keine Chance ein Tablar auch nur annähernd gerade in die Kommode einzupassen. Der eine oder andere wird sich natürlich denken: Ist ja nicht so schlimm, bohrste einfach die Löcher richtig. Nachdem ich über fünf mal bei der Conforama Hotline angerufen hatte, erklärte mir das dann auch der Kundendienstmitarbeiter. Als ich ihm glaubhaft vermitteln konnte, dass ich weder Lust noch Zeit habe an meinem NEU gekauften Möbel herumzubasteln, bot er mir dann an einen Schreiner vorbei zu schicken der das Möbel reparieren sollte.

Ist es so schwer zu verstehen, dass ich von einer NEU gekauften Kommode erwarte das man sie zusammenbauen kann?

Wieso muss man den Kundendienstmitarbeiter förmlich dazu zwingen passende Teile beim Lieferanten zu bestellen - und mir KEINEN Schreiner vorbei zu schicken?

Und wieso muss ich den Mitarbeiter überzeugen, dass ich keine Lust habe die Teile auch noch extra im Conforama abzuholen?

Mehr lesen Kategorien: Allgemeines

Billigmöbelhäuser und deren Tücken - Teil 1

0

Der Bezug einer neuen Wohnung ist immer spannend. Ein neuer Abschnitt im Leben beginnt, es gibt viel Neues zu entdecken und man kann sich endlich wieder einmal mit neuen Möbeln eindecken. Was in der Theorie ganz lustig klingt, kostet in der Realität leider denkbar viele Nerven. Und das vor allem dann, wenn man sich mit Billigmöbelhäusern und deren doch recht eigensinnigen Umgang mit Kunden einlässt. Mit denkbar schlechtem Beispiel geht da das Conforama voran:

Alles Begann mit der Idee zu einem Spontanbesuch des fraglichen Möbelhauses in Zürich. Eine Matratze und ein Lattenrost sollte es sein. Die Beratung verlief frei nach dem Motto: Teurer = Besser, günstiger = Schlechter. Der freundliche Herr schien nicht gerade über die ausgeprägte Schlaferfahrung eines Faultiers zu verfügen, wies aber ansonsten frappierende Ähnlichkeiten mit dem gemütlichen Tier auf.

Nun gut, man kann in einem solchen Möbelhaus keine fundierte Beratung erwarten und vielleicht habe ich auch einfach den falschen Mann erwischt. Schauen wir also grosszügig darüber hinweg, bilden uns eine Meinung über die verfügbaren Produkte und kaufen einen Lattenrost inklusive der passenden Matratze.

Kaufen. Liefern. Glücklich.

Wenns denn so einfach wäre. Als ich meine Postkarte in den EC - Schlitz stecken wollte, meldete sich das Faultier zu Wort:

Es tut mir leider, aber wir liefern nicht nach St. Gallen. Sie müssen die Artikel bei der Filiale vor Ort bestellen.
Also gut dachte ich, bestellen wir den Artikel jetzt gleich bei der Filiale vor Ort und ich bezahle auf der Stelle - Problem gelöst. Als ich dem tierischen Verkäufer diesen Vorschlag unterbreitete erwachte er plötzlich zum Leben und fing an wilde Behauptungen aufzustellen weshalb dies nicht möglich sei. Müde und genervt zog von dannen.
Mehr lesen Kategorien: Allgemeines

OSX: Verzeichnisse zusammenführen

0

Der Finder unter OSX bietet ein nettes “Feature”: Wird ein Ordner A über einen Ordner B kopiert und besitzen beide denselben Namen, so ersetzt der Ordner A den Ordner B :( Stammt man nicht aus der Mac Welt, so ist dieses Verhalten mehr als nur unerwartet. So kann es schnell passieren, dass ungewollt Daten verloren gehen.

Abhilfe schaffen da einige Tools, die jedoch nicht kostenlos sind. Kostenlos dagegen ist ditto. Ein kleines Konsolenprogramm, welches mit OSX mitgeliefert wird und genau diese Anforderung erfüllt:

ditto -V [src] [dst]

accessibleTabs und TwitterWidget

2

Letzte Woche wollte ein Mitarbeiter von mir das jQuery Plugin accessibleTabs zusammen mit dem offiziellen TwitterWidget verwenden. Dabei hat er einen interessanten Effekt festgestellt: Die Webseite bleibt beim Seitenaufbau hängen.

Nach Rücksprache mit Dirk Ginader, dem Entwickler des Plugins, konnte das Problem schnell beseitigt werden. Die Lösung führt über die ‘id’ - Option des Twitter-Plugins. Wird diese fix vergeben, beissen sich beide JavaScript Codes nicht mehr.

JavaScript im HTML Head:

$(document).ready(function(){
    var twitterWidget = new TWTR.Widget({
    version: 2,
    id:'twitterWidget',  //Das ist die magische Zeile
    type: 'profile',
    rpp: 8,
    interval: 5000,
    width: 380,
    height: 250,
    theme: {
      shell: {
        background: '#d11e30',
        color: '#ffffff'
      },
      tweets: {
        background: '#ffffff',
        color: '#777777',
        links: '#d11e30'
      }
    },
    features: {
      scrollbar: true,
      loop: false,
      live: true,
      hashtags: true,
      timestamp: true,
      avatars: false,
      behavior: 'all'
    }
  }).render().setUser('netliveIT').start();

 $('.tabs').accessibleTabs({
    tabhead: 'h2',
    fx: 'fadeIn',
    fxspeed: 200
  });
});

HTML Code im Body Bereich:

<div class="tabs">
  <h2>Twitter</h2>
  <div class="tabbody" id="twitterWidget">
      follow us on <a href="http://twitter.com/netliveIT">twitter</a>
  </div>

  <h2>Tab2</h2>
  <div class="tabbody">
    <p>Tab Content</p>
  </div>

  <h2>Tab3</h2>
  <div class="tabbody">
    <p>Tab Content</p>
  </div>
</div>

Vielen Dank an dieser Stelle noch einmal für die schnelle und unkomplizierte Hilfe von Dirk!

Umzug zu tumblr

2

Aus verschiedenen Gründen befindet sich mein Blog nun bei tumblr. Sollten einige Links nicht mehr funktionieren, so bitte ich um Nachsicht und einen Kommentar auf der jeweiligen Seite.

Leider konnte ich die bisherigen Kommentare nicht übernehmen - aber es waren ohnehin nicht viele ;)

Mehr lesen Kategorien: Allgemeines

mura: Content Search im öffentlichen Bereich

0

mura ist ein tolles open source cms auf basis von ColdFusion. Es lässt sich kinderleicht erweitern, bringt aber auch die wichtigsten Funktionen freihaus mit. Deshalb dachte ich mir, eine einfache Suche im Webauftritt muss doch ebenfalls mitgeliefert worden sein?!

Leider wurde ich im Netz aber nicht fündig. Ihr könnt euch denken warum: Die Lösung ist viel zu einfach. Deshalb hat sich niemand die Mühe gemacht um einen Blogeintrag zu erstellen: Es reicht, wenn man die index.cfm mit folgenden Parametern aufruft:

/index.cfm?display=search&amp;keywords=searchString

Natürlich benötigt man in der Regel ein Formular, aber auch das ist nicht allzu kompliziert. Ausserdem lassen sich der Suche weitere Parameter mitgeben:

&lt;form id="searchForm" action="#cgi.script_name#"&gt;
   &lt;input type="hidden" name="display" value="search" /&gt;
   &lt;input type="hidden" name="newSearch" value="true" /&gt;
   &lt;input type="text" name="keywords" value="" /&gt;
   &lt;input type="submit" class="formbtn" value="Search" /&gt;
&lt;/form&gt;

Welche Parameter alle übergeben werden können, weiss ich noch nicht. Ich werde mir das noch einmal genauer anschauen.