Becks Blog

Blog About Technology & Trends

3. Januar 2014
von andre
Keine Kommentare

[WordPress] Create Custom Permalinks for Custom Post Types

Hello Everybody,

Welcome back in 2014, hope you enjoyed new years eve and had a good start to 2014.

During the years I spent some time in developing a wordpress plugin. Therefore I created a Custom Post Type. But I found it totally ugly having urls like:

http://localhost/wordpress/<custom-post-type>

it would be nicer if they where like this:

http://localhost/wordpress/<custom-post-type>/<year>/<monthnumber>/<custom-post-title>

During my search on the internet I found a very helpful blog post over here, which I tried to adopt. But somehow it won’t work properly. So I asked the experts on wordpress.stackexchange.com and with the combination of the blog posts and the answers to my question I get it to work.

<?php
class CustomPost {

    public function __construct() {
        add_action( 'init', array($this, 'custom_post' ) );
        add_filter( 'post_type_link', array($this, 'cpt_permalink'), 10, 3 );
    }

    public function custom_post() {
        global $wp_rewrite;

        $labels = array(

        );

        $args = array(
            'labels'        => $labels,
            'description'   => __( 'Holds our missions and specific data', TEXT_DOMAIN ),
            'public'        => true,
            'menu_position' => 5,
            'supports'      => array( 'title', 'author', 'editor' ),
            'has_archive'   => true,
            'menu_icon'     => plugin_dir_url( __FILE__ ).'img/blaulicht_state_hover.png',
            'register_meta_box_cb' => array( $this, 'add_custom_box' )
        );
        register_post_type( 'cpt', $args );

        $wp_rewrite->add_permastruct('cpt', 'cpt/%year%/%monthnum%/%cpt%/', true, 1);
        add_rewrite_rule('cpt/([0-9]{4})/([0-9]{2})/(.+)/?$', 'index.php?cpt=$matches[3]', 'top');
    }

	function cpt_permalink( $permalink, $post_id, $leavename ) {
	    $post = get_post($post_id);
	        $rewritecode = array(
	            '%year%',
	            '%monthnum%',
	            '%day%',
	            '%hour%',
	            '%minute%',
	            '%second%',
	            $leavename? '' : '%postname%',
	            '%post_id%',
	            '%category%',
	            '%author%',
	            $leavename? '' : '%pagename%',
	        );

        if ( '' != $permalink && !in_array($post->post_status, array('draft', 'pending', 'auto-draft')) ) {
            $unixtime = strtotime($post->post_date);

            $category = '';
            if ( strpos($permalink, '%category%') !== false ) {
                $cats = get_the_category($post->ID);
                if ( $cats ) {
                    usort($cats, '_usort_terms_by_ID'); // order by ID
                    $category = $cats[0]->slug;
                    if ( $parent = $cats[0]->parent )
                        $category = get_category_parents($parent, false, '/', true) . $category;
                }
                // show default category in permalinks, without
                // having to assign it explicitly
                if ( empty($category) ) {
                    $default_category = get_category( get_option( 'default_category' ) );
                    $category = is_wp_error( $default_category ) ? '' : $default_category->slug;
                }
            }

            $author = '';
            if ( strpos($permalink, '%author%') !== false ) {
                $authordata = get_userdata($post->post_author);
                $author = $authordata->user_nicename;
            }

            $date = explode(" ",date('Y m d H i s', $unixtime));
            $rewritereplace =
            array(
                $date[0],
                $date[1],
                $date[2],
                $date[3],
                $date[4],
                $date[5],
                $post->post_name,
                $post->ID,
                $category,
                $author,
                $post->post_name,
            );
            $permalink = str_replace($rewritecode, $rewritereplace, $permalink);

            // wp_die($permalink );
        } else { // if they're not using the fancy permalink option
        }
        return $permalink;
    }
}

$wpCustomPost = new CustomPost();
?>

With the coding above you’re able to get the desired permalink structure:

http://localhost/wordpress/cpt/2014/01/hello-world

Some important advice while using flush_rewrite_rules:

Important: Flushing the rewrite rules is an expensive operation, there are tutorials and examples that suggest executing it on the'init' hook. This is bad practice. Instead you should flush rewrite rules on the activation hook of a plugin, or when you know that the rewrite rules need to be changed ( e.g. the addition of a new taxonomy or post type in your code ). – WP Codex

