Showing posts with label Програмирање. Show all posts
Showing posts with label Програмирање. Show all posts

Monday, December 10, 2012

Како се мафтаат корисници...

На сајтот на една домашна софтверска куќа, прочитав рекламна порака за нивниот производ - „УБЕДЛИВО НАЈПРОФЕСИОНАЛЕН ПРОГРАМСКИ ПАКЕТ“.
Според неа, најголемата предност на пакетот е:

„Ако внесувате испратница од еден во друг магацин, продавница или фактура тогаш брзо и едноставно внесувате само излезна испратница и HELIX автоматски место Вас ќе креира идентична влезна приемница во магацинот или продавницата, ќе ги ажурира материјалните картици на сите производи во двата магацини, трговските книги во магацините и продавницата, автоматски ќе го задолжи купувачот доколку документот е фактура и сите овие промени ќе ги искнижи автоматски во финансово со ажурирање на сите потребни аналитички, финансови и синтетички картици, бруто биланс, рекапитулар и заклучни листови.“
Иако реченицата е далеку предолга за да биде разбирлива за нормален човек, ја „разглобив“ на составни делови за да видиме што, всушност, кажуваат во неа:

Wednesday, May 30, 2012

Зошто SAP најчесто успева во имплементација?


Јас, основната вредност на SAP ја гледам од малку поинаков агол, а базирано на моето досегашно искуство со ERP системи и нивното воведување кај различни клиенти.
Имено, основен проблем од страна на клиентот е прифаќањето на новите правила за извршување и контрола на бизнис-процесите во компанијата.
ERP софтверот има голема улога во ова, бидејќи тоа е едното од неговите основни (и задолжителни) својства.

Sunday, February 26, 2012

Мајкрософт Windows 8 Mobile - платформа со највеќе изгледи за пропаст

Исправка: Стариот наслов на постот беше „Мајкрософт WinMobile - платформа со највеќе изгледи за пропаст“, но јас повеќе мислев на најновиот OS на Microsoft за мобилни уреди, Windows 8.

Покрај бројните написи од луѓе многу попаметни од мене, кои можат да се најдат на интернет, еве ги и моите размисли за тоа:

- Тоа што ја прави успешна една мобилна платформа не е самата платформа по себе, туку бројноста и квалитетот на апликациите за неа. Microsoft доцни 3 години. Најдобрите  и најинвентивните програмери во светот веќе одамна работат на Андроид или iOS.

Monday, October 11, 2010

Мотивациони писма

Си ја гледам статистиката на блогот, и забележувам дека дел од „погодоците“ се дојдени откако е пребарувано според изразот „мотивационо писмо“ или „мотивационо писмо на македонски“.
Иако и претходно пишував за тоа како треба да се однесувате кога барате вработување, изгледа дека младите информатичари слабо стојат со вештините за пишување на есеи (иако е поважно одлично да стојат со вештините за пишување на софтвер, нели).
Пред три дена, кај нас на интервју дојде една млада девојка која бара работа, па во главава сеуште ми е свеж разговорот со неа.
Советиве се повеќе за млади информатичари, но мислам дека ќе помогнат секому.

Мотивационо писмо. Ова, особено за млади луѓе, е најважниот дел од пријавата за вработување, од проста причина што немаат којзнае што да напишат во своето CV -- бидејќи немаат доволно искуство.

Tuesday, September 07, 2010

PHP апликациски рамки, за и против

Кога, пред повеќе години, донесовме одлука сита наши апликации да бидат базирани на web технологија, потрошив скоро два месеци пробувајќи ги тогаш постоечките PHP апликациски рамки.
Ниедна не ме задоволи. Не затоа што -- сами по себе -- беа лошо направени или со малку можности, туку поради две причини:

- Прво и најважно, заклучивме дека иднината не е во PHP како систем за сѐ - front и back-end. Употребата на JavaScript (или DHTML) штотуку „полетуваше“. Ние се фокусиравме на тоа. JS за интерфејсот, а PHP како „тенок“ back-end, само за бизнис логика, базично „подигање“ на апликациите, некои други поситни потреби и -- толку.
Било каков framework само би ни пречел и ограничувал.

Friday, June 04, 2010

Коментар: зошто го избегнувам ASP.NET

Веднаш да кажам зошто, а потоа ќе елаборирам:

Во ASP.NET околината, програмерот нема потполна контрола над кодот, ниту знае во целост што се случува со неговата апликација. Практично, ASP.NET е константно во „маскирен“ мод. Од програмерот ги крие фундаменталните аспекти на вебот.

Sunday, June 07, 2009

Корисна алатка за цртање на скици на екрани

Оваа алатка, Balsamiq Mockups, ја препорачаа во последниот (интернет) број на Linux Magazine, па решив да ја пробам. Служи за цртање на скици (прототипи) на екрани за внос, наместо да чкрткаме по whiteboard или хартија. Во споменатиот Linux Magazine ја нарекуваат „Pencil and Paper 2.0“. Лесно се учи и употребува (погледнете го видеото на сајтот). При инсталацијата на самата програма, се инсталира и Adobe Air. Но, баш поради тоа, работи на сите (битни) оперативни системи: Linux, OSX, Windows ...
Еве и една слика на еден екран за внос на комитент, извезена во png формат (ова е вградена опција). Ја направив за 10-тина минути (не ги исцртав баш сите полиња, но ионака служи само како потсетник). Сликата овде е во намалена резолуција, инаку застанува на А4 формат.
Сите цртежи можат да се снимат и да се отвораат подоцна, а - како што споменав - можен е и извоз во png формат. Вградени се многу widgets за поуспешно прикажување на саканиот екран, а овозможен е и full-screen приказ ако треба цртежите да ги прикажете на клиент или на колегите. За скицата да биде пореална, можат да се внесат и сопствени податоци во лабелита, полињата, па дури и листите и гридовите, како што направив јас.
Мислам дека може да биде корисна. Алатката не е многу скапа, 79$.

Tuesday, August 26, 2008

Проблеми со каше во Firefox

Бидејќи сум web developer, во процесот на програмирање постојано ја препрочитувам страницата на која моментално работам. Се разбира, сакам во моментот да ги видам и најмалите промени кои сум ги направил. Затоа, кашето (cache) треба постојано да ми биде исклучено.
Ех, сега, Firefox во контролниот панел нема експлицитен switch за негово исклучување, туку само можност да се наведе колку простор на дискот може да се користи за кашето. И ако мислите дека е доволно да се стави нула - грешите!.
Ако вредноста на кашето се стави на нула, тогаш FF не може да ги инсталира екстензиите, очигледно треба да ги кашира па да ги инсталира. Не помага ни некоја мала вредност (пробано), затоа што, иако во почетокот се` изгледа во ред, по извесно време почнуваат проблеми, навидум „одникаде“ - нешто што работело беспрекорно, сега одеднаш „пука“.
Проблемот со каширање е најочигледен при програмирање во JavaScirpt и CSS. Честопати не помага ни Ctrl+F5 или Ctrl+Shift+R комбинацијата.
Решението со исклучувањето на кашето лежи во поставувањето на FF системското поставување browser.cache.disk.enable на false.
Ова може да се направи или преку about:config, или, ако имате инсталирано Web Developer Toolbar, со избирање на disable cache (прво од лево).
И, потоа сите проблеми ги снемува.

Monday, August 11, 2008

Одлична addEvent() функција

Можноста за додавање на случки (events) е една од клучните за да се постигне добар и функционален кориснички интерфејс.
Очигледно,еден од начините е случките да се „прилепат“ уште во самиот HTML код, но тоа одзема голем дел од прегледноста на кодот, бидејќи тие (случките) се обработуваат во JavaScript делот на апликацијата, освен кога се работи за тривијални случаи.
Натаму, сите прегледувачи не работат на ист начин во обработката на случките, а особено не ги дефинираат на ист начин. Не можам а да не го споменам Internet Explorer, особено верзиите 6 и подолу (но, и седумката е лоша), кој нема вградено добро „чистење“ на меморијата, па при поинтензивни апликации се зафаќа многу меморија која не можа да се добие назад.
После подолго експериментирање, ја пронајдов и (малку) ја прилагодив функцијата направена од Dustin Diaz, кој од своја страна се базирал на трудот на John Resig (да, тој Џон Ресиг, од jQuery).
Оваа функција е потполно компатибилна со сите прелистувачи, грациозно деградира на постарите верзии (без грешки), го одржува that клучниот збор недопрен и не предизвикува „протекување“ на меморијата кај IE (memory leaks).
Всушност, се состои од три функции од кои првата е за залепување на обработувачи на случки (event handlers), втората за откачување на обработувачите, а третата се повикува при гасење на прозорецот на прегледувачот за да се изврши чистење (flush) на обработувачите и со тоа да се избегнат непријатните течења на меморијата.
EventCache функцијата оригинално е напишана од Mark Wubben.
Внимание! Функцијата се повикува без 'on' во вториот параметар.
На пример: addEvent(tab1, 'click', tab1_click); //Не е 'onclick'
Значи, еве го кодот:

function addEvent( obj, type, fn ) {
if (obj.addEventListener) {
obj.addEventListener( type, fn, false );
EventCache.add(obj, type, fn);
}
else if (obj.attachEvent) {
obj["e"+type+fn] = fn;
obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
obj.attachEvent( "on"+type, obj[type+fn] );
EventCache.add(obj, type, fn);
}
else {
obj["on"+type] = obj["e"+type+fn];
}
}

function removeEvent( obj, type, fn ) {
if ( obj.detachEvent ) {
obj.detachEvent( 'on'+type, obj[type+fn] );
obj[type+fn] = null;
}
else {
obj.removeEventListener( type, fn, false );
}
}

var EventCache = function(){
var listEvents = [];
return {
listEvents : listEvents,
add : function(node, sEventName, fHandler){
listEvents.push(arguments);
},
flush : function(){
var i, item;
for(i = listEvents.length - 1; i >= 0; i = i - 1){
item = listEvents[i];
if(item[0].removeEventListener){
item[0].removeEventListener(item[1], item[2], item[3]);
};
if(item[1].substring(0, 2) != "on"){
item[1] = "on" + item[1];
};
if(item[0].detachEvent){
item[0].detachEvent(item[1], item[2]);
};
item[0][item[1]] = null;
};
}
};
}();
addEvent(window,'unload',EventCache.flush);

Кодот е со CC-GNU LPGL лиценца, според желбата на Дастин Дијаз.

Wednesday, August 06, 2008

JavaScript: Објектно ориентирани модули (отприлика)

Објектно ориентираните модули во JavaScript (првпат идентифицирани од Douglas Crockford), го користат фактот дека JS има само еден вид на опфат на променливите: функционален опфат.
Заборавете ги блоковите или било која друга техника за разрешување на опфатот која можеби ви е позната од другите програмски јазици – во JS тоа не постои.
JS ви дозволува да креирате функции како дел од други функции (т.е. да ги вгнездувате), па оттука следува дека и опфатот на функциите е исто така вгнезден. Секоја вгнездена функција може да види сè во нејзиниот родител-функција, и така натаму, нагоре по дрвото на родителски односи.
Добро, но зошто е ова важно? JavaScript јазикот има голем недостаток (или е намерно својство?) во тоа што нема никаков вид на PPP (public, private, protected) функционалност. Сè е public – јавно. Па како тогаш да се постигне барем некакво употребливо ниво на енкапсулација? Нели е тоа (енкапсулацијата) основна точка во програмерската филозофија: „отворено за проширување, затворено за модификација“?
Едно од можните решенија за овој проблем се објектно ориентираните модули.

MojObjekt = function() {

var moePrivatnoPole;

function mojPrivatenMetod(nekakvaVrednost) {
// Ova se narekuva "closure"
moePrivatnoPole = nekakvaVrednost;

// Dodeluvanje na privatna promenliva na javna promenliva
javno.moeJavnoPole = moePrivatnoPole;

return "Jas sum privaten metod";
}

/*
* Ovde se definira javniot interfejs na objektot
* so upotreba na malku JS magija: object literal
*/
var javno = {
moeJavnoPole: null,

mojJavenMetod: function() {
return "Zdravo na site!";
},

mojPrivatenMetodWrapper: function(nekakvaVrednost) {
// Povikuvanje na privaten/skrien metod
mojPrivatenMetod(nekakvaVrednost);
}
}

// Ovde ja prepokrivame povratnata vrednost na konstruktorot
// so nasiot objekt od javniot interfejs
return javno;

}

var obj = new MojObjekt(); // Vospostavuvanje na nov objekt
obj.mojPrivatenMetod(); // Ova ne raboti, bidejki e privatno/skrieno
obj.mojJavenMetod(); // Raboti!

Според Technophiliac.