Delinch

Недавно был запущен мною интернет-магазин по продаже бижутерии – Delinch. Цель его была, от нуля создать маленький бизнес и раскрутить его.

Delinch

Посмотрим что с этого выйдет за год.

Сначала я использовал готовые e-commerce CMS, такие как Prestashop, Magento, Shop-Script, но все они работали либо медленно, либо было очень мало плагинов, либо тяжелые в поддержке.
В итоге я решил написать свой используя NikaFramework.
Это было необычно, так как NikaFramework это SPA и сайты на них не пишут. Мне эта идея еще больше понравилась, и я решил а почему бы и нет.

И так вот мой стек:

UI:
- NikaFramework
- PhantomJS – для пауков

API:
- NodeJS

Все писалось на чистом JS без всяких библиотек. В итоге как пруф что пауки его видят – Google

Пришлось изменить URL чтобы они стали более SEO-дружелюбны. Скорость работы сайта впечатляет.
В планах еще улучшить производительность, и развивать проект.

MySQL set default UTF-8

First check if you current configuration of MySQL has wrong encoding, by issue status command:

MySQL Settings

If so, add/change the following in /etc/mysql/my.cnf:

....
[mysqld]
....
character_set_server=utf8
collation-server=utf8_bin

# that need for confluence correct work
#default-storage-engine=INNODB
#max_allowed_packet=32M
....

and restart MySQL.

MySQL UTF8 Settings

Advanced work with JavaScript Primitives

As you know, JavaScript has 6 data types: boolean, string, number, null, undefined and object.

null and undefined are constants, and doesn’t have any Object representation.
object – it’s Object, so it’s not a primitive by definition.

So, remains – boolean, string and number that are primitives that have Object representation, as Boolean, Number and String classes.

Now, lets play with primitives:

var a = 1;
a.constructor // => Number()

The question is: how primitive can has an property?? So it’s an object not a primitive?
No. The variable a is a primitive, but per ECMA spec, when you access to it’s property – it’s casting to object representation.
OK, so if it’s an object looks like we could set any property to it:

var a = 1;
a.x = 9;
a.x; // => undefined

WHAT? Why it doesn’t work? That’s because it casting to constructor (without new) object representation and works as return in that case.
If we try to access property x, variable a casts to object and returns that property. That’s why we got undefined.
But when we try to set it, it doesn’t work as a it isn’t an object.

How we can play around that?

var a = 1;
a.__proto__.x = 9;
a.x; // => 9
a; // 1 
typeof a; // "number"

Cool, isn’t it?

Буковель

И так это уже вторая поездка за этот год в Буковель. На этот раз мы поехали с женой и с моей мамой. Первый раз мы ездили в сезон, сейчас же поехали когда сезон закончился, посему цены на все сильно упали. Для сравнения:

Сервис В сезон Вне сезон
Проживание в готеле 2400 800
Дневной ski-pass 336 150
Прокат борда 85 50

Мы жили в VIP-Резиденция, это гостиница в самом центре Буковеля. Номер отличный, с кухней, ванной, на три человека. Мы немало сэкономили на трансфере (50грн. в одну сторону), при этом приятной новостью было то, что завтрак там был бесплатный (шведский стол), хотя при заказе это не было упомянуто, а еще бесплатная сауна в СПА “4 Сезона” каждый день по 2 часа, хотя резерв был расписан на два дня вперед, и мы смогли только побывать там только один раз.

Совет: дешевле переплатить за хорошую гостиницу с самом центре буковеля, и вы можете существенно сэкономить на трансфере (минимум 100грн. в день). Так же вы можете в любое время пойти в гостинцу, поесть и опять на лижы/борд. Это существенная экономия на еде (если питаться в ресторанчиках на горках) либо на трансфере (если ехать назад в гостиницу).
Так же часто готели такого уровня имеют сервис намного больший, что опять выходит в экононию, в нашем случае это завтрак и сауна.

Я с женой на буковеле, трасса 2B
Я с женой на буковеле, трасса 2B
Моя жена Таня
Моя жена Таня
Моя мама. Ее мы тоже научили кататься на борде :)
Моя мама. Ее мы тоже научили кататься на борде :)

Чураско во Львове. Впечатления

И так побывал вчера в Чураско, что на улице Галицькая, на угле, где был раньше “Baker Street”.
В этом заведении у вас есть возможность заказать один из видов “сета”, за 119 либо 149грн, и тогда вам в зависимости от сета который вы заказали должны каждые 10-15 минут приносить мясо (курка, шея свенины, говядина, люля-кебаб, ананас-чилли) и потом опять все по кругу. Вам так же дается фишка, если она перевернута зеленой стороной – значит вам будут приносить мясо, если красной – значит стоп. После этого вы уже не можете перевернуть ее обратно. Ваша трапеза завершена. Поэтому лучше пропустить что-то нежели преждевременно прерывать трапезу.
Из интересный моментов замечу, что вам сначало выносят холодные закуски чтобы набить свой живой и оставить поменьше места на мясо :)
Потом когда начинают носить, то сначало идет курица, потом свинина, потом опять курица а только потом говядина и люля-кебаб… То есть все для того чтобы в конце концов вы поменьше поели нормального мяса :)

Из минусов – немножко долго носят, довольно шумно, неуютно, маленький общий туалет в который не так просто попасть из-за непосредственной близости к касе.

Scirott

Вот уже практически год тому, 25 мая 2013 года я начал работать над своим собственным проектом. С того времени много воды утекло, было много идей для чего будет проект, потом они все время менялись, проект писался, постоянная внутренняя борьба что это должно быть, поиск ценности проекта, и много шума в голове…

Спустя практически год я остановился в бесконечных поисках, и теперь знаю что я хочу. Я не буду раскрывать все карты проекта, опишу лишь интересную его часть:

Scirott

DB: Cassandra
ЯП: JavaScript (NodeJS)
UI: HTML5, NikaFramework

Очень много времени пошло на закладывания фундамента в виде server side на NodeJS. Теперь уже когда фундамент более-менее заложен, начинаю набирать скорость.
Главное чего меня научил проект до этого времени, это по новому смотреть на вещи, самодисциплина и настойчивость.