WMF: Fitnessgagdets – sinnvoll oder nutzlos?

Webmasterfriday

 

Es ist wieder soweit. Es ist Freitag und der WebmasterFriday steht an.
Jeden Freitag gibt es ein Thema zu dem alle Blogger eingeladen sind ihre Meinung nieder zuschreiben.
Das heutige Thema lautet: Fitnessgagdets – sinnvoll oder nutzlos?

 

 

Wieso dieses Thema?
Erstmal möchte ich zu einer anderen Sache etwas kurzes sagen.
Dies ist meine zweite Teilnahme am WMF und ich dachte, ich schlag‘ direkt mal ein Thema vor.
Es freut mich das mein Thema auch für diesen WMF ausgewählt wurde.

Was gibt es eigentlich für Gagdets?
Um erst einmal einen Überblick zu bekommen, habe ich kurzerhand Google bemüht und ca. 23.300.000 Ergebnisse bekommen.
FG1

Es gibt also viel zu schreiben zu diesem Thema.

Ich denke man muss die Gruppe der Fitnessgagdets in zwei Gruppen teilen: Einmal die professionellen Geräte und einmal die Lifestyle Geräte.
Zu den professionellen Geräten würde ich die ganzen Pulsuhren zählen, eine Bekannte von mir trägt eine Pulsuhr von Polar und ist damit sehr zufrieden.
Die Lifestyle Geräte sind m.E. nach die Fitnessarmbänder, wie sie momentan hoch im Kurs sind, z.B. von Jawbone, Nike oder fitbit.

Nutzlos oder Sinnvoll? Was bringen mir diese Geräte?
Nun, das muss natürlich jeder für sich selbst entscheiden.
Ich denke gerade für Läufer und/oder professionelle Sportler sind die Pulsuhren gut geeignet. Meist besitzen diese noch Zubehör, wie einen Brustgurt zur genauen Messung.
Die Uhren sind aber recht teuer und brauchen ein gewisses Know-How, wie man die Daten auswertet.
Die Lifestyle Bänder sind eher für den „Otto-Normal-Bürger“ gedacht, der etwas für seine Gesundheit tun will.
Screenshot_2014-01-27-10-19-00Nein, das Band macht einen nicht schlanker, aber es führt einen den eigenen Lebensstil vor Augen,
denn die meisten Bänder haben eine schicke App oder Webauswertung dabei und bieten damit einen höheren Komfort für den Nutzer.
Ebenfalls kann man bei den meisten Bändern seine Essgewohnheiten eintragen (bzw. Portale, wie MyFitnessPal, verbinden) und somit
eine genaue Gegenüberstellung generieren. Jawbone macht das beispielsweise mit hübschen Balken.
Ich als un-versierter Nutzer kann also recht einfach meine Ess- und Bewegungsaktivitäten im Auge behalten und steuern.

Nutze ich sowas?
Ja, ich habe mir auch vor einigen Woche ein Band gekauft. Ein Jawbone UP (affliate link) um genau zu sein.
Daher kann ich sagen, dass diese Bänder durchaus ihre Daseinsberechtigung haben.
Seit ich das UP habe, ernähre ich mich viel bewusster. Kombiniert haben ich das UP übrigens mit dem Portal MyFitnessPal, welches noch genauere Ernährungsanalysen anbietet.
Um im Team abnehmen macht doch gleich viel mehr Spaß 😉

Fazit
Ja, Fitnessgagdets sind nach meiner Meinung sinnvoll. Sie helfen mir mich bewusster zu ernähren und mehr zu bewegen.
Ob man nun zwischen 100€ und 200€ für ein Band oder eine Uhr ausgeben will, sei jedem selbst überlassen.
Meine Empfehlung ist klar das UP (Link zum Review), was aber sicher daran liegt, dass ich das Band seit Wochen nutze.
Aber auch das fitbit ist sicher einen Blick wert und am Nike+ FuelBand würde mich das Display reizen.

Wie ist nun eure Meinung? Tragt ihr auch ein Fitnessband?
Schreibt es in die Kommentare oder nehmt doch auch am Webmasterfriday teil.
Viel Spaß beim Diskutieren, ich freue mich auf eure Antworten.

 

 

 

 

Plugin in PHP – Klasse in OOP

Wie ich angekündigt habe, möchte ich euch meine Pluginklasse erneut vorstellen.
Diesmal aber in OOP.

Damit jedes Plugin verbindliche Klassen zur Verfügung stellt, erstellen wir ein Interface:

Datei IgPlugin.php

<?php
	interface IgPlugin
	{

		public function getName();
		public function setName($name);

		public function getVersion();
		public function setVersion();

		public function getAutor();
		public function setAutor();

		public function install();
		public function update($version);
		public function unistall();

		public function run();
	}
?>

Das Plugin ist dann folgendermaßen aufgebaut:

</pre>
<?php

	require_once("class/IgPlugin.php");
	
	class test implements IgPlugin
	{
		private $name = "TestPlugin";
	
		public function getName() { return $this->name; }
		public function setName($name){}
		
		public function getVersion(){}
		public function setVersion(){}
		
		public function getAutor(){}
		public function setAutor(){}
		
		public function install(){}
		public function update($version){}
		public function unistall(){}
		
		public function run(){ echo "Plugin l&auml;uft"; }
	}
	
?>

Die Datei gPlugin.php ist nun die Klasse für das Laden der Plugins:


