BLOGas.lt
Sukurk savo BLOGą Kitas atsitiktinis BLOGas

BeBetterDeveloper.com - mano naujas tinklaraštis

Parašė Sergejus | 2013-06-16 13:24

Kaip tikriausiai pastebėjote, kurį laiką tinklaraštis buvo pakankmai ramus, tik keli straipsniai per 3 mėnesius. Visą šitą laiką ruošiau savo naują tinklaraštį anglų kalba - Be a Better Developer. Kaip ir galima suprasti iš pavadinimo - jame rašysiu apie savo pastangas tapti geresniu programuotoju. Pradėjau nuo savo silpniausios pusės (bent jau kaip man atrodo) - algoritmų. Įdomu bus pasižiūrėti kur nudreifuos tinklaraštis po metų :)

Rodyk draugams

32 ir 64 bitų sisteminių programų kvietimas

Parašė Sergejus | 2013-05-27 22:10

64-bitų Windows versijos egzistuoja jau virš dešimtmečio (nuo Windows XP laikų). Nuo pat pradžių 64-bitų versijos pasižymėjo tarpusavio suderinamumo galimybe su 32-bitų programomis. Tai buvo pasiekta paliekant tiek senas 32-bitų sistemines programas bei bibliotekas, tiek pateikiant naujas, 64-bitų analogus. Senos 32-bitų programos buvo patalpintos į %WinDir%\SysWOW64 katalogą, o naujos 64-bitų programos liko visiems įprastoje vietoje - %WinDir%\System32 kataloge. Taigi, atrodytų viskas paprasta:

  • jeigu norima iškviesti, pvz., 32-bitų cmd.exe - paleidžiame iš %WinDir%\SysWOW64\cmd.exe
  • jeigu norima iškviesti, pvz., 64-bitų cmd.exe - paleidžiame iš %WinDir%\System32\cmd.exe

Įdomu pasidaro kai iš 32-bitų proceso norima paleisti 64-bitų programą. Windows aptiks 32-bitų aplikacijos kreipinį į %WinDir%\System32, bet kadangi ten tik 64-bitų programos, automatiškai kreipinį nukreips į %WinDir%\SysWOW64, taip užtikrinant, kad senos programos veikia ir toliau. Tačiau kartais norima iškviesti būtent 64-bitų versiją, ką daryti tokiu atveju? Išeitis - leisti programas iš specialaus menamo katalogo %WinDir%\Sysnative. Windows aptiks kreipinį į tokį katalogą ir automatiškai jį nukreips į %WinDir%\System32, t.y. 64-bitų versiją.

Taigi, nors ir painu, atminimui:

  • jeigu norima iškviesti, pvz., 32-bitų cmd.exe - paleidžiame iš %WinDir%\SysWOW64\cmd.exe
  • jeigu norima iškviesti, pvz., 64-bitų cmd.exe iš 64-bitų proceso - paleidžiame iš %WinDir%\System32\cmd.exe
  • jeigu norima iškviesti, pvz., 64-bitų cmd.exe iš 32-bitų proceso - paleidžiame iš %WinDir%\Sysnative\cmd.exe

Daugiau apie taip vadinamą Windows File System Redirector galima pasiskaityti MSDN.

Rodyk draugams

Pristatymas - Windows Azure apžvalga ITishnikų akimis

Parašė Sergejus | 2013-03-30 16:41

Per paskutinį Lietuvos .net naudotojų grupės susitikimą dariau pristatymą Windows Azure apžvalga ITishnikų akimis, t.y. kaip Windows Azure paslaugos gali būti panaudotos praktikoje kuriant tinklaraščius, tinklalaides bei kitus projektus.

Rodyk draugams

Artimiausi .net naudotojų grupės susitikimai

Parašė Sergejus | 2013-03-19 21:38

Artmiausi .net naudotojų grupės susitikimai vyks Kaune kovo 27 dieną ir Vilniuje – kovo 28. Daugiau informacijos – grupės puslapyje dotnetgroup.lt.

Rodyk draugams

Windows 8 Codecamp ir ne tik…

Parašė Sergejus | 2013-03-06 21:13

Paskutiniu metu Lietuvoje pagausėjo įvairiausių hackathon‘ų, appcamp‘ų, codecamp‘ų ir pan. Štai artėja ir dar keletas ir artimiausias jau šį šeštadienį!

Logo

Windows 8 Codecamp Vilniuje – kovo 9-10 dienomis (registracija)

Windows 8 Codecamp Kaune – kovo 16-17 dienomis (registracija)

Jeigu neišeina sudalyvauti minėtuose renginiuose, galite sudalyvauti Windows 8 programėlių konkurse!

