DN42 е един прекрасен проект който ви дава възможност да развивате вашите BGP умения без да чупите продуктова среда, без да ви се налага да имате скъпи устройства с които да си правите лаборатория да си правите симулации с GNS3. Същевременно да не е чисто лабораторна среда при която няма проблеми от реалният свят. Участвам с 1 node в проекта от около година. Един от проблемите в проекта е 1:1 с реалният святкогато някой ти обяви префикси които не трябва да обявява. Понеже съм мързелив и не ми се пише на ръка филтри все път, реших проблема с елементарен bash скрипт които ми генерира prefix-list с име dn42 и в него наливам валидните префикси.

#!/bin/bash</pre>
vtysh -c 'conf t' -c "no ip prefix-list dn42"; #drop old prefix list

while read pl
do
vtysh -c 'conf t' -c "$pl"; #insert prefix list row by row
done < <(curl -s https://ca.dn42.us/reg/filter.txt | grep -e ^[0-9] | awk '{ print "ip prefix-list dn42 seq " $1 " " $2 " " $3 " ge " $4 " le " $5}' | sed "s_/\([0-9]\+\) ge \1_/\1_g;s_/\([0-9]\+\) le \1_/\1_g");
vtysh -c 'wr' #write new prefix list

Списъка с валидните предикси се взема https://ca.dn42.us/reg/filter.txt от където и основният конвейр + малко модификации от моя страна за да може да се генерира префикс листа. Командите се изпълняват през vtysh.

Իմ սիրած տեքստային խմբագիր է, դա Geany. Նա շատ минималистская IDE որ աջակցում է հսկայական շարք լեզուների – shell-ը, php, python, Cetc. Նրանց автозаполнения եւ, միեւնույն ժամանակ բավականին ճարպկորեն. Չի հերիքում նրան և մեկ այլ հաճելի հնարավորությամբ, բայց այս պահին ինձ համար դա ավելի քան բավարար է. Ես online դասընթաց Python Programming Թեմայով "SoftUni – որպեսզի освежа գիտելիքներ և դրանք պետք է թարմացնել, քանի որ ես չեմ հետեւում են համարժեք, թե ինչ է կատարվում python 3. Զեկուցողներ են փոխարժեքի խորհուրդ PyCharm ինչպես IDE համար ծրագրավորման pyton, բայց ինձ հեռու իմ ճաշակի, բնականաբար, ես օգտագործում Geany համար վարժություններ.

Դասախոսության ժամանակ զգացի հիվանդագին 2 պակասորդ

  1. python autocomplete-իսկ դուք выделяете է փաստաթղթերը, գործառույթները և մեթոդները
  2. դուք երբեք չեք համար pep8 ստանդարտ

Բանն այն է, որ Geany բավականին ճկուն է, քան կազմաձեւման եւ կարող է հեշտությամբ հագեցած է, քան բացակայում է նման. Եկեք ավելացնել python փաստաթղթերի մեր IDE:

  • дърпаме նրա հաջորդ սցենարը ինչ-որ տեղ մեր ՃԱՆԱՊԱՐՀԸ, օրինակ, /usr/bin, ինչպես եւ չի մոռանում այն исполняемым
  • редактируем ֆայլի ~/.config/geany/filedefs/filetypes.python, ինչպես բաժնում settings, ավելացնել հետեւյալ տողերը context_action_cmd=pydocw %s. Եթե գոյություն ունի միայն ավելացնել անվանումը бинарката է նախորդ քայլ. Перемонтировать Geany, եթե աշխատել.
  • Մենք արդեն ունենք context-ը-ակցիան, որը թույլ է տալիս ձեզ քաշեք տեղեկություններ գործառույթները. Аз си добавих shortcut за да ми е по удобно като не ми е ясно някоя функционалност. Լիչը, ինձ համար այս մոտեցումը ինձ շատ է դուր գալիս, քանի որ շատ նյարդայնացնում է ինձ netbeans մոտեցում.

Այստեղ լավ է. Հետո ինձ շատ է ցանկանում, որպեսզի ես ձեզ երբեք կոդ, որը ես գրում եմ, – եթե այն գրել է ընդհանուր ընդունված չափանիշներին, կամ գրել ինչ-որ грозотии. Ընդհանուր առմամբ ես գտա նորից туториалче ինչպես տեղի են ունենում բաներ, բայց դա մի քիչ հնացած – Geany կա այդ ամենը հարմարեցված է իրեն, միայն պետք է այն տեղադրել pep8 փաթեթը. "Debian apt-get install pep8 ստիպում է աշխատանքը մյուս дистрота իրենք պետք է իմանալ, թե ինչպես է տեղի ունենում կախարդանքը. Ցանկի Build երկրորդ կոճակը (գոնե ինձ) е Lint след кликването му ще откриете колко грозен код сте сътворили 😀

Screenshot from 2016-01-11 20-42-21

Това е общи линии как да накарате вашият Geany да работи по добре с Python и същевременно да продължи да бъде бърз без да кара процесора ви да иска да си тегли куршума.

Անցնել դոմեյն WordPress է ինչ-որ ցավի. Վերջերս ինձ, հնարավոր է, ստիպված է կատարել եւ մի քանի նման բաներ արդեն տեղի են ունենում արագ սպորտային 😀 . Եթե ես կարող եմ сумаризирам քայլերը 2 – բնականաբար, տեղափոխել ֆայլերը, կսմթել եթե փոխել ամբողջությամբ хостингом.

1. Փոփոխությունը հին URL նոր – այստեղ ամեն չնչին. Է բացել իր wp-config.php ֆայլ և դրա մեջ տեղադրեք հետևյալ 2 կարգը

define('WP_HOME','http://example.com');
define('WP_SITEURL','http://example.com');

Ինչպես http замествате://example.com ձեր նոր.

2. Այստեղ արդեն լավ է, ձեր կայքը բացում է url-րդ աշխատում, բայց каченото բովանդակության, ինչպես լուսանկարները, փաստաթղթերը, եւ, հետեւաբար, չի երեւում. Ահա հիմա անհրաժեշտություն կոպիտ միջամտության. Դուք պետք է փոխարինել հին url սկավառակներ, նոր տվյալների բազայում. Դա ահավոր դժվար գործընթաց է, հատկապես սկսնակ օգտվողները, որոնք շատ լավ SQL շարահյուսություն, но вече има доста приятен скрипт searchreplacedb2, որը անում է ամեն ինչ անհարմար է ձեզ համար. Նրա օգտագործումը հանդիսանում է չնչին է – բեռնել նրա արմատային դիրեկտորիան, որտեղ գտնվում է wordpress էջերը, և այն բացելու միջոցով բրաուզերի-իսկ դու. След това следвате стъпките като първо ще ви пита за потребителско име и парола който е взел от вашия wp-config.php и след това ще ви пита за новото и старото url. След последната стъпка ще се наложи да поизчакате при мен отнемаше средно 40сек -50сек.

Това е във общи линии нищо трудно или супер сложно.

A shell script wants your job

Днес докато работех видях че една от машините лагна много жестоко. Влизам в нея гледам един cron наблъскал адски много зомби процеси (грубо около 50-60). Нямаше как да ги убия всички с killall затова се наложи да направя малко по грамотно решение на проблемада драсна едно елементарно ձեձել скриптче което да намери и убие процесите. 50-тина PID-а не се пишат лесно на ръка :D. Скрипта го надрасках за минута и е свръх елементарен но все пак заслужава внимание 🙂

В основата му седи конвейера

ps ax | grep -v grep | grep process_name | awk '{print $1}')

