Happy Birthday

Hallo zusammen,

da morgen ja noch 2 Familienmitglieder Geburtstag haben und auch es auch sonst gerade einige Geburtstagskinder gibt, habe ich mir gedacht ich mache mal eine kleine Überraschung :)

Auch hier ein Wort der Warnung: Nicht zu laut hören. Krumm und schief… aber die Idee zählt ja bekanntlich ;)

Viel Spaß und allen Geburtstagskindern: Happy Birthday!

Heute vor 100 Jahren im Atlantik – Die Titanic sank

Hallo.

Da mich MSN gerade so aufdringlich darauf hingewiesen hat… heute mal ein wenig Geschichte. Denn heute vor genau 100 Jahren sank der Luxusliner Titanic im Atlantik. Das damalige größte Schiff galt als unsinkbar. Dann kam der Eisberg… und bewies das Gegenteil. Die Titanic wurde am 02. April 2012 in Dienst gestellt und kollidierte am 12. April 1912 um 23:40 mit dem Berg aus gefrorenem Wasser und sank in 2 Stunden und 40 Minuten.

Hochmut kommt bekanntlich vor dem Fall. Auch wenn es die Leute wohl nicht gerettet hätte wenn man nicht behauptet hätte das die Titanic unsinkbar ist. Aber vielleicht hätten die Männer dann damals ein Auge mehr offen gehalten. Vielleicht dachten die Männer im Ausguck ja “Das Baby ist unsinkbar, was kann uns schon passieren?”. Wer weiß, reine Spekulation.
Definitiv ist jedoch das dass Schiff viel zu wenig Rettungsboote an Bord hatte um alle Passagiere und Besatzungsmitglieder aufzunehmen. Das dürfte definitiv auf die “Unsinkbarkeit” zurückzuführen sein.

1502 Menschen starben in der Nacht vom 12. zum 13. April 1912 im Nordatlantik bei eisigen Temperaturen im und außerhalb des Wassers. Nur 1/3 aller Seelen an Bord wurden durch die (nicht einmal voll besetzten) Rettungsboote und dann von der RMS Carpathia gerettet werden.

Am 1. September 1985 wurde der Ozeanriese von den Forschern Jean-Louis Michel und Robert Ballard 3.803 Meter unter der Wasseroberfläche wiederentdeckt.
Seitdem wurden viele Tauchfahrten zur Titanic unternommen. Zum einen um kleine Teile zu bergen (Kronleuchter, Teller, Stücke, etc.) und zum anderen um offene Fragen zu klären. Es wurden dabei ca. 5500 Objekte von der Titanic geborgen. Manche befinden sich in Museen und andere in Wanderausstellungen. Auch einige Fragen konnten geklärt werden (mehr dazu bei Wikipedia… das geht sonst zu weit hier :))

Es werden sogar Tauchfahrten für “Privatleute” angeboten. In Gänsefüßchen da der Preis bei 50.000 Euro liegt. Wer das Privat finanzieren kann… ich will mit!!

Wie geht es nun weiter mit der guten alten Titanic? Nun, es geht nicht mehr lange weiter. Die Lady wird da unten langsam aber sicher zersetzt. 1980 gab man dem Wrack noch etwa 50 Jahre… jetzt sind es nur noch 5 – 10 Jahre der man der Titanic gibt, bevor das Eisen so stark zerfressen ist das sie gänzlich in sich zusammenfällt. Es wurde sogar ein neues Bakterium gefunden das Eisen zersetzt. Es wurde nach dem Fundort benannt: Halomonas titanicae

So wie es aussieht werde ich den Riesen wohl nie selbst zu Gesicht bekommen können. Bevor ich 50.000 Euro übrig (!) hätte… wären wohl noch mal 100 Jahre rum. Schade, stelle ich mir total … unbeschreiblich … vor, in 3.803 Meter abzutauchen und diesen berühmten Ozeanriesen zu besuchen der vor 100 Jahren das letzte mal das Tageslicht erblickte. Das wäre definitiv eines dieser unbeschreiblichen und einmaligen Ereignisse im Leben.

