pátek 25. dubna 2008

Ostatní: HP 6715s - černá obrazovka

Také máte tento notebook? A stalo se Vám někdy při práci pod operačním systémem Windows, že najednou zčernala obrazovka, notebook přestal reagovat, i když nepřešel do režimu stand-by (ventilátory i disky běžely)? Zdá se, že se nejedná o vadu kusu, ale několika sérií.

Ve většině případů tato černá obrazovka nastane ve chvíli přehrávání videa. I když jednou toto nastalo i při běžném surfování na internetu. Prý se může jednat o problém s Energy Management. Zde je několik rad, jak se pokusit tento problém vyřešit:
  • Zkusit nainstalovat nové ovladače ke grafické kartě (odkaz zde).
  • Při používání Windows Vista přepnout Energy Management na plný výkon. U notebooku je to však dost nepraktické, protože se sníží výdrž baterie.
  • V BIOSu přepnout LAN/WLAN switching na Enabled.
  • Používat Linux :o) ... pod Linuxem, prý tento problém nenastává.

Další informace najdete na tomto fóru (EN).


EDIT: První možnost, kterou jsem vyzkoušel bylo přepnutí LAN/WLAN switching, ovšem dnes při přehrávání hudby opět došlo k výše popisovanému stavu. Tato rada tedy nepomáhá. Vyzkouším nainstalovat ovladače ke grafické kartě a napíšu, jak to dopadlo.

pondělí 7. dubna 2008

.NET a C#: Co je First Chance Exception

Nedávno se mi při debuggování jednoho projektu stalo, že jsem sledoval Output okno a najednou vidím tento řádek:

A first chance exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll

Přiznám se, že jsem se s tím ještě nesetkal, začal jsem hledat na internetu. Když je v systému poprvé vyvolána výjimka, nazývá se First chance exception. To je poprvé, kdy Vám dá systém šanci na výjimku zareagovat a obsloužit ji. Pokud je přiřazen k této výjimce handler, pak je volán právě v tuto chvíli. Pokud je spuštěn debugger, pak také dostane šanci se s výjimkou vypořádat. Pokud není nikdo, kdo by výjimku obsloužil, pak nastane Second chance exception, která s největší pravděpodobností ukončí aplikaci.

středa 26. března 2008

.NET a C#: Snippety - Tvorba vlastních

Dnes začnu netradičně kódem, a ten budu vysvětlovat až posléze. Jak jsem minule napsal, snippet je xml soubor s koncovkou .snippet.

pátek 21. března 2008

.NET a C#: Typy souborů Visual Studia

Jistě jste si mnohokrát všimli, že při tvorbě jakéhokoliv projektu ve Visual Studiu, neskončíte jen u zdrojových kódu, exe souborů popřípadě dll souborů. Visual Studio používá poměrně široké spektrum typů souborů. Nabízím rychlý přehled těchto typů, který byl převzat z jednoho anglického blogu (odkaz níže)

.NET a C#: Snippets (Snippety) - Úvod

Snippety jsou kousky kódu, které můžete jednoduše vkládat - je to takový automaticky generovaný kód, nebo rychle přístupné konstrukce.

sobota 8. března 2008

.NET a C#: Enum a odlišné popisky položek

Někde jsem našel tento pěkný příklad, jak položkám enumu přiřadit odlišné popisky.

.NET a C#: ComboBox Color Picker



Pro výběr barev nám platforma .NEt nabízí dialog příhodně nazvaný ColorDialog. Někdy však nechcete spuštět celý dialog, ale stačila by vám nějaká menší komponenta čistě pro výběr barvy. Předkládám nástřel řešení, jak si vytvořit ComboBox, ve kterém budeme zobrazovat barvy. Jedná se čistě o ilustrační kód, proto jej neberte jako finální, a upravujte jej podle libosti. Budu rád, když mi sem hodíte Vaše vylepšené řešení.

středa 5. března 2008

.NET a C#: Iterace přes enum

Pokud potřebujete iterovat přes všechny "položky" enumu, provedete to následujícím způsobem:
enum dnyVTydnu
{
pondeli,
utery,
streda,
...
}
Type typEnumu = typeof(dnyVTydnu);
foreach(object polozka in Enum.GetValues(typEnumu))
{
// delej neco
}

pondělí 3. března 2008

.NET a C#: Změna barvy pozadí konzole

Pokud z nějakého důvodu potřebujete změnit barvu konzole, provede to velice jednoduše:
  using System;

Console.Title = "Konzole se změněnou barvou"; // text v záhlaví
Console.ForegroundColor = ConsoleColor.Red; // barva popředí
Console.BackgroundColor = ConsoleColor.Green; // barva pozadí

Zedgraph 2

