Schlagwort-Archiv: programming

Learning MSIL

Microsoft’s Intermediate Lanugage is cool stuff! Since I never spent time on doing low-level language things like writing in assembler or MSIL, I really want to learn it now, or at least the general basics. My far goal is to create a language translator which parses D code and ‚prints‘ out MSIL code…so D will become .Net/CLI – in a system-independent environment (Mono-driven)!

Btw, MSIL is only a kind of mnemonic – the formal language name is ECMA-335. Its spec sheet including a bunch of examples can be found at:

http://www.ecma-international.org/publications/standards/Ecma-335.htm

How to ‚hack‘ C#

Well, it’s not really a hack – it rather is a quite interesting fact I found out indirectly while analysing MSIL code:

public string get_myProp() { return p; }
public void set_myProp(string s) { p = s; }

string p = "";
public string myProp
{
	get { return p; }
	set { p = value; }
}

.. The C# compiler can’t build this code – instead, it says that the members called ‚get_myProp‘ and ‚set_myProp‘ cannot be defined twice 😀

How to detect if a mobile device visits your website?

I just investigated how to answer the question mentioned in the headline – and found a pretty easy solution:

There’s a very smart tutorial given on the following page:
http://mobiforge.com/developing/story/lightweight-device-detection-php

Here’s a slightly modified php version of it:
(Code taken and edited from http://mobiforge.com/developing/story/lightweight-device-detection-php)

function IsMobileDevice()
{
    if (preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|android)/i', strtolower($_SERVER['HTTP_USER_AGENT'])))
        return true;

    if ((strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml') > 0) or ((isset($_SERVER['HTTP_X_WAP_PROFILE']) or isset($_SERVER['HTTP_PROFILE']))))
        return true;

    $mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'], 0, 4));
    $mobile_agents = array(
        'w3c ','acs-','alav','alca','amoi',
        'audi','avan','benq','bird','blac',
        'blaz','brew','cell','cldc','cmd-',
        'dang','doco','eric','hipt','inno',
        'ipaq','java','jigs','kddi','keji',
        'leno','lg-c','lg-d','lg-g','lge-',
        'maui','maxo','midp','mits','mmef',
        'mobi','mot-','moto','mwbp','nec-',
        'newt','noki','oper','palm','pana',
        'pant','phil','play','port','prox',
        'qwap','sage','sams','sany','sch-',
        'sec-','send','seri','sgh-','shar',
        'sie-','siem','smal','smar','sony',
        'sph-','symb','t-mo','teli','tim-',
        'tosh','tsm-','upg1','upsi','vk-v',
        'voda','wap-','wapa','wapi','wapp',
        'wapr','webc','winw','winw','xda ',
        'xda-');

    if (in_array($mobile_ua,$mobile_agents))
        return true;

    if (strpos(strtolower($_SERVER['ALL_HTTP']),'OperaMini') > 0)
        return true;

    if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'windows') > 0)
        return true;

    return false;
}

if(IsMobileDevice()){
    // Redirect to subdomain or do something else
    header("Location: http://mobile.example.com");
    exit();
}

// Load normal page content

fxLib

So, decided to put in a link to my small Win32 & OpenGL wrapper library called FXLIB for the Digital Mars Programming Language.

The following code produces a simple window with an ‚OK‘-Button.
Note: I’ve chosen the C# naming convention for the classes and function names.

pragma(lib,"fx.lib");

import std.stdio, std.cstream;
import fx.myfx;

class MyWin:Window
{
	this(){
		Size=Point(200,150);
		Text="Hello World!"w;

		auto b=new Button(this,"Click me!"w,10,10, 100,25);
		b.OnClick~=(Object sender){
			MessageBox.Show(
				"That was a button."w,
				"Caption"w);
		};
	}
}

void main()
{
	auto w=new MyWin();
	w.Show();

	Application.Run();
}

Warum nicht den eigenen Stromverbrauch visualisieren?

Angesichts der hohen Stromrechnungen des letzten Jahres hatte ich nun doch das Bedürfnis, zu analysieren, wer wann wie viel und wie lange verbraucht. Obligatorisch in Kombination mit dem Austesten neuer Technologien. Ich entschied mich für die Web-Basis, da mir hier vor allem ein sehr guter Diagramm-Generator sowie eine optimale Datenbankanbindung dank eigenem lokalen Webserver gegeben war. Schnell ein kleines Web-Interface zusammengeschustert – ein Rahmen, einige Menüpunkte sowie allgemeine Layoutfrimeleien – fertig. Mit konventionellem Programmieraufwand, wie man ihn von desktopgebundenen Applikationen her kennt, hätte das nur noch länger gedauert und bei weitem nicht so gut ausgesehen!

Nachdem die Datenbank sowie das Eingabeformular aufgesetzt waren, gab ich die schon während der Entwicklungszeit abgelesenen Zählerstände plus dazugehöriger Uhrzeit ein. Davon ausgehend sollten nun alle Berechnungen stattfinden:

  • Absoluter Stromverbrauch im Wochenverlauf (einfaches W(t)-Diagramm)
  • Vergleich von Tagesverbrauchen (ebenfalls W(t), jedoch beginnt jeder Tag erneut bei (0,0); Sollten tagesinitiale Messungen nicht um 0.00 Uhr getätigt worden sein, wird ein konstanter Stromverbrauch bis zum ersten Messpunkt angenommen, sodass eine weitgehende Korrektheit aller Darstellungen angenommen werden kann)
  • Die jeweils zwischen 2 Messpunkten vorhandene, durchschnittliche beanspruchte Leistung in Watt (P(t)-Diagramm), sodass es erkennbarer ist, welcher Verbraucher zu welcher Zeit Strom zieht.
  • Statistische Hochrechnungen:
    • Totaler Stromverbrauch  pro Tag (Ist eine Messreihe nicht genau über 24h erfolgt, werden die Eckdaten (Letzter Zählerstand – Erster Zählerstand) durch den Messzeitraum dividiert, und anschließend mit 24 multipliziert, sodass auch hier der totale 24-Stundenverbrauch geringfügig erschätzt wird)
    • Schätzung des Jahresverbrauchs (Alle bei 1. geschätzten Tagesverbrauche werden gemittelt und mit 365.25 Tagen multipliziert)
    • Ermittlung der zu erwartenden Stromkosten

Da man jetzt nur noch fortlaufend die Zählerstände eintragen braucht, ist diese Visualisierung enorm praktisch: Einzelne Tätigkeiten, wie z.B. Essen kochen oder Fernsehen, die man selber einer Uhrzeit zuordnen kann, sind nun sehr einfach mit den jeweiligen Zählerständen assoziierbar.

Diagramme wiesind dann kein Problem mehr.

Insgesamt ein interessanter Zeitvertreib, gerade in der Ferienzeit ;D

 

D-IDE grows

Stück für Stück wächst die D-IDE in ihren Features. Neulich erst wurde der D_Parser – ein grundlegendes Modul zum Analysieren von Nutzercode – so erweitert, dass damit ein kleiner Taschenrechner, oder besser, ein Formelanalyse-Tool möglich wurde. Mathematische Termstrukturen können so einfach aufgelöst und berechnet werden.