Heute vor 100 Jahren…

PS: Wusstest Du das es eine Frau gibt die bei allen 3 Schiffsunglücken der 3 Schwesterschiffe dabei war und alle 3 überlebt hat? Violet Jessop… das nenne ich mal ein Glückskind.

[vb.net] Grafische Progressbar in Datagridview-Zelle

Hallo zusammen.

Ich bin ein großer Freund des Datagridviews. Man kann Daten sehr einfach, übersichtlich und schön in einer Tabellenform darstellen. Doch manchmal möchte man dort auch gern eine Progressbar im Datagridview anzeigen lassen. Zum Beispiel wenn man sich einen Downloader bastelt und den aktuellen Stand des Downloads grafisch darstellen möchte. Oder auch wenn man statisch einen Prozentsatz grafisch darstellen möchte.

Leider gibt es standartmäßig keine Möglichkeit eine Progressbar in ein Datagridview einzubinden und das Element selbst unterstützt es auch nicht.

Nun führen bekanntlich viele Wege nach Rom. Manche sind lang und mühsam und manche sind recht simpel.
Ich habe auf meiner Suche Seitenlange Quelltexte gefunden, fertige DLL’s und schlussendlich eine sehr simple, aber effektive Möglichkeit. Die meine eigenen Überlegungen aufgegriffen hat. Nämlich die Progressbar einfach mit einem Bild zu imitieren. Das heißt es wird einfach ein Bild erstellt, welches dann in der entsprechenden Zelle eingebunden wird.
Dazu muss ich auch gleich sagen das diese Methode sehr Prozessorlastig werden kann, wenn viele “Progressbars” im Datagrid existieren und diese oft geupdated werden. Wie viel mehr das im Vergleich zu den anderen Methoden ist, kann ich jedoch nicht sagen. Vielleicht macht es gar keinen großen Unterschied. Also entscheide selbst ob es für dein Programm geeignet ist.

Hier nun erst einmal der Code.

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim col As New ProgressColumn
        DataGridView1.Columns.Add(col)
        DataGridView1.AllowUserToAddRows = False
        DataGridView1.RowCount = 5
        Dim x As Integer = 1
        For Each row As DataGridViewRow In DataGridView1.Rows
            row.Cells(0).Value = x * 20
            x += 1
        Next
    End Sub
End Class

Public Class ProgressColumn
    Inherits DataGridViewColumn
    Public Sub New()
        MyBase.New(New ProgressCell())
    End Sub

    Public Overrides Property CellTemplate() As DataGridViewCell
        Get
            Return MyBase.CellTemplate
        End Get
        Set(ByVal Value As DataGridViewCell)
            ' Ensure that the cell used for the template is a ProgressCell.
            If Value IsNot Nothing And Not TypeOf (Value) Is ProgressCell Then
                Throw New InvalidCastException("Must be a ProgressCell")
            End If
            MyBase.CellTemplate = Value
        End Set
    End Property
End Class

Public Class ProgressCell
    Inherits DataGridViewImageCell
    Protected Overrides Function GetFormattedValue(ByVal value As Object, ByVal rowIndex As Integer, ByRef cellStyle As System.Windows.Forms.DataGridViewCellStyle, ByVal valueTypeConverter As System.ComponentModel.TypeConverter, ByVal formattedValueTypeConverter As System.ComponentModel.TypeConverter, ByVal context As System.Windows.Forms.DataGridViewDataErrorContexts) As Object
        ' Create bitmap.
        Dim bmp As Bitmap = New Bitmap(Me.Size.Width, Me.Size.Height)

        Using g As Graphics = Graphics.FromImage(bmp)

            ' Percentage.
            Dim percentage As Double = 0
            Double.TryParse(Me.Value.ToString(), percentage)
            Dim text As String = percentage.ToString() + " %"

            ' Get width and height of text.
            Dim f As Font = New Font("Verdana", 10, FontStyle.Regular)
            Dim w As Integer = CType(g.MeasureString(text, f).Width, Integer)
            Dim h As Integer = CType(g.MeasureString(text, f).Height, Integer)

            ' Draw pile.
            g.DrawRectangle(Pens.Black, 2, 2, Me.Size.Width - 6, Me.Size.Height - 6)
            g.FillRectangle(Brushes.Blue, 3, 3, CInt((Me.Size.Width - 6) * percentage / 100), CInt(Me.Size.Height - 7))

            Dim rect As RectangleF = New RectangleF(0, 0, bmp.Width, bmp.Height)
            Dim sf As StringFormat = New StringFormat()
            sf.Alignment = StringAlignment.Center
            g.DrawString(text, f, Brushes.Red, rect, sf)
        End Using

        Return bmp
    End Function


