Archive for the 'opensource' Category Grouped Archives

    I have now, finally, succeeded to get into working with the twitter API - one of the most popular around. I am impressed by the possibilities and will try more. This is a little script that I startes following an introduction printed in German PHP Magazin.
    The layout needs some finetuning, but it works really well. I will keep you updated when I modify it.
    This post might be interesting for you...

    • if you are an beginner or intermediate php developer looking for a base where to start coding your own twitter display.
    • if you are already experienced in copy & pasting php code into your wordpress blog, for example, expanding the functionality of your sidebar or your page template

    The Twitter API provides JSON technology and can be accessed by the cURL command. The PHP version you therefore need is 5.2 and above.
    I you like to work with this code, copy and paste it into a page on your blog or other php enabled website.
    Caution: You need to have the Exec-PHP plugin installed in order for the code to be executed. The additional CSS definitions might scramble the display of your website layout, so consider to modify it if needed.
    Does anyone know a workaround for this?
    To get the plain php code, click on "view plain" above the code display.


    Notice: Twitter only allows 100 updates per hour, so the timeline display might be empty during heavy traffic.
    Now have fun with the code:

    <?php
    // functions
    function gradientHexBGcolor($k=6){
    return sprintf("%02X%02X%02X", 29+$k*18, 9+$k*20,9+$k*20);
    }
    function gradientHexFGcolor($k=6){
    return sprintf("%02X%02X%02X", 260-$k*5, 260-$k*5,260-$k*5);
    }
    
    // Init Data
    $fill = '';
    $thisPage = $_SERVER['REQUEST_URI'];
    
    //Enter your Twitter data here:
    $twitName = "MyTwitterUsername";
    $twitPass = "MyTwitterPassword";
    $twitUserDataURL = "http://twitter.com/users/show/MyTwitterUsername.json";
    $twitGetURL = "http://twitter.com/statuses/friends_timeline.json";
    
    // Check if a hashtag was given?
    
    if (!$_POST['hashtag']) {
    		$fill = 'Enter hashtag here...';
    		}
    		else {
    		$tag = $_POST['hashtag'];
    		$twitGetURL = "http://search.twitter.com/search.json?q=%23".$tag;		
    		}
    
    // cURL 1: get Userdata:
    // Init cURL
    $curl = curl_init();
    // set Userdata URL
    curl_setopt($curl,CURLOPT_URL,$twitUserDataURL);
    // prepare for return values
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
    // set authentification
    curl_setopt($curl,CURLOPT_USERPWD,"$twitName:$twitPass");
    // get + decode return values
    $returnUser = json_decode(curl_exec($curl));
    // close cURL
    curl_close($curl);
    
    // cURL 2: get timeline or tag search data:
    // Init cURL
    $curl = curl_init();
    // set URL
    curl_setopt($curl,CURLOPT_URL,$twitGetURL);
    // prepare for return values
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
    // set authentification
    curl_setopt($curl,CURLOPT_USERPWD,"$twitName:$twitPass");
    // get + decode return values
    $return = json_decode(curl_exec($curl));
    // close cURL:
    curl_close($curl);		
    
    // define & output css style definitions:
    echo '<style type="text/css"> 
     					div, .twitapi a, p, span, table, td, input, textarea, b, blockquote, th, form {font-family:Tahoma,Trebuchet MS,Arial,sans-serif;font-size:8pt;border:0;margin:0;padding:0;line-height:140%;}				
    					div.twitapi {width:540px;background:#CDCDCD;padding:6px 0;}	
    					.twitapi p, .twitapi br {display:none;}	
    					.twitapi hr {border:0;border-top:1px dotted #FFF;}		 	
    					.twitapi table {#position:relative;border:0;border-collapse:collapse;width:100%;}	
    					.twitapi table td {width:50%;border:0;padding:0;overflow:hidden;}
     					pre {color:#000;text-decoration:none;border:0;margin:0;padding:0;} 		
    					.twitapi a, .twitapi img,.twitapi span,.twitapi div {color:#FFF;text-decoration:none;border:0;margin:0;padding:0;} 
    					div.outer {margin:6px 3%;padding:0;width:94%;}					
    					div.wrap {#position:relative;display:table;height:48px;text-align:left;margin:6px 3%;padding:0;width:94%;}
    					div.text {#position:absolute;#top:50%;display:table-cell;vertical-align: middle;padding:0;}	
    					.twForm {color:#FFF;padding:0;}									
    					.twForm span {display:block;height:24px;margin:0;padding:0;overflow:hidden;}	
     					.twForm input, button, textarea, select {width:100%;height:100%;border:0;padding:5px;color:#FFF;overflow:hidden;}
     					.twForm .button {text-align:right;}	
     					.twForm .button:hover {color:#'.gradientHexBGcolor(7).';}	 					
     					.twForm textarea {font-weight:bold;}					 				 				 													
    					div.inner {#position:relative;#top:-50%;overflow:auto;margin:0 10px;}		
    					a.img {display:inline;float:left;width:48px;height:48px;overflow:hidden;}
    					a.img img {width:48px;height:48px;border:0;}
    					
      		</style>';
    
    
    // output twitter container & headline & buttons
    echo '<div class="twitapi">
    		<div class="wrap" style="background-color:#'.gradientHexBGcolor().';">
    		<table><tr><td>
    			<a class="img" href="'.$returnUser->profile_image_url.'"><img src ="'. $returnUser->profile_image_url.'"></a>
    				
    				<form class="twForm"  action="" method="POST"><input name="line" value="" type="hidden">		 
    					<span><textarea readonly style="background-color:#'.gradientHexBGcolor(6).';">'.$twitName.'\'s timeline</textarea></span>	
    					<span>														
    					<input class="button" style="background-color:#'.gradientHexBGcolor(2).';" value="Refresh now!" type="submit">
    					</span>				
    				</form>	
    				</td>	
    				<td>					
    				<form class="twForm" action="'.$thisPage.'" method="POST">	
    					<span>	
    					<input class="text" style="background-color:#'.gradientHexBGcolor(8).';" name="hashtag" value="'.$tag.$fill.'" type="text">
    					</span>
    					<span>								
    					<input class="button" style="background-color:#'.gradientHexBGcolor(4).';"value="Search now!" name="submit" type="submit">
    					</span>				
    				</form>	
    				</td>					
    				</tr></table>								
    		</div>
    		<hr>';
    	
    
    // output tweets
    // output friends' timeline if no hashtag given, else tweets with hashtag
    if (!$tag) {
    			foreach($return as $key=>$tweet) {
    			if ($key<=10) {		
    					$text = $tweet->text;
    					// Add links to URLS
    					$text = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\" rel=\"nofollow\">\\0</a>", $tweet->text);
    					// Add links to Twitterprofiles with @	
    					$text = preg_replace("#(^|[\n ])@([^ \"\t\n\r<]*)#ise", "'\\1<a href=\"http://www.twitter.com/\\2\" >@\\2</a>'", $text); 
    					// Add links to hashtags #	
    					$text = preg_replace("#(^|[\n ])\#([^ \"\t\n\r<]*)#ise", "'\\1<a href=\"http://hashtags.org/search?query=\\2\" >#\\2</a>'", $text); 	 		 
    					echo '<div class="wrap" style="background-color:#'.gradientHexBGcolor($key).';">
    					<a class="img" href="http://twitter.com/'. $tweet->user->screen_name.'"><img src ="'. $tweet->user->profile_image_url.'"></a>		
    					<div class="text">	
    						<div class="inner" color="#'.gradientHexFGcolor($key).'">					
    					<a href="http://twitter.com/'. $tweet->user->screen_name.'">'. $tweet->user->screen_name.'</a>: 
    					'.$text.' >>'. $tweet->source.'</div></div></div>';
    					}
    			}
    		} 		
    		else {
    			foreach($return->results as $key=>$tweet) {	
    			if ($key<=10) {				
    						$text = $tweet->text;
    						// Add links to URLS
    						$text = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\" rel=\"nofollow\">\\0</a>", $tweet->text);
    						// Add links to Twitterprofiles with @	
    						$text = preg_replace("#(^|[\n ])@([^ \"\t\n\r<]*)#ise", "'\\1<a href=\"http://www.twitter.com/\\2\" >@\\2</a>'", $text); 
    						// Add links to hashtags #	
    						$text = preg_replace("#(^|[\n ])\#([^ \"\t\n\r<]*)#ise", "'\\1<a href=\"http://hashtags.org/search?query=\\2\" >#\\2</a>'", $text); 	 		 
    						echo '<div class="wrap" style = "background-color:#'.gradientHexBGcolor($key).';">
    						<a class="img" href="http://twitter.com/'. $tweet->from_user.'"><img src ="'. $tweet->profile_image_url.'"></a>				
    
    						<div class="text">	
    						<div class="inner" color="'.gradientHexFGcolor($key).'"><a href="http://twitter.com/'. $tweet->from_user.'">'. $tweet->from_user.'</a>: 
    						'.$text.' at '. date('M d,Y',strtotime($tweet->created_at)).'</div></div></div>';
    						}
    			}			
    		}		
    
    
    echo '</div>';
    ?>
    

    More then 20000 users have contributed to the growth of the project OpenStreetMaps. Using wiki principles the project collects information about streets, buildings, rivers, landscapes and everything that is usually displayed on maps. The agency Itoworld has created a video that animates the coverage of the gathered data. Really beautiful:

    So you say: What do I need another free map service for? Is Google Maps not enough?.
    Check out this comparison by Bodenseepeter [in German, illustrated]. He analyzed the extend of the two map services usinng ten examples worldwide. For example Cape Town:

    Right in OpenStreetMaps
    Left in Google Maps

    null

    Wikipedia:

    OpenStreetMap (OSM) is a collaborative project to create a free editable map of the world. The maps are created using data from portable GPS devices, aerial photography and other free sources. Both rendered images and the vector dataset are available for download under a Creative Commons Attribution-ShareAlike 2.0 licence.

    via T3N magazine Germany

    Ouha, this is a handy tiny Firefox addon. It has only 42 downloads yet, cause it’s experimental. Works fine in my FF3. Fully recommended. Get it here:

    Bigups to Alexandre Bezroutchko

    Sweetcron is a service that brings you the features of friendfeed and tumblr. Apart from the fact that it’s build for being hosted at your own web server. Kind of a wordpress for feeds. Check the developers site yongfook.com for a working demo blog.

    Update: Sweetcron Beta is out for evaluating:

    It’s closed beta right now, but the developer, Yongfook, promises to launch it soon. It is going to be 100% open source and offers some more features:

    • Automated Imports: Uploaded a photo to flickr? Bookmarked a new site? In a few minutes it will show up on your blog, thanks to the power of RSS feeds
    • Easily Customisable: Edit simple templates to change your Sweetcron look.
    • Self Hosted: You can keep alll the data safely on your own server and run Sweetcron on your own domain.
    • Fully extensible: Write your own php classes and slot them right in!

    Check the Interview with Yongfook on Lifestreamblog.com

    via t3n

    Great news for everyone who can not decide about going open source from the scratch:
    You can now download the [stubidnamed] software Wubi from wubi-installer.org. Wubi installs a full Ubuntu Hardy Haron system within windows.

    Wubi Installer screenshot from wubi-installer.org

    No need to burn a CD. Just run the installer, enter a password for the new account, and click “Install”, go grab a coffee, and when you are back, Ubuntu will be ready for you. You keep Windows as it is, Wubi only adds an extra option to boot into Ubuntu. Wubi does not require you to modify the partitions of your PC, or to use a different bootloader, and does not install special drivers.

    After starting the application, you have options for the user interface to choose from:

    • Ubuntu with GNOME interface
    • Kubuntu with KDE interface
    • Xubuntu with XFCE [for older computers]

    Then, Wubi starts to download the operating system from a Ubuntu server repository and installs it automatically regarding to your hardware. After rebooting, you can choose whether to start your computer into Windows or Ubuntu. As simple as making a sandwich.

    Minimum requirements:

    • 256 MB memory
    • 5 GB harddisk space
    • Windows 98, 2000, XP or Vista

    Sounds great. I am trying it just now. Really curious if it can compete in the everyday system battle.

    I stumbled across a popular buzzword just a few days ago: OpenMac, a promising base operating system that is ready to be obtained from a company called Psystar in a bundle with an “Open Computer”. Based on this, customers are able to install MacOS Leopard on a simple Intel / x86 hardware:

    With the EFI V8 emulator it is possible to install Leopard’s kernel straight from the DVD that you purchased at the Apple store barring the addition of a few drivers to ensure that everything boots and runs smoothly

    Psystar is marketing this as a cheaper and more expandable alternative to a genuine Apple Mac. I don’t know what these machines are capable of. We all think: Hopefully, finally, a legal MacOS Clone might hit the scene. Perhaps it will help people who don’t want to afford expensive Apple hardware to run Apple software on their cheap machines?

    Open Computer example from psystar.com

    Actually, the OpenMac company Psystar clone is close to a Cease and Desist order tasked by Apple. Which basically means that Apple will make use of their copyright rules included in Leopards License Agreement:

    You agree not to install, use or run the Apple Software on any non-Apple-labeled computer, or to enable others to do so.

    Let’s wait and observe. Surely Apple will not tolerate that. Either by weapons of law or by technical regulations [That means non-compatible updates].

    BTW: There is another open source project called “OpenMac” powered by Meshnetics, but this one regards to the Medium Access Control Layer and not to the Apple computer.

    I am captivated by stuff like that: Large chunks of data, sorted, chewn, displayed and arranged in a flexible way to make it understandable for our pea-sized minds. This is why I love the lecture and videos of Hans Rosling (via Kosmar), who managed to digest the entire data of the past 50 years’ UNO studies in one single faszinating flash tool: Gapminder.

    Here is something different:
    Dietmar Offenhuber (Austria & Cambridge) and Gerhard Dirmoser (EnergieAG) created the Network Context Visualizer Semaspace. It’s made easy to understand by this video:

    SemaSpace is a fast and easy to use graph editor for large knowledge networks, specially designed for the application in non technical sciences and the arts. It creates interactive graph layouts in 2d and 3d by means of a flexible algorithm. The system is powerful enough for the calculation of complex networks and can incorporate additional data such as images, sounds and full texts.

    Get a grip here: Two examples to try out for yourself (it’s fun to move around data in 3-dimensional space). You need to install Virtools 3D plugin in order to view this:

    Well, in 2009, the music service Musicovery might switch it’s interface to 3D with tech like that.

    Nach einer zweistündigen Webrecherche bin ich überzeugt: Als Groupware-Lösung für mittelständische Unternehmen ist Open-XChange eine bessere Investition als Micrsosofts Exchange Server.

    bilder/Xchange520.jpgsrc=

    Warum? Nun, OpenXChange ist zwar OpenSource, jedoch gibt es eine kommerzielle Variante, die Advanced Server Edition, zu der man Installationssupport und einen Wartungsvertrag erhält, die jedoch weit unter den astronomischen Preisen für Microsofts Exchange-Software bleibt. Eine grob berechnete Übersicht:

    OpenXChange MS Exchange
    Server 2003
    5 User 299 Euro
    inkl. Support
    ab 1.435 Euro
    25 User 850 Euro
    inkl. Support
    ab 2475 Euro

    Weiterer Vorteil der Bezahlversion von OpenXChange ist die Kompatibilität mit kommerzieller Desktop-Kommunikations-Software wie Outlook und Entourage. Zugleich kann OpenXchange (die Natur der Sache) beliebig konfiguriert und durch freie Module erweitert werden. Selbstverständlich können Linux-Kommunikatoren (Kontakt und Evolution) auch mit dem XChange-Server anbändeln.
    Eine Online Demo der komfortablen Web-Oberfläche überzeugt: Die Funktionen sind sauber implementiert:

    • E-Mail-Kommunikation (inkl. AJAX-basiertem Webclient)
    • Kalender mit Terminverwaltung (iCal-Standard)
    • Dokumentenmanagement
    • Wiki und Portalseite
    • Anbindung an MS Outlook
    • Webserver
    • Datenbank
    • Backuptool, Anti-Virus, Anti-Spam

    Installiert wird Open-XChange auf einem Linux-System. Das kann ein lokaler Server oder ein Webserever sein, man braucht natürlich schon mehr als nur Webspace. Ein dedizierter Server (virtuell oder physisch) muss es schon sein.
    Ein Vorteil für erfahrene Admins: Es gibt natürlich auch Gratispakete, das nur noch an die entsprechende Umgebung angepasst werden muss. Und das ist dann tatsächlich gratis. Im OpenXchange-Forum habe ich ein CD-Image einer Out of the Box Version mit Zusatzmodulen gefunden.

    Noch besser ist es, als Unternehmen am Beta-Programm der OpenXChange Express-Edition teilzunehmen. Man erhält den ersten Release Candidate frei zum Download. Dann: Einfach von CD installieren, Zugänge einrichten und los geht’s. Die Konfiguration darf da ruhig eine Woche dauern Die Installation von CD ist dialoggeführt und nicht schwerer, als Windows XP aufzuspielen. Ein Segen, wenn man sich die monetäre Ersparnis ins Bewusstsein ruft.

    1und1 nutzt bereits OpenXchange für ein gehostetes Mietangebot, das heisst dann 1und1 XChange. Immerhin noch relativ günstig, aber die laufenden Kosten sind doch sehr hoch, da pro User abgerechnet wird.

    '