Wednesday 30 November 2011

Употребата на "Й" (и-кратко) в родната реч.

Това е една доста подценявана буква, която съм забелязал, че днешното поколение, което пише транслитерирано (това е правилната дума за "Шльокавица") не познава или не знае как да използва.

Виждал съм дори безумия, като името ми, написано "Стойл".

За бога, хора! Научете го този език! Имал съм 4-ки и 3-ки по Български език, но никога не съм допускал да обидя нечие име, като го напиша неправилно!

"И-кратко" означава "кратко И" нито повече, нито по-малко. Използва се, когато буквата И е недостатъчна, но две букви (ИИ) са твърде много.
  • Софроний
  • Софийски
  • Литийно

Има изключения, като имената Генади и Генадий, но те са изключения, които потвърждават правилото.

Двойно И се ползва, когато имаме множествено число на  дума, завършваща на "-ИЯ".
  • Зодия - Зодии.
  • Легия - Легии.
  • Една България - Две Българии.
Единично "-й" се ползва при единствено число на думи завършващи на "-и":
  • Славей - Славеи.
  • Случай - Случаи.
  • Чий - чии.
  • Сипей - Сипеи.
В никакъв случай не се използва в женски род вместо "и с ударение", като в тези случаи:
  • У дома й.
  • Майка й.
  • Кажи й.
  • За да й върви.
НЯМА случай, в който буквата "й"  се използва сама. Винаги е част от дума.

"Й кратко" се слага само на места в които "пълно И" не може да се използва.

Wednesday 16 November 2011

Почивните дни през 2012 г.

Препоръки за 2012 година.

Вземете си 1 отпуска от 2 седмици през лятото (10 дни) и разпределете другите 10 дни така:

17-21 април или 23-27 април. Ще си направите една дълга 10-дневна почивка срещу 5 дни от отпуската. Достатъчни са за победа над пролетната умора. Идете на планина. Много е красиво през Април.

21-23 май. 3 дни от отпуската ви дават 8 дни почивка. А останалите 2 дни, задължително:

27-28 декември. Свързвате коледа с нова година. Какво по-добре?! ;)

2012                               

       January               February                 March       
Mo Tu We Th Fr Sa Su   Mo Tu We Th Fr Sa Su   Mo Tu We Th Fr Sa Su
                   1          1  2  3  4  5             1  2  3  4
 2  3  4  5  6  7  8    6  7  8  9 10 11 12    5  6  7  8  9 10 11
 9 10 11 12 13 14 15   13 14 15 16 17 18 19   12 13 14 15 16 17 18
16 17 18 19 20 21 22   20 21 22 23 24 25 26   19 20 21 22 23 24 25
23 24 25 26 27 28 29   27 28 29               26 27 28 29 30 31
30 31
        April                   May                   June        
Mo Tu We Th Fr Sa Su   Mo Tu We Th Fr Sa Su   Mo Tu We Th Fr Sa Su
                   1       1  2  3  4  5  6                1  2  3
 2  3  4  5  6  7  8    7  8  9 10 11 12 13    4  5  6  7  8  9 10
 9 10 11 12 13 14 15   14 15 16 17 18 19 20   11 12 13 14 15 16 17
16 17 18 19 20 21 22   21 22 23 24 25 26 27   18 19 20 21 22 23 24
23 24 25 26 27 28 29   28 29 30 31            25 26 27 28 29 30
30
        July                  August                September     
Mo Tu We Th Fr Sa Su   Mo Tu We Th Fr Sa Su   Mo Tu We Th Fr Sa Su
                   1          1  2  3  4  5                   1  2
 2  3  4  5  6  7  8    6  7  8  9 10 11 12    3  4  5  6  7  8  9
 9 10 11 12 13 14 15   13 14 15 16 17 18 19   10 11 12 13 14 15 16
16 17 18 19 20 21 22   20 21 22 23 24 25 26   17 18 19 20 21 22 23
23 24 25 26 27 28 29   27 28 29 30 31         24 25 26 27 28 29 30
30 31
       October               November               December      
Mo Tu We Th Fr Sa Su   Mo Tu We Th Fr Sa Su   Mo Tu We Th Fr Sa Su
 1  2  3  4  5  6  7             1  2  3  4                   1  2
 8  9 10 11 12 13 14    5  6  7  8  9 10 11    3  4  5  6  7  8  9
15 16 17 18 19 20 21   12 13 14 15 16 17 18   10 11 12 13 14 15 16
22 23 24 25 26 27 28   19 20 21 22 23 24 25   17 18 19 20 21 22 23
29 30 31               26 27 28 29 30         24 25 26 27 28 29 30
                                              31