End Class

Was passiert hier nun?

Im Form_Load werden erst einmal die Datagridview-Spalten definiert und gefüllt. Dabei fällt auf das eine Zelle mit einem “ProgressColumn” definiert wird. Das ist unsere Spezielle Progressbar-Zelle. Diese kann durch die folgende Klasse “ProgressColumn” definiert werden.
Im Beispiel besteht unser Datagridview auch nur aus der einen Zelle (siehe auch Bild oben).

Dann wird das Datagridview-Element noch mit ein paar Testdaten gefüttert.

Die Klasse “ProgressColumn” lässt uns, wie gerade schon gesagt, eine spezielle Zelle definieren. Nämlich die für die Progressbar. Es ist ein Handler der erst definiert werden muss, bevor er genutzt werden kann. Verändert sich der Wert der Zelle so wird dieser Handler aufgerufen und er verarbeitet die Änderung. Um genau zu sein ruft er dann die Klasse ProgressCell auf, die wiederum das Bild erstellt.

Alle Änderungen die das Aussehen der Progressbar-Zelle betreffen, werden in der Klasse “ProgressCell” vorgenommen. Wir Hintergrundfarbe, Vordergrundfarbe, Textformatierung, usw.

Und das war es auch schon. Einfaches Prinzip, einfacher Code.

Ich hoffe das Hilft euch auch weiter… und mir beim nächsten mal auch wieder :)

Viele Grüße
Gordon

[PHP] Zeilenumbruch in PHP erzeugen

Hallo,

heute möchte ich mich mit dem Thema Zeilenumbruch in PHP beschäftigen. Ich denke der Artikel wird nicht sehr lang werden, denn das Thema ist ja mit einem kleinen Codeschnipsel getan :) Weiterlesen

Meine ersten 3 Lieder auf der Violine

Hallo zusammen.

Heute möchte ich euch nichts Gutes tun :-)

Ich hatte ja vor einer Weile schon mal geschrieben das ich angefangen habe Violine zu spielen. Ich will kein neuer David Garret werden (Vanessa May schon gar nicht :) )… aber es ist ein Hobby für den Winter (wenn es zu kalt zum Tauchen ist).

Die ersten Unterrichtsstunden habe ich nun gehabt und auch ein wenig zu Hause geübt – ich weiß, es müsste heißen “Ich habe fleißig zu Hause geübt”. Aber langsam wird das Wetter besser und ich habe keine Zeit mehr viel zu Hause zu spielen.

Wie auch immer. Ich kann meine ersten 3 Liedchen auf der Violine spielen. Und ich kann sogar heraushören welche das sind… oder liegt es nur daran das ich weiß um welche Lieder es sich handelt? :)

Als nächstes werde ich wohl am Takt arbeiten müssen. Dann an den Saitenwechseln und am schöneren Klang. Der Weg ist noch weit, aber der Grundstein ist gelegt :) Und vielleicht kann ich zu Weihnachten dann wirklich 1-2 Lieder mit schönem Klang spielen :D

Doch beurteilt selbst.

Noch ein Wort der Warnung… stellt die Lautstärke nicht zuuuu laut. Es könnte Ohren- und Kopfschmerzen verursachen :)) Ich übernehme keine Garantie und bin nicht Haftbar für Schäden! :)

Lieder erkannt? Dann hinterlasst mir doch bitte einen Kommentar ;)