Oldalak

2013. február 21., csütörtök

Eredmény halmaz rendezése magyar ábécé szerint MySQL-ben

A minap futottam abba a problémába, hogy egy SQL lekérdezésben az eredmény halmazt a magyar ábécé szerint kellett rendezni. Ez önmagában nem lenne probléma, ha a tábla illetve az a mező, amiből szelektálni akarunk a karakter készlete utf8_hungarian_ci (COLLATION) lenne. Jelen esetben a táblában lévő adatok migrációja UTF-8 kódolásra nem megoldható ezért a SELECT-ben kell megoldani ezt a konverziót.


SELECT id, 
       CONVERT(CAST(nev_latin1_ben as BINARY) USING utf8) as name
FROM tabla
ORDER BY CONVERT(CAST(nev_latin1_ben as BINARY) USING utf8) COLLATE utf8_hungarian_ci;

A fenti lekérdezés átkonvertálja a mezőben nev_latin1_ben mező tartalmát UTF-8 karakter kódolásra és az eredményhalmazt magyar ábécé szerint rendezi.

2013. február 18., hétfő

Tömb rendezése magyar ábécé szerint

Ez egy példa, hogy hogyan lehet megvalósítani egyedi rendezést JavaScrip használatával.

A függvény, ami az egyéni rendezést megvaólsítja:
     function mSort(a, b) {
        
        if (a == b){
            return 0;
        }
        var huAbcLower = "aábcdeéfghiíjklmnoóöőpqrstuúüűvwxyz";
        var huAbcUpper = "AÁBCDEÉFGHIÍJKLMNOÓÖŐPQRSTUÚÜŰVWXYZ";
        
        len_abc = huAbcLower.length;
        len_a = a.length;
        len_b = b.length;
        var loc_a;
        var loc_b;
        
        for (var n = 0; n < len_a && n < len_b; ++n) {
            for (var k = 0; k < len_abc; ++k) {
                if (a.charAt(n) == huAbcLower.charAt(k) || a.charAt(n) == huAbcUpper.charAt(k)){
                    loc_a = k;
                }
                if (b.charAt(n) == huAbcLower.charAt(k) || b.charAt(n) == huAbcUpper.charAt(k)){
                    loc_b = k;
                }
            }
            if (loc_a > loc_b){
                return 1;
            }
            if (loc_a < loc_b){
                return -1;
            }
        }
        if (len_a > len_b){
            return 1;
        }
        if (len_a < len_b){
            return -1;
        }
        return 0;
    }

A használata pedig a következő képen néz ki:
   var arr = ["Körte", "barack", "alma"];
   
   arr.sort(mSort);

A sort függvény callback paraméterének az általunk létrehozott függvényt kell megadni paraméternek.

2013. február 4., hétfő

Refactoring használata

1. lépés: a kódblokk kijelölése, amit újra hasznosítani szerentnénk, majd a kijelölésen jobb kattintás. A megjelenő menüből a Refactor->Extract Method... menüpontot kell választani.
2. Lépés: a megjelenő párbeszéd ablakban meg kell adni a metódus nevét.

Az alábbi kódból:

for (int i = 0; i iLen; i++)
{
  int iKey;
  char cLetter;
  do
  {
    iKey = r.Next(65, 65 + (2 * iLen));
    cLetter = (char)iKey;
  } while (sSecret.Contains(cLetter.ToString()));
  sSecret += cLetter;
}

ez a metódus lett:

private static string GenerateWord(int iLen)
{
 string sSecret = "";
  for (int i = 0; i < iLen; i++)
  {
  int iKey;
  char cLetter;

  do
  {
  iKey = r.Next(65, 65 + (2 * iLen));
  cLetter = (char)iKey;
  } while (sSecret.Contains(cLetter.ToString()));

  sSecret += cLetter;
  }
  return sSecret;
}
A metódus hívási módja pedig ez:
sSecret = GenerateWord(iLen);

C# dll készítése