Last but not least, here are some very useful and interesting links, I’d found on my research.

Hope this is useful for you, if you struggle with the rewrite rules of WordPress. Please feel free to join the discussion.

BTW – this is my first blog post in english :)

11. November 2013
von andre
2 Kommentare

[Django] Einbetten von statischen Dateien am Beispiel von Bootstrap

Wer mit dem Django Framework arbeitet wird früher oder später gerne eigene CSS Files, Bilder oder evtl. JS einbetten. Im offiziellen Manual gibt es hierzu ein Kapitel: Managing static files (CSS, images). Ich muss zu meiner Schande gestehen, ich hab es mehrmals gelesen, geStackOverflowed, ein wenig googled, wieder das Manual gelesen, eine Nacht drüber geschlafen und et voila es zum Laufen bekommen.

Damit euch das euch nicht auch passiert, hier die im Manual beschrieben Schritte etwas aufbereitet:

  1. Erstellen eines Ordner static/ im Project Verzeichnis
  2. Ladet die aktuelle Bootstrap Version herunter und entpackt sie in das oben erstellte static Verzeichnis
  3. Öffnet die settings.py und ergänzt folgendes:
    PROJECT_DIR = os.path.dirname(__file__)
    DEBUG = True
    STATIC_URL = '/static/' # Falls nicht gesetzt
    STATICFILES_DIRS = (
    os.path.join(PROJECT_DIR, "static"),
    )
    
  4. In der urls.py bitte folgendes hinzufügen:
    from django.conf import settings
    from django.conf.urls.static import static
    
    # Und die patterns-Methode mit folgendem erweitern:
    urlpatterns = patterns('' ,
    ...
    ) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    
  5. Jetzt nur noch das “Base Template” anpassen:
    <!DOCTYPE html>
    {% load staticfiles %}
    {% load url from future %}
    <html lang="en">
    <head>
        <!--[if lt IE 9]>
        <script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
        <![endif]-->
    
        <link href="{% static 'bootstrap/css/bootstrap.min.css' %}" rel="stylesheet" media="screen" />
    	<link href="{% static 'css/styles.css' %}" rel="stylesheet" media="screen" /></strong></strong>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js">
    
        {% block extra_head %}{% endblock %}
    </head>
    <body>
    ...
    <script src="{% static 'bootstrap/js/bootstrap.min.js' %}"></script>
    </body>
    </html>
    

Wichtig zur Erwähnen ist noch, dass dies nur für den Entwicklungsmodus gedacht ist und keinesfalls für den produktiven Einsatz gedacht ist, siehe hierzu: Deploying static files.

Jetzt gibt es ja einige Python Dependencies, die Bootstrap Integration anbieten, z.B. django-bootstrap3 und einfach einzubetten sind. Es hat aber einiges nicht funktioniert und das Projekt hätte wieder eine Abhängigkeit mehr. Ich versuche stets nur das nötigste an Abhängigkeiten hinzuzufügen. Darum auch der “Umweg” über das Einbinden mit Hilfe von Djangos “static files”.

28. Mai 2013
von andre
Keine Kommentare

Warum die Welt keine weiteren Spieleplattformen alá Steam benötigt

Ich bin ein großer Fan von Steam. Ich kaufe auch gerne meine Spiele über den Steam Store, somit muss ich lediglich Steam auf einem Rechner installieren, freischalten und kann sofort mein Spiel herunterladen. Einzige Vorraussetzung schnelles Internet. Ich muss keine Discs mehr rumtragen, archivieren und mir dann einen Wolf suchen, wenn ich irgendwann mal wieder ein Spiel spielen möchte.

Da ich ja aktuell so arg viel Zeit habe, NICHT! Habe ich mir letztens das neue Heroes of Might & Magic 6 über Steam gegönnt. Satte 10GB Download später, startete ich voller Vorfreude das Spiel und siehe da, es installiert erstmal den Ubisoft uPlay Launcher. WTF?!!?

