Flash To Silverlight Converter


http://www.silverx.net/

author: Chris Cluss | posted @ Saturday, April 17, 2010 10:56 AM | Feedback (0)

Microsoft Office Outlook kann nicht gestartet werden. Das Outlook-Fenster kann nicht geöffnet werden


Nach der Installation von Office SP2 bekam ich folgende Fehlermeldung:

"Microsoft Office Outlook kann nicht gestartet werden. Das Outlook-Fenster kann nicht geöffnet werden"

Die Lösung ist Outlook mit "/resetnavpane" zu starten.

outlook.exe /resetnavpane

http://www.kultiversum.de/shop.html?ht=7059


author: Chris Cluss | posted @ Wednesday, December 09, 2009 12:41 PM | Feedback (0)

USB-Funk-Tastatur funktioniert beim booten nicht


Seit Mai habe ich ein Intel DX58SO mit I7.

Prinzipiell auch alles prima. Aber wenn ich Windows im abgesicherten Modus starten will (F8 beim booten) oder wenn ich ein Screen kam wie: Probleme beim Starten wollen Sie im abgesicherten M0dus starten, funktionierte die Tastatur einfach nicht. Also zwischen Bios und Win7 oder Vista.

Hilfe schaffte eine Einstellung im Bios, die per default disabled ist:

USB LEGACY - "Enables to enumerateUSB-Devices to older OS tzhzat are not USB aware"

Aha ... wieder was gelertnt.

 

author: Chris Cluss | posted @ Wednesday, December 09, 2009 8:43 AM | Feedback (0)

HTC HD2 - Remotedesktop auf dem Handy


Das letzte Argument ist gefunden.... brauch ich ja eigentlich nicht aber das Video liefert letzte fadenscheinige Argumente

;-)

http://www.youtube.com/watch?v=QFiDZ_wBAtM

author: Chris Cluss | posted @ Thursday, November 19, 2009 10:48 PM | Feedback (0)

ROW_NUMBER() in einem Update Statement //MSSQL


Um In einer Tabelle eine durchnummerirte Spalte  einzufügen kann man folgende Anweisung nutzen:

Alter Table [Table1] add ID_ int

Go

WITH TMP1 AS (  SELECT [ID_] ,ROW_NUMBER()over(order by Feld1,Feld2)  as Seq  FROM Table1  )
UPDATE TMP1 SET [ID_] = Seq

author: Chris Cluss | posted @ Monday, October 19, 2009 12:11 PM | Feedback (3)

MSSQL - Alle Tabellen in einer Datenbank auflisten


Hier ein SQL-Code, mit dem man alle Tabllen einer DB auflistet und die Anzahl der Felder, der Datensätze  sowie die Größe der Daten auflisten kann:

CREATE

TABLE #temp (table_name sysname ,row_count INT,reserved_size VARCHAR(50),
data_size VARCHAR(50),index_size VARCHAR(50),unused_size VARCHAR(50))
SET NOCOUNT ON INSERT #temp
EXEC sp_msforeachtable 'sp_spaceused ''?'''
SELECT a.table_name,a.row_count,COUNT(*) AS col_count,a.data_size FROM #temp a INNER JOIN information_schema.columns b ON a.table_name collate database_default= b.table_name
collate database_default GROUP BY a.table_name, a.row_count, a.data_size
ORDER BY CAST(REPLACE(a.data_size, ' KB', '') AS integer) DESC DROP TABLE #temp

author: Chris Cluss | posted @ Wednesday, September 30, 2009 9:44 PM | Feedback (2)

Endlich mal ein wirklich lustiges Video


Die Masse der Videos im Internet bieten eigentlich nichts Neues.

Das folgende Video allerdings...[man muß es länger anschauen]   bringt mich immer wieder zum lachen.

 

Also unbedingt 10 Minuten anschauen: http://aaaah.dreamworld.hu/

 

author: Chris Cluss | posted @ Tuesday, September 22, 2009 5:48 PM | Feedback (0)

Start SingleInstance of Application /VB-.NET


Nachdem ich bei Klaus gelesen hatte, wie er es gelöst hat, eine App nur einmal zu starten, musste ich nochmal extrem nachdenken, bei welchem Projekt und wie ich das gelöst hatte.

Das mir das nicht nochmal passiert, habe ich hier mal den Code verewigt.