1. Lépés: létre kell hozni egy új ClassLibrary-t. Ehhez a Solution Explorer-ben egy jobb egér gombot kell nyomni, majd a megjelenő menüben az Add->New Project menüpontot kell kiválasztani. Az alábbi ábra ezt szemlélteti.
A menüpont kiválaszátása után a következő párbeszéd ablak jelenik meg:
A megjelenő ablakban a Templates listából a Class Library elemet kell kiválasztanunk. A Name mezőbe azt a nevet kell írni. Ez a név lesz az a névtér, amin keresztül el tudjuk majd érni a DLL függvényeit.


2. Lépés: a Dll metódusainak megírása.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleAppLibrary
{ 
        public class Game
        {
                static Random r = new Random();
                public string GenerateWord(int iLen)
                {
                        string sSecret = "";
                        for (int i = 0; i < iLen; i++)
                        {
                                int iKey;
                                char cLetter;

 do {

   iKey = r.Next(65, 65 + (2 * iLen));

   cLetter = (char)iKey;

 } while (sSecret.Contains(cLetter.ToString()));

 sSecret += cLetter;

 }

 return sSecret;

 }

 public void Evaluate(string ASecret, string AAnswer, out int ABlack, out int AWhite)

 {

 // kimeneti valtozok inicializalasa

 ABlack = 0;

 AWhite = 0;

 for (int iCnt = 0; iCnt < AAnswer.Length; iCnt++)

 {

 // hanyadik pozicioban szerepel a valasz iCnt-dik

 // eleme a titokban

 int iPos = ASecret.IndexOf(AAnswer[iCnt]);

 

 if (iCnt == iPos)

 {

 ABlack++;

 }

 else if (iCnt > -1)

 {

 AWhite++;

 }

 }

 }

 }

}



3. Lépés: a DLL referenciájának hozzáadása az alkalmazáshoz. Ehhez a Solution Eplorer-ben az alkalmazásunkat kijelölve egy jobb egér gombot kell nyomni. A megjelenő menüből az Add Reference... menüpontot kell kiválasztani.
Ezután a megjelenő párbeszéd ablakban a Project fülre kattintva ki kell választani a DLL-t, majd OK gombot kell nyomni.
Ezután a Solution Eplorer-ben a References ág kiegészül az újonan hozzáadott DLL referenciájával.

4. Lépés: a Dll metódusainak használata.