Dort muss ich mich registrieren, damit ich das Spiel überhaupt starten kann. Lass ich mir auch noch ein ganz kleines bisschen gefallen. Dieses uPlay synchronisiert die Speicherstände und was weiß ich noch alles mit der Cloud. Leider funktioniert das absolut nicht zuverlässig, teils muss ich 4-5 mal “try again” drücken, bis er den Cloud Sync schafft?!!? Wenn er keine Verbindung zur Cloud bekommt, kann ich kein Spielstand laden. Ich frage mich da schon in welchen Zeitalter wir sind – ist es denn so schwierig die Speicherstände lokal abzulegen und zusätzlich in die Cloud zu synchronisieren? So nach dem Prinzip von Dropbox oder wie sie alle heißen. ODER wie es Steam handhabt, die Dateien & Speicherstände lokal ablegen.

Uplay

Mit Origin kam ich nur kurz in Berührung während des Battlefield 3 Hypes, ist aber genauso ein Krampf wie uPlay …

Ich lehne mich mal etwas weit aus dem Fenster und behaupte, dass jeder Hersteller seine eigene Vertriebsplattform braucht, die doch 1000mal besser ist als die er Mitbewerber, weil er Angst hat nichts vom Kuchen abzubekommen. Meiner Meinung nach sollten sie sich lieber auf die Qualität ihrer Spiele konzentrieren und ihre Kunden nicht mit halb fertigen Spielen und noch schlechteren Plattformen ärgern. Un wenn Spiele Mängel aufweisen die doch zügig Patchen und lieber ein Patch zu viel als zu wenig.

Just my 2cents.

//Bild Quelle: Flickr

27. Mai 2013
von andre
Keine Kommentare

Umstrukturierung

Ich versuche dem Blog wieder ein wenig Leben einzuhauchen. Evtl. mit einer thematischen Neuausrichtung. Dazu plane ich in nächster Zeit folgende Veränderungen ein:

  • Neues, passenderes Theme
  • FRF Sektion wird zu Tutorials
  • Thematisch:
    • WordPress
    • Mobile
    • JavaScript (Pur + Frameworks)
    • Build Tools

Da die Erstellung von Tutorials doch einiges an Zeit beansprucht, werden diese eher unregelmäßig erscheinen, sowie es die Workload zulässt.

4. Juli 2012
von andre
3 Kommentare

WhatsApp Messenger Alternativen

Der WhatsApp Messenger ist die App schlechthin, zwischen 50.000.000 – 100.000.000 Installationen nur auf Android Devices. Damals mit einer revolutionären Idee an den Start gegangen, heute quasi fast das aus der SMS. Ich kenne niemanden mit einem Smartphone der nicht auch WhatsApp installiert hat :)

Natürlich dauert es nicht lange und es fingen an Firmen das Erfolgsmodell des WhatsApp Messengers zu kopieren. Meine persönliche Aussage dazu ist: “Dead on arrival”, aber irgendwo haben diese Apps bestimmt ihre daseins Berechtigung und Konkurrenz belebt das Geschäft ;-)

Aber diese Beitrag ist dazu da, den Versuch zu unternehmen möglichst viele WhatsApp Klone aufzulisten.

Falls welche Fehlen sollten und das wird bestimmt so sein, haut das ganze in die Kommentare rein und ich erweitere dann die Liste :)

The One and Only

WhatsApp Messenger

Plattformen:

Entwickler: WhatsApp Inc.
Link: WhatsApp Messenger

The Big Competitors

ChatOn

Plattformen:

Entwickler: Samsung
Link: Samsung ChatOn

Facebook Messenger

Plattformen:

Entwickler: Facebook
Link: Facebook Messenger

KakaoTalk Messenger

Plattformen:

Entwickler: kakao
Link: KakaoTalk Messenger

Google Talk

Plattformen:

  • Android (Vorinstalliert)

Entwickler: Google
Link: Google Talk

The Wannabees

Palringo Group Messenger

Plattformen:

Entwickler: Palringo
Link: Plaringo

Yoke Messenger

Plattformen:

Entwickler: NHH Developer Inc.
Link: Yoke Messenger

Messenger WithYou

Plattformen:

Entwickler: WithYou inc
Link: -

Cubie Messenger

Plattformen:

Entwickler: cubie
Link: Cubie Messenger

WeChat

Plattformen:

Entwickler: Tencent Technology (Shenzhen) Company Ltd.
Link: WeChat

Yahoo! Messenger

Plattformen:

Entwickler: Yahoo! Inc.
Link: Yahoo! Messenger

