Mac Share Internet connection for Linux

One time I faced an issue, when I need an internet connection for my Linux device. The problem was, to configure internet on Linux device you need to install some additional packages from internet :)

That’s a quick guide how to share you internet connection from Mac for Linux machines.

Example to configure network 192.168.1.xxx

  1. Plug your USB Ethernet connector to your Mac and connect Ethernet connector to your Linux device.

    Mac USB Ethernet

  2. Network -> USB Ethernet -> Select Manually and enter your preferred IPv4 address
    Internet USB Ethernet

  3. Sharing -> select your source and USB Ethernet as destination. Check Internet sharing

    Sharing - Select source and destination

  4. Go back to Network and change IP to any other and then back again. It will fix Mac issue, when after enabling sharing Ethernet port become unavailable.
  5. Now go to your linux device, and tell it to get DHCP settings from your Mac

    # dhclient eth0
    

Now internet should be available on your Linux machine.

Bananian Linux Router Configuration

# apt-get install bash-completion 

Add new user:

# useradd -m USER_NAME
# apt-get install sudo
# usermod -G sudo -a USER_NAME # add user to sudo group

/etc/rc.local

at the end of file add

pppd call utel

sysctl net.ipv4.conf.all.forwarding=1

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

/etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
	address 192.168.1.254
	netmask 255.255.255.0

Install PPPD

# apt-get install ppp

/etc/ppp/peers/utel

defaultroute
noauth
noccp
noipdefault
/dev/ttyUSB3
connect "/usr/sbin/chat -v -f /etc/chatscripts/utel"
persist
maxfail 0
debug
usepeerdns

/etc/chatscripts/utel

	"" ATZ
	OK AT+CGDCONT=1,"IP","3g.utel.ua"
	OK ATDT*99#
	CONNECT ""

Install DHCP server

# apt-get install isc-dhcp-server

/etc/dhcp/dhcpd.conf

authoritative;
default-lease-time 14400;
max-lease-time 14400;
get-lease-hostnames false;
use-host-decl-names on;
ddns-update-style none;
option domain-name "banana";
option subnet-mask 255.255.255.0;

subnet 192.168.1.0 netmask 255.255.255.0 {
  option domain-name-servers 8.8.8.8,8.8.4.4;
  option routers 192.168.1.254;
  option broadcast-address 192.168.1.255;
  range 192.168.1.33 192.168.1.66;
}

Install ProFTP server

# apt-get install proftpd

/etc/proftpd/proftpd.conf

SocketBindTight                 on
DefaultAddress                 192.168.1.254

Banana PI Quick Lubuntu Configuration

Banana Pi with 3G

Credentials by default: root/bananapi. Via ssh pi/bananapi.

/etc/rc.local

ifconfig eth0 192.168.1.254

pppd call utel

sudo sysctl net.ipv4.conf.all.forwarding=1

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

/etc/ppp/peers/utel

defaultroute
noauth
/dev/ttyUSB3
connect "/usr/sbin/chat -v -f /etc/chatscripts/utel"
persist
maxfail 0
debug
usepeerdns

/etc/chatscripts/utel

	"" ATZ
	OK AT+CGDCONT=1,"IP","3g.utel.ua"
	OK ATDT*99#
	CONNECT ""
$ sudo apt-get install isc-dhcp-server

/etc/dhcp/dhcpd.conf

authoritative;
default-lease-time 14400;
max-lease-time 14400;
get-lease-hostnames false;
use-host-decl-names on;
ddns-update-style none;
option domain-name "banana";
option subnet-mask 255.255.255.0;

subnet 192.168.1.0 netmask 255.255.255.0 {
  option domain-name-servers 8.8.8.8,8.8.4.4;
  option routers 192.168.1.254;
  option broadcast-address 192.168.1.255;
  range 192.168.1.33 192.168.1.66;
}

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 минут приносить мясо (курка, шея свенины, говядина, люля-кебаб, ананас-чилли) и потом опять все по кругу. Вам так же дается фишка, если она перевернута зеленой стороной – значит вам будут приносить мясо, если красной – значит стоп. После этого вы уже не можете перевернуть ее обратно. Ваша трапеза завершена. Поэтому лучше пропустить что-то нежели преждевременно прерывать трапезу.
Из интересный моментов замечу, что вам сначало выносят холодные закуски чтобы набить свой живой и оставить поменьше места на мясо :)
Потом когда начинают носить, то сначало идет курица, потом свинина, потом опять курица а только потом говядина и люля-кебаб… То есть все для того чтобы в конце концов вы поменьше поели нормального мяса :)

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