Отработваме:

Нова година - 2 януари се отработва на 21 януари

1-ви май, деня на труда - 30 април се  отработва на 21 април.

24-ти май, деня на писменноста - 25 май се отработва на 19 май

6-ти септември - 7 септември се отработва на 29 септември.

За Коледа не се отработва нищо, за разлика от тази скапана кризисна капиталистическа коледа и нова година. (петък-събота-неделя и в двата случая)


Нова година 2013 - 31 декември се отработва на 15 декември.

Извинявайте за грубият календар. Линукса ми така го изкарва ;) (с команда cal 2012 -m)

Tuesday 1 November 2011

Как да синхронизираме часовника в Линукс с NTP

Един приятел ме попита преди година, как да го направи, че му се разсинхронизираше базата данни всеки 3 дни и часовника му при рестарт показваше 1970-та. Кеф. Още не съм бил роден, Торвалдс е бил бебе а той вече е имал сървер под линукс.

Да не навлизаме в подробности - Казано с два реда, прочетете актуалният час от някой "доверен" NTP сървер и синхронизирайте hwclock по него:

bash-4.1# ntpdate 0.pool.ntp.org
2 Jun 11:08:57 ntpdate[3110]: step time server 94.26.7.48 offset -13.078094 sec
bash-4.1# hwclock --systohc
bash-4.1#

As simple as it is. 2 commands. Естествено, ако имате сървер по-близък от ntp.org, ползвайте него. Всъщност ползвайте който сървер искате, дори и личен, ако имате такъв :D
Може да се направи и на скрипт, ако някой му е необходимо да го стартира:

bash-4.1# touch SyncClock.sh
bash-4.1# cat > SyncClock.sh
#!/usr/bin/bash

echo "Clock is syncing to NTP, please wait..."

sudo /usr/sbin/ntpdate 0.pool.ntp.org
sudo /sbin/hwclock --systohc
^D
bash-4.1# chmod +x SyncClock.sh

Естествено трявбва да се изпълнява като root, или както се прави напоследък в Убунту и други mainstream линукси - sudo без парола ;) което изобщо никому не препоръчвам да прави на сървер. Не знам 'що за гений го е измислил. Май и за туй не ползвам Убунту и производни.

С този скрипт под ръка, може да го сложите в /etc/rc.d/rc.local за да се изпълнява при старт на машината:

bash-4.1# echo -e "\n#Clock sync script\n/root/scripts/SyncClock.sh" >> /etc/rc.d/rc.local

Или още по-добре, сложете го в cron, за да се изпълнява всеки ден. В Slackware се прави лесно:

bash-4.1# cp /root/scripts/SyncClock.sh /etc/cron.daily

Май това е всичко, което трябва да се направи.

Friday 28 October 2011

Как да открием IP адреса на Skype потребител

Как да открием IP адреса на Skype потребител (от листата ни)

Това е един доста често задаван в миналото въпрос, писах статия на английски (in English), за да помогна на една приятелка от Финландия, която се съмняваше че гаджето и не и пише от къщи, а ходи другаде. Тя е линукс потребител като повечето съвременни хора ;)

Детаилите са отегчителни така или иначе, ето как се прави:

  • Проверявате какви са връзките ви в момента установени от Skype:

bash-4.1# netstat -tupan | grep skype
tcp        0      0 0.0.0.0:20530           0.0.0.0:*               LISTEN      2136/skype          
tcp        0      0 10.3.71.55:35709        213.226.8.44:6417       ESTABLISHED 2136/skype          
tcp        0      0 10.3.71.55:56213        84.255.243.158:6774     ESTABLISHED 2136/skype          
tcp        0      0 10.3.71.55:59342        93.155.194.71:30900     ESTABLISHED 2136/skype          
tcp        0      0 10.3.71.55:48004        78.128.57.94:14961      ESTABLISHED 2136/skype          
tcp        0      0 10.3.71.55:52886        212.73.140.140:18281    ESTABLISHED 2136/skype          
tcp        0      0 10.3.71.55:49665        89.106.122.17:23325     ESTABLISHED 2136/skype          
udp        0      0 0.0.0.0:20530           0.0.0.0:*                           2136/skype          
udp        0      0 127.0.0.1:33358         0.0.0.0:*                           2136/skype          
bash-4.1# 
  • Пишете бележка на човека, който ви интересува и пробвате отново.