Chikka Text Messenger

Plattformen:

Entwickler: Chikka Philippines
Link: Chikka

Pinger Messenger

Plattformen:

Entwickler: Pinger Inc
Link: Pinger Messenger

BlackBerry Messenger

Platformen:

Entwickler: Research In Motion Limited
Link: BlackBerry

ScribMaster

Plattformen:

Entwickler: THOSTER.NET
Link: ScribMaster

Changelog:
Add 2 Services (gTalk, ScribMaster) – 05.07.2012
Initial Version – 04.07.2012

29. Juni 2012
von andre
Keine Kommentare

Und er tanzt wieder – Where the Hell is Matt?

Als mich damals 2005/2006 ein Kollege auf ein Youtube Video, indem jemand total bekloppt vor atemberaubenden Spots auf der ganzen Welt zu richtig chilliger Musik tanzte, aufmerksam machte, war ich sofort begeistert von Matt Harding und “seiner” Idee um die Welt zu reisen und rumzuhamplen. Mittlerweile gibt es von 2005, 2006, 2008 & 2012 Videos in welchen er um die ganze Welt reist und mal alleine oder im Flash-Mob vor einem Wahrzeichen eines Landes/Stadt “tanzt”. Genug gelabert, hier das aktuelle “Where the Hell is Matt?” Video:

Die anderen Videos gibts es auf seinem Youtube-Channel.

Viel Sapß beim schauen =)
Links & Infos:

http://de.wikipedia.org/wiki/Matt_Harding
http://www.wherethehellismatt.com/

29. Juni 2012
von andre
1 Kommentar

ODE Koding

Gerade eben bin ich über die Online Development Engine Koding gestolpert. Nach der Anmeldung bietet der Dienst dem Entwickler, einen voll funktionalen Web Server mit PHP, Ruby, Python, Perl, node.js, CLI, FTP, DB, SVN etc. Das ganze läuft in der Cloud und besitzt Social-Features wie das Teilen von Code-Fragmenten, gemeinsam an Projekten arbeiten usw. Hört sich spitze an? Ab Ende der Woche geht es los.

Ein nettes Video auf Vimeo zeigt das ganze noch einmal in bewegten Bildern

Im Video ist das ganze unter dem Namen Kodingen zu sehen, so hies das Projekt früher einmal.

Ich persönlich finde den Dienst allein von der Beschreibung sehr interessant, bietet vor allem  unerfahrenen WebEntwickler oder Einsteiger eine fertig Konfigurierte Entwicklungsumgebung mit IDE & Server. Für mich ein guter Ansatz, da Entwickler meistens nicht nur ein PC/Laptop haben und auf jedem Gerät immer wieder die Entwicklungsumgebung konfigurieren müssen, zwar nur einmalig, aber mit Koding einem das ganze Erspart wird.

Zur Preisgestaltung oder ob kostenlos, Freemium etc. habe ich nichts finden können.

Wie ist eure Meinung zu so einem Dienst, würdet ihr ihn Nutzen?

Links:
http://koding.com
http://blog.koding.com/2012/06/so-whats-up-are-we-releasing/
http://it-republik.de/php/news/Koding-Social-Coding-fuer-PHP-Ruby-Python-Perl-und-Node.js-063452.html

21. Mai 2012
von andre
1 Kommentar

Samsungs S-Voice geleakt

Wie in meinem letzten Artikel bereits beschrieben, liefert Samsung das Galaxy S3 ja mit einigen exklusiven Apps und Featrues aus. Nach dem bereits die Flipboard-App extrahiert wurde, hat der User ithehappy, aus dem xda-developers Forum, nun die ganzen Samsungs Apps extrahiert und zum Download bereitgestellt.

Darunter auch S-Voice, das Siri Pendant von Samsung. Muss aber sagen, das es sehr langsam und schwerfällig ist und daher nicht annähernd an Siri rankommt. (Testgerät: Galaxy Nexus S)

Entgegen der Diskussionen der letzten Wochen benötigt S-Voice kein TouchWiz-Framework oder Root, sollte also auf Non-Samsung Geräten laufen, konnte es aber leider nicht testen. Daher Benutzung auf eigene Gefahr!

Einzigste Vorraussetzung ist, dass das Gerät Android 4.0 installiert hat.

Hier noch der Link zum Thread.

