четвъртък, 11 декември 2008 г.

Автоматично логване на потребители в XP и Vista

В Windows 2000 имаше възможност операционната система да се стартира без да е необходимо някой да се логва на нея (разбира се веднъж трябва да се вкарат данните за потребител и парола - няма как).
За съжаление в XP и Vista това е скрито и не може да се достъпи така лесно - ясно, че е security risk, но в някои случаи си е повече от полезно.

Решението е да се изпълни следната команда от конзола или Run :
control userpasswords2
Това ще отвори добре познатия стар екран с опции за автоматично стартиране.

петък, 14 ноември 2008 г.

SEO съвети от Google

Google поставиха на официалния си блог набор от съвети как да се постигне по-добри резултати в търсенето в търсачката на ... Google :).
На този адрес може да се види самия пост Google's SEO Starter Guide от официалния блог,
а от тук може да се свали PDF файл със самите съвети(Google's SEO Starter guide in PDF).
Позачетох се в документа и мисля, че е доста полезно четиво - в общи линии не е толкова SEO guide, колкото съвети "как да напишем функционален и полезен сайт".



петък, 31 октомври 2008 г.

Проблем с отваряне на CHM файлове под Vista

Няколко пъти ми се случва досега да не мога да видя съдържанието на CHM файлове. Ако се отварят от network share - причината е ясна.
Възможно е да дава странни грешки от сорта на "Navigation to the webpage was canceled", "File not Found" и т.н. Оказа се, че не съм първият с такъв проблем (както обикновено) и решение е описано в http://blog.crowe.co.nz/archive/2007/04/13/719.aspx.
В общи линии - в Properties има бутон Unblock, след което всичко се оправя и CHM файла си е вече съвсем наред.

Забележка: Ако файлът се намира на системния диск - Unblock бутона изглежда като да не работи, въпреки че не изкарва грешка. (Най-вероятно е заради правата, но можеше да изкара грешка)

вторник, 21 октомври 2008 г.

Корекция на правописни грешки на български език с Office 2007

Много е приятно, когато нещата просто работят. Още по-приятно е, когато никак не се очаква да работят, пък те си работят съвсем добре :)
Едно от тези неща е ItaEst -една разработка на Българската Асоциация за Компютърна Лингвистика. 
"ItaEst - Така е!" е система за корекция на правописни грешки и сричкопренасяне за български език за Microsoft Office 2000, XP и 2003."

Лесна и бърза инсталация - работи безпроблемно и за Office 2007 (въпреки че е софтуер от 2004-та година). Лицензът е максимално опростен - може да се инсталира без никакви ограничения.
Какво по-добре от това. Опредено си заслужава да се използва!

Адресът, от който може да се изтегли е: http://www.bacl.org/itaestbg.html , размерът е под 6 MB.

събота, 18 октомври 2008 г.

Проблем с ID-тата при SQL Server Compact Edition

SQL Server Compact Edition е много добра вградена база, която може лесно да се deploy-ва на клиентски машини.
Разбира се, има ограничения - някои ти бъркат в здравето, други не чак толкова. Един проблем се оказа доста изнервящ, докато не намеря в Google подходящо решение. Накратко - ако в приложението се добавят нови записи в таблица, то те са с id-та -1, -2, -3 и т.н.
Дотук съвсем нормално и в реда на нещата.
След запис на данните - новите редове се появяват физически в базата с правилните (поредни) id-та. За съжаление - в приложението те някак си остават със старите идентификатори (-1, -2 и т.н). Ефектът е доста неприятен - ако се редактира някой от току що създадените редове и се даде запис се получава Exception, тъй като не може да намери такова id в базата за update.
Още по-изнервящо е, че същия код работи съвсем добре с SQL Express или пълния SQL.
След известно чудене и лутане в Интернет намерих решение, по-точно - едно решение.