Tento příspěvek je překladem originálního tutoriálu pro zobrazení dynamický dat. Nejedná se o doslovný překlad.

ZedGraphControl může zobrazovat statická nebo dynamická data. Pokud chcete dynamicky zobrazovat data, pokaždé, když chcete přidat grafu nová data, musíte provést následující:

  1. V kolekci GraphPane.CurveList najít křivku (tedy objekt typu CurveItem), do které chcete přidat data.
  2. Přistoupit k PointPairList (nebo jinému objektu, který implementuje rozhraní IPointListEdit) příslůšné křivky a přidat nová data.
  3. Zavolat metodu ZedGraphControl.AxisChange(), aby se přepočítaly rozsahy os.
  4. Zavolat metodu Form.Invalidate() pro update grafu.

Následující příklad obsahuje veškerý kód, kromě kódu vygenerovaného automaticky Visual Studiem. Obsahuje dvě hlavní metody:
  • Form_Load(), která provede inicializaci grafu s jednou křivkou, která zatím neobsahuje žádné body.
  • Timer_Tick(), která obsluhuje událost tiknutí časovače (timer), a přidá nová data

Graf zobrazuje základní sinusovou křivku, na kterou je každých 50 milisekund přidán nový bod. Po spuštění aplikace počkejte 25 vteřin, abyste viděli posunující se dynamická data.
V kódu je použita kolekce RollingPointPairList, která je speciální implementací IPointListEdit rozhraní. Tato kolekce udržuje stále stejný počet bodů tím, že stará data přemazává novými.

Metoda Timer_Tick() nejdříve najde naši křivku. V tomto případě zde je pouze jedna, proto jednoduše vezmeme první křivku s indexem nula (GraphPane.CurveList[0]). Potom vezmeme referenci na CurveItem.Points a přetypujeme na typ IPointListEdit. Pokud je výsledkem přetypování null, víme, že třída s daty neimplementuje rozhraní IPointListEdit, takže ji nemůžeme použít.
Ve chvíli, kdy přidáme nový bod, zařídíme, aby osa X měla vždy rozsah 30 vteřin. Minimum, maximum a velikost kroku nastavujeme ručně, takže se rozsah pohybuje s každým přidaným bodem. Stále voláme metodu AxisChange(), abychom přizpůsobyli osu Y hodnotám (AxisChange() zaručí, že se hodnoty "vlezou" na osu - tedy že budou ve viditelném rozsahu ). Invalidate() voláme, abychom se přesvědčili, že se graf překreslí.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ZedGraph;

namespace DynamicData
{
public partial class Form1 : Form
{
 // počáteční čas v milisekundách
int tickStart = 0;

public Form1()
{
InitializeComponent();
}

 private void Form1_Load( object sender, EventArgs e )
{
GraphPane myPane = zedGraphControl1.GraphPane;
myPane.Title.Text = "Test dynamických dat s komponentou ZedGraph\n" +
"(Graf začne skrolovat po 25 vteřinách)";
myPane.XAxis.Title.Text = "Čas (s)";
myPane.YAxis.Title.Text = "Napětí (V)";

// Uloží 1200 bodů. Každý po 50 ms, což dává jednu minutu.
         // RollingPointPairList je efektivní třída pro ukládání dat grafu,
         // která udržuje sadu rolujících dat, takže není potřeba přesunovat žádné hodnoty
RollingPointPairList list = new RollingPointPairList( 1200 );

  // Při inicializaci je přidána jedna křivka bez žádných dat
         // Barva křivky je modrá a body nemají žádný symbol
LineItem curve = myPane.AddCurve( "Napětí", list, Color.Blue, SymbolType.None );

    // Jeden vzorek po 50 ms
timer1.Interval = 50;
timer1.Enabled = true;
timer1.Start();

  // Ručně nastavíme rozsah osy X, takže může průběžně skrolovat,
  // namísto diskrétních krokových skoků
myPane.XAxis.Scale.Min = 0;
myPane.XAxis.Scale.Max = 30;
myPane.XAxis.Scale.MinorStep = 1;
myPane.XAxis.Scale.MajorStep = 5;

         // Přepočítáme osy
zedGraphControl1.AxisChange();

        // Uložíme si počáteční čas
tickStart = Environment.TickCount;
}