Viel Spaß beim ausprobieren.

10. Mai 2012
von andre
2 Kommentare

Flipboard App für Android inkl. Download


Warning: file_put_contents(/www/htdocs/w00b2f32/mybecks/blog/wp-content/plugins/appstore/cache/358801284de.appstore) [function.file-put-contents]: failed to open stream: Permission denied in /www/htdocs/w00b2f32/mybecks/blog/wp-content/plugins/appstore/AppFunctions.php on line 49

Warning: file_put_contents(/www/htdocs/w00b2f32/mybecks/blog/wp-content/plugins/appstore/cache/358801284de.png) [function.file-put-contents]: failed to open stream: Permission denied in /www/htdocs/w00b2f32/mybecks/blog/wp-content/plugins/appstore/AppFunctions.php on line 107

Error in function _realLoadImage: The supplied filename '/www/htdocs/w00b2f32/mybecks/blog/wp-content/plugins/appstore/cache/358801284de.png' does not point to a readable file.

Mit dem Samsung Galaxy S3 wurde unter anderem die, bisher nur auf dem iPad existierende Newsreader App, Flipboard und S-Voice (Siri Pendant) vorgestellt.

Flipboard ist ein Newsreader im Magazin-Style der Feeds, Twitter und Facebook konsumieren kann. Nun hat ein findiger User, der das Galaxy S3 in den Finger hatte mit Hilfe der App AirDroid die .apk Datei von Flipboard vom S3 extrahiert und bietet sie im xda-forum zum Download an. Man kann jetzt hoffen, dass die Flipboard-App in nächster Zeit für alle Devices im Google Play Store verfügbar ist, bzw. dann wenn die Exklusivrechte von Samsung abgelaufen sind.

Zum Installieren, die App einfach auf einen Webspace, Dropbox, etc. legen, herunterladen und installieren. Vorher unter Einstellungen -> Sicherheit -> Unbekannte Herkunft aktivieren. Laut Berichten im Netz läuft die App problemlos unter Gingerbread.

User im xda-forum fragen bereits eifrig nach S-Voice, wobei die Meinungen auseinander gehen ob eine Extraktion und einfache Installation möglich ist, da es durchaus sein kann, dass S-Voice mit dem TouchWiz-Framework von Samsung gekoppelt ist. Es bleibt spannend.

UPDATE 21.05.2012
S-Voice zum Download bei xda-developers

 

Flipboard: Deine soziale Nachrichten Zeitschrift (AppStore Link) Flipboard: Deine soziale Nachrichten Zeitschrift
Hersteller: Flipboard, Inc.
Freigabe: 4+
Preis: Gratis Download

Download Flipboard.apk

27. Januar 2012
von andre
1 Kommentar

In eigener Sache

Der Blog ist jetzt seit dem 22.10.2010 aktiv, damals gestartet als Gedächtnisstütze für mich und mit dem Schwerpunkt Android Entwicklung. Wie Ihr sicherlich festgestellt habt sind die Android Themen in letzter Zeit relativ rar geworden.

Klar ich bin nach wie vor Android Nutzer und verfolge gespannt die Entwicklung, nur habe ich seit über einem Jahr nicht mehr die Zeit mich mit der Entwicklung von Android Apps auseinander zu setzen bzw. aktiv zu entwickeln. Daher werden sich kommende Android Themen eher mit Versuchen der Community, Geräte mit Android auszustatten befassen, als mit der eigentlichen Entwicklung.

Meine Thesis neigt sich momentan gegen Ende und es wird ein wenig entspannter, da die Themen, die hier auftauchen eigentlich alle meiner täglichen Arbeit oder Projekte im Studium entspringen, werde ich in nächster Zeit vermehr über folgenden Bereichen bloggen:

  • iOS Entwicklung
  • HTML5
  • WordPress PlugIn Entwicklung

Meine berufliche Veränderung und privates Interesse haben sich doch in dem letzten Jahr stark verändert und einander angenähert, sodass die letzten und kommenden Beiträge im wesentlichen die neuen privaten und beruflichen Interessen widerspiegeln.

Falls jmd Blogplaneten in Richtung der oben genannten Themengebiete kennt, wäre ich froh wenn er sie mir mitteilen könnte. In den Kommentaren, per Twitter oder per Mail. :D