Тука получаваме лист с всички PID-ове на процеса който трябва да килнем като изключваме grep от този списък. Вече като имаме списъка нещата стават лесни всичко се завърта в един for. Ето го и крайния резултат

#!/bin/bash

PR=$(ps ax | grep -v grep | grep process_name | awk '{print $1}')

for PID in $PR
do
echo "$PID will be killed"
kill -9 $PID
done

Може да сетунинговакато името се взима като аргумент след името на скрипта и по този начин се вика като изпълнимо binary. Обаче не е много добра практика да има много такива чести случаи 😀 Но никога не пречи да сме предпазени от всякакви шитни

Ընդլայնված by Zemanta

Image representing MySQL as depicted in CrunchBase

Преди известно време бях писал за MySQL Полнотекстового Որոնման 🙂 Днес имах много интересно преживяване с една заявка. В общи линии заявката търси за резултати който липсват друга таблица. Един основне Select и един sub select в WHERE частта на заявката. В общи линии скелета и е

SELECT DISTINCT (
`field`
)
FROM `table1`
WHERE `someID` =44
AND `firsTextField` NOT
IN (

SELECT DISTINCT (
`secondTextField`
)
FROM `table2`
WHERE `otherID` =44
)

В общи линии елементарна заявка. Написах я за 30 сек пускам я и зацикли машината. След дълго и търпеливо чакане от моя страна или по точно ~43 сек . Ми се изплю резултат lol . Пффф лудница. Влизам в машината гледам процесора е нормално натоварен почти в idle състояние. Шок и ужас. Пускам пак заявката пак същия резултат. Fuck WTF. Пускам explain на заявката и всичко лъснавторото поле secondTextField е само full text search без index, а там табличката е скромна от около 35к реда. Кой да четеfull text search не е индекс. Вече е ясен проблема набързо едно

ALTER TABLE `links` ADD INDEX ( `linkUrlID` ) 

И нещата си дойдоха на местата Query took 0.0005 sec 😀

Внимавайте как си слагате индексите от тях ви зависи маргинално скоростта на заявката.

p.s Като цяло аз съм си крив за горната ситуация не само защото липсва индекс ами защото не ползва full text search метода 😀

Ընդլայնված by Zemanta