H​irde​tés

2017. november 23., csütörtök

Gyorskeresés

Blog

[ ÚJ BEJEGYZÉS ]   [ ÚJ CIKK ]

  • HP EliteBook 2560p optibay - nem áll le a gép

    Vettem egy optibay-t a notebook-jaimba, de azt vettem észre, hogy nem tudom lekapcsolni a gépet. Windows önmagában leáll, de a kikapcsolási folyamata a gépnek megáll, és a végtelenségig bekapcsolva tudna maradni.

    A probléma az optibay-jel van, sok notebook-nál jelentkezik, megoldási lehetőségek:

    1. 1 pin leragasztása

    2. ha van kapcsoló a HDD caddy-n:

    Esetleg máshol van a kapcsoló:

    Nekem ez a probléma új volt, hátha segít másnak is.

    Athlon64+ 2 hónapja 3

  • Hyper-V, Opteron és a power plan

    Virtual machine teljesítményét nem kis mértékben tudja befolyásolni a hyper visor power plan beállítása. Neten olvasható számtalan hasonló probléma vagy tapasztalás.

    Itt csak egy SuperPI futás látható, de a számokból látszik némi különbség, emellett ugyanez előjött egy sima Windows Update telepítésnél vagy bármi másnál.

    Hyper-V Server 2016
    2xAMD Opteron 4170 HE

    Athlon64+ 10 hónapja 1

  • C# indexer

    public class UltimateProExpertIndexer
    {
    private readonly IDictionary<int, int> items = Enumerable.Range(0, 100).ToDictionary(x => x);

    public int this[int index]
    {
    get { return items[index]; }
    }

    public IEnumerable<int> this[params int[] indexes]
    {
    get
    {
    foreach (var item in indexes)
    {
    yield return items[item];
    }
    }
    }
    }

    Tegye fel a kezét, aki már gondolkodott ilyenben. :DDD

    Athlon64+ 2 éve 1

  • Albérletkeresés

    Albérletet keresek Budapesten, pár dolog, amit elkövetnek ellenem a hirdetők, te ne csináld utának, ha esetleg kiadnál lakást.

    Nincsenek képek, dafuq?! :W
    Nincs lekapva, milyen bejárati ajtó van;
    Nincs képen az ágy (van egyáltalán?);
    Nincs minden helyiség képen;
    A képek akkor készültek, mikor minden redőny le volt húzva, miért?!
    Közös költség nem titkos...
    Nincs a lakásban olyan asztal + szék, aminél dolgozni lehet...
    Ne akarja senki se a 20-30+ éves kommunista bútorait kiadni így. :U
    Ugyanez igaz a régi háztartási eszközökre...

    Majd még biztosan bővül a lista.

    Athlon64+ 2 éve 21

  • .PHP SQL-ezés

    Mostanában újra ilyesmin töröm az agyam:

    using(new MySqliConnection("server", "database", "user", "password"), function (IDbConnection $conn) {
    $conn->Open();

    using($conn->BeginTransaction(), function(IDbTransaction $transaction) use($conn) {
    using($conn->CreateCommand(DbObject::Map("uspInsertAnimal", "dbo")), function ($sp) {
    $sp->CommandType(DbCommandType::StoredProcedure);
    $name = $sp->Parameters()->CreateParameter("name", NULL, DbType::String);
    $out = $sp->Parameters()->CreateParameter("o", -1, DbType::Integer, ParameterDirection::Output);

    foreach (array("insert1", "insert2") as $value) {
    $name->SetValue($value);

    // lame check
    var_dump($sp->ExecuteScalar());

    // lame check #2
    var_dump($out->GetValue());
    }
    });

    $transaction->Commit();
    });
    });

    Ha a MySqliConnection-t kicserélem egy SqlSrvConnection-re, akkor elvileg minden megy ugyanúgy, semmivel sem kell machinálni a kódban.

    Folytatás...

    Athlon64+ 2 éve 20

  • Karácsony

    Utálom a karácsonyt, igazi képmutató ünnep, amivel igazoljuk magunkat, hogy az év többi részében szánalmasak lehessünk.

    Athlon64+ 2 éve 87

  • Kollekciók egyenlősége

    Ha nem számít a sorrend, és minden elemnek ugyanannyiszor kell meglennie:

    Tesztek (nem fednek mindent)
    EquivalentWith extension method

    Hátha hasznos valakinek.

    Athlon64+ 3 éve 1

  • Napi Linq

    Tételezzük fel, hogy Entity Framework forrásból kérdezünk le olyan módon, hogy több eredményhalmazt kapcsolunk össze, majd valamilyen módon kiszedünk belőle 1 elemet.

    var max = _context.EntitySet.Where(expr1)
    .Union(_context.EntitySet.Where(expr2))
    .Union(_context.EntitySet.Where(expr3))
    .Union(_context.EntitySet.Where(expr1))
    .Max(maxExpr);

    Aggodalomra semmi ok, rendben működik, IQueryable<T>, nagyjából normális, egy nagy SQL lekérdezés lesz belőle. Vagy mégsem?

    Sajnos nem teljesen, mert messze nem lesz optimális a generált SQL kód, ugyanis sub select-eket fog gyártani nekünk DISTINCT-tel ellátva, majd azokat fogja össze UNION-nal, ami elég pazarló, mert többször megismétli ugyanazokat a műveleteket teljesen feleslegesen, emiatt írjuk át a következőre:

    var max = _context.EntitySet.Where(expr1)
    .Concat(_context.EntitySet.Where(expr2))
    .Concat(_context.EntitySet.Where(expr3))
    .Concat(_context.EntitySet.Where(expr1))
    .Max(maxExpr);

    Folytatás...

    Athlon64+ 3 éve 1

  • Linq, hogyan írj lassú kódot

    A mai nap folyamán jó lassú kóddal foglalkoztunk, amit tudni lehet róla, hogy rengeteg iteráció volt benne:
    foreach
    for
    .Where(Func)
    .Single(Func)
    .SingleOrDefault(Func)
    .First(Func)
    .Any(Func)

    És természetesen ezek kombinációi is előfordultak, mondanom sem kell, hogy egymásba ágyazva ciklusok, elemek keresése egy halmazban Single()-lel és hasonlók.

    Ez fosch. :)

    Mi a megoldás? Lookup. Egy lookup működését összefoglalhatjuk úgy, hogy a halmaz minden elemére mutat egy egyedi kulcs, persze az is lehet, hogy az adott kulcs nem egy elemre, hanem egy másik halmazra vagy akár másik lookup-ra mutat.

    Lookup "támogatás" is van a Linq-ban ToDictionary() és ToLookup() formájában, attól függ, éppen mire van szükségünk. Átírtuk a kódot lookuposra, és lám, a legrosszabb 15+ perces futásból lett <1.5 perc, ez már egész jó, de még biztosan lesz benne tartalék, illetve több tényezőtől is függ az adott futási idő, de azért nem rossz.

    Amit még előszedtünk, az a memóriafoglalás kérdése, gondolom, mindenki tudja, hogy pl. egy üres List<T> mögött nincs memóriafoglalás az elemek számára, hanem mindig terjeszkedik, ami szintén teljesítményromboló lehet, a gazdaságtalan memóriahasználatról nem is beszélve (hiába a managelt kód).

    Kössük össze a kettőt!

    Folytatás...

    Athlon64+ 3 éve 2

  • public static TSingle<T>(this IEnumerable<T> source, Func<T, bool> predicate)

    A gyári .NET Single(predicate) extension method implementációja így néz ki:

    public static TSource Single<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
    {
    if (source == null)
    throw Error.ArgumentNull("source");
    if (predicate == null)
    throw Error.ArgumentNull("predicate");
    TSource source1 = default(TSource);
    long num = 0L;
    foreach (TSource source2 in source)
    {
    if (predicate(source2))
    {
    source1 = source2;
    checked { ++num; }
    }
    }
    switch (num)
    {
    case 0L:
    throw Error.NoMatch();
    case 1L:
    return source1;
    default:
    throw Error.MoreThanOneMatch();
    }
    }

    Mi a hiba a képen? Igen, az, hogy ez a szerencsétlen végig megy az egész source-on ellenőrizgetve a predicate-et minden egyes elemen, majd csak a végén elemzi ki, mire is járt. Képeljük el, hogy a source-ban 1 millió elem van, és ráadásnak a predicate is jó bonyolult...

    Folytatás...

    Athlon64+ 3 éve 4

  • PHP úristenilyennincs

    <?php
    class isEmailUnique{
    private $email;
    include '../dbc/DBC.php';
    $collection = $db->members;
    $ifEmailRaw = $collection->find(array('eMail' => $email));
    $ifEmail = $ifEmailRaw -> count();
    if($ifEmail > 0){
    return false;
    }
    else{
    return true;
    }
    }
    ?>

    Athlon64+ 3 éve 8

  • PHP Guid

    PHP-ban Guid generálására sajnos nincs beépített lehetőség, viszont sokszor szüksége lenne egy igazán egyedi azonosítóra. Az interneten található megoldásokkal többnyire az a baj, hogy régiek, és több is platformfüggő, ami kellemetlen lehet szerverváltáskor vagy valami alap cucc megírásakor. Másik fontos észrevétel lehet, hogy egyik megoldás sem törekszik többre attól, mint "egy string generálása izékből" pedig egy egyedi azonosítónak talán több kellene.

    Valami ilyesmit képzeltem el:

    <?php

    use System\ObjectBase;

    namespace System;

    final class Guid extends ObjectBase {

    private static $_empty = array("00000000", "0000", "0000", "0000", "000000000000");

    private static $_parseFormats = array(
    "D" => "/^[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}$/i",
    "N" => "/^[a-f\d]{8}([a-f\d]{4}){4}[a-f\d]{8}$/i",
    "B" => "/^(\{)?[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}(?(1)\})$/i",
    "P" => "/^(\()?[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}(?(1)\))$/i",
    "X" => "/^(\{0x)[a-f\d]{8}((,0x)[a-f\d]{4}){2}(,\{0x)[a-f\d]{2}((,0x)[a-f\d]{2}){7}(\}\})$/i"
    );

    public static function NewGuid() {

    Folytatás...

    Athlon64+ 3 éve 4

  • PHP Web service 3: Extensibility

    Hol is tartunk? Service van, valamilyen szinten védve is (idő közben a WSDL is), de ezen túl is van még lehetőség a szolgáltatásunk fejlesztésében, mert üzenetek sima kiszolgálásán túl nem sok mindenre alkalmas, illetve akadhatnak olyan feladatok, amelyek megoldása felesleges zavart kelthetnek a service osztályunk kódjában.

    A kulcsa a bővíthetőségnek szintén az, hogy service implementálásakor ne kelljen sokat azzal foglalkoznunk, mi hogyan működik, illetve ne keltsünk a feleslegesnél nagyobb zavart a rendszerben.

    Mi az egyáltalán, amivel foglalkoznunk kellene?
    - valamilyen extra header-t kell kezelnünk a szerveren
    - paraméterek vizsgálata a service adott operation-jének meghívása előtt
    - operation meghívása
    - visszatérési érték vizsgálata serialization előtt
    - valamiféle hibakezelés
    - más?

    Mivel rendelkezünk eddig?
    - valahogyan értelmeződék a kérés (MVC routing - handler mechanizmus)
    - autentikálunk, ha kell
    - kiszolgáljuk a WSDL kéréseket
    - kiszolgáljuk a SOAP kéréseket, futtatunk egy SoapServer-t

    Szerintem érződik, hogy ez az infrastruktúra nem elég a fentiek megoldására, hiszen pl. a SoapServer objektumon dolgozik teljesen zárt rendszerben, nem férhetünk hozzá.

    Folytatás...

    Athlon64+ 4 éve 2

  • PHP Web service 2 - Az őrület folytatódik: autentikáció

    Az előző epizódban láthattuk, hogy egészen egyszerűen és olvashatóan össze lehet rakni egy web szolgáltatást PHP-val, de azzal az volt a gond, hogy bárki használhatta a service-t, nem volt korlátozva az elérhetősége.

    Éppen ezért megnézzük, mit lehet tenni az ellen, hogy illetéktelen lepjék el a webszerverünket, alkalmazásunkat.

    Azért, hogy elsőre ne bonyolítsuk a dolgokat, nézzük meg a legegyszerűbbet: Basic Authentication Scheme

    [ íme egy ismertető ]

    Most, hogy már mindent tudunk (kérés --> hát te ki vagy --> én vagyok!), lássuk, mit tudunk kihozni, hogy egyszerű legyen használnunk:

    <?php

    /* namespace játék */

    class SvcController extends WebService {

    public static function __static() {
    typeof(__CLASS__)->Attributes()->MethodAttributes()->Add("Method1", new Operation(typeof(new InPut()), "method1 leírása"))->Add("VoidMethod", new Operation());
    }

    protected function _authenticateBy() {
    return new BasicServiceAuthenticator();
    }

    protected function _onAuthenticating(AuthenticationRequest $authRequest) {
    $authRequest->SetAuthenticated($authRequest->Password() == "password");

    Folytatás...

    Athlon64+ 4 éve 2

  • PHP Web service

    Szerintem aki kicsit is foglalkozik a PHP-val, már látta, hogyan lehet egy SOAP web service-t létrehozni vele, ott van a beépített SoapServer megoldás, a közkedvelt nuSOAP, de nagyobb keretrendszerek is adnak rá támogatást.
    Ami közös mindben, hogy nyűg meghegeszteni ezeket, mindnek megvan a maga problémája, vagy csak egyszerű ocsmány lesz az eredmény.

    A napokban a PHP topikban is előjött egy ilyen témájú probléma, ezért megfordult a fejemben, hogy megpróbálom belefűzni a meglévő MVC-s keretembe azt, hogy létre tudjunk hozni egyszerűen web service-t PHP-val.

    Ami alapból kikötés volt:
    - nincs kézi WSDL irkálás
    - nincs annotálás
    - metódus paramétere csak complex type lehet (vagy void nyilván)

    Amit el kell fogadni, hogy fosch lesz: osztályok kidekorálása service infókkal

    Eredmény, egy service osztály:

    <?php

    /* namespace játék */

    class SvcController extends WebService {

    public static function __static() {
    typeof(__CLASS__)->Attributes()->MethodAttributes()->Add("Method1", new Operation(typeof(new InPut()), "method1 leírása"))->Add("VoidMethod", new Operation());
    }

    public function Method1(InPut $in) {
    /* ... */
    return $out;
    }

    public function VoidMethod() {

    Folytatás...

    Athlon64+ 4 éve 1

  • PHP: interface implementálás trait-tel

    NEM LEHETSÉGES

    Mégis kiválóan használható! :)

    Tételezzük fel, hogy van egy ilyesmi interface-ünk:

    <?php

    namespace System\Collections;

    interface IEnumerable {

    function Avg($callback = NULL);

    function Count($callback = NULL);

    function Contains($item, $comparer = NULL);

    function FirstOrDefault($callback = NULL);

    function GroupBy(\Closure $callback);

    function OrderBy(\Closure $callback);

    function Sum($callback = NULL);

    function ToArray();

    function ToList();

    function ToLookup(\Closure $keyMaker);

    function Where(\Closure $callback);

    function Any($callback = NULL);

    function Union($enumerable);

    function UnionAll($enumerable);

    function Take($take);

    function SelectMany(\Closure $func);

    function Zip($other, \Closure $func);
    }

    Interface-nek nem kicsi, sőt, az igaziban ennél több is van, .NET programozók már észlelhetik, miről van szó.

    Folytatás...

    Athlon64+ 4 éve 6

  • PHP függőségek: web szerver

    PHP-nak vannak függőségei, bár nem egészen olyanok, mint egy embernek. Közvetlenül a webszerver felé vannak elvárásai, kicsivel közvetettebben pedig az operációs rendszer felé (gondoljunk csak a fájlrendszerek különbségeire például).

    Ezeknek a függőségeknek a kiiktatása lehetetlen (persze, ha a PHP-t nem weben keresztül használjuk, nyilván nincs webszerveres függősége), viszont megpróbálhatjuk kisimítani, vagy legalább elrejteni a rendszerek közötti különbségeket. A kettő közül igazán okos megoldások az elsőre vannak, utóbbi esetében pedig fokozottan oda kell figyelni, hogyan is használjuk az erőforrásokat, most az elsőre adok egy ötletet.

    Mikor PHP-s alkalmazásokat fejlesztünk, elsőnek mindig szükségünk van egy vázra, amibe a konkrét alkalmazást pakoljuk, ez lehet általunk készített vagy már kész keretrendszer is. Több példát is lehet látni arra, hogy bizonyos metódusok belsejében hatalmas if-else block-ok vannak arra vonatkozóan, hogy az adott környezet épp mit támogat az adott funkcionalitás elérése érdekében. Szerencsések vagyunk, mert a PHP objektum orientáltsága mindent megad nekünk, hogy ekkora hülyeségeket ne kövessünk el. Ami miatt még örülhetünk, hogy az idő előrehaladtával a különbségeket maga a PHP fogja lekezelni, ha nem is teljesen.

    Folytatás...

    Athlon64+ 4 éve 1

  • PHP telepítése Windows 7, 8-ra (Vista-ra is szerintem)

    Nem, Apache-ot nem telepítünk. Pfuj.

    Windows-on a web server szerepét az Internet Information Services (IIS) fogja betölteni, ami amellett, hogy rendelkezik egy normális grafikus kezelőkonzollal, remekül tudja futtatni a PHP-t Windows-on egy pár kattintásos telepítés után, sőt, akár több verziót is fenn tudunk tartani vele könnyen.

    PHP telepítését semmi esetre sem kézzel fogjuk végezni, a Microsoft ehhez is ad nekünk nem kis segítség a Microsoft Web Platform Installer személyében, amivel PHP mellet IIS modulokat telepíthetünk (fogunk is), de van itt ASP.NET-hez cucc, alkalmazások is megtalálható, szóval minden, ami webfejlesztéshez kellhet.

    Első lépésként telepítsük fel a WPI-t a fenti linkről, a picike exe-t simán futtassuk böngészőből, kis szöszmötölés után meg fog jelenni egy katalógus keresővel a jobb felső sarkában, beállításokkal a jobb alsó részén.

    Először a beállítások fognak kelleni, itt megadjuk, hogy nem Express IIS-t akarunk használni, hanem rendeset.

    Keresőbe véssük be a "php" kulcsszót, majd [enter]

    Folytatás...

    Athlon64+ 4 éve 8

  • Motorola

    A Motorola-tól ocsmányabb céget még nem láttam, moslék népség.

    Cégnél vannak (eredetileg Symbol) Motorla barcode reader-ek, amelyek össze vannak építve egy PDA-val, amin többnyire Windows CE fut. Erre kellett fejleszteni alkalmazást, és emiatt kerültem közelebbi kapcsolatba velük.

    Az oldalukon semmit nem lehet megtalálni, ha egyáltalán működik, volt, hogy egy napon keresztül minden 404-et dobott, illetve még a keresőjük is visszahozta a saját 404-es hibaoldalukat.
    A PDA-khoz való SDK megtalálása sem egyszerű, futott összesen három név alatt, és kb. csak a 2. napon sikerült megtalálnom a legfrissebb EMDK-t. Miután sikerült letöltenem, a következő probléma a feltelepítéssel volt, ugyanis képtelen volt felmászni Windows 7 + Visual Studio 2008 kombóra, szerezni kellett egy XP-s gépet hozzá, erről átmásolva a DLL-eket már ment a dolog.

    Problémánk van a PDA-k WiFi-jével is, igyekeztem ezt is frissíteni (Fusion, ha mond valakinek valamit), csakhogy már nekünk nincs támogatásunk a PDA-k, mert X éevesek, ezért le sem tölthetem az újabb szoftvert, pedig a Motorola is nagyon jól tudja, hogy egy rakás sz.r azegész, olyan hosszú a change log. Kerülővel végül sikerült beszereznem a CAB fájlt, az oldal leírása szerint csak fel kell másolni az eszközre majd telepíteni. Aha, majdnem.

    Folytatás...

    Athlon64+ 4 éve 9

  • ASP.NET MVC - EditorFor template HTML name attribútum javítása collection-ök esetében

    Az EditorFor(/* ... */) extension method arra szolgál, hogy view-okban alkalmazhassunk template-eket arra, hogy egy primitív property, vagy akár egy egész objektum szerkesztésének megjelenítését, felépítését leírjuk, ezzel átláthatóbb kódot kaphatunk. Fontos tudni, hogy ekkor a keretrendszer folytatja az elnevezés konevncióját, tehát nem fog eltörni az elnevezési "lánc"

    Html.EditorFor(model => model.Property)

    Template-ben:
    Html.TextBoxFor(model => model.Something.Value.ElefantAndCastle)

    Eredmény:
    Property.Something.Value.ElefantAndCastle

    Ez nagyon klassz akkor, ha nem egy collection elemének kell, mert akkor ilyesmit kaphatunk például (a Property itt egy IList<T>-t takarhat).
    Property.[0].Something.Value.ElefantAndCastle

    A gond a Property.[0].Something résszel van, az indexer előtt keletkezik egy plusz pont, amit viszont a DefaultModelBinder nem fog tudni használni, hiszen helyesen így lenne:

    Property[0].Something.Value.ElefantAndCastle

    Nem tudom, hogy miért nem figyeltek erre a készítők, de annyi biztos, hogy MVC 3-ban is (már) így működött, és a 4-es folytatja a hagyományt.

    Folytatás...

    Athlon64+ 4 éve 1

  • SQL Server Data Tools – Business Intelligence for Visual Studio 2012

    Pár napja megjelent az SQL Server Data Tools kiegészítés (nem egészen az, mert 2012 Isolated Shell-lel megy) Visual Studio 2012-höz, amivel lehetőségünk van Reporting, Analysis és Integration Services projektek készítésére, innentől a BIDS halottnak tekinthető

    Ami igazán jó benne, hogy elvileg 2005-ös szerverrel (projekttel) és attól újabbal működik, tehát régebbi változatok miatt nem kell megtartani a régi Visual Studio-t. Nálunk SQL Server 2008-asok működnek, ezekhez tartozó Reporting projekteket nem tudtuk kezelni Visual Studio 2010-ben, fenn kellett lennie a 2008-asnak is, emellett ezen a héten váltottunk 2012-es Studio-ra, így most még nagyobb az öröm.

    Download Microsoft SQL Server Data Tools - Business Intelligence for Visual Studio 2012 (782 MB)

    Arról tud valaki valamit, hogy Windows CE5 és újabbra lesz-e valaha támogatás VS2012-höz? Ebbeb a negyedévben ígértek valamit, de sehol semmi, windowsembedded.com-on is 2008-as Visual Studio-t emlegetnek.

    Athlon64+ 4 éve 1

  • ASP.NET MVC Excel export ActionResult-tal

    Sokszor kell Excel-be exportálnunk a cégnél, eddig erre volt ASP.NET control, de mivel az alkalmazott csomag egy rakás szar, nem is szeretnénk tovább használni, emelett Web Forms helyett már inkább MVC felé tartunk, így kellett valami megoldás. Az alább látható kód nem 100%-ban az enyém (nem tudom már, honnan van az alja), ami plusz és hasznos, az a System.ComponentModel attribútumok alkalmazása.

    http://epplus.codeplex.com/ megoldására építve:

    public class ExcelResult : ActionResult
    {
    public ExcelPackage ExcelPackage { get; set; }
    public string FileName { get; set; }
    public override void ExecuteResult(ControllerContext context)
    {
    context.HttpContext.Response.AppendHeader("Content-type", "application/vnd.ms-excel");
    context.HttpContext.Response.AppendHeader("Content-disposition", string.Format("attachment; filename={0}.xlsx", FileName));

    var asByteArray = ExcelPackage.GetAsByteArray();

    ExcelPackage.Dispose();

    context.HttpContext.Response.OutputStream.Write(asByteArray, 0, asByteArray.Length);
    }
    }

    public class ExcelResult<T> : ExcelResult
    {

    Folytatás...

    Athlon64+ 4 éve 1

  • Mai PHP fejlesztési ajánlatok

    Ne rakd ki a záró PHP tag-et, mert véletlen white space-eket fogsz magad után hagyni.
    Ha eddig Apache-on fejlesztettél, akkor próbáld ki a cuccot IIS-en is, nehogy valahol meglepetés érjen (fordítva is igaz).

    Ma a cégnél hozták az egyik külsős alkalmazás frissítését, ott jöttek elő ezek, srác egy kicsit tanácstalan volt.

    Athlon64+ 4 éve 1

  • ASP.NET MVC debug

    Nekem valahogy nem tűnt fel a dolog reklámozása, csak az, hogy MVC alkalmazások debugja iszonyat lassú tud lenni. Megoldás: IntelliTrace letiltása.

    Forrás (Connect)

    How to: Enable and Disable IntelliTrace

    Athlon64+ 4 éve 1

  • WCF dependency injection

    A dependency injection-t remélhetőleg már nem kell bemutatni, mi is lenne, ám azt úgy gondolom, kevesebben tudják, amibe sikeürlt belefutnom.

    Történt ugyanis, hogy hősünk egy faék WCF service-t szeretett volna készíteni, amit sikerült is megépíteni, hasznos unit test-ekkel körülbástyázni, remekül működött.
    A probléma akkor kezdődött, mikor tényleges service-ként kellett volna működésbe hozni, tesztelés alatt ugyanis nem történik nagy varázslat, simán példányosítással történik a működés ellenőrzés.

    IIS-en host-olt WCF service-ek aktivációját mindig egy factory végzi, amit mi magunk is beállíthatunk, ha megnézzük a *.svc fájlunk markup-ját, abba az egyetlen direktívába kell felvennünk a Factory-nkat:

    <%@ ServiceHost Language="C#" Debug="true" Service="SmartcardService.Authentication"
    CodeBehind="Authentication.svc.cs" Factory="SmartcardService.Factory.ServiceFactory" %>

    Ennek a service-nek nincs paraméter nélküli konstruktora (hogy lenne?), így érdemes egy DI framework-öt választani, aminek van WCF-es támogatása (van neki WCF factory-ja) is, nekem a Ninject-re esett a választásom, factory-ja: NinjectServiceHostFactory

    Folytatás...

    Athlon64+ 4 éve 1

  • MVC

    "A modell-nézet-vezérlő (MNV; angolul model-view-controller) a szoftvertervezésben használatos szerkezeti minta. Összetett, sok adatot a felhasználó elé táró számítógépes alkalmazásokban gyakori fejlesztői kívánalom az adathoz (modell) és a felhasználói felülethez (nézet) tartozó dolgok szétválasztása, hogy a felhasználói felület ne befolyásolja az adatkezelést, és az adatok átszervezhetők legyenek a felhasználói felület változtatása nélkül. A modell-nézet-vezérlő ezt úgy éri el, hogy elkülöníti az adatok elérését és az üzleti logikát az adatok megjelenítésétől és a felhasználói interakciótól egy közbülső összetevő, a vezérlő bevezetésével." - Wikipédia

    Ezek után találkoztam egy ilyen osztállyal a codereview-on:

    class mvc {

    /* view-ok keresése, controller-ek (több vagy egy?) keresés, némi routing, minden végrehajtása, kacifántos kód */

    }

    Nem jött át. :DDD Van még egy router fájlja is, csak egy script, de hogy a $_SESSION miért van benne használva, rejtély.

    Nálam az MVC névtér áll most 40+ osztályból és interface-ből, ha hozzárakom a Web-et is mindennel, 80-nál tartunk, és ezt bárki el tudja olvasni. (Egyszercsak. :DDD )

    Athlon64+ 4 éve 1

  • .NET, PHP type code-ok avagy enum-ok

    Enum-okat akkor alkalmazunk, ha egy egyszerű választási lehetőséget akarunk biztosítani valahol a kódunkban, ez lehet valamilyen állapot-visszajelzés, működési paraméter, bármi, ami közös minden alkalmazásban, hogy a választható elemek száma kevés, illetve mivel enum-okról beszélünk típusosak is. A gond az, hogy ezek a dolgok nem igazak.

    Vegyük a következő enum-ot:
    enum BarbieTypes
    {
    FilmsztárBarbie = 1,
    KőművesBarbie = 2,
    SzáncsánBarbie = 3
    }

    És ezt a metódust:
    public void SetType(BarbieTypes type) { /* ... */ }

    Nem bonyolultak, kicsit kretén a példa, de lássuk a működést:
    Világos:
    obj.SetType(BarbieTypes.KőművesBarbie);

    Cast-olva is működik:
    obj.SetType((BarbieTypes)2);

    Nem fordul nyilván
    obj.SetType(54756);

    A nulla univerzális enum érték!
    obj.SetType(0);

    Szintén működik! WTF?!
    obj.SetType((BarbieTypes)54756);

    Jó cucc az enum, könnyű, ilyen dolgokra gyors (de pl. egy ToString() már k lassú), de ugye probléma, hogy illegális értékeket is felvehet, így pl. egy API építésekor mondhatjuk, hogy használhatatlan.

    Ultimate solution

    Folytatás...

    Athlon64+ 5 éve 2

  • PHP: mit is csinálunk?

    class Validate {

    private $_errors = array();

    public function __construct()
    {
    require_once 'errors.php';
    $this->errorText = $errorText;
    }

    /* ... */
    }

    Erre már szavak sincsenek. :O

    Athlon64+ 5 éve 5

  • "írtam egy PHP cuccot, jó ez így?"

    Először írd át olyanra, amiben nincs használva global, static (utóbbi esetleg okosan, mert lehet úgy is). :) Utána meglátjuk.

    Gyakran ismételt kérdések rovatunkat olvasták.

    Athlon64+ 5 éve 8

  • ASP.NET MVC ClientDataTypeModelValidatorProvider

    Az ASP.NET MVC-t nehéz nem szeretni, kimondottan jól össze van rakva, jó használni, és ugye alatta van a teljes .NET Framework minden jósággal (pl. Entity Framework). A .NET jellemzően jól felépített cucc, bárhonnan is nézzük, nehéz rajta fogást találni.

    A héten sikerült egy olyan dologgal találkoznom, amit nehezen hittem el, gyakorlatilag rosszul (vagy legalábbis hülye módon) implementáltak az ASP.NET MVC-ben egy igen fontos dolgot: attribútum nélküli kliensoldali típusvalidációt.

    Ha valaki már használta az MVC keretet, akkor tudhatja, hogy minden különösebb erőfeszítés nélkül reklamál kliensoldalon azért, ha egy numeric típus helyett szöveget írunk egy input-ba, majd el szeretnénk küldeni az adatokat. Ezt a varázslatot végzi nekünk a ClientDataTypeModelValidatorProvider, ami alapból regisztrálva van a ModelValidatorProviders-ben. Ez nagyon klassz, teljesen jól működik, a gond akkor adódott, mikor lokalizálni szerettem volna a validációs üzenetet.

    Folytatás...

    Athlon64+ 5 éve 1

H​i​rd​e​t​é​s

Copyright © 2000-2017 PROHARDVER Informatikai Kft.