В form_Load се добавя:
eventsTableAdapter.Adapter.RowUpdated += new System.Data.SqlServerCe.SqlCeRowUpdatedEventHandler(Adapter_RowUpdated);
(тук таблицата е events, като трябва да се добави по един ред за всяка таблица, в която може да се добавят нови редове)

като самия код на метода е:
void Adapter_RowUpdated(object sender, System.Data.SqlServerCe.SqlCeRowUpdatedEventArgs e)
{
if (e.StatementType == StatementType.Insert)
{
SqlCeCommand cmd = null;

cmd = new SqlCeCommand("SELECT @@IDENTITY", e.Command.Connection, e.Command.Transaction);

int newid = Convert.ToInt32(cmd.ExecuteScalar());

DataColumn colMasterID = e.Row.Table.Columns["ID"];
colMasterID.ReadOnly = false;
e.Row[colMasterID] = newid;
}
}

Малко "грубо" решение, тъй като прави нова заявка към базата при вседки update, но работи. Все пак си мисля, че трябва да има и по-добро решение ...
(най-вероятно refresh и прочитане отново на данните също ще работи, но не ми се струва достатъчно елегантно)

неделя, 17 август 2008 г.

Колко ток гълта компютъра?

От време на време се чудя колко ток точно гълта постоянно включения сървър вкъщи или пък десктоп PC-то. Днес реших да разбера отговора на този въпрос и се сдобих с една машинка на Voltcraft, с която да измеря консумацията на компютрите вкъщи.
Това е лесен за използване уред, който се слага в стандартен контакт и измерва ватовете на уредите свързани към него. Не се нуждае от батерия - захранва се от мрежата. Има си и малка EEPROM памет, така че настройките за тарифите се запазват и след изключване.
Не съм голям експерт що се отнася до ток (а и по принцип :)), така че първо включих една преносима лампа с крушка, на която гордо пише 60W и наистина на екрана светна число около 60W (59.5-59.9 W по-точно).
След това пристъпих към същинския въпрос - колко точно харчи сървърното PC вкъщи.
Duron/1000 Mhz с 896 MB SDRAM ,2 IDE хард диска, 2 мрежови карти и AGP видео карта със захранване Fortron.
Без флопи или оптично устройство, клавиатура, мишка или монитор.

Този компютър поддържа постоянна консумация от приблизително 90W.
С малко изчисления - при цена на дневния ток около 17.7 ст/KWh и на нощния - около 11.5 ст/KWh се получават следните сметки:
0.090KW x 16 h x 17.7 = 25.48 стот по дневен ток за ден
0.090KW x 8 h x 11.5 = 8.28 стот по нощен ток за ден
или общо 33.76 стот /ден или малко над 10 лв за месец.

Излиза, че един постоянно включен компютър (без флопи, оптично устройство, клавиатура или други входно изходни устройства) изразходва по 10 лв на месец. Нещо, което кара човек да се замисли дали може да се оптимизира разхода на енергия и как би могло да се възвърне инвестицията.
Аз като начало мисля да разкача видео картата и да спра USB портовете :) Интересно какъв ефект ще има това върху цялостната консумация.
Update:
16 port switch консумира средно около 6.6W
Използването на standby функции на хард дисковете може да намали консумацията с допълнителни 5-6W на хард диск. Това се постига например с командата:
hdparm -S 12 /dev/hda
(12*5 sec= 60 sec standby за /dev/hda)

Update2:
17" CRT LG Flatron 795FT в режим 1024x768x85Hz консумира 75W
PC с процесор AMD Sempron 64 3200+ (1.8 GHz), 1.5 GB RAM и 250 GB HDD консумира около 70W в idle режим и 7 W, ако е вързан към ел. мрежа, без да е пуснат

Update3: Поставянето на хард дискове в standby има един допълнителен аспект, за който не се бях замислял досега, но определено има значение. Топлината,която се отделя е значително по-малка в standby, отколкото в нормална работа.
Може да не изглежда важно, но при 3 хард диска в един компютър, използван като сървър отделените ватове като топлина бързо се превръща в сериозен проблем.