<?php
	
	/**
	 * Klasse gPlugin
	 *
	 * Klasse zum Starten, Installieren, Updaten und Deinstallieren
	 * von Plugins
	 *
	 * @author Alexander Grüßung
	 * @version 2.0
	 */
	 
	class gPlugin
	{
		/**
		 * private field
		 */
		private $pluginName;
		
		/**
		 * private field
		 */
		private $pluginInstance;
	
		/**
		 * Konstruktor lädt Plugin in den Speicher
		 */
		public function __construct($pluginName)
		{
			$this->setPluginName($pluginName);
			$this->loadPlugin();
		}
		
		//Getter und Setter für PluginName
		private function setPluginName($pN) { $this->pluginName = $pN; }
		private function getPluginName() { return $this->pluginName; }
		
		//Getter und Setter für PluginInstance
		private function setPluginInstance($instance) { $this->pluginInstance = $instance; }
		private function getPluginInstance() { return $this->pluginInstance; }
	
		/**
		 * Funktion bindet Plugindatei ein und
		 * lädt Instanz in den Speicher
		 */
		private function loadPlugin()
		{
			if (file_exists($this->getPluginName().".php"))
			{
				require_once($this->getPluginName().".php");
				$name = $this->getPluginName();
				$this->setPluginInstance(new $name());
				
				if ( ($this->getPluginInstance() instanceof IgPlugin) == false)
				{
				 trigger_error("Interner Pluginfehler: Interface wird nicht implementiert", E_USER_ERROR);
				}
				
			}
			else
			{
				trigger_error("Plugin nicht gefunden", E_USER_ERROR);
			}
		}
		
		/**
		 * Plugin starten
		 */
		public function runPlugin()
		{
			//TODO Prüfen ob Plugin installiert ist
			$this->getPluginInstance()->run();
		}
	
	}
?>

Hier eine Beispieleinbindung:

<?php
	require_once("class/gPlugin.php");
	
	$p = new gPlugin("test");
	$p->runPlugin();
	
?>

 
Damit viel Spaß mit der Klasse!

Ein Pluginsystem mit Paketserver in PHP – Teil 3

Ein Pluginsystem mit Paketserver in PHP – Teil 3

Nachdem wir nun wissen, wie ein Plugin aufgebaut ist und wir wir es im Frontend verwenden, müssen wir uns mit der Frage beschäftigen, wie wir die Plugins im Backend administrieren.

Generell ist meine Überlegung, dass das ACP eine PHP Datei hat, die je nach übergebener ID aus dem Pluginordner die Backenddateien nachlädt.

Ein Beispiel: Im ACP gibt es eine Datei plugin_list.php.
Rufen wir diese Datei auf, so erscheint eine Liste mit Plugins, wie hier:

Pluginliste

Von hier aus, kann man die Plugins administrieren.
Dazu ruft man dann plugin_verwalten.php?appid=X auf, dann erscheint, je nach Plugin, die entsprechenden ACP Seite.

Um  die plugin_list.php anzuzeigen, ist nicht viel nötig.
Der nötige SQL Befehl lautet:

SELECT * FROM plugins ORDER BY id;

Geben wir die Ergebnisse einfach als eine normale Liste aus:


$query = mysql_query("SELECT * FROM plugins ORDER BY id;");

$AppsNum = mysql_num_rows();
 $AppsTd="";
 while ($AppsArray = mysql_fetch_object($query)) {
 $color ="red";

 if ($AppsArray->activate=="1" || $AppsArray->activate=="true") { $color = "lightgreen"; }
 $AppsTd .= '<tr style="background-color:'.$color.';"><td style="width:20%;">'.$AppsArray->name.'</td><td "width:5%;">'.$AppsArray->version.'</td><td "width:45%;">'.$AppsArray->desc.'</td><td "width:35%;"><a href="plugin_verwalten.php?appid='.$AppsArray->id.'">Administrieren</a></td></tr>';
 }

 echo 'Installierte Erweiterungen:<br><div class="cel" style="height:auto;">
 <table style="width:100%;"><tr style="border: 1px black solid;"><td>Name</td><td>Version</td><td>Beschreibung</td><td>Optionen</td></tr> '.$AppsTd.'</table></div><br /><br />';

 

Die plugin_verwalten.php ist recht einfach aufgebaut, sie prüft nur, ob die angegebene ID konform und in der Datenbank existent ist und includiert dann die hinterlegten Dateien:


<?php

 /*
 Checke die Paratemter in der GET
 */

 if (!isset($_GET['appid']) OR !is_numeric($_GET['appid'])){
 trigger_error("Die Variable \"appid\" ist entweder nicht übergeben worden oder entspricht nicht den Vorraussetzungen.",E_USER_ERROR);
 }

$appid = $_GET['appid'];

 /*
 Schauen wir mal nach der und laden alle Daten in ein array() ^^
 Und natürlich wider zählen
 */

 $query = mysql_query("SELECT * FROM plugins WHERE ID = ".$appid);

 $row = mysql_fetch_object($query);

 $num = mysql_num_rows();

 /*
 Wenn jetzt $num = 0 oder > 1 ist, dan stimmt was nicht
 */

 if ($num != 1) {
 trigger_error("Die ID ist nicht vorhanden und/oder mehrmals vergeben. Dies macht eine eindeutige Identifikation unmöglich.",E_USER_ERROR);
 }

 /*
 So, dann schauen wir mal OptionFile an und laden die Datei hier rein^^
 */
 define("apppath",$row->path);
 require_once(apppath."/cp/index.php");

 /*
 Für mich ist die Sache damit erledigt :)
 */

Okay, nun wissen wir, wie wir die Backenddateien verwalten.

Im nächsten Teil installieren wir die Plugins via einem Updateserver.

Zur Hauptseite