Анализа на кодот на Skycons

jsВо овој блог пост следи анализа на кодот на Skycons. Тоа е мала JavaScript библиотека која црта анимирани икони за временските состојби, користејќи го HTML5 <canvas> тагот. Се користи во одличниот сервис Forecast.

Кога ќе завршите со читање ќе знаете како се пишува една JS библиотека (притоа не jQuery или node/AMD/CommonJS библиотека, туку нај нај `нормална` библиотека), ќе знаете која и е структурата и може ќе научите и некоја финтица попат :)

Како се користи

Првин да видиме пример како се користи библиотеката:

Дефинираме канвас:

<canvas id="icon1" width="128" height="128"></canvas>

Ја вклучуваме библиотеката во HTML-от. И потоа во JavaScript кодот создаваме инстанца од Skycons

var icons = new Skycons();

и дефинираме која временска состојба да се исцрта за кој канвас и повикуваме нејзино анимирање.

icons.set("icon1", Skycons.RAIN);
icons.play();
Пример: различните икони кои ги нуди, притоа и во различни големини
Пример: различните икони кои ги нуди, притоа и во различни големини

Анализа

Пред да почнеме да го анализираме кодот, може да приметиме дека нуди методи кои се пристапуваат `дирекно` од библиотеката (пр. .RAIN) и методи кои се пристапуваат од инстанцата (пр. .set и .play). Друго за напомена, верзијата на библиотеката која е дел од овој блог пост е со id cec079f77b (нормално е да има и понови/подобрени верзии од библиотеката во иднина). Да почнеме:

Кодот започнува со декларирање на варијабла наречена Skycons

var Skycons;

и притоа не се прави ништо повеќе со неа во овој момент, нема иницијализација. Повеќе за варијабли тука.

Следно, целиот преостанат код се наоѓа во овој блок

(function(global) {

}(this));

и тука ја користиме и варијаблата Skycons. Овој блок се нарекува анонимна самоповикувачка функција, која во нашиот слчај е со аргумент – референца до глобална променлива. Доколку експлицитно не дефинираме – сите функции и варијабли во неа се приватни и нема да може да се пристапат од надвор. Повеќе за анонимни самоповикувачки функции тука, тука и тука.

Во оваа функција прво нешто е изразот “use strict”, што значи дека целата функција се извршува под ‘strict mode’.

"use strict";

Оваа декларација мора да биде на самиот почеток на функцијата. Повеќе за овој мод на работа тука.

Следно се декларираат две варијабли

var requestInterval, cancelInterval;

и после нив има уште една анонимна самоповикувачка функција, во која двете варијабли се употребуваат

(function() {
  var raf = global.requestAnimationFrame       ||
            global.webkitRequestAnimationFrame ||
            global.mozRequestAnimationFrame    ||
            global.oRequestAnimationFrame      ||
            global.msRequestAnimationFrame     ,
      caf = global.cancelAnimationFrame        ||
            global.webkitCancelAnimationFrame  ||
            global.mozCancelAnimationFrame     ||
            global.oCancelAnimationFrame       ||
            global.msCancelAnimationFrame      ;

  if(raf && caf) {
    requestInterval = function(fn, delay) {
      var handle = {value: null};

      function loop() {
        handle.value = raf(loop);
        fn();
      }

      loop();
      return handle;
    };

    cancelInterval = function(handle) {
      caf(handle.value);
    };
  }

  else {
    requestInterval = setInterval;
    cancelInterval = clearInterval;
  }
}());

Во функцијава се дефинираат рамките за анимација и за сопирање на анимацијата и се дефинирани на тој начин што би работеле на сите интернет пребарувачи кои ја подржуваат оваа функционалност. Ова се нарекува RequestAnimationFrame shim, повеќе информации има тука и тука.

Следно има код во коментар (скокаме коментари!) и после него се дефинираат неколку константи (кои како и претходните две варијабли, не се достапни надвор од библиотеката пример кога е инстанцирана – бидејќи се во анонимна самоповикувачка функција).

var KEYFRAME = 500,
    STROKE = 0.08,
    TWO_PI = 2.0 * Math.PI,
    TWO_OVER_SQRT_2 = 2.0 / Math.sqrt(2);

После константите, следуваат функциите за цртање. Функциите се дефинирани на тој начин што може да се ре-искористат за повеќе икони наеднаш. Пример во сите случаи кога иконата за времето има облаче, се повикува истата функција за цртање на тој облак. Да ги разгледаме…

Првата е за цртање на круг.

function circle(ctx, x, y, r) {
  ctx.beginPath();
  ctx.arc(x, y, r, 0, TWO_PI, false);
  ctx.fill();
}

Како параметри се праќаат контекстот, точките x, y и радиусот r. ctx е контекстот земен од канвас елементот и тој нуди методи за цртање најразлични геометриски форми и преку него се цртаат иконите. Но, ако цел код е повици кон ctx ќе има многу повторување и нема да биде читлив, па затоа се овие помошни функции. Повеќе за цртање форми во канвас тука и тука.

Следната функција е за цртање на линија.

function line(ctx, ax, ay, bx, by) {
  ctx.beginPath();
  ctx.moveTo(ax, ay);
  ctx.lineTo(bx, by);
  ctx.stroke();
}

Јасно е дека преку канвасот се дефинира линија од една до друга точка и се исцртува.

Нема да ги опишувам сите овие помошни методи, само ќе ги излистам, можете во библиотеката да видите кои повици кон кои методи од контекстот се искористени.

function puff(ctx, t, cx, cy, rx, ry, rmin, rmax) {...}
function puffs(ctx, t, cx, cy, rx, ry, rmin, rmax) {...}
function cloud(ctx, t, cx, cy, cw, s, color) {...}
function sun(ctx, t, cx, cy, cw, s, color) {...}
function moon(ctx, t, cx, cy, cw, s, color) {...}
function rain(ctx, t, cx, cy, cw, s, color) {...}
function sleet(ctx, t, cx, cy, cw, s, color) {...}
function snow(ctx, t, cx, cy, cw, s, color) {...}
function fogbank(ctx, t, cx, cy, cw, s, color) {...}

Потоа има помошни матрици со броеви за помош на цртањето на анимацијата на ветрот

var WIND_PATHS = [ ...
    ],
    WIND_OFFSETS = [ ...
    ];

И уште две помошни функции

function leaf(ctx, t, x, y, cw, s, color) {...}
function swoosh(ctx, t, cx, cy, cw, s, index, total, color) {...}

Сега почнува интересното.

Skycons = function(opts) {
  this.list     = [];
  this.interval = null;
  this.color    = opts && opts.color ? opts.color : "black";
};

Оваа функција се повикува кога во горниот пример беше извршено new Skyicons(). Опционално може и бојата да се дефинира, пример new Skyicons({"color" : "blue"}). Полето list е листата во која се додаваат канвас елементите при повикување на .add и .set и полето interval се користи во .play и .pause. Повеќе за овие функции кога ќе им дојде редот.

Следни се функциите за временските состојби.

Skycons.CLEAR_DAY = function(ctx, t, color) {
  var w = ctx.canvas.width,
      h = ctx.canvas.height,
      s = Math.min(w, h);

  sun(ctx, t, w * 0.5, h * 0.5, s, s * STROKE, color);
};

Во оваа функција се пресметуваат неколку варијабли во зависност од големината на канвасот, и се повикува помошната функција sun.

Следна функција е

Skycons.CLEAR_NIGHT = function(ctx, t, color) {
  var w = ctx.canvas.width,
      h = ctx.canvas.height,
      s = Math.min(w, h);

  moon(ctx, t, w * 0.5, h * 0.5, s, s * STROKE, color);
};

која е слична на претходната, но на крај ја повикува помошната функција moon.

Во овој стил, следат функциите

Skycons.CLOUDY = function(ctx, t, color) { ... };
Skycons.RAIN = function(ctx, t, color) { ... };
Skycons.SLEET = function(ctx, t, color) { ... };
Skycons.SNOW = function(ctx, t, color) { ... };
Skycons.WIND = function(ctx, t, color) { ... };
Skycons.FOG = function(ctx, t, color) { ... };

Функциите кои се достапни преку инстанцата на Skyicons (add, set, draw, …) се на ред. Следно во кодот е дефиниран блокот

  Skycons.prototype = {
  };

И во него прва е функцијата add

add: function(el, draw) {
  var obj;

  if(typeof el === "string")
    el = document.getElementById(el);

  obj = {
    element: el,
    context: el.getContext("2d"),
    drawing: draw
  };

  this.list.push(obj);
  this.draw(obj, KEYFRAME);
},

Пред да објаснам што прави функцијата, да размислиме зошто оваа е достапна преку инстанцата на Skycons. Тоа е бидејќи е дефинирана преку prototype. Повеќе за prototypes тука и тука.

Во функцијата се креира празна варијабла obj, со getElementById се зема канвас елементот по името (пр. icon1, повеќе инфо тука), се создава објектот, се додава во листата и се повикува за него draw.

Многу важно тука е назначувањето на draw за полето drawing во создавањето на објектот. Да го земеме примерот icons.add(“icon1″, Skycons.CLEAR_DAY); – во obj за полето drawing ја назначуваме функцијата CLEAR_DAY. Во JavaScript можеме функции да праќаме како аргументи на методи и да ги назначуваме на полиња. Повеќе за тоа тука.

Следна е функцијата set

set: function(el, draw) {
  var i;

  if(typeof el === "string")
    el = document.getElementById(el);

  for(i = this.list.length; i--; )
    if(this.list[i].element === el) {
      this.list[i].drawing = draw;
      this.draw(this.list[i], KEYFRAME);
      return;
    }

  this.add(el, draw);
},

Која го прави истото како add, само ако веќе постои објект со такво име на канвасот – го заменува во листата.

Следна функција е remove

remove: function(el) {
  var i;

  if(typeof el === "string")
    el = document.getElementById(el);

  for(i = this.list.length; i--; )
    if(this.list[i].element === el) {
      this.list.splice(i, 1);
      return;
    }
},

Која отстранува објект од листата.

Потоа е функцијата draw

draw: function(obj, time) {
  var canvas = obj.context.canvas;

  obj.context.globalCompositeOperation = 'destination-out';
  obj.context.fillRect(0, 0, canvas.width, canvas.height);
  obj.context.globalCompositeOperation = 'source-over';

  obj.drawing(obj.context, time, this.color);
},

Која се повикува во play функцијата, и како параметри прима објект од листата и време. Првин го зема канвасот, го чисти, и за објектот го повикува методот drawing. А drawing е впрочем еден од методите за времињата, како RAIN, CLOUDY, итн… такада еден од тие методи се извршува соодветно.

Следна е функцијата play

play: function() {
  var self = this;

  this.pause();
  this.interval = requestInterval(function() {
    var now = Date.now(),
        i;

    for(i = self.list.length; i--; )
      self.draw(self.list[i], now);
  }, 1000 / 60);
},

Во неа првин се забележува интересното var self = this; – оваа варијабла self ни помага да чуваме референца до this во случаи кога може контекстот на извршување на this да се менува. Повеќе за тоа тука. Потоа повикуваме pause – функција која ќе ја објасниме следна, и потоа повикуваме requestInterval и во секоја итерација ги итерираме сите објекти во листата и повикуваме исцртување – така ја добиваме анимираноста.

И последната функција, pause

pause: function() {
  var i;

  if(this.interval) {
    cancelInterval(this.interval);
    this.interval = null;
  }
}

Во неа, доколку interval е некогаш дефиниран (што значи доколку е повикано претходно play) се повикува cancelInterval и interval се поставува на null.

Крај на кодот. Структурата на библиотеката графички преставено изгледа вака:

Преглед на структурата на Skycons
Преглед на структурата на Skycons

Сега уште еден коментар. Зошто некои методи се достапни преку Skycons дирекно, а некои преку инстанцата? Затоа што можеме да имаме повеќе икони на една иста веб страна, и не сакаме сите да бидат со исти бои, или некои сакаме да се анимирани а некои статички. На овој начин тоа е возможно.

И тоа е тоа. Доколку имате сугестии, поправки, идеи, надополнувања или било каков коментар – бујрум!

Иднината на оперативните системи

js+pcОперативните системи се софтвер, кој од сите типови на софтвер, ја има имаат потребата најмногу и најбрзо да се менуваат, да се подобруваат и да бидат во тек со најновите харверски новости но и со посакувањата на крајните корисници – меѓу кои барањата за поголема интуитивност и услужливост.

Очигледно зборувам оперативните системи наменети за “десктоп” машините, за мобилните уреди и таблетите, оние кои имаат најмногу контакт со нас – секојдневните корисници. Во овој пост нема да зборувам за оперативните системи кои се наоѓаат во сателитите, во системите кои не смеат ни за еден момент од времето да потфрлат, во серверите (виртуелизирани или не), во уредите во нулеарните реактори, болниците и слично – тие си заслужуваат посебна дискусија и секако не влегуваат во опсегот на она што сакам да го кажам во следните редови.

Имам мислење дека во период од следните години ќе видиме многу промени во декстоп и мобилните оперативни системи, мислење до кое дојдов поради неодамнешни случувања и трендови.

“Декстоп”

Да видиме што се случува тука во последно време:

  • Windows 8 е достапен за јавноста. Една од главните новости е можноста на развивачите на софтвер да пишуваат апликации во JavaScript – јазик кој едно време доминираше само во веб прелистувачите.
  • KDE корисничката околина која се користи во GNU/Linux оперативните системи со најновите верзии нуди подршка за пишување на апликаиции во QtQuick – кој e базиран на QML што е впрочем декларативен јазик базиран на JavaScript.
  • GNOME корисничката околина која истотака се користи во GNU/Linux оперативните системи најави дека JavaScript ќе биде ‘граѓанин од прв ред’ помеѓу другите веќе постоечки јазици во кои можат да се пишуваат апликации. И не само тоа, туку и ќе биде примарниот избор за оваа цел.
  • Chrome OS
    • Самиот оперативен не нуди стандардни десктоп апликации, туку секоја апликација е впрочем веб апликација и се наоѓа во самостоен прозорец во корисничкиот интерфејс – притоа нудејќи ја илузијата дека е стандардна десктоп апликација. Има неколку типови на апликации кои се достапни во Chrome OS, но – иако се ‘веб’ апликации – нудат можност и за работа и кога нема корисникот пристап до интернет – доколку авторот на таа апликација ги има искористено соодветните можности кои ги нуди Chrome OS за таа функционалност.
    • Друго многу важно, поврзано со Chrome OS е фактот дека Chromebook-от на Samsung е најпродаван лаптоп на Amazon во дадената категорија и доминира во неа веќе неколку месеци и фактот дека Google само што го претстави за продажба премиум Chromebook лаптопот Pixel.
Samsung Chromebook - бестселер во "Best Sellers in Laptop Computers" веќе неколку месеци
Samsung Chromebook – бестселер во “Best Sellers in Laptop Computers” веќе неколку месеци
Chromebook Pixel - ултрапремиум (и ултраскапиот) Chrome OS уред од Google
Chromebook Pixel – ултрапремиум (и ултраскапиот) Chrome OS уред од Google

Ова укажува на неколку трендови:

  • ‘The client side seismic shift’ – кајшто се повеќе декстоп апликации ќе се заменуваат со решенија базирани на JavaScript – кајшто е можно (засега).
  • Ќе дојде времето кога ‘десктоп’ оперативните системи ќе бидат поделени на две категории – да речеме лесни и тешки. Лесни ќе бидат тие како Chrome OS кои се одлични за секојдневните корисници кои саат да поминат време на Facebook, да пратат мејл, да напишат некоја белешка во Google Docs, да слушнат некоја песна на SoundCloud и да прегледаат некој видео стрим или клипче на YouTube. Голем дел од корисниците не прават повеќе од годенаведеното. Потоа, ‘тешките’ оперативни системи ќе доминираат таму кадешто треба повеќе моќ од машината но и по-способни апликации. Тука станува збор за користење на софтвер за обработка на податоци, за аудио и видео творење, за програмирање и за софтвер кој влегува во научни цели.
  • Целото тоа оспособување на развивачите на софтвер да пишуваат апликации во JavaScript ќе доведе до можноста една апликација да има две ‘однесувања’ – доколку е извршена на тешката верзија на оперативниот систем – ќе има повеќе функционалности и соодветно доколку е извршена на лесната верзија – ќе има соодветно помало множество на понудени функционалности. Не сум користел Windows 8 и Windows RT – но мислам дека таму веќе се појавува оваа поделба на некое почетно/површно ниво – некои апликации работат и на двете верзии а некои само на Windows 8.
  • Иако се користи JavaScript – за секој оперативен систем и секоја околина соодветно има специфични JavaScript библиотеки кои служат како интерфејс за комуникација помеѓу веб апликацијата и оперативниот систем (пристап до хардверски функции, пример gps, батерија, телефонски повици, итн…). Ќе дојде времето кога ќе има една библиотека која ќе ја користи развивачот на софтвер – а соодветно за избраниот оперативен систем таа ќе ги корсити специфичните методи од предвидената библиотека за него. Ова донекаде е веќе прикажано со QtQuick – кајшто имаме еден ист код – но можеме да правиме апликации и за Linux и за Windows и OS X – но мојата замисла е дека ова ќе биде и на поголемо ниво.
  • Следствено, софтверот како сервис (SaaS) ќе биде во уште поголем пораст. Отворете го Chrome Web Store и ќе ви стане јасно. И новиот Mozilla Marketplace е знак дека овие времиња доаѓаат.

Некои од точкиве се испреплетуваат/се зависни меѓусебно.

“Мобајл”

Во ова поле, кајшто великаните iOS и Android доминираат и Windows Phone е во пораст, се очекува да имаат конкуренција или годинава или 2014та.

Во горенаведените мобилни оперативни системи нема некои ‘сеизмички’ промени, нови верзии од нив добиваме секои неколку месеци, со нови оптимизации и подобрувања но не некои круцијални промени во корисничкиот интерфејс или ‘под хаубата’ во архитектурата на системот и начинот на кој се пишуваат апликации за него.

Но затоа, во развој се неколку оперативни системи кај кои главна работа која ги разликува од горенаведените е тоа што пишувањето на апликации за нив се врши во веб технологии како HTML, CSS и JavaScript.

Тие се веб технологии, но во овие нови оперативни системи ќе создаваат ‘нативни’ апликации за нив. Пионир во овој тип на мобилни оперативни системи беше webOS – кој падна во рацете на HP и отиде во неповрат. Но затоа има нови играчи:

  • Како Sailfish OS на Jolla – фирма создадена од момците кои си отидоа од Nokia а работеа на MeeGo, Maemo и слично – со еден збор талентирани луѓе. Sailfish користи Qt/QML кој веќе е спомнат во овој блогпост.
  • Друг нов играч е Firefox OS на Mozilla – комплето базиран на веб техологии – кои пред некој месец најавија два ‘девелопер’ телефони во соработка со Telefonica и Geeksphone. А денес најавија и телефони во соработка со LG, Alcatel и други производители.
Една од сликите од најавувањето на Firefox OS (превземено од http://live.theverge.com/firefox-os-mwc-2013-live-blog/ )
Една од сликите од најавувањето на Firefox OS (превземено од http://live.theverge.com/firefox-os-mwc-2013-live-blog/ )
  • Трет е Tizen – труд на Samsung за ваков тип на оперативен систем, и секако ‘план б’ и осигурување на независност од Google и Android.
  • Четврт е Ubuntu за мобилни и Ubuntu за таблети – кој како Jolla – со кориснички интерфејс базиран на Qt и јадрото базирано на GNU/Linux. Веќе се очекува во 2014 да почнат да се продаваат уреди базирани на оваа верзија на Ubuntu, но Firefox OS ги претрка.
Ubuntu за мобилни (превземено од http://www.theverge.com/2013/2/19/4005514/ubuntu-phones-2014-might-be-locked-down-by-mobile )
Ubuntu за мобилни (превземено од http://www.theverge.com/2013/2/19/4005514/ubuntu-phones-2014-might-be-locked-down-by-mobile )
  • И да не заборавиме на Plasma Active – трудот на KDE развивачите да направат оперативен систем за таблети кој ги користи иновациите и технологиите кои се достапни во KDE – една од најнапредните кориснички околини. Aпликациите за Active се пишуваат во QML. Веќе има пробни верзии како Kubuntu Active – модифицирана верзија на Kubuntu.

Дали овој нов бран на мобилни оперативни системи ќе создаде промени останува да видиме. Тоа зависи од дали:

  • Секојдневните корисници ќе земат уред базиран на некој од новите оперативни системи;
  • Колку голем “хајп” ќе се создаде и популарност, па да и постоечките (гореспоменати) великани ќе понудат ваков начин на развој на софтвер за нивните оперативни системи;

Доколку има основа, одностно горните зависности се исполнат, ќе доведе до трендови како:

  • оперативни системи базирани на целосно отворени технологии;
  • последните две точки од трендовите кај ‘десктоп’.

Околу овие промени, да не ги заборавиме и веќе постоечките решенија како PhoneGap/Apache Cordova, Titanium, и така натаму, кои веќе овозможуваат користење веб технологии за изработка на мобилни апликации. Доколку имате апликација во Phonegap/Cordova – голема е можноста со лесност во иднина да ја приспособите за горенаведените нови мобилни оперативни системи. Поважниот дел во промените што иднината ги носи е што користењето на овие техологии ќе се извршува на пониско ниво на оперативниот систем од што се случува моментално, со тоа и перформансите ќе бидат подобри од што се моментално.

Уште една мисла за крај: Покрај сите овие промени кои надоаѓаат во софтверот, јасно е дека ќе треба да има промени/надградби и во вештините кои ги поседуваат развивачите на софтвер. Односно да не се само “шлапа” JavaScript туку и да се навлезе во подлабоките концепти и можности кои ги нуди јазикот и да се искористат.

И тоа е тоа, може многу да се навлегува, истражува па и филозофира на темава, но мислам дека има доволно ментална стимулација во постов за да ве замисли.

Доколку забележите некаква грешка, или сакате да го споделите вашето мислење, не се двоумете.

Foursquare во Балканот и Македонија

Сте се замислиле ли некогаш, каде колку се користи Forusquare, еден од најпопуларните геолокациски сервиси во светот? Дали има повеќе ‘чекини’ еден град или друг? Или држави споредено?

Како одговор за љубопитните, Mashable објавија дека Foursquare нудат нова алатка која впрочем е мапа на светот врз која е графички претставена активноста на корисниците. Мапата, може да се прегледа и без корисничка сметка на сервисот.

Скриншоти од сервисот, поставени врз соодветни скриншоти од Google Maps, еден филтер за транспарентност, и ги имаме следните резултати (клик на сликата ја отвора во нов таб/јазиче во `оригиналната` големина).

Како стои балканот?

Map_Balkans

Според претставените податоци, Албанија и БиХ најслабо го користат сервисот, а Грција најмногу. Македонија солидно се држи.

Каква е ситуацијата во Македонија, по кои градови има ‘чекини’?

MapMK

Скопје како најголем град (и со најмногу хипстери :P) логично е на прво место. Може да приметиме дека скоро во сите градови (Охрид, Битола, Велес, Штип, итн…) има доста активност. Има и други интересни детали, како на пример линиите околу Охридско и Мавровско езеро.

Интересно би било и Facebook да објават слична алатка кадешто ќе бидат преставени податоците од нивниот геолокациски сервис којшто е интегриран во социјалната мрежа.

Геолокациските сервиси се дел од иднината, такада останува да бидеме дел од неа.

Македонски интернет портали и превземање содржини од други места

tab_remove-128Може да го прочитате мојот пост “Македонски интернет портали и социјалните мрежи” во кој изјаснив некои мои ставови, но не покажував со прст према ниеден портал/сајт/медиум.

Но овој пат ќе го направам тоа. Не е ова еден и единствен пример, и не е ова случај кај само еден од порталите, но мора пример за илустрација да се земе.

Прво да се изјаснам, дека многу ценам кога некој портал ќе објави вест/статија/рецензија или друга форма на творба, и ќе си наведе прописно, а) автор, б) референци, в) линкови до позајмените слики и видеа вметнати во содржината.

Да го видиме следниот пример:

SkopjeInfo
Линк до статијата на крај на постот [1]

Сликава, сигурно е фотографирана на Водно, не ?

GOP

Дури и хоризонтално е изротирана.

Да кажам пак, има и портали со многу многу полоши примери. Сите тие “копи-пејст” статии со папарацо содржина за поп ѕвездите и познатите во Америка – исто немаат референци (сигурно немаме пратено фотограф Снуки или Кардашијан да ја следи 24/7). Тој тип на портали и воопшто не го посетувам.

На крај на денот, има многу веб сервиси кајшто може да се пребаруваат фотографии кои се лиценцирани под отворена лиценца, како Creative Commons. Сигурно можете за вашата статија која ја пишувате – за што и да се однесува – да најдете соодветна слика. Добра почетна точка е Flickr со нивната страна за пребарување, само одберете дека сакате да ви ги филтрира по CC и прелистувајте ги резултатите. Фотографијата е само дел од целата содржина – придружник на текстуалниот дел, но тоа не значи дека не треба да се обрнува повеќе вниманите и професионализам и во тој аспект.

Читателите не прегледуваат само еден портал во текот на денот, туку многу, и домашни и странски. Со оригинална содржина и професионалност ги придобивате читателите повеќе да го поминуваат своето време на домашните а помалку на странските портали. Да не заборавиме дека со тоа и нивната доверба во вас.

[1] http://skopjeinfo.mk/kolumni/1390595049/kolumna-mojata-ispoved-mojata-lekcija-za-zivot

 

Музички албуми кои ја одбележаа (мојата) 2012

Завршува 2012-та и доаѓа моментот кога слободно може да резимираме кои ни биле најслушаните албуми за годината, да дадеме некоја критика за нив, и да споделиме! Во мојот случај, имам last.fm профил кајшто ‘скроблам‘ се што слушам (освен од мобилен) и во главно врз основа на тие податоци и ќе ја формирам листата.

Би бил среќен и други луѓе да пишат вакви блог постови, да прочитаме и другите што слушаат па и да дадеме коментар!

Justin Martin – Ghettos & Gardens

Жанровски нешто како техно со влијанија на даб :) Весело албумче, полно со бас линии, перкусии и семплови. Критики: Resident Advisor и BBC. Може да се преслуша тука.

The Beauty Room – The Beauty Room II

Бед составен од двајца. Многу вокали и лесни гитарчиња, позитивен звук, жанровски официјално е алтернатив. Критика, и уште една.

Delilah – From the Roots Up

Delilah прв пат ја слушнав на песна на Chase & Status, одличен вокал е а и музичката продукција е на ниво. Критики: NME, BBC, Guardian.

Loolacoma – Animam

Зад ова уметничко име стои Avis Vox, која доаѓа од Русија и е вокалот зад многу песни на Moonbeam. Ова е нејзиниот соло албум, но сепак голем дел од продукциите се од истите момци од Moonbeam. Интервју со неа поврзано со албумот на 1mix.

https://soundcloud.com/loolacoma/sets/loolacoma-ooze-away

Chase & Status – Live At Brixton Academy

Chase & Status се одлично дуо од Англија кои творат нешто помеѓу дабстеп и d’n’b. Имаат и одлични настапи во живо и оваа компилација ги сумира нивните два албуми.

Daft Punk – Tron: Legacy

Овој албум е од 2011, но толку многу е добар и во 2012 многу саати имам потрошено на негово слушање :) Албумот е музика за филмот Tron: Legacy и е одличен спој на електронска музика со оркестарот. За Daft Punk нема потреба да се кажува кои се. Критики: BBC, NME, Pitchfork.

Example – The Evolution of Man

Четвртиот албум на Example, рапер кој одлично се вклопува во музички продукции со хаус и даб влијанија. Има добри нумери на албумот, иако сумирано албумот има песни со различни жанрови и не звучи како една приказна (што за некои е добро за некои лошо). Критики: NME, BBC, Timeout.

Santigold – Master of My Make-Believe

Santigold прв пат ја слушнав со песната Disparate Youth, која се наоѓа на овој солиден албум.

Критики: Pitchfork, Metacritic.

Mala – Mala in Cuba

Продуцент од Лондон, кој во овој албум има вклопено на одличен начин даб звуци со кубански мотиви. Целиот албум е како една приказна, одлична приказна. Критики: Pitchfork, Resident Advisor, BBC.

High Contrast – The Agony & The Ecstasy

Продуцент од Велс, ветеран познат во d’n’b сцената. Албумот е емотивен, со многу професионално изведени продукции кајшто неколку од нив се соработки со Underworld.

Некои од слушателите на неговите претходни албуми се разочарани од новиот правец на High Contrast со новиот албум, но на секој негативен критичар пет позитивни се наоѓаат за овој албум. Критики: Brig, music is math.

Lifeformed – Fastfall

Овој албум ми е нај нај нај омилен годинава. Дојде како саундтрак со играта Dustforce, и е дело на Terence Lee. Може да се преслуша тука. Позитивна електронска музика. Критики: compelica, soundtracknerd.

Македонски интернет портали и социјалните мрежи

tab_remove-128Морам да кажам дека сум разочаран од македонските интернет портали.

Не само поради содржината во нив, тоа е цел муабет: статии преведувани од српски (бар да беа од англиски – од оригиналниот извор, вака превод на преводот), статии без наведени извори, пародии статии (како тие од njuz и theonion) преведени и прикажани како вистина да е, ‘гугл транслејт’ статии, и така натаму…

Не само поради рекламите: на сите страни во сите форми, музики ти свират без напомена, реклами на цела страна без опција да ја затвориш додека не заврши…

Туку и поради социјалниот момент.

Еве неколку примери:

  1. Наидувам на линк со вест/статија споделена на Фејсбук или Твитер, ме заинтересирува и го кликам линкот. Се отвора порталот, и целиот стајт е затемнет и еден огромен дијалог во средина се појавува кој ме принудува да кликнам Like на нивниот Фејсбук профил за да можам да преминам на содржината што сакам да ја прочитам. Во вакви случаи, го затворам сајтот, ја гуглам веста и наоѓам друг портал кајшто можам да ја прочитам без попречувања.
  2. Наидувам на линк со вест/статија споделена на Фејсбук, го кликам линкот. Се отвора порталот, можам да ја видам содржината, но оп! – за неколку секунди пак ме пренасочува назад на Фејсбук – да ја одобрам аплкацијата што ја направиле на Фејсбук за порталот! (да им беше подобар JavaScript кодот може и помалце секунди ќе чекав). Не, фала.

Моментот кога ќе почнете да го форсирате корисникот да биде ваша реклама преку неговите сметки на социјалните мрежи – сте го изгубиле како ваш читател.

Истражувањата на Гугл во полето на “distributed big data systems” [updated x1]

Постов е со цел да направам листа на објевените истражувања од страна на Гугл во горенаведената област (која нема да ја преведувам :)). Секое од овие истражувања донесуваат нови откритија и се, како што ги нарекуваат, револуционерни поради иновациите кои ги произнесуваат.

Зад секое од овие истражувања стои практична имплементација во Гугл и се производ од нивните потреби да се справуваат ефикасно со огромната количина на податоци кои секојдневно се зголемуваат. Истотака постојат и OpenSource имплементации базирани на некои од овие истражувања, како што е проектот Hadoop.

Би ги поделил во два ‘брана’.

Првиот бран се:

И, да речеме вториот бран, се:

Happy reading ;)

EDIT: Дополнително, и Sawzall е уште едно објавено истражување поврзано со тематиката.