P.S.

Nors būsiu išvykęs iš Lietuvos, pabandysiu sudalyvauti Windows 8 Codecamp Vilniuje per Skype :)

Rodyk draugams

Ypač paprastas Windows Service kūrimo būdas

Parašė Sergejus | 2013-03-03 18:41

Daugiau negu prieš 2 metus rašiau apie nuosavos bazinės Windows Service klasės kūrimą. Nuo to laiko visi mano kurti Windows servisai buvo daugiau mažiau panašūs. Nepaisant fakto, kad naujų Windows servisų kūrimas nėra ypatingai sudėtingas procesas, jis visada atrodė man per daug komplikuotas. Bet situacija pasikeitė kai atradau Topshelf. Ši biblioteka ženkliai supaprastina Windows servisų kūrimą bei jų valdymą. Tarkime, turime klasę MyService su metodais Start bei Stop, žemiau parodyta kaip ją galima apvilkti į Windows servisą Topshelf pagalba:

public class MyService
{
    public void Start() { /* service start logic */ }
    public void Stop() { /* service stop logic */ }
}

public class Program
{
    static void Main(string[] args)
    {
        var restartDelay = (int) TimeSpan.FromMinutes(1).TotalMinutes;

        HostFactory.Run(config =>
        {
            config.Service<MyService>(svc =>
            {
                svc.ConstructUsing(s => new MyService());
                svc.WhenStarted(s => s.Start());
                svc.WhenStopped(s => s.Stop());
            });
            config.SetServiceName("MyService");
            config.SetDisplayName("My service");
            config.SetDescription("My service via Topshelf");
            config.RunAsLocalService();
            config.DependsOnEventLog();
            config.StartAutomatically();
            config.EnableServiceRecovery(recovery => recovery.RestartService(restartDelay));
            config.UseNLog();
        });
    }
}

Kaip matote, mes nusakome ne tik kokį metodą iškviesti paleidžiant Windows servisą ar jį stabdant, bet ir kieno vardu jis bus vykdomas, nuo kokių kitų Windows servisų priklausomas, kaip yra paleidžiamas bei ką daryti jeigu servisas nulūš. Papildomai, jūsų programą galima bus paleisti tiek kaip Windows servisą, tiek iš konsolės.

Malonaus Windows servisų programavimo su Topshelf!

Rodyk draugams

Lietuvos .net naudotojų grupės susitikimai

Parašė Sergejus | 2013-01-17 08:48

Artimiausi Lietuvos .net naudotojų grupės susitikimai Vilniuje ir Kaune jau netrukus: sausio 30 d. Kaune ir sausio 31 d. Vilniuje (naujame Microsoft Lietuva biure). Pranešimus skaitys:

Daugiau informacijos bei reigstracija atsinaujinusiame dotnetgroup.lt puslapyje!

Rodyk draugams

Windows 8 Hands-on mokymai programuotojams (Sausio 17-18 d.)

Parašė Sergejus | 2013-01-12 12:42

Tautvydas Dagys iš Microsoft Lietuva savo tinklaraštyje paskelbė apie Windows 8 mokymus: C#+XAML ir HTML5+JavaScript. Mokymai yra nemokami ir ves juos Štěpán Bechynský. Daugiau informacijos Tautvydo tinklaraštyje.

Rodyk draugams

Objektų įrašymas ir nuskaitymas iš failų

Parašė Sergejus | 2013-01-09 20:46

Ar esate kada bandę išsaugoti objektų aibę į failą ir vėliau juos nuskaityti? Egzistuoja keli būdai kaip tai padaryti, bet šiandien norėčiau parodyti mano manymu vieną patogiausių, naudojant Protocol Buffers duomenų formatą. Efektyvus darbas su failais dažnai susiveda į srautų (angl. Stream) panaudojimą, todėl mums reikalingas būdas paversti objektą į binarinį formatą ir rezultatą išsaugoti į srautą. Tam aprašysime interfeisą IStreamSerializer:

public interface IStreamSerializer
{
    T Deserialize<T>(Stream stream) where T : class;
    void Serialize<T>(T obj, Stream stream) where T : class;
}

Darbui su Protocol Buffers iš .NET rekomenduoju Marc Gravell biblioteką protobuf-net:

PM> Install-Package protobuf-net

ProtocolBuffersStreamSerializer realizacija galėtų atrodyti taip:

public class ProtocolBuffersStreamSerializer : IStreamSerializer
{
    public T Deserialize<T>(Stream stream) where T : class
    {
        if (stream == null || stream.Length == 0) return null;

        return Serializer.DeserializeWithLengthPrefix<T>(stream, PrefixStyle.Base128);
    }