bash-4.1# netstat -tupan | grep skype
tcp        0      0 0.0.0.0:20530           0.0.0.0:*               LISTEN      2136/skype          
tcp        0      1 10.3.71.55:33570        83.28.135.233:443       SYN_SENT    2136/skype          
tcp        0      0 10.3.71.55:56213        84.255.243.158:6774     ESTABLISHED 2136/skype          
tcp        0      0 10.3.71.55:59342        93.155.194.71:30900     ESTABLISHED 2136/skype          
tcp        0      0 10.3.71.55:48004        78.128.57.94:14961      ESTABLISHED 2136/skype          
tcp        0     97 10.3.71.55:37577        10.3.71.63:28257        ESTABLISHED 2136/skype          
tcp        0      1 10.3.71.55:54679        83.28.135.233:20489     SYN_SENT    2136/skype          
tcp        0      1 10.3.71.55:54677        83.28.135.233:20489     SYN_SENT    2136/skype          
tcp        0      0 10.3.71.55:52886        212.73.140.140:18281    ESTABLISHED 2136/skype          
tcp        0      0 10.3.71.55:39944        79.107.232.127:45423    ESTABLISHED 2136/skype          
udp        0      0 0.0.0.0:20530           0.0.0.0:*                           2136/skype          
udp        0      0 127.0.0.1:33358         0.0.0.0:*                           2136/skype          
bash-4.1# 
  • Проверявате кои редове са генерирали трафик и имат статус ESTABLISHED (установена връзка). В този случай, това е реда ---> 97 10.3.71.55:37577 10.3.71.63:28257 ESTABLISHED.
IP адреса 10.3.71.55 е на служебната ми машина, и очевидно, колегата на когото пратих бележка за тест има адрес 10.3.71.63. В общи линии това е всичко за под Линукс.

Под Windows се прави малко по-иначе, защото там няма grep и netstat няма толкова параметри, но принципа е същият. Просто трябва да си отваряте очите добре, това е резултата от компютъра на колегата под Windows:

C:\>netstat

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    bogdan:2116            10.3.172.106:22        ESTABLISHED
  TCP    bogdan:2117            10.3.155.1:22          ESTABLISHED
  TCP    bogdan:2250            10.3.131.170:3389      ESTABLISHED
  TCP    bogdan:2288            213.146.189.203:12350  TIME_WAIT
  TCP    bogdan:2292            10.3.131.52:22         ESTABLISHED
  TCP    bogdan:2298            82.137.93.70:1558      TIME_WAIT
  TCP    bogdan:2302            77.70.124.25:54477     TIME_WAIT
  TCP    bogdan:2309            213.146.189.202:12350  ESTABLISHED
  TCP    bogdan:28257           10.3.71.55:37577       ESTABLISHED
  TCP    bogdan:1807            localhost:2994         ESTABLISHED
  TCP    bogdan:2994            localhost:1807         ESTABLISHED

Ако се вгледате, има резултат който показва моят адрес 10.3.71.55 със статут ESTABLISHED. Портовете на които Скайп е установил връзка (в случая bogdan:28257 и 10.3.71.55:37577) са със случаен характер но винаги са над 25000. По това ще се ориентирате.

Можете и да си изтеглите програмката TCPView от Microsoft Sys internals, която може добре да показва връзките ви със външният свят, като филтрира и сортира протоколите по групи.

Принципът си остава - поглеждате връзките си навън, провеждате разговор с човека който ви интересува и докато го правите, отново поглеждате връзките си навън. Неговият адрес е там, в новоустановените връзки.

Thursday 27 October 2011

Как се "бриджват" 2 мрежови карти в Линукс

Още e познато като ethernet bridge. Доста често ми се налага в процеса на работа да го правя, за да подслушвам мрежов трафик за тестовете на оборудването, което произвеждаме. Писал съм и този материал на английски, ако ви е по-комфортно така (Same article in English).

Накратко, трябват Network пакетите на всеки произволен линукс. Вижте дали тези три команди ги имате: ifconfig, brctl и tc. Последното не е необходимо за bridge, но има една полезна функция, която може да искате да знаете.

bash-4.1# which ifconfig
/sbin/ifconfig
bash-4.1# 
bash-4.1# which brctl
/sbin/brctl
bash-4.1# 
bash-4.1# which tc
/sbin/tc
bash-4.1#

Самото правене на bridge (мост :) )

не е нищо особено, прави се виртуално мрежово име с brctl, добавят му се мрежови карти и се вдига с ifconfig up. В моята тестова система има 3 мрежови карти. Една за интернет и 2 за тестове.

bash-4.1# ifconfig | grep eth
eth0      Link encap:Ethernet  HWaddr 00:01:6C:27:4B:BA  
eth1      Link encap:Ethernet  HWaddr 00:06:4F:29:49:F0  
eth2      Link encap:Ethernet  HWaddr 00:01:6C:E2:FF:D2  
bash-4.1# brctl addbr br001
bash-4.1# brctl addif br001 eth1
bash-4.1# brctl addif br001 eth2
bash-4.1# ifconfig br001 up
bash-4.1# ifconfig br001
br001     Link encap:Ethernet  HWaddr 00:01:6C:E2:FF:D2  
          inet6 addr: fe80::201:6cff:fee2:ffd2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:238 (238.0 b)