вторник, 24 юни 2008 г.

Често срещани проблеми при инсталиране на MSSQL 2005

Microsoft SQL Server 2005 Express е доста костелив орех, ако се налага инсталация на множество машини. По мои наблюдения в около 20% от случаите инсталацията не завършва успешно, което си е жив проблем при mass deploy.
До сега съм срещал няколко възможни сценария, при които възниква проблем:

1. SQL Native Client: Странно защо, но този компонент е възможно да зависне в странна полуинсталирана фаза и да предотврати по-нататъшна инсталация на MSSQL 2005 Express. Най-често се получава, ако инсталацията на MSSQL 2005 е била прекъсната по средата (но трябва да е в точния момент - след началото на инсталацията и преди да е завършило доинсталирането на SQL Native Client).
Решение: Деинсталира се SQL Native Client и се повтаря инсталацията на MSSQL 2005 Express

2. MSXML 6.0 : Това е най-често срещания проблеми и за съжаление най-трудния за разрешаване. При неуспех на инсталация на MSXML 6.0 не се инсталира и MSSQL Database Engine => няма MSSQL 2005 Express :( Симптомите са червено хиксче пред MSXML 6.0 и Database Engine
Още по-неприятно е, че обикновено MSXML 6.0 не може да се намери в Add/Remove Programs. Допълнително усложнява и наличието на поне 4 различни версии на MSXML 6.0 (release, post release, SP1, post SP1 и т.н.)

Решение: Има няколко възможни пътя, по които може да се тръгне.
Първият (оптимистичен) е да се провери дали има MSXML 6.0 в Add/Remove Programs и да се деинсталира оттам (както и всички компоненти свързани с MSSQL 2005, ако такива има), след което да се повтори инсталацията.
Вторият (реалистичен): Инсталира се Windows Installer Clean Up Utility от следния адрес: http://support.microsoft.com/kb/290301
Малко объркващо пише Microsoft Office навсякъде, но това не трябва да ни плаши :) След инсталация и стартиране се появява спартанския интерфейс на програмата, който обаче е напълно достатъчен за целта.
Remove-ваме всичко, което има в името си MSXML 6.0 или празен низ ( и това може да се получи - информация по-долу).
Инсталацията на MSSQL 2005 вече (би трябвало) да работи успешно!

Малко допълнителна информация относно MSI Inventory database. Това не е базата данни на MSI, а на Windows Installer, където са описани всички инсталирани и не дотам инсталирани компоненти.
Удобен инструмент, който силно препоръчвам е msiinv.exe и е описан подробно на http://blogs.msdn.com/astebner/archive/2005/07/01/using-msiinv-to-gather-information-about-what-is-installed-on-a-computer.aspx
Накратко - дава информация относно всички инсталирани приложения на съответния компютър. Още по-приятно е, че информацията е доста подробна (включително от къде е инсталирано съответното приложение).
Част от тази информация вклюва entry-та като:
MSXML 6.0 Parser
Product code: {AEB9948B-4FF2-47C9-990E-47014492A0FE}
Product state: (5) Installed.
Package code: {A60D52F8-FAAB-4544-AF65-EAC1A22E5435}

Version: 6.00.3883.8

AssignmentType: 1

Publisher: Microsoft Corporation

Language: 1033

Installed from: D:\OTHER\IFX\Win32\

Package: D:\OTHER\IFX\Win32\

Product Icon: C:\WINDOWS\Installer\{AEB9948B-4FF2-47C9-990E-47014492A0FE}\ARPIco

Help link: http://go.microsoft.com/fwlink/?LinkId=52156

Local package:

Install date: 2008\03\13

0 patch packages.

Това общо взето е положителния вариант - за съжаление е възможно да се случи реда Product state: (5) Installed.
да бъде Product state: (1) Product was advertised but not installed
Което обикновено означава, че продуктът е зависнал в доста неприятно състояние и изхода е да се премахне чрез Windows Installer Clean Up.

