All resent features on 360YEREVAN


As during 2 months we have added quite many functional and very soon we will change the whole interface, I thought to share all functional we have done so far and make sure that it has been validated by users.

First of all we have added “Add Story” draggable button. It is small round button that user can drag to any part of the screen and add story to that coordinates.


Another important feature we have added was Embed window from the menu icon. It is very easy to copy code from there for any Tour and embed it into HTML page, Blog post or even to Facebook Page’s tab.


And the last functional that we have added was tour sharing directly.


Happy hour at GeekdomSF.

The idea that ‘coding isn’t art’ is fast becoming a fossil of our time. I mean, I began painting on canvas and then found it was too messy, expensive and well, difficult in my location, so I was forced to experiment with digital art, partly inspired by David Hockney . And so I began with Artrage on my laptop, but I found out pretty quickly that my imagination was limited to the software, and unless I could code, I was limited to what I could and couldn’t do. Hence, the journey continued to software and programming with ProcessingJS  and Javascript, which I am manically studying, now.

What seemed like gobble-de-gook a few months ago is now taking some semblance of order, and I can see the potential of it all, the enormous cavern of creativity, linking art and code. 

When I learnt to speak Portuguese, it was a similar process. First, the sounds were complete mush, but then slowly, over a few months it all began to make sense, my confidence grew, and all of a sudden I could speak. Finding my voice with code, I imagine, will take in a similar set of emotions until I reach the point when I can say, ‘I´m producing art and code - yeehaa woop woop’. Of course, I´m not there yet, in fact I am a million miles away, but, each day I get closer and each month I can reflect on my progress.

It’s the first step,  in building a new career that includes tech, art, education and ‘social change’  - all the things I love. I don’t know where it will lead me, but I am not too worried about that either.

I´m sharing this, because I imagine other English teachers, artists, chefs, heck, anyone really, thinking about code as I did previously. Which was, ‘code and programming, oh God, how boring, how am I ever going to learn to code’. So, I spent a year thinking about it. Anyway, I´m stoked I´ve made the leap, and devoting the time. It’s far more rewarding than I had every imagined. So, get stuck in - you will not regret it.

Need inspiration? - visit Codeame here where you will find some inspiring artists. This is what Ian Winters says:

“As an artist Winters strives to make technology (if used) an essential, inseparable tool — but still to be fundamentally a tool for exploration rather than a means in itself.  Even when the conceptual or political material may be complex — such as explorations of memory & series; temporality, scale, and physical sites; exploration of the complex social relationship of technology and the landscape; and the intersections of live performance; the social and technology — Winters sees the emerging role of technology as one of a fundamental democratization and opening of individual and social possibility.”

Watch on

Architecting large Single Page Applications with Knockout.js

This talk is about experiences of building large SPAs and maintaining them over time. In part, I’ll demonstrate pros and cons of various technology choices, such as TypeScript, Grunt, and AMD module optimisers. In part, I’ll demonstrate some Knockout.js-specific techniques, such as the new and powerful “components” feature that improves maintenance, testability, and runtime performance.

I finished building my website! Finally found the time and energy to dedicate three days to it.

I’m gonna be customizing my tumblrlrlrlr theme, and setting up a patreon in the near future too. A lot of overhauling is taking place. The absence of finished artwork isn’t me hitting a creative roadblock…quite the opposite, in fact! I’m just doing things behind-the-scenes.

You can check out the website here.

Excuse the lack of artwork in the portfolio galleries- I lost most my old art due to technical difficulties and the watermarks are extremely outdated which I can no longer edit. That, and my art did take a large leap in technical skill recently when I dedicated time to studying lighting, perspective etc - so everything else I’ve drawn prior looks so out of place. 

All images sans the social media buttons are mine, I have yet to hunt down the maker again but they were free//no credit needed (I’ll add a link to them somewhere tho when I track ‘em down again.)

Let me know what you think!

Long Time No Post != Long Time No Code

Haven’t been writing any personal posts lately, I guess I was just riding on the wave of how many people took interest in the Guide I created. :P

But as the title suggests, this doesn’t mean that I haven’t been active in my coding endeavors. I just didn’t realize that my new followers might actually want to hear about my personal progress, rather than watching me reblog random pictures. Hehe.

So literally 10 minutes ago I finished Codecademy’s HTML/CSS track, and my last little “Build Your Resume” project on there kinda sucks because I just wanted to complete the course. However, I feel that I’m very comfortable with the syntax, and now I feel even more confident that I’m choosing the correct path for a career: front-end dev. I like making things look pretty, okay? I like colors and graphics and buttons and things.
Oh and I knowww I’m not following the exact order of my guide, I have yet to finish the Tuts+ HTML/CSS course only because I like listening to music when I code, and with the Tuts+ things I have to watch/listen to videos (as opposed to Codecademy which is just written instruction). Though the Tuts+ teacher, Jeffrey Way, is awesome and his tutorials are super helpful! I’m going to be starting up again with those soon.