bash-4.1# 

Това е всичко, което трябва. В момента ако се включат произволни 2 мрежови устройства на eth1 и eth2 те ще се виждат напълно нормално през този transparent bridge.

Има още един хитринка, която използвам в тестовете и може да ви е полезна. Чупене на трафик ;). Прави се с една команда:

bash-4.1# tc qdisc add dev eth1 root netem delay 0.3s loss 1%

С тази команда добавихме забавяне на пакетите и 1% загуба. Можете естествено да пробвате с повече. Ползва се основно за да тествате как реагират мрежови устройства и мрежов софтуер в спартанските условия на евтини квартални ланки :D

И естествено, можете да си инсталирате един Wireshark и да дъмпвате пакетите в human readable format, за да ги анализирате. С каква цел ... вие си знаете. Аз основно подслушвам пакети, за да съм сигурен, че програмистите не са объркали нещо в кода.

Wednesday 26 October 2011

Как да настроим VLAN в Linux

Преведох оригиналният материал от моят блог (same article in English) на Български, защото наскоро един колега ме попита как се прави, а не е добър с английският. (то не че е необходимо ;) )

Линукс, върви с интрументи за енкапсулиране на изходящият и декапсулиране на входящият трафик.

Всичко си е вградено в ядрото, просто инструментите за това все още са малко допотопни за вкуса на повечето линукс потребители.

Стандарта се казва 802.1q, а модула за ядрото, който поддържа VLAN се казва 8021q. Първо трябва да видите, дали ви е активен съотвеният модул за ядрото и ако не е - да го включите.

bash-4.1# lsmod | grep 802
bash-4.1# modprobe 8021q
bash-4.1# lsmod | grep 802
8021q                  18128  0

След това, трябва да настроите виртуалният лан таг, който ви интересува да приемате и да изберете на кой интерфейс ще го настроите. Може да има повече от 1 VLAN tag на един интерфейс. Всеки един таг си има собствен виртуален интерфейс, който можете да адресирате или слушате индивидуално, както и да им слагате различни IP адреси.

bash-4.1# vconfig add eth3 200
Added VLAN with VID == 200 to IF -:eth3:-
bash-4.1# ifconfig eth3.200 10.0.0.1/16 up
bash-4.1# ping 10.0.155.50 -I eth3.200
PING 10.0.155.50 (10.0.155.50) 56(84) bytes of data.
64 bytes from 10.0.155.50: icmp_req=1 ttl=63 time=0.286 ms
64 bytes from 10.0.155.50: icmp_req=2 ttl=63 time=0.286 ms
64 bytes from 10.0.155.50: icmp_req=3 ttl=63 time=0.275 ms
64 bytes from 10.0.155.50: icmp_req=4 ttl=63 time=0.281 ms
^c
bash-4.1# vconfig add eth3 150
Added VLAN with VID == 150 to IF -:eth3:-
bash-4.1# ifconfig eth3.150 100.0.0.1/16 up
bash-4.1# ping 100.0.0.2 -I eth3.150
PING 10.0.155.50 (10.0.155.50) 56(84) bytes of data.
64 bytes from 100.0.0.2: icmp_req=1 ttl=63 time=0.286 ms
64 bytes from 100.0.0.2: icmp_req=2 ttl=63 time=0.286 ms
64 bytes from 100.0.0.2: icmp_req=3 ttl=63 time=0.275 ms
64 bytes from 100.0.0.2: icmp_req=4 ttl=63 time=0.281 ms
^c
bash-4.1# 

В общи линии, това е всичко. Поради някаква причина, в дистрибуцията, която аз ползвам няма конфигурационен файл, в който всичките тези неща да се добавят, за да стартират по време на boot. За това съм добавил няколко реда в /etc/rc.local, които вършат цялата работа. Този конфигурационен скрипт се изпълнява на края, но така или иначе - приложенията които ползвам стартират след това, така че не ми пречи.

Чувствайте се свободни да го сложите където искате или да си направите собствен стартиращ скрипт, който да закачите към друг от boot скриптовете:

#!/bin/bash

echo "Setting vlans ..."
modprobe 8021q
vconfig add eth3 200
ifconfig eth3.200 10.0.0.5/16 up
vconfig add eth3 150
ifconfig eth3.150 100.0.0.1/16 up
echo "... done"