Интересно е да се прочете статията и да се разбере повече за този инсттрумент. msiinv.exe заедно с Windows Installer CleanUp Utility могат да разрешат доста проблеми :)

понеделник, 28 април 2008 г.

Образование и CV

Писането на CV винаги е било, поне за мене, една съвсем не лека задача. Често пренебрегвам една информация за сметка на друга, не знам точно как да го структурирам - с две думи - бъркотия (това е една дума, но ситуацията е ясна).
Оказах се с малко повече време и реших да се поразровя и да попрочета малко повече какво трябва да има и да няма в едно CV.
Информация има колкото искаш и едно търсене в google изкарва предостатъчно резултати по темата, но реших да се съсредоточа основно върху тъй наречения "Европейски формат на автобиография".
На този портал: Център за развитие на човешките ресурси има много информация с препоръки как да напишем едно CV, как да изглежда, какво да има и няма. Също така са описани различни приложения към дипломи, сертификати, брошури за програмите Еразъм, Леонардо Да Винчи и др.
Още повече, сайтът действа като справочник за университети, европейски програми и прочие. Мисля, че е едно определно полезно място в web.

Europass формат на CV

Update: Моето CV все още не е готово, но вече не се чудя какво да пиша вътре и как да го структурирам :)


вторник, 22 април 2008 г.

Google Image Labeler

Поредната иновация от Google, която заслужава адмирации. Търсенето на изображения досега беше по-скоро търсене на текст покрай самите изображения, както и в имената на файловете, отколкото в самата картинка.
Това, между впрочем, съвсем не е изненадващо - много сме далече от автоматично разпознаване на образи...

Тук идва идеята на Google - на сайта http://images.google.com/imagelabeler/ в рамките на две минути всеки може да се "състезава" срещу друг потребител, като всеки се опитва да характеризира картинка с няколко етикета, като при първият етикет, който съвпада се присъждат точки в зависимост от сложността на думата.
Например - ако на картинката има летяща птица - възможни етикети са bird, sky и така нататък.
Хубавото е, че благодарение на двойната проверка - остават само тези етикети, за които и двамата потребители са се сетили - това значително намалява шанса от грешни класификации.
Още повече - при категоризиране на някоя картинка с етикет, в последствие този етикет вече не може да се използва и той е off-limit. Така в един момент, картинките се характеризират с няколко различни етикета и съответно търсенето е много, много по-ефективно.

Опитът показва, че за 2 мин могат да се категоризират средно около 10-15 картинки. Няма информация, колко картинки са категоризирани досега, но броят им определено нараства. Според класацията първия потребител е категоризирал около 150-200 000 картинки :)

Похвално е, че Google използват огромния си потребителски потенциал, за да го впрегнат в нещо толкова полезно.
Въвеждането на етикети за момента е само на английски, така че и подобреното търсене ще е само на английски (засега).

От мене - едно браво за Google :)

Update: Изглежда тази услуга е от доста време - пусната е още 2006 в бета версия. Малко закъсняла реакция от моя страна...

понеделник, 21 април 2008 г.

Новости в .NET 3.5 и Visual Studio 2008 (или по-скоро общ преглед)

Преди време ми се наложи да напиша две кратки статии за новостите в .NET 3.5 и Visual Studio 2008. Статиите така и не видяха бял свят и са далече от завършена фаза, но така или иначе вече са онлайн и са достъпни за сваляне във формат PDF на следните адреси:
Новости в .NET 3.5 и Visual Studio 2008.

По никакъв начин не претендират за изчерпателност или задълбочен анализ на материята.
Все пак през последните 4 месеца, откакто са написани известна част от схващанията ми са попроменени. Например:
- LINQ може би не е толкова "cool", колкото ми изглеждаше в началото - да, идеално е за малки демо презентации, но не винаги успява в реалния свят
- Silverlight 1.0 е много далече от завършен продукт и за момента изостава от примерно Flex. Може би 2.0 ще обърне нещата - прогрес се забелязва в тази насока
- WCF - продължавам да не му схващам цялостната идея :)