    public void Serialize<T>(T obj, Stream stream) where T : class
    {
        if (obj == null || stream == null) return;

        Serializer.SerializeWithLengthPrefix(stream, obj, PrefixStyle.Base128);
    }
}

Atkreipkite dėmesį į metodus (Deserialize|Serialize)WithLengthPrefix. Tam, kad suprasti kam jie reikalingi, pirma riekia suprasti kaip saugomi serializuoti objektai faile. Failas yra tik baitų seka, todėl reikalingas būdas vieną objektą atskirti nuo kito. Toks skirtukas dažnai vadinamas prefiksu ir savyje saugo papildomą informaciją, pavyzdžiui, serializuoto objekto dydį:

image

Norint nuskaityti pavyzdyje pateiktą baitų seką pirma nuskaitome prefiksa, o tada tiek baitų kiek nurodyta prefikse. Operaciją kartojame kol nebus nuskaityti visi baitai. Iš kodo pusės objektų įrašymas / nuskaitymas iš failo galėtų atrodyti taip:

[ProtoContract]
public class FakeData
{
    [ProtoMember(1)]
    public int Sequence { get; set; }

    [ProtoMember(2)]
    public string[] Data { get; set; }
}

[Test]
public void BinaryDataExample()
{
    var path = "d:\\Temp.txt";
    var serializer = new ProtocolBuffersStreamSerializer();

    using (var stream = File.Create(path))
    {
        for (int i = 0; i < 10; i++)
        {
            var fakeData = GenerateFakeData(i);
            serializer.Serialize(fakeData, stream);
        }
    }

    using (var stream = File.OpenRead(path))
    {
        FakeData fakeData;
        while ((fakeData = serializer.Deserialize<FakeData>(stream)) != null)
        {
            Console.WriteLine(fakeData.Sequence);
        }
    }
}

private static FakeData GenerateFakeData(int sequence)
{
    var count = new Random().Next(1, 5);
    var fakeData = new FakeData
    {
        Sequence = sequence,
        Data = new string[count]
    };

    for (var i = 0; i < count; i++)
    {
        fakeData.Data[i] = Guid.NewGuid().ToString("N");
    }

    return fakeData;
}

Kaip matote, objektų įrašymas ir nuskaitymas iš failų nėra sudėtingas procesas, bet jis reikalauja tam tikro suvokimo apie binarinių duomenų saugojimą.

Rodyk draugams

ITishnikai.lt perkėlimas į Windows Azure

Parašė Sergejus | 2013-01-03 21:43

Kaip tikriausiai jau skaitėte, tinklalaidė ITishnikai turi naują puslapį http://itishnikai.lt. Paskutinėje laidoje minėjau, kad puslapis pilnai sukasi Windows Azure. Šiame straipsnyje trumpai papasakosiu kokios Window Azure paslaugos ir kaip yra panaudotos.

Pradėsiu nuo platformos: puslapiui buvo pasirinktas visiems gerai žinomas WordPress dėl įskiepių gausos bei prieinamumo Windows Azure Web Sites galerijoje. Nepaisant fakto, kad WordPress moka dirbti su SQL Server, Windows Azure Web Sites leidžia pasirinkti tik trečios šalies (ClearDB) talpinamą MySQL. Aš už MySQL, bet norėjosi, kad viskas būtų pas vieną tiekėją ir centralizuotai valdoma. Laimei, Mikael Koskinen yra paruošęs Wordpress konfigūraciją skirtą darbui su Windows Azure SQL Database (anksčiau žinoma kaip SQL Azure). Taigi, rezultate aš turėjau pilnai veikiančią WordPress instaliaciją patalpintą Windows Azure Web Sites ir naudojančią Windows Azure SQL Database duomenų talpinimui.

imageimageimageimage

Kitas žingsnis buvo perkelti visus ITishnikų epizodus į debesis. Natūraliausias pasirinkimas buvo binarinių duomenų saugykla Windows Azure Blob Storage (skaityti detaliau). Kadangi ITishnikai patalpinti Amsterdamo Windows Azure duomenų centre, laidų parsisiuntimo greičiui pagerinti buvo panaudotas Windows Azure Content Delivery Network. Jis užtikrina, kad kiekvienas klausytojas gaus laidas iš serverio, esančio arčiausiai jo (pvz., Švedijos).

Visos infrastruktūros perkėlimas į debesis turi vieną didelį privalumą, daugiau mums nebereikia rūpintis serverių ir tinklo įrangos patikimumu bei interneto pralaidumu.

Rodyk draugams