Ursprünglich von Codeproject in c#.

    1 Imports System

    2 Imports System.Windows.Forms

    3 Imports System.Runtime.InteropServices

    4 Imports System.Text

    5 Imports System.Diagnostics

    6 Imports System.Threading

    7 Imports System.Reflection

    8 Imports System.IO

    9 

   10 Namespace SingleInstance

   11     ''' <summary>

   12     ''' Summary description for SingleApp.

   13     ''' </summary>

   14     Public Class SingleApplication

   15 

   16         Public Sub New()

   17         End Sub

   18         ''' <summary>

   19         ''' Imports

   20         ''' </summary>

   21 

   22         <DllImport("user32.dll")> _

   23         Private Shared Function ShowWindow(ByVal hWnd As IntPtr, _

   24                                            ByVal nCmdShow As Integer) As Integer

   25         End Function

   26 

   27         <DllImport("user32.dll")> _

   28         Private Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As Integer

   29         End Function

   30 

   31         <DllImport("user32.dll")> _

   32         Private Shared Function IsIconic(ByVal hWnd As IntPtr) As Integer

   33         End Function

   34 

   35         ''' <summary>

   36         ''' GetCurrentInstanceWindowHandle

   37         ''' </summary>

   38         ''' <returns></returns>

   39         Private Shared Function GetCurrentInstanceWindowHandle() As IntPtr

   40             Dim hWnd As IntPtr = IntPtr.Zero

   41             Dim process As Process = Process.GetCurrentProcess()

   42             Dim processes As Process() = Process.GetProcessesByName(process.ProcessName)

   43             For Each _process As Process In processes

   44                 ' Get the first instance that is not this instance, has the

   45                 ' same process name and was started from the same file name

   46                 ' and location. Also check that the process has a valid

   47                 ' window handle in this session to filter out other user's

   48                 ' processes.

   49                 If _process.Id <> process.Id _

   50                     AndAlso _process.MainModule.FileName _

   51                         = process.MainModule.FileName _

   52                     AndAlso _process.MainWindowHandle _

   53                         <> IntPtr.Zero Then

   54                     hWnd = _process.MainWindowHandle

   55                     Exit For

   56                 End If

   57             Next

   58             Return hWnd

   59         End Function

   60         ''' <summary>

   61         ''' SwitchToCurrentInstance

   62         ''' </summary>

   63         Private Shared Sub SwitchToCurrentInstance()

   64             Dim hWnd As IntPtr = GetCurrentInstanceWindowHandle()

   65             If hWnd <> IntPtr.Zero Then

   66                 ' Restore window if minimised. Do not restore if already in

   67                 ' normal or maximised window state, since we don't want to

   68                 ' change the current state of the window.

   69                 If IsIconic(hWnd) <> 0 Then

   70                     ShowWindow(hWnd, SW_RESTORE)

   71                 End If

   72 

   73                 ' Set foreground window.

   74                 SetForegroundWindow(hWnd)

   75             End If

   76         End Sub

   77 

   78         ''' <summary>

   79         ''' Execute a form base application if another instance already running on

   80         ''' the system activate previous one

   81         ''' </summary>

   82         ''' <param name="frmMain">main form</param>

   83         ''' <returns>true if no previous instance is running</returns>

   84         Public Shared Function Run(ByVal frmMain As System.Windows.Forms.Form) As Boolean

   85             If IsAlreadyRunning() Then

   86                 'set focus on previously running app

   87                 SwitchToCurrentInstance()

   88                 Return False

   89             End If

   90             Application.Run(frmMain)

   91             Return True

   92         End Function

   93 

   94         ''' <summary>

   95         ''' for console base application

   96         ''' </summary>

   97         ''' <returns></returns>

   98         Public Shared Function Run() As Boolean

   99             If IsAlreadyRunning() Then

  100                 Return False

  101             End If

  102             Return True

  103         End Function

  104 

  105         ''' <summary>

  106         ''' check if given exe alread running or not

  107         ''' </summary>

  108         ''' <returns>returns true if already running</returns>

  109         Private Shared Function IsAlreadyRunning() As Boolean

  110             Dim strLoc As String = Assembly.GetExecutingAssembly().Location

  111             Dim fileInfo As FileSystemInfo = New FileInfo(strLoc)

  112             Dim sExeName As String = fileInfo.Name

  113             Dim bCreatedNew As Boolean

  114 

  115             mutex = New Mutex(True, "Global\" + sExeName, bCreatedNew)

  116             If bCreatedNew Then

  117                 mutex.ReleaseMutex()

  118             End If

  119 

  120             Return Not bCreatedNew

  121         End Function

  122 

  123         Shared mutex As Mutex

  124         Const SW_RESTORE As Integer = 9

  125     End Class

  126 End Namespace

  127 

  128 

 

 

author: Chris Cluss | posted @ Saturday, August 29, 2009 7:53 AM | Feedback (0)

Generic List(Of ClassName) im Repeater


Manchmal ist es ganz praktisch eine Generic List im Repeater zu nutzen.

Mit <%# eval("Parameter")%> kommt man aber nicht weit.

Mit <%# Container.DataItem.Value1 %>aber schon:

Public Class ClassName
    
Public Value1 As String
    
Public Value2 As String
End Class

Dim Listname As New List(Of ClassName)
Dim Item1 As New ClassName

Item1.Value1 =
"TestValue1"
Item1.Value2 = "TestValue2"
Listname.Add(Item1)

Repeater1.DataSource = Listname
Repeater1.DataBind()

 

<asp:Repeater ID="Repeater1" runat="server">
  
<ItemTemplate>
        
<%#Container.DataItem.Value1%>
  
</ItemTemplate>
</asp:Repeater>

author: Chris Cluss | posted @ Thursday, August 27, 2009 4:51 PM | Feedback (0)

Das Debugging kann auf dem Webserver nicht gestartet werden. Die Objektkennung gibt kein gültiges Objekt an. (Ausnahme von HRESULT: 0x800710D8)


Ein dummer Fehler beim Konfigurieren führte dazu, daass das debuggen mit IIS7 und VS2008 nicht mehr funktionierte.

Sicherlich gibt es noch andere Ursachen für den Fehler... grundsätzlich fehlt die Windowsauthentifizierung.
Bei mir half das Folgende:

 

Windows-Authentifizierung muß aktivert sein!

 

author: Chris Cluss | posted @ Thursday, August 27, 2009 8:40 AM | Feedback (0)

Autocompletion und Quickedit in cmd.exe


Zwei Keys in Registry vereinfachen die Arbeit in der cmd.exe.

CompletionChar: vervollständigt den Dateinamen durch drücken von TAB  (Eingabe "c:\wi + TAB" => "c:\Wndows")
QuickEdit: Ermöglicht das markieren eines Textes mit der Maus ohne erst den rechten Mausklick usw.

Folgenden Tesxt einfach in eine Textdatei mit der Endung ".reg" speichern und einen Doppelklick darauf machen.

;-------------SCHNIPP--------quickedit.reg------------
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Console]
"QuickEdit"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]
"CompletionChar"=dword:00000009
;-------------SCHNAPP--------------------------------


 

author: Chris Cluss | posted @ Thursday, August 27, 2009 8:00 AM | Feedback (0)

Ausnahme von HRESULT: 0x80070057 (E_INVALIDARG)


Der Launchtermin rückt näher... höcchte Zeit für Problemme auf dem Entwicklungsserver.

Der Speicher scheint einen Fehler zu haben und nötigt Windows 2008 Server zu unvermittelten Abstürzen.

Das zu ertragen ist zwar nicht schön, aber da es nur 1 Mal täglich ist, ist die Zeit für Nachforschungen nicht da.

Nach so einem Absturz heute, bekam ich untenstehende Fehlermeldung auf der Website.
Auch das vielfach empfohlene reparieren des .NET Framework und löschen der Dateien in C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files half leider nichts.

ABER: Das Anlegen einer neuen Website im IIS7 mit dem selben Verzeichnis, lies die Website wieder funktionieren.
Also vermutlich irgendwas von den Metadaten im IIS verloren gegangen.

Weiter gehts noch ein e Woche Zeit. Hoffen wir das Beste ;-)
 

Die Datei oder Assembly oder eine Abhängigkeit davon wurde nicht gefunden. Falscher Parameter. (Ausnahme von HRESULT: 0x80070057 (E_INVALIDARG))

Beschreibung: Unbehandelte Ausnahme beim Ausführen der aktuellen Webanforderung. Überprüfen Sie die Stapelüberwachung, um weitere Informationen über diesen Fehler anzuzeigen und festzustellen, wo der Fehler im Code verursacht wurde.

Ausnahmedetails: System.IO.FileLoadException: Die Datei oder Assembly oder eine Abhängigkeit davon wurde nicht gefunden. Falscher Parameter. (Ausnahme von HRESULT: 0x80070057 (E_INVALIDARG))

author: Chris Cluss | posted @ Saturday, August 22, 2009 2:38 PM | Feedback (0)

Fulltext-Search in SQLExpress aktivieren


Wenn man im SQL Management Studio eine SQLExpress Datenbank verwaltet, dann werden die Volltextfeatures und Dialoge nicht angezeigt. Dennoch sind sie aber vollständig vorhanden und nutzbar.

--- Erst einen Katalog erstellen

CREATE FULLTEXT CATALOG [TestKatalog] WITH ACCENT_SENSITIVITY = OFF

--- Die Tabelle dem erstellten Katalog zuordnen und den PrimaryKey
--- (hier [PK_CMS_Key]) angeben

FULLTEXT INDEX ON [dbo].[CMS_Tabellenname]
KEY INDEX [PK_CMS_Key] ON ([TestKatalog]) WITH (CHANGE_TRACKING AUTO)

Go

--- die Spalten hinzufgen, die im Index enthalten sein sollen
ALTER FULLTEXT INDEX ON [dbo].[CMS_Tabellenname]  ADD ([Body],[Headline] LANGUAGE [German])

Go
--- und das Ganze aktivieren
ALTER FULLTEXT INDEX ON [dbo].[CMS_Tabellenname] ENABLE

--- Warten bis der Index erstellt ist (der Taskmanager geht
--- dabei auf fast 100%)
--- Jetzt kann der Index benutzt werden:

Select * from [CMS_Tabellenname] where contains(Body,'suchbegriff')

 

author: Chris Cluss | posted @ Sunday, August 16, 2009 10:42 AM | Feedback (0)

Platzhalter im FCKEditor einbauen und mit Linq bestimmte Tags in HTML finden, bearbeiten oder ersetzen.


In einem ASP.NET CMS habe ich eine Möglichkeit gesucht in einem FCKEditor diverse Platzhalter in Artikel-Tex einzusetzen, die später dann durch aktuelle Inhalte und Werbung ersetzt werden könne.
 
Am schönsten wäre es natürlich, wenn es auch im Editor bereits angezeigt wird um zu sehen, wie der Text um den potentiellen Inhalt läuft.
 
Die API des FCKEditors möchte ich nicht anfassen also muß iich mit vorhandenen Mitteln zu Rande kommen.
 
Trick 1.
Um die Größe und Position im Content zu definieren, nehme ich ein image in vergleichbarer Größe (wie das Bild rechts).
 
Trick 2.
Ich definiere mir Styles für den FCKEditor und generiere diese mit einem Webform.
Einbinden kann man diese über
fckBody.StylesXmlPath = "/_admin/artikel/stylesXMLPath.aspx?ArtikelID=123"&rdm=123"
 
G generiert wird dort das folgendeXML:
<?xml version="1.0" encoding="utf-8" ?>
<Styles>
     <Style name="1.Hintergrundinformation " element="img">
         <Attribute name="class" value="beistellerRechts"/>
         <Attribute name="dataid" value="534"/> Die DataID wird dynamisch erzeugt und definiert dei Auswahl
     </Style>
     <Style name="2.Related Links" element="img">   Styles werden nur bei aktiviertem Image angezeigt
         <Attribute name="class" value="beistellerRechts"/>
         <Attribute name="dataid" value="535"/>
     </Style>
 </Styles>
 
Also nach dem ich das Bild hochgeladen habe und das Image markiert habe, sind die dynamischen Styles verfügbar. Da auch eine cssClass im Style definiert ist, bekommt es auch gleich ein float:left und ein Margin:10px verpasst.
Das coole daran ist, dass dort für jenbden verfügbaren Content eine DataID als Atttribut in den ImageTag speichern kann, durch die ich später gezielt bestimmte Informationen anstelle des Bildes einfügen kann.
 
Sicher werden jetzt einige sagen, dass man dafür ja tolle Regexps schreiben könnte um das auszutauschen.
Ist mir ber zu unübersicchtlich und ich mache einfach zu wenig damit...
 
Aber mit Linq ist das ein Kinderspiel
 
        'Damit eleminieren wir alle ungültigen HTML-Entiäten
        ' Wir sprechen UTF-8 und haben seit vielen Jahren moderne Browser also weg mit den
        ' &nbsp; und &uuml; diese crashen das Xelement
        Dim Body As String = Server.HtmlDecode(ArtikelEntry.Body)
 
        'Ein Xelement draus machen
        Dim xEle = XElement.Parse("<root>" & Body & "</root>")
 
 
        '<img dataid="534" src="/userfiles/image/Beisteller.png" class="beistellerRechts" />
        'Mit dem Style im FCKEditor hat der Imagetag über eine Style-Definition
        'eine dynamische DataID bekommen.
 
        'Alle ImageTags ermitteln die eine DataID definiert haben.
        Dim k = From k1 In xEle...<img>  Where k1.@dataid > 0
 
        While k.Count > 0
 
             Dim img = k.First
            Dim dataid = img.@dataid  'DataId ermitteln um speziellen HTMLCode zu generieren  
                                                     '(überspringe ich hier mal)
 
            img.AddBeforeSelf(<b>Neuer HTML-Code z.B. DB-Abfrage usw.</b>)
            img.Remove() 'nach dem Remove neu abfragen
 
             'Alle ImageTags ermitteln die eine DataID definiert haben.
            k = From k1 In xEle...<img>  Where k1.@dataid > 0
 
        End While
 
        'Dummerweise habe ich noch keine Möglichleit _
        ' beim xElement ein innerXML ermitteln
        'Dann halt das gute XMLDocument bemühen um den ersetzten HTML-Code zu bekommen
        Dim xDoc As New XmlDocument
        xDoc.LoadXml(xEle.ToString)
 
        ArtikelEntry.Body = xDoc.InnerXml
 
Das wars... Ich liebe Linq

author: Chris Cluss | posted @ Wednesday, August 12, 2009 11:28 PM | Feedback (0)

xmlns Namespace in Linq und Datenimport nach SQLServer //mit VB.NET


Eigentlich hatte Martin Hey genau im richtigen Moment seinen Post zum Thema veröffentlicht.

 

Aber dann fiel mir ein, dass wenn es einen Vorteil von VB.NET gegenüber c# gibt, dann ja wohl im XML-Bereich.

 

Ein Imports am Kopf der Seite reicht um den Namespace Global einzufügen.

Das Ganze gepaart mit einem InsertAllOnSubmit habe ich in ein paar wenigen Zeilen alle Categories aus meinem XML-Dokument in die Datenbank importiert.

 

 

    1 Imports <xmlns="http://www.ticketonline.de/ticketonlineevents/1.0">

    2 Imports <xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    3 

    4 Partial Class LoadTicketOnline

    5     Inherits System.Web.UI.Page

    6 

    7     Protected Sub Page_Load(ByVal sender As Object, _

    8                             ByVal e As System.EventArgs) Handles Me.Load

    9 

   10         Dim XMLPath As String = Server.MapPath("/LoadticketOnline.XML")

   11         Dim x As XDocument = XDocument.Load(XMLPath)

   12 

   13         Response.Write(x.<ticketonlineevents>.<categories>.<category>.Count)

   14 

   15         Dim dbEvents As New dbEventsDataContext

   16 

   17         Dim categories = From p1 In x.<ticketonlineevents>.<categories>.<category> _

   18                          Select New t_EventCategory With _

   19                                 { _

   20                                 .d_CategoryID_TO = p1.@id.Substring(3), _

   21                                 .d_name = p1.@name, _

   22                                 .d_name_TO = p1.@name _

   23                                 }

   24 

   25         dbEvents.t_EventCategory.InsertAllOnSubmit(categories)

   26         dbEvents.SubmitChanges()

   27 

   28     End Sub

   29 End Class

 

 Und ein Ausschnitt aus der XML-Datei:

 

    1 <?xml version="1.0" encoding="utf-8"?>

    2 <ticketonlineevents xmlns="http://www.ticketonline.de/ticketonlineevents/1.0"

    3                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    4                     xsi:schemaLocation="http://www.ticketonline.de/ticketonlineevents/1.0/ticketonlineevents.xsd">

    5     <meta>

    6         <builddate>2009-07-30T07:15:01+02:00</builddate>

    7         <source>Datenquell1</source>

    8         <language>de</language>

    9     </meta>

   10     <categories>

   11         <category id="cat1000" name="all" />

   12         <category id="cat126" name="festival" />

   13         <category id="cat129" name="festival-other" />

   14         <category id="cat127" name="festival-classics" />

   15         <category id="cat128" name="festival-rock-pop" />

   16     </categories>

   17 </ticketonlineevents>

author: Chris Cluss | posted @ Thursday, July 30, 2009 5:46 PM | Feedback (0)

Vague but exiting // von der Geburtsstunde des WWW


"Eine Person muss in der Lage sein Informationen zu finden, von denen sie nicht wußte, dass sie sie gesucht hat."

Schrieb Tim Berners-Lee im März 1989  in einem Antrag am europäischen Kernforschungszetrum CERN, in dem er eine Software schreiben wollte, die es den Wissenschaftlern einfacher macht Informationen auszutauschen.


Sein Chef kommentierte diesen Antrag mit: "Vague but exiting".

Er verwirklichte dieses Projekt und entwickelte dazu den ersten Browser WorldWideWeb und den ersten Webserver unter dem Betriebssystem NeXTStep. Dies sollte den Ursprung des World Wide Webs darstellen.

 Zusammengefasst mit den ersten Gehversuchen des ARPA-Net in einem 30-minütigem "neues spezial"

kick it on dotnet-kicks.de

author: Chris Cluss | posted @ Tuesday, July 28, 2009 8:43 AM | Feedback (0)

Also sowas .... Datum in Javascript


Mit was für Fehlersuche man doch die Zeit verbringen kann.

Ich validiere per Javascript ein Geburtsdatum.

Ganz einfach:

Ein neues Datum erstellen und mit dem weiterarbeiten.

 var dummyDate = new Date(iYear, iMonth, iDay);

Ganz so einfach ist es nicht.
Der Monat ist Zero-Based also 9 für Oktober usw.

Also sowas ;-)

author: Chris Cluss | posted @ Friday, July 24, 2009 12:28 PM | Feedback (2)

Farbpaletten


Als Memo für mich:

Hannes schreibt kurz über "Gutes Design beginnt bei stimmigen Farben" und wie man Farbpaltten in Expression Design importieren kann.

Keine neuen Erkentnisse, aber den Link http://de-de.colourlovers.com/ fand ich hilfreich.

 

 

author: Chris Cluss | posted @ Friday, July 24, 2009 10:30 AM | Feedback (0)

Single-Sign-On mit ASP.NET


In seinem Artikel Building a Single Sign On Provider Using ASP.NET and WCF zeigt Mark J. Miller in 4 Teilen, wie man mit Hilfe von JASONP  ein Single Sign on implementieren kann.

 

kick it on dotnet-kicks.de

author: Chris Cluss | posted @ Thursday, July 09, 2009 8:52 AM | Feedback (0)

14 Javascript Resources zum Generieren von Charts


OOYES.NET hat 14 Javasceript -Resources zusammengefasst, mit den man Charts in Javascript generieren kann.
Von umsonst bis kostenpflichtig. Ein kurzer Blick lohnt auf jeden Fall

OOES.NET beschreibt diese noch kurz mit kleinen Screenshots:

http://ooyes.net/resources/14-javascript-resources-and-plugins-for-creating-a-stylish-chart

 

Die folgenden Links sind nur zu meiner Dokumentation:

 

Creating accessible charts using canvas and jQuery
Emprise JavaScript Charts
Flot
Pie Chart with Tooltips
jQuery Google Charts
jQuery Sparklines
moochart
JS Charts 
ProtoChart
Raphaël—JavaScript Library
PlotKit
Flotr Javascript Plotting Library
Yahoo! UI Library: Charts
TufteGraph


kick it on dotnet-kicks.de

author: Chris Cluss | posted @ Wednesday, July 08, 2009 7:31 AM | Feedback (0)

DeepZoom mit jQuery und ASP.NET


Für eine Image-Gallery in in einem Community-Projekt, habe ich mir eine Lösung mit jQuery erstellt, um Bilder online zu bearbeiten.

Also hauptsächlich  Resize und Cropping.
Dabei enstand als kleines Nebenprodukt eine Lösung, bei der man einen Deepzoom auf große Bitmaps machen kann.

Eine einfache Version davon habe ich hier mal online gestellt:
DeepZoom mit jQuery

Download als ASP.NET - Website

Das verwendete Bild auf dem Server ist 7MB groß und wird durch ein setTimeout alle 150ms aktualisiert, sofern der Ausschnitt sich geändert hat.

 Realisiert ist das ganze mit jCrop das prinzipiell ein ähnliches Beispiel bereitstellt, allerdings läd der Client sich ein großes Image und es wird mittels css ein Ausschnitt gezeigt.

Mit meinem Beispiel werden die Positionen des Rahmens an den Server übermittelt und ein entsprechendes kleines Image gerenderd und zurückgegeben.

 

Das Cropping und resizing habe ich gestern schon beschrieben.

Die Request muss ich dann nur noch auswerten und und in meine Function werfen:

     7   img = Image.FromFile(Server.MapPath("test.png"))

    8         Dim h0 = CInt(Request("h0"))

    9         Dim w0 = CInt(Request("w0"))

   10 

   11         Dim faktorW = img.Width / w0

   12         Dim faktorH = img.Height / h0

   13 

   14 

   15 

   16 

   17         Dim X1 As Integer = CInt(Request("x1")) * faktorW

   18         Dim Y1 As Integer = CInt(Request("y1")) * faktorH

   19         Dim X2 As Integer = CInt(Request("x2")) * faktorW

   20         Dim Y2 As Integer = CInt(Request("y2")) * faktorH

   21 

   22         Dim targetWidth = 150

   23         Dim targetHeight = 200

   24 

   25 

   26 

   27         Response.ContentType = "image/jpg"

   28         Response.StatusCode = 200

   29         Dim img1 = cropAndResizeImage(img, _

   30                                     targetWidth, _

   31                                     targetHeight, _

   32                                     X1, _

   33                                     Y1, _

   34                                     X2, _

   35                                     Y2, _

   36                                     Imaging.ImageFormat.Jpeg)

   37         Response.BinaryWrite(img1.ToArray)

   38 

   39         Response.End()

 


 

 

Auch der Javascript Code ist überschaubar:

    7       var(api = null)

    8                 $(window).load(function() { initCrop() });

    9                 function initCrop() {

   10 

   11                     api = $.Jcrop('#rootImage', {

   12                         aspectRatio: .75,

   13                         minSize: [25, 0],

   14                         onChange: createPreview,

   15                         onSelect: createPreview()

   16                     });

   17 

   26                 }

   27 

   28                 function createPreview(c) {

   29                     previewUrl = 'zImages.aspx?t=1'

   30                                 + '&w0=' + $('#rootImage').width()

   31                                 + '&h0=' + $('#rootImage').height()

   32                                 + '&x1=' + c.x + '&y1=' + c.y + '&x2=' + c.x2

   33                                 + '&y2=' + c.y2 + '&w=' + c.w + '&h=' + c.h

   34                 }

   35 

   36                 var previewUrl = 'trans.gif'

   37                 var previewUrlLast = ''

   38                 var aktiv = window.setTimeout("updatePreview()", 50);

   39 

   40                 function updatePreview() {

   41                     if (previewUrl != previewUrlLast) {

   42             previewUrlLast = previewUrl

   43                         $('#previewImage').attr('src', previewUrl);

   44                     }

   45                     //Timer nicht zu kurz setzen!!

   46                     aktiv = window.setTimeout("updatePreview()", 150);

   47                 }    

 

 Ich liebe jQuery ;-)

 

 kick it on dotnet-kicks.de 

 

 

author: Chris Cluss | posted @ Monday, July 06, 2009 3:22 PM | Feedback (3)

Crop und Resize Image mit ASP.NET - zum letzten Mal!


Ich mache das ja schon lange.... und ich habe auch schon einiges mit Bildern zu tun gehabt.
Aber jedes mal wieder fummele ich mir aus alten Codes oder dem Internet die Funktionen für Größenveränderungen heraus.
Meist sind diese (vor allem bei gegoogelten Beispielen) gespickt mit Spezialfunktionalität.

Diesemal habe ich mir die Mühe gemacht - ein für alle Mal - drei Funktionen zu generieren, die sowohl Cropping, Resizing oder aber beides gleichzeitig in bestmöglicher Qualität zu liefern.

Und da ich meißt nur ein Stream oder Byte() benötige, bekomme ich as Rückgabewert auch ein MemoryStream.
Diesen kann ich in die Datenbank schieben oder per BinaryWrite direkt ausgeben. 

    1 Imports System

    2 Imports System.Drawing

    3 Imports System.Drawing.Imaging

    4 Imports System.IO

    5 Imports System.Drawing.Drawing2D

    6 

    7 Partial Class _default3

    8     Inherits System.Web.UI.Page

    9 

   10 

   11     Protected Sub Page_Load(ByVal sender As Object, _

   12                             ByVal e As System.EventArgs) Handles Me.Load

   13 

   14         Dim X1 As Integer = 30 'Ausschnitt-Punkt links

   15         Dim Y1 As Integer = 30 'Ausschnitt-Punkt oben

   16         Dim X2 As Integer = 120 'Ausschnitt-Punkt rechts

   17         Dim Y2 As Integer = 120 'Ausschnitt-Punkt unten

   18 

   19         Dim targetWidth = 150  'Neue Breite für resize

   20         Dim targetHeight = 200 'Neue Höhe für resize

   21 

   22         Dim img As Image = Image.FromFile("d:\myPath\test.png")

   23 

   24         Response.ContentType = "image/png"

   25         Response.StatusCode = 200

   26         Response.BinaryWrite( _

   27                 imageFunctions.cropAndResizeImage(img, _

   28                                                 targetWidth, _

   29                                                 targetHeight, _

   30                                                 X1, _

   31                                                 Y1, _

   32                                                 X2, _

   33                                                 Y2, _

   34                                    Imaging.ImageFormat.Png).ToArray)

   35         Response.End()

   36 

   37     End Sub

   38 

   39 

   40 

   41 

   42 End Class

   43 

   44 

   45 Class imageFunctions

   46     Public Shared Function cropAndResizeImage(ByVal img As Image, _

   47                                ByVal targetWidth As Integer, _

   48                                ByVal targetHeight As Integer, _

   49                                ByVal x1 As Integer, _

   50                                ByVal y1 As Integer, _

   51                                ByVal x2 As Integer, _

   52                                ByVal y2 As Integer, _

   53                                ByVal imageFormat As Imaging.ImageFormat _

   54                ) As MemoryStream

   55 

   56         Dim bmp As New System.Drawing.Bitmap(targetWidth, targetHeight)

   57         Dim g As Graphics = Graphics.FromImage(bmp)

   58 

   59         g.InterpolationMode = InterpolationMode.HighQualityBicubic

   60         g.SmoothingMode = SmoothingMode.HighQuality

   61         g.PixelOffsetMode = PixelOffsetMode.HighQuality

   62         g.CompositingQuality = CompositingQuality.HighQuality

   63 

   64         Dim width As Integer = x2 - x1

   65         Dim height As Integer = y2 - y1

   66 

   67         g.DrawImage(img, _

   68                     New Rectangle(0, 0, _

   69                                   CInt(targetWidth), _

   70                                   CInt(targetHeight) _

   71                                   ), _

   72                     x1, y1, width, height, _

   73                     GraphicsUnit.Pixel)

   74 

   75         Dim memStream As New MemoryStream

   76 

   77         bmp.Save(memStream, ImageFormat)

   78         Return memStream

   79 

   80     End Function

   81 

   82 

   83     'Daraus ergeben sich die folgenden Methoden resize und crop:

   84     Public Shared Function resizeImage(ByVal img As Image, _

   85                         ByVal targetWidth As Integer, _

   86                         ByVal targetHeight As Integer, _

   87                         ByVal imageFormat As Imaging.ImageFormat _

   88                 ) As MemoryStream

   89 

   90         Return cropAndResizeImage(img, _

   91                                   targetWidth, _

   92                                   targetHeight, _

   93                                    0, _

   94                                    0, _

   95                                    img.Width, _

   96                                    img.Height, _

   97                                    imageFormat)

   98     End Function

   99 

  100     Public Shared Function cropImage(ByVal img As Image, _

  101                         ByVal x1 As Integer, _

  102                         ByVal y1 As Integer, _

  103                         ByVal x2 As Integer, _

  104                         ByVal y2 As Integer, _

  105                         ByVal imageFormat As Imaging.ImageFormat _

  106             ) As MemoryStream

  107 

  108         Return cropAndResizeImage(img, _

  109                                   x2 - x1, _

  110                                   y2 - y1, _

  111                                   x1, _

  112                                   y1, _

  113                                   x2, _

  114                                   y2, _

  115                                   imageFormat)

  116     End Function

  117 End Class

kick it on dotnet-kicks.de

author: Chris Cluss | posted @ Sunday, July 05, 2009 10:45 AM | Feedback (2)

Kraake ade - scheiden tut weh


NAch dem ich nun seit ca. einer Woch ausschließlich www.Bing.com als Suchmaschine nutze, habe ich die Google-Toolbar deinstalliert und die Live-Toolbar installiert.

Tschüss liebe Kraake, die letzten (fast 10) Jahre waren schön mit Dir....

 

kick it on dotnet-kicks.de

author: Chris Cluss | posted @ Friday, July 03, 2009 2:41 PM | Feedback (2)

Mittels XElement den HTMLCode validieren


Beim Entwickeln einer Webplattform macht man ja gerne den einen oderanderen HTML Fehler.
Auch wenn mir das immer seltener passiert, ist es dennoch schön wenn man gleich Probleme mittels Holzhammermethode mitgeteilt bekommt.


Bekanntlich kann man in Page Render den HTML-Code abgreifen.
Wenn man daraus ein XElement generieren kann, ist der Code zumindest schon mal valiedes XML.
Wenn dies nicht funktioniert lasse ich mir die Fehlemeldung ausgeben und kann de Fhler gleich korrigieren.

Kleiner Nebeneffekt:
Der HTML-Code ist absolut perfekt eingerückt und die Struktur klar ersichtlich, auch wenn man viele Usercontrols zusammensteckt.

Ob man dies in einer Live-Website einsetzt ist sicherlich fraglich.

    1 

    2 Partial Class _Default

    3     Inherits System.Web.UI.Page

    4 

    5 

    6 

    7     Protected Overrides Sub Render(ByVal output As HtmlTextWriter)

    8 

    9         Dim sb As StringBuilder = New StringBuilder

   10         Dim sw As IO.StringWriter = New IO.StringWriter(sb)

   11         Dim htw As HtmlTextWriter = New HtmlTextWriter(sw)

   12 

   13         MyBase.Render(htw)

   14 

   15         Dim PageHTML As String = sb.ToString().Replace("<br>", "<br/>")

   16 

   17 

   18         Try

   19             'Bei UpdatePanelanfragen ist kein <body im Code.

   20             'Diese Anfragen wollen wir nicht verändern

   21             If PageHTML.Contains("<body>") Or PageHTML.Contains("<body ") Then

   22 

   23                 PageHTML = PageHTML.Replace("<script>", _
                                        "<script type=""text/javascript"">")

   24                 PageHTML = PageHTML.Replace("><", "> <").Replace("&nbsp;", " ")

   25 

   26                 'xElement erstellen:

   27                 Dim x As XElement = XElement.Parse(PageHTML)

   28 

   29                 Dim xString = x.ToString.Replace(vbCr, vbLf).Replace(vbCrLf, vbLf)

   30 

   31                 While xString.Contains(vbLf & vbLf)

   32                     xString = xString.Replace(vbLf & vbLf, vbLf)

   33                 End While

   34 

   35                 'Der Doctype wird im XElement entfernt... also neu hinzufügen

   36                 Dim Header = "<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.1//EN""" & _

   37                                    " ""http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"">"

   38                 output.Write(Header & vbCrLf & xString)

   39                 Exit Sub

   40             Else

   41                 'Bei UpdatePanelanfragen ist kein <body im Code.

   42                 'Diese Anfragen werden unverändert zurückgegeben

   43                 output.Write(PageHTML.ToString)

   44                 Exit Sub

   45             End If

   46         Catch ex As Exception

   47             '################### Hier schlägt der Holzhammer zu!

   48             Response.Write(ex.Message)

   49             output.Write(PageHTML.ToString)

   50         End Try

   51 

   52     End Sub

   53 End Class

kick it on dotnet-kicks.de

author: Chris Cluss | posted @ Friday, July 03, 2009 12:26 PM | Feedback (0)

Windows Server Reboot auf Nachts verlegen


Nach Windows Updates will der Server ja öfters mal sein verdientes Reboot haben.

Um dies nicht tagsüber zu machen, kann man auf Windows 2008 in der Auufgabenplanung und auf Win2003 in "Geplante Tasks" einen Task anlegen, der nur eine Mal in der kommenden Nacht ausgeführt wird.
Einaml angelegt, kann er bei Bedarf wieder aktiviert werden.

Folgender Befehl führt dann den Reboot aus:
        %windir%\system32\shutdown.exe -r -f -t30 -d p:2:4

Aber Achtung alle offenen Dateien werden einfach geschlossen. Angemeldete Nutzer werden zwar informiert aber nach 30 Sekunden (-t30) einfach abgemeldet.

 

 

author: Chris Cluss | posted @ Saturday, June 27, 2009 9:57 AM | Feedback (0)