 private void timer1_Tick( object sender, EventArgs e )
{
    // Ujistíme se, že v seznamu křivek máme alespoň jednu
if ( zedGraphControl1.GraphPane.CurveList.Count <= 0 )
return;

     // Vezmeme první křivku v seznamu
LineItem curve = zedGraphControl1.GraphPane.CurveList[0] as LineItem;
if ( curve == null )
return;

     // Vezmeme PointPairList
IPointListEdit list = curve.Points as IPointListEdit;

  // Pokud je list null, znamená to, že reference na curve.Points
  // nepodporuje IPointListEdit, takže jej nebudeme moct modifikovat
if ( list == null )
return;

       // Čas měříme ve vteřinách
double time = (Environment.TickCount - tickStart) / 1000.0;

      // 3 vteřiny na jeden cyklus
list.Add( time, Math.Sin( 2.0 * Math.PI * time / 3.0 ) );

 // Rozsah osy X roluje v intervalu 30 vteřin
  // s jedním hlavním krokem mezi hodnoutou max osy X a koncem osy
Scale xScale = zedGraphControl1.GraphPane.XAxis.Scale;
if ( time > xScale.Max - xScale.MajorStep )
{
xScale.Max = time + xScale.MajorStep;
xScale.Min = xScale.Max - 30.0;
}

 // Zde přepočítáme rozsah osy Y podle zobrazených dat
zedGraphControl1.AxisChange();
    // Žádost o překreslení
zedGraphControl1.Invalidate();
}

 private void Form1_Resize( object sender, EventArgs e )
{
SetSize();
}

 // Nastavíme velikost a umístění ZedGraphControlu
private void SetSize()
{ 
// Control je vždy 10 pixelů od klienteského obdelníku formu
Rectangle formRect = this.ClientRectangle;
formRect.Inflate( -10, -10 );

if ( zedGraphControl1.Size != formRect.Size )
{
zedGraphControl1.Location = formRect.Location;
zedGraphControl1.Size = formRect.Size;
}
}
} 
} 

čtvrtek 28. února 2008

.NET a C#: Zavření cizí aplikace

Spíše praktická ukázka, jak programově zavřít cizí aplikaci z našeho kódu.

úterý 19. února 2008

.NET a C#: Export/Import dat do/z Excelu

Ukládat data z Vaší aplikace do Excelu je velice výhodné, pokud je chcete předávat dál, prezentovat je apod. Na internetu se nachází mnoho řešení, z nich některá jsou velice robustní, ale znepřehledňují kód. Řešení, které zde nabízím, jsem našel na codeproject (zde) a líbí se mi jeho jednoduchost.

úterý 12. února 2008

.NET a C#: Vznikající české fórum o .NETu

Na serveru www.dotnetforum.cz vzniká nové fórum o .NETu. Jeho cílem je poskytnout kvalitní informace týkající se programování pod platformou .NET v českém jazyce. Podle mého názoru by se časem mohlo podobat projektům jako je codeproject nebo c# Corner.
I když má zatím jen pár příspěvků, nebojte se vložit jakýkoliv dotaz, protože odezva je opravdu rychlá, díky několika nadšencům (včetně mně), kteří se snaží o jeho rapidní rozvoj.

neděle 10. února 2008

Blogger.com: Přidejte si Google Analytics do blogu na Blogger.com

Pokud chcete nějaký osvědčený sledovací nástroj pro Váš blog umístěný na Blogger.com, myslím si, že není lepší volby, než použít řešení od stejné firmy - tedy od Google. Je jím Google Analytics (GA). V tomto příspěvku nechci rozebírat GA, ale postup přidání GA do blogu.

  1. Přihlašte se přes Váš účet do Google Analytics zde: https://www.google.com/analytics (Popřípadě se nejdříve registrujte)
  2. Klikněte na "Vytvořit nový účet" vpravo nahoře.
  3. Načte se nová stránka, na které klikněte na "Registrace".
  4. Zadejte potřebné informace (URL stránek, název účtu, časové pásmo)
  5. Klikněte na "Pokračovat" a dostanete se na stránku se zdrojovým kódem. Můžete si vybrat buď starý nebo nový formát (Já bych doporučil používat již výhradně nový formát). Tento kód celý zkopírujte (CTRL - C).
  6. Přihlašte se přes svůj účet na Blogger.com, a v nastavení blogu běžte na nastavení šablony.
  7. Zvolte záložku "Upravit HTML" a najděte tyto řádky:
  8. <! – end outer-wrapper – >
    !!! Google Analytics kód zde !!!
    </body>
    </html>
  9. Uložte změny.
  10. Vraťte se do GA a zkontrolujte stav. Pokud je tam "Kód sledování nainstalován", provedli jste vše správně a za právě probíhá sběr dat, po jehož dokončení budete mít veškerý provoz na Vašem blogu pod palcem. V opačném případě zkontrolujte správnost vloženého kódu a také místo, kam jste jej uložili. V nejhorším případě celou proceduru zopakujte.

čtvrtek 31. ledna 2008

ZedGraph 1.

Tento článek je prvním z celé řady článků, které budou následovat, a zaměřuje se na komponentu pro .NET, která nabízí velice jednoduché a účelné řešení pro vytváření velkého množství grafů.

úterý 29. ledna 2008

Blogger.com: Pár doporučení pro psaní příspěvků

Protože přispěvovatelů pomalu přibývá (i když na počtu článků to není znát), a psaní příspěvků občas skýtá nějaké zádrhele, zmíním tu ty nejdůležitější.

  • Titulek příspěvku vždy opatřit prefixem kategorie. Takže titulek tohoto příspěvku říká, že spadá do kategorie Blogger.com. Prefix by tam nemusel být, ale čtenář má díky němu lepší přehled o zařazení příspěvku. Nezapomeňte při vytváření příspěvku přidat popisek kategorie.
  • Pokud chcete vložit zdrojový kód, vložte jej mezi následující html tagy. Tím se vytvoří rámeček, který je scrollovatelný. Zdrojový kód zatím musíte obarvit ručně. Snad někdo přijde na lepší alternativu
<pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto;
font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0);
background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px;
width: 98%;">
<code>
------ ZDE VÁŠ KÓD ------
</code>
</pre>
  • Co mne nejvíce překvapilo, tak do blogu nelze vkládat jiné dokumenty, než obrázky a videa. Což je opravdu velký nedostatek, a doufám, že bude brzo odstraněn. I tento problém lze řešit velice jednoduše. Na serveru www.googlepages.com si bezplatně založíte během minuty (je to vážně chvilka) účet, díky kterému získáte 100 Mb prostoru. Resp. 500 Mb, protože díky tomuto účtu můžete vytvořit až pět sajt, každá po 100 Mb. Pak si jednoduše uploadujete jakýkoliv soubor z disku, a vygenerujete si html kód, který vložíte do blogu. Tím se vytvoří link k souboru.
Zatím je to snad vše, pokud přijdete na další podobné věci, které by bylo dobré zmínit, vložte je dočasně do komentářů a já je postupně přidám k příspěvku.

-------------------
31.1.2008

Protože jsem zprovoznil kategorie (které stačilo jen zapnout), nemusíte k článkům přidávat prefixy. Příspěvek zařadíte do příslušné kategorie tím, že jej opatříte popiskem (štítkem). Můžete zadat i více popisků, tím pádem bude příspěvěk spadat pod více kategorií. Chcete-li vytvořit novou kategorii, opatříte příspěvek štítkem se jménem kategorie.

úterý 22. ledna 2008

C# a .NET: DataGridView a ScrollBary

DataGridView je nová komponenta v .NET frameworku od verze 2.0 výše. Její komplexnost není třeba představovat. Kromě toho, že dědí události Controlu, definuje také svých vlastních 162 událostí. Pokud nepotřebujete žádné vlastní speciality, bohatě si vystačíte s tím, co je již naprogramováno, jen skládáte metody, používáte vlastnosti apod.

úterý 15. ledna 2008

C# a .NET: Uložení objektů do Application Settings

Do jistého projektu (bakalářská práce) jsem potřeboval implementovat samozřejmou věc, jako je Nastavení. Nejdřív jsem chtěl vše řešit pomocí xml souborů. Dříve jsem s XML v .NETu nedělal, takže jsem vše zjišťoval tak nějak za pochodu. A protože mám hodně zanořené elementy (cca 10 elementů zanořených do sebe), byla by tvorba takového xml dost těžkopádná.

Pak jsem objevil Application Settings a zajásál jsem.

sobota 12. ledna 2008

Ostatní: 12-01-08-11-11-00 Zrod

Mnohokrát se mi stalo, že jsem během programování (nebo spíše pokusů o programování) potřeboval nějakou konkrétní fintu, nějakou berličku, co a jak udělat v C# potažmo v .NETu. Někdy stačil jeden dotaz do googlu, jindy to bylo na delší dobu, a několikrát jsem vůbec nic nenašel.Na hodně serverech a dokonce českých najdete různé tutoriály, které Vás naučí základy (jak se používají výjimky, co jsou to generické typy, jak na abstraktní třídy), ale tyto základy si osvojíte velice rychle a pak zjistíte, že nemáte kde brát zdroje.
V tom případě jsou výborné servery c-sharpcorner.com codeguru.com apod. Já bych rád vytvořil něco jako zákysník, kam budu přidávat různé kousky kódu, s jehož sestavením jsem se hodně trápil, a který by se mohl někomu hodit.

Samozřejmě budu rád, pokud se vyjádříte k danému záznamu a přispějete svou troškou do mlýna. A pokud byste chtěli přispívat pod hlavičkou mého blogu, napište mi mail, a nějak se domluvíme. Tak to by bylo pro tuto chvíli vše, a jak si vzpomenu na nějaký zajímavý kód, hned ho sem přidám.