...
using ConsoleAppLibrary;
namespace ConsoleApplication2
{
 class Program
 {
 static Game game = new Game();
  static void Main(string[] args)
 {
  ...
 sSecret = game.GenerateWord(iLen);
...

C# adattípusok táblázata

C# adattípus .NET Mérete Legkisebb érték Legnagyobb érték
sbyte System.Sbyte 1 -128 127
byte System.Byte 1 0 255
short System.Int16 2 -32 768 32 767
ushort System.UInt16 2 0 65 535
int System.Int32 4 -2 147 483 648 2 147 483 647
uint System.UInt32 4 0 4 294 967 295
long System.Int64 8 -9 223 372 036 854 775 808 9 223 372 036 854 775 807
ulong System.UInt64 8 0 18 446 744 073 709 551 615
char System.Char 2 0 65 535
float System.Single 4 1,5*10-45 3,4*1038
double System.Double 8 5,0*10-324 1,7*10308
bool System.Boolean 1 false (0) true (1)
decimal System.Decimal 16 1,0*10-28 kb. 7,9*1028

C# összetett aritmetikai értékadó műveletek

Műveleti jel Használati alak Kifejezése Művelet
+= x += 4 x = x + 4

összeadás

-=

x -= 4 x = x - 4

kivonás

*= x *= 4 x = x * 4

szorzás

/= x /= 4 x = x / 4

osztás

%= x %= 4 x = x % 4 maradék képzés (modulo)

Thread-safe TCounter osztály

interface

type
  TCounter = class
  public
     constructor Create;
     function GetCounter : Integer;
  end;

var
  Counter : Integer;
  CriticalSection : TRtlCriticalSection;

implementation

constructor TCounter.Create;
begin

  inherited;
  EnterCriticalSection(CriticalSection);
  try
    Counter := Counter + 1;
  finally
    LeaveCriticalSection(CriticalSection);
  end;
end;

function TCounter.GetCounter : Integer;
begin
  // nem kell kritikus tartomány, mert az Integer
  // elemi változó
  Result := Counter;
end;

initialization
  InitializeCriticalSection(CriticalSection);
finalization
  DeleteCriticalSection(CriticalSection);
end.

Provider pattern

public static class Note 
{
  private static NoteProvider provider; 
  static Note() 
  {
    string providerName = ConfigurationManager.AppSettings["noteProvider"]; 
    Type providerType = Type.GetType(providerName); 
    provider = (NoteProvider)Activator.CreateInstance(providerType); 
  }
  public static string GetNote() 
  {
    return provider.GetNote(); 
  }
}
 
public abstract class NoteProvider 
{
  public abstract string GetNote(); 
}
 
public class FirstNoteProvider : NoteProvider 
{
  public override string GetNote() 
  {
    return "első note"; 
  }
}
 
  
public class SecondNoteProvider : NoteProvider
{
  public override string GetNote() 
  {
    return "második note"; 
  }
}

Thread safe Singleton minta

class Program 
{
  static void Main(string[] args)
  {
  Singleton s, s2;
  s = Singleton.GetInstance();
  s2 = Singleton.GetInstance();
 
  // a két objektum referenciája egyenlő lesz
  Console.WriteLine(ReferenceEquals(s,s2));
  }
}
 
class Singleton
{
  private static Singleton instance; 
 
  /// statikus konstruktor
  /// a legelső osztáylra történő hivatkozákor lefut
  static Singleton()
  {
  instance = new Singleton();
  }
 
  public static Singleton GetInstance()
  {
  return instance;
  }
}

Műveletek precedenciája

Szint Művelettípus Műveletek
1 Elsődleges () . [] x++ x-- new typeof sizeof checked unchecked
2 Egyváltozós + - ! ~ ++x --x
3 Multiplikatív * / %
4 Additív + -
5 Eltolási << >>
6 Viszonító < > <= >= is
7 Egyenlőségi == !=
8 Logikai AND &
9 Logikai XOR ^
10 Logikai OR |
11 Feltételes AND &&
12 Feltételes OR ||
13 Feltételes művelet ?:
14 Értékadás = *= /= %= += -= <<= >>= &= ^= |=

Domain MX rekordjának lekérdezése

nslookup -q=mx domain.name

A domain.name helyére azt a nevet kell megadni, amiről az MX információt le szeretnénk kérdezni.

Kötet árnyékmásolatainak méret beállítása

Kötetek árnyékmásolatait tároló lemezterület méretének korlátozása

Az árnyékmásolat méretének listázására parancssorba írjuk be a következő parancsot

vssadmin list shadowstorage

Az árnyékmásolatokat tároló lemezterület körlátozása illetve testreszabása

vssadmin resize shadowstorage /for=c: /on=c: /maxsize=2GB

A fenti parancs 2GB méretűre állítja be az árnyékmásolatok tárolására használható lemezterületet a C: meghajtón. A parancs végrehajtásához rendszergazdai jogosultság szükséges.

Tálcán megjelenő ikonok újra töltése

A tálcán megjelenő ikonok újra töltése vista alatt, ha valamelyik ikon eltünne a tálcáról, például eltűnik a hálózati ikon vagy a hangerőszabályozó ikon.

A parancssorba gépeljük be a következő parancsokat:

taskkill /F /IM "explorer.exe"

majd ha végrehajtottuk a fenti parancsot utánna pedig a következő parancsot

start explorer.exe

A fenti műveletet automatizálhatjuk, hogyha a fenti parancsokat egy BAT file-ba tesszük és azt futtatjuk szükség szerint.

Hibernációs állomány létrehozása

Hibernációs file létrehozása

A parancssorba gépeljük be a következőt:

powercfg -h on

Hibernációs file törlése

A parancssorba gépeljük be a következőt:

powercfg -h off