понеделник, 7 април 2008 г.

Размисли на тема memory карти и различните smart card четци

В един от последните ми проекти се наложи да работя със memory карти , по-специално SLE4428.
Защо? Ами евтини са, лесно се доставят и вярвах, че лесно се работи с тях - в крайна сметка - като голяма магнитна карта.
Да, ама не - след 3 дневно проучване и четене в google се оказа, че последното хич не е вярно.
Тъй наречените memory карти или карти със синхронен достъп се оказаха костелив орех и PS/SC спецификацията не важи за тях (PS/SC била само за карти с протоколи T=0 и Т=1, но откъде да го знам това...). В крайна сметка всеки модел картов четец си има собствен начин за достъп до синхронни карти!
Частта по инициализирането със SCardEstablishContext и SCardConnect е същата и идва от стандартния Windows winscard интерфейс, но самото четене и писане е специфично за конкретния четец.
С две думи - в зависимост от vendor-a на четеца се използват различни команди за достъп до паметта на картата. Мнооого неприятно. Това в комбинация с нуждата за поддръжка на няколко различни типове memory карти - още по-неприятно.

Все пак - решение има. За ACS има описание на командите в SDK-a (не знам дали е публично достъпен, но със сигурност може да се намери в Интернет),
за OMNIKEY има достъпно SDK на http://www.omnikey.com/ като трябва да се търси Synchronous API като цялата функционалност е затворена в scardsyn.dll и има готови функции за четене/запис.
За GemPlus (вече Gemalto) нужната библиотека е GSC.dll като идва с кратко описание от сайта на Gemalto.

Update: Ако се използва четец на Omnikey, за да сработи API-то за работа със синхронни карти е необходимо да се инсталират драйверите за Omnikey, тъй като стандартния драйвер по подразбиране от Windows не работи правилно.

Update2: ACS произвеждат USB картови четци, които не поддържат memory cards. Например такива са ACS ACR38C (C идва от CCID). За тези четци драйвери не са необходими, но за съжаление поддържат само карти с микропроцесор.

понеделник, 24 март 2008 г.

Няколко трика за Joomla 1.5

При поредната инсталация на Joomla 1.5 се натъкнах на следния проблем с някои хостинг провайдъри:
- файловете качени през FTP/SFTP имат за owner конкретния потребител, което е нормално
- файловете създадени от joomla (като качени templates и т.н) се създават в зависимост от потребителя, под който се изпълнява PHP (примерно nobody)

Всичко това не изглежда толкова лошо до момента, в който се наложи да се редактира/подмени някой файл от , например, някой template.
Тъй като файлът е с owner nobody и permissions 644 - няма начин да се смени достъпа да файла чрез потребителя на FTP/SFTP.
Доста неприятен факт, за който все пак се оказа, че има решение и то е plugin към joomla - файлов мениджър.

Използвам joomlaXplorer и от описаниет може да се прочете: "joomlaXplorer is a File- and FTP - Manager. It allows you to edit files, delete, copy, rename, archive and unpack files/directories directly on your server"
Така проблемът с permissions на файловете е решен макар и с цената на леко неудобен web интерфейс :)

Още нещо, което ми се наложи да науча в движение за Joomla 1.5 е, че настройките, който досега бяха в Global Settings вече се достъпват от няколко места по администраторския интерфейс.
Опцците за icons PDF/Mail/Print и други свързани със статиите са се преместили в Parameters от Article Manager.

четвъртък, 6 март 2008 г.

Регистрация на Assembly в Windows GAC без gacutil.exe

В този блог http://blog.neutron.sharpstyle.com/2007/07/08/installing-assembly-into-the-gac-programmatically/ попаднах на информация как да регистрираме програмно .NET assembly в Windows GAC.
Всъщност това се оказа доста лесно и се постига с помощта само на един ред:

new
System.EnterpriseServices.Internal.Publish().GacInstall(”myassembly.dll”);