Also, the other day I finished my Programming for Everybody (Python) course on Coursera, which was gratifying, oh yeah and I finished the Python track on Codecademy before that as well. Python is really great, but I want to learn Ruby as well; Rails seems like an intriguing language to play with. So I also just signed up for a new Coursera course called Web Application Architecture, which teaches Ruby on Rails, and then I’m also going to follow the “Web Programming with Ruby on Rails” tutorials on University of Reddit (I love Reddit).

So yeah, that’s the plan for now. I’m gonna learn Javascript soon after the initial workload from the new courses subsides. OH WAIT. I also have college courses starting today. Shit, I forgot. Ugh okay so I’m also taking another HTML/CSS web dev course from a community college, along with Programming Fundamentals (taught in C), and a C# class, and possibly a C++ class and Multimedia class in October. Yes, I am crazy. Pray for me.

I’ll try to post updates more often, so that I don’t procrastinate and feel like I have to write long posts like this. Yeah. I’ll write like one paragraph. That’s okay right?

Gonna go make my brain explode. K bye.

Framework: Strongloop's Loopback

Framework: Strongloop’s Loopback for Node.js APIs

Recently I did a series for New Relic on three frameworks, both for APIs and web apps. I titled it “Evaluating Node.js Frameworks: hapi.js, Restify, and Geddy” and it is available via the New Relic Blog. To check out those frameworks give that blog entry a read, then below I’ve added one more framework to the list, Strongloop’s Loopback.

Strength: Very feature-rich generation of models, data…

View On WordPress

習作 1-2 視差滾動設計與 requestAnimationFrame



正宗的視差滾動網頁實作技巧主要是用position absolute在各個圖層上,配上z-index做出前後順序。然後用JavaScript在onScroll事件上計算每個圖層應該移動多少距離。整個步驟中最複雜的是計算出每次Scroll每個圖層到底要對應移動多少。


<div class=”parallax”>
  <div class=”parallax__group”>
    <div class=”parallax__layer parallax__layer—fore”>


    <div class=”parallax__layer parallax__layer—base”>


    <div class=”parallax__layer parallax__layer—back”>


    <div class=”parallax__layer parallax__layer—deep”>



      .parallax {
      .parallax__group {
        position: relative;
      .parallax__layer {
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
      .parallax__layer--fore {
      .parallax__layer--base {
      .parallax__layer--back {
      .parallax__layer--deep {





  1. deep層,66.66%
  2. back層,100% (基準圖層)
  3. base層,200%
  4. fore層,300%



      var body = document.querySelector('.parallax'), scrollTop = 0;
      var lv0 = body.querySelector('.parallax__layer--deep'),
        lv1 = body.querySelector('.parallax__layer--back'),
        lv2 = body.querySelector('.parallax__layer--base')
        lv3 = body.querySelector('.parallax__layer--fore');
      body.addEventListener('scroll', function (e){
        scrollTop = body.scrollTop; * 0.333) + 'px';*-1) + 'px';*-2) + 'px';

這邊的數字是這樣算出來的:假設我們目前在scrollTop = 100px時:

  • deep層(lv0)應該設定top=33px,所以相對於目前的捲動進度,它只移動了 100 - 33 = 67個象素。
  • back層(lv1)沒有調整,所以他就是移動了100個象素。
  • base層(lv2)設定成top=-100px,因為是負的100個象素,所以等於跑了100 - (-100) = 200個象素的距離。
  • fore層(lv3)設定成top=-200px,這樣等於飛了 100 - ( -200) = 300個象素。





  1. 第0秒,使用者觸發onScroll事件,計算每個圖層的top
  2. 第0.01秒,使用者觸發onScroll事件,計算每個圖層的top
  3. 第0.02秒,使用者觸發onScroll事件,計算每個圖層的top
  4. 第0.03秒,瀏覽器啟動repaint,重畫整個視窗的物件


那怎麼辦呢?現代的瀏覽器都提供了一個方法可以,讓我們可以在該運算的時候才運算,就是本習作的另一個主題 — requestAnimationFrame。




  1. 首先,我們定義一個函式來計算各個圖層的top:

            var doScroll = function (newScrollTop){
     * 0.333) + 'px';
    *-1) + 'px';
    *-2) + 'px';
  2. 之後,我們來定義requestAnimationFrame需要的callback函式:

            var prevAnimationTime = 0;
            var tickScroll = function (time) {
              if (prevAnimationTime === time){ return; }
              prevAnimationTime = time;


  3. 最後,我們改造onScroll事件的處理函式,讓它呼叫requestAnimationFrame來註冊瀏覽器重畫時要呼叫的函式:

            window.requestAnimationFrame = 
            window.requestAnimationFrame ||
            window.mozRequestAnimationFrame ||
            window.webkitRequestAnimationFrame || 
        body.addEventListener('scroll', function (e){
            scrollTop = body.scrollTop;
            if (requestAnimationFrame){
            } else {






Happy Coding Day!

"A callback function, also known as a higher-order function, is a function that is passed to another function (let’s call this other function “otherFunction”) as a parameter, and the callback function is called (executed) inside otherFunction. A callback function is essentially a pattern (an established solution to a common problem), and therefore, the use of a callback function is also known as a callback pattern."