21. Juli 2017 04:36

kleinscheiss vs. enterprise

von robert 1. Apr 2007 18:56 (vor 3763 Tagen) ~ comments (0)

viel beratungszeit verbringe ich mit erklärungen, warum lösung xy soviel zeit in anspruch nimmt, vermeintlich teuer ist etc. liebe leutchen sage ich dann immer: „das ist enterprise.“ ich habe nun eine kleine arbeitsgruppe gebildet, die diesen unterschied anhand von real world scenarios erklären will.

die aufgabenstellung lautet eine software für den betrieb einer bäckerei zu erstellen.

fall 1

exwurstbudenbesitzer detlev hauser ist mit seiner php-hauser gmbh auf den internetzug aufgesprungen und präsentiert folgendes programm:


include_once("frameset.php");
include_once("kopf.php");

class Baecker{ var $brote=120; var $kasse=100; var $preis=3;

function brot($wieviel, $kunde){
    if(($this->brote-$wieviel >= 0) &&
        $cash=$kunde->bezahl($this->preis*$wieviel)){
        $kunde->einstecken($wieviel);
        $this->brote-=$wieviel;
        $this->kasse+=$cash;
        return true;    
    }else{
        return false;
    }
}

}

class Kunde{ var $geld=500; var $brote=0;

function bezahl($preis){
    if($this->geld-$preis >= 0){
        $this->geld-=$preis;
        return $preis;
    }else{
        return false;
    }
}

function einstecken($wieviel){
    $this->brote+=$wieviel;
}

}

$b=new Baecker; $k1=new Kunde; $k2=new Kunde; $b->brote(1, $k1); $b->brote(5, $k2); $b->brote(1, $k1); $b->brote(8, $k2);

include_once(„schweissfuss.php“);

aufwand: 2 MT (in rechnung gestellt, eigentlich nur 1 tag, der andere wurde einem bordellbesuch gewidmet)

der kunde war grundsätzlich zufrieden. das programm läuft seit einem halben jahr stabil.

unsere arbeitsgruppe fand 36 fehler in der anwendung, wovon aber scheinbar nur einer relevant ist. der fiel bereits am 2. tag nach inbetriebnahme auf.

bei der lösung gibt es viel zu kritisieren. da ist zum einen das hartkodierte mapping der produkte auf objektfunktionen. das ist ein sehr kurzsichtiges vorgehen und für die erweiterbarkeit des programms nicht sehr hilfreich. in spätestens 120 jahren wird sich der kunde ärgern, dass er mit dem bereits jetzt absehebaren spagetticode in eine sackgasse geraten ist. zum anderen versucht der programmierer mit einer pseudolustigen fusszeile individualität zu demonstrieren und die tatsache zu verwischen, dass der kunde hier nur noch-ein-weiteres-produkt-von-der-stange erhält.

fall 2

die mit der rüstungsindustrie großgewordene agentur powerofbeans.com setzt in ihrer mittelstand division voll auf offene standards wie java. nach guten erfahrungen mit dem spring framework, entschied man sich diesen weg weiterzugehen und die erfolgsgeschichte der agentur fortzuschreiben. hier ein auszug aus ihrer lösung (wegen diverser NDAs kann leider nur ein teil veröffentlicht werden).


package com.powerofbean.shop.bakery.model;

import java.util.HashMap; import java.util.Map; import java.io.InputStream; import java.sql.Timestamp; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap;

import org.springframework.util.StringUtils; import org.springframework.util.Assert; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware;

import com.powerofbean.struts.common.Constants;

/** * This abstract class defines the method used for reading and writing the * object's labels (internationalising) and other important properties * look at bakery.properties for further info * @author */ public abstract class BakeryBean extends AbstractBean implements ShopModel, OpenableShop, UnableToOpenUnbuffered, TaxBeanModelPropStrut, SchiessMichTotOverideLaterGrussEgon, CustomTemplateResizer, AuthorizeServiceBus {

private Map<String, String> labels;

private int ProductsTotalCount;

private int ProductsBeforeSell;

private int ProductsAfterSell;

private HashMap ProductItems;

... 

/**
 * Returns the labels.
 * @return the labels
 */
public Map<String, String> getLabels() {
    checkLabels();
    return labels;
}

/**
 * Set the labels.
 * @param labels the labels to set
 */
public void setLabels(Map<String, String> labels) {
    this.labels = labels;
}

public void setLabel(String key, String value) {
    checkLabels();
    this.labels.put(key, value);
}

private void checkLabels() {
    if (labels == null) {
        labels = new HashMap<String, String>();
    }
}

public String getLabel(String language) {
    checkLabels();
    String label = labels.get(language);
    if (!StringUtils.hasText(label)) {
        label = labels.get(Constants.DEFAULT_LANGUAGE);
    }
    return label;
}
/**
 * Set the ProductsTotalCount.
 * @param total to set
 */
public void ProductsTotalCount(int total) {
    this.ProductsTotalCount = total;
}

/**
 * Get the ProductsTotalCount.
 * @param total to set
 */
public void GetProductsTotalCount(){
    return this.ProductsTotalCount;
}

/**
 * small helper to increment ProductsTotalCount with just 1 entity
 * @param total to set
 */
public void IncrementProductsTotalCount(int total) {
    this.ProductsTotalCount += 1;
}

/**
 * Set the ProductsTotalCount.
 * @param total to set
 */
public void SetProductsBeforeSell(int total) {
    this.ProductsBeforeSell = total;
}

public void GetProductsBeforeSell(){
    return this.ProductsBeforeSell;
}

/**
 * small helper to increment ProductsBeforeSell with just 1 entity
 * @param total to set
 */ 
public void IncrementProductsBeforeSell(){
    this.ProductsBeforeSell += 1;
}
/**
 * Set the ProductsTotalCount.
 * @param total to set
 */
public void SetProductsAfterSell(int total) {
    this.ProductsAfterSell = total;
}

public void GetProductsAfterSell(){
    return this.ProductsAfterSell;
}

/**
 * small helper to increment ProductsAfterSell with just 1 entity
 * @param total to set
 */
public void IncrementProductsAfterSell(){
    this.ProductsAfterSell += 1;
}
...

...

}

aufwand: 450 MT (davon 50 MT für bordellbesuche - nur key account manager -)

der kunde ist sehr glücklich mit der lösung. erste tests ergaben hohe geschwindigkeiten. das deployment steht leider noch aus, da einer der senior application developer (egon sch.) kurzfristig ausgeschieden ist und das projekt unter verzug geriet.

unsere arbeitsgruppe erkannte auf 863 fehler, allesamt von niedriger relevanzstufe.

die lösung wird von uns für den javac-s design award vorgeschlagen, weil sie den spagat zwischen high performance product delivery und direct to market product design principles of customer und andererseits enterprise service bus seemless continuos integration services hervorragend bewältigt.


beatport player

von robert 19. Feb 2007 20:05 (vor 3804 Tagen) ~ comments (2)

keine schlechte idee, oder? jetzt kann man einen musikspieler auf seiner homepage einbinden, der zugriff auf den beatport katalog hat. ähnlich wie auf den nervigen myspace seiten.

Go to Beatport.comGet These TracksAdd This Player

nur hier gibts gottseidank kein autoplay. wer will, bleibt also vor den hörproben dieser schönen platte verschont. ach ja: im onlineverkauf kostet das teil (13 mp3 dateien) übrigens lächerliche 25,87 Euro. habe bisher nichts gefunden, wo das sonst noch (vielleicht auch zu menschlichen preisen) verkauft wird. die labelseite ist leider grober unfug.

apropos: dumm am beatportplayer ist, dass man ihm keine eigenen playlists mitgeben kann. man kann die „experten charts“ oder die top downloads anzapfen oder die neuesten releases von einem label oder künstler promoten, oder wie hier ein release abspielen - aber eben keine lieblingsmusik.

wenn ichs mir recht überlege ist alles an diesem eintrag doof (ausser der musik, die ist toll, trotz der miserablen samplingrate).

ich würde diesen beitrag sofort wieder löschen, weil ich keine werbung für dumme dinge betreiben will, aber zum glück liest das hier ja niemand.

wenn mans bei licht betrachtet, ist das alles soo deprimierend.


2006: bestes lied, bestes video, beste band...

von robert 10. Jan 2007 15:20 (vor 3845 Tagen) ~ comments (1)

nummer 1 in allen kategorien: die klaxons - golden skans

wow das war ganz knapp vor den kooks aber so in etwa geht‘s weiter:

  • 2 the kooks - sofa song
  • 3 humanzi - fix the cracks
  • 4 the rapture - get myself into it
  • 5 css - let‘s make love and listen to death from above
  • 6 hot chip - and i was a boy from school
  • 7 the dykeenies - new ideas
  • 8 the gossip - standing in the way of control
  • 9 röyksopp - what else is there? (trentemøller remix)
  • 10 tiga - you gonna want me

könnt ihr euch alles über die hypemachine anhören.

file under glorreiche zehn, 10 auf einen streich, alle guten dinge sind 10, tokyo hotel diesmal nicht dabei


5 finger und ein paar haare

von robert 11. Nov 2006 14:35 (vor 3905 Tagen) ~ comments (1)

… falls ihr es noch nicht gesehen habt… das superduper bananenhände video:


jQuery plugin: wordcount für textareas

von robert 17. Okt 2006 22:43 (vor 3929 Tagen) ~ comments (0)

habe heute mein erstes jQuery plugin geschrieben. es ersetzt ein liebgewonnenes javascript von richard livsey

um es zu benutzen gibt man textareas, deren wörter und zeichen man zählen will zb. die css klasse wordcount <textarea name="fetishdescription" class="wordcount"></textarea>. dann braucht man noch textfelder, in denen die jeweiligen größen angezeigt werden können. die müssen dann eine css id name-des-textareas + WordCount für Wörterzähler oder name-des-textareas + Count für Zeichenzähler aufweisen, also: zeichen: <span id="fetishdescriptionCount"></span> bzw. wörter: <span id="fetishdescriptionWordCount"></span>

hier der quellcode:

jQuery.fn.wordcount=function(){
    var base=this;

    var counter=function(){
        var base=this;
        var name=jQuery(base).name();

        var countit=function(){
            var words=num_words(jQuery(base).val());
            var len=jQuery(base).val().length;
            jQuery("#"+name+"WordCount").html(words);
            jQuery("#"+name+"Count").html(len);
        };

        jQuery(base).keyup(countit);
    };


    var num_words=function(string){
        string = string + ' ';
        string = string.replace(/^[^A-Za-z0-9]+/gi, "");
        string = string.replace(/[^A-Za-z0-9]+/gi, " ");
        var items = string.split(" ");
        return items.length -1;
    }

    jQuery(base).each(counter); 
}

$(document).ready(function(){
   $("textarea.wordcount").wordcount();
}


Bevor ich's vergesse...

von robert 17. Okt 2006 16:37 (vor 3929 Tagen) ~ comments (0)

FEATURES="-sandbox" emerge -1 sandbox 

Top Suchwort...

von robert 29. Sep 2006 19:28 (vor 3947 Tagen) ~ comments (0)

via google: penispumpe und ein leuchtendes ei


die Thüringenhymne

von robert 29. Sep 2006 18:31 (vor 3947 Tagen) ~ comments (0)

das mit brandenburg kennen bestimmt schon alle. aber thüringen ist auch nicht schlecht…


wie kann ich wav dateien in mp3 umwandeln und dann veröffentlichen (weil ich reich und berühmt werden will)?

von robert 5. Sep 2006 19:29 (vor 3971 Tagen) ~ comments (0)

diese frage bekomme ich öfter gestellt, weil „du dich doch mit computern auskennst…“. deshalb hier mein Vorschlag dazu:

1. besorgt euch den LAME codec.

LAME ist englisch und heißt auf deutsch lahm. der encoder ist aber garnicht lahm, sondern fix und liefert ausgezeichnete mp3 dateien. viele leute behaupten er sei der beste mp3 kodierer der welt. die entwickler sehen den namen als akronym für „LAME Ain‘t an MP3 Encoder“. runterladen kann man sich das teil in einer windows version unter dieser adresse:

http://www-users.york.ac.uk/~raa110/audacity/lame.html

die homepage des projekts liegt auf sourceforge

2. LAME installieren

in dem zip file das ihr euch runtergeladen habt gibt es 3 versionen von lame, eine exe datei, eine dll und einen systemfilter. letzterer liegt im verzeichnis ACM. dort klickt ihr mit der rechten maustaste auf die .inf datei. im kontextmenü wählt ihr installieren. viele audioprogramme können jetzt die codec benutzen.

3. software installieren

da habe ich 2 empfehlungen: exact audio copy eignet sich zum rippen von cds. mit diesem programm kann man aber auch vorhandene wav dateien in mp3 wandeln.

die zweite empfehlung ist razor lame. mit diesem programm können wav dateien in mp3 gewandelt werden oder auch vice versa (andersrum).

4. software für lame einrichten

eac arbeitet mit dem lame filter zusammen, während razor lame die exe datei braucht, um arbeiten zu können.

bei eac stellt man den lame codec unter EAC/ Kompressionseinstellungen ein. ich empfehle eine auflösung von 192 kb/s. am besten auch gleich den wav header ausschalten und die .raw endung in .mp3 ändern.

 

bei razor lame geht ihr auf Edit/ Options und stellt den pfad zur lame.exe ein. d.h. ihr müßt hier den ordner suchen, den ihr beim entpacken des zips erstellt habt, und auf die exe datei zeigen.

 

unter Edit/ Lame options stellt ihr dann die gewünschte Datenrate ein.

 

5. veröffentlichen und berühmt werden

ehrlich gesagt weiß ich nicht, wie ihr mit eurer musik berühmt werden könnt. ich weiß, es geht irgendwie aber wie nur..?… am anfang wäre es sicher gut, das teil „ins netz zu stellen“. es gibt da verschiedene varianten, wie z.b. myspace.com wo wohl jetzt ganz viele stars rausgekommen sind… man kann auch irgendwo einen weblog anlegen, zb. hier auf alotta.net und die dateien da reinladen und dann vielleicht auch einen podcast anbieten, falls man das einigermaßen regelmäßig machen will… tja dann muß man nur noch allen bescheid sagen und schon ist man xcm.sasde24$$%&/

 abspeichern unter: das kann ich auch, pippileicht, 
                   tokyo hotel, beyonce

Habe Performancing vergessen...

von robert 1. Sep 2006 14:54 (vor 3976 Tagen) ~ comments (0)

hier unten mussde drücken!

weil: ich hatte dieses firefox blogger plugin installiert, woraufhin sich scheinbar nichts getan hat. heute ist mir dann dieses kleine symbol unten rechts aufgefallen. und ja; es funktioniert!

…naja bilder hochladen geht damit leider nicht.


Ach, weils so schön war

von robert 31. Aug 2006 22:04 (vor 3976 Tagen) ~ comments (2)

..ich mach doch nur spaß

… mach ich gleich noch einen eintrag, wo ich verkünden kann, dass jetzt auch die löschfunktion der bloggerAPI unterstützt wird. habs aber nicht getestet, weil ich keinen beitrag zum löschen gefunden habe :)

das logo stammt übrigens von einem tollen generator. den habe ich mal für unseren web2.0 pionier arbeiten lassen.


Alotta kann jetzt RPC

von robert 31. Aug 2006 16:13 (vor 3977 Tagen) ~ comments (0)

Habe die letzten 2 Tage damit zugebracht unserem Weblog die metaWeblogApi beizubringen. Mit Hilfe dieser Schnittstelle ist es möglich, Blogeinträge mit einem Schreibtischprogramm zu erstellen und zu bearbeiten.

Irgendwie ist das natürlich cool. Diesen Beitrag schreibe ich gerade mit Textmate. Auf der Macromates Seite gibts auch ein Video (heutzutage gibts ja für alles Videos…), wie man sowas macht.

Ansonsten ist das natürlich alles Käse. Die Schreibtischprogramme machen irgendwie alle einen schrottigen häßlichen Eindruck, Microsofts neues Blogtool eingeschlossen. Trotzdem eine kleine Liste von Programmen, mit denen man bloggen kann.

Die API bezeichne ich mal als BETA. Es gibt soviele Varianten, dass mir der Kopf schwirrt und die Dokumentationen sind auch alle ziemlich dünn.

Der Einstiegspunkt zum Editieren lautet:
http://www.alotta.net/[dein_blogname]/rpc

Viel Spaß beim Ausprobieren.

André war mal wieder der Erste.


4 von 8<12345678>
About
alotta-log is your friendly blogserver. multiuser - multiblog - php/my/xorc based.

currently this is a beta version. stay tuned.
Impressum
Disclaimer
"this site looks best if you come over here and look at my monitor."
 
Themen
Unser T-Shirt
neueste eintraege in diesem blog
mixtape

1 DJ T / Robot Riot - Electric Press Remix

2 Bucci Bag / More Lemonade - Sparkling Version

3 Soto / Hootenanny - Original Mix

4 Joe Galdo / Keef - Original Mix

5 Myagi / Subversion - Price Cuts Remix

6 DJ Fixx / Electric - Original Mix

7 DJ Fixx / Push Em Up - Original Mix

8 Klaus / Big Man - Original Mix

9 Jesse Saunders / Everybody - Slapin Breaks Remix

10 Soto / Manic - Soto Remix

11 Chikinki / Like It Or Leave It

www.flickr.com
Administration

rss/xml xorc based

alotta-less, 2009