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.

Moj omiljeni tekst editor je Geany. On je vrlo minimalan IDE koji podržava veliki broj jezika – ljuska, PHP, piton, S … itd. Je vaš auto-kompletan, a istovremeno je tako brze. Nedostaje mu ugodan priliku ali tada mi je više nego dovoljan. Počeo sam online tečaj Python Programiranje od SoftUni – Osvježite svoje znanje i učiniti ih nadgradâ jer nije pratio adekvatno što se događa s python 3. Zvučnici naravno preporučiti PyCharm kao IDE za programiranje pyton, Ali ja sam od moj ukus, prirodno koristiti Geany za vježbe.

Tijekom predavanja osjetio sam bolna 2 lipši

  1. Python-samodovršetak i uzdisati u dokumentaciji za funkcije i metode
  2. Ima je nijedan provjera valjanosti za u standardni pep8

Dobra stvar je da je dovoljno fleksibilan za Geany konfiguraciju i mogu lako dodati nedostaje one. pusti me Dodajte python dokumentacije na naših IDE:

  • povući svoj sljedeću skriptu negdje u putu, na primjer, kao/usr/bin zaboraviti kako bi ga izvediv
  • Urediti datoteku ~/.config/geany/filedefs/filetypes.python u postavkama možemo dodati slijedeći redak context_action_cmd = pydocw %s. Ako samo je dodavanje naziva u binarkata iz prethodnog koraka. Ponovno podizanje sustava ako trčanje Geany.
  • Već imamo kontekst akcija koje će si izvukao podatke o funkciji. Аз си добавих shortcut за да ми е по удобно като не ми е ясно някоя функционалност. Namočiti me ovaj pristup kao i zato što me baš živcira netbeans pristup.

za sad je dobro. Onda želim da imaju provjeru valjanosti koda koji ste napisali – da li pišete prema općeprihvaćenim standardima ili pisati bilo koji čudaci. Općenito sam primijetio opet tutorialče Kako se stvari događaju ali je malo zastario – Geany ima sve u vas nego što instalirate paket pep8. U Debian pogodan-dobiti uvesti koga u službu pep8 djela u drugim distrota otkriti kako carobno. Drugi gumb u izborniku graditi (barem meni) е Lint след кликването му ще откриете колко грозен код сте сътворили 😀

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

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

Za promjenu domene u WordPress je bol.. Nedavno sam morao učiniti neke od tih i sve se događa brzo sportske 😀 . Ako mogu sumariziram koraci su 2 – Naravno, bez premještanja datoteke, Ako postavke se mijenjaju u potpunosti hosting.

1. Promijeniti stari URL s novim – Ovdje su trivijalne stvari. Otvorite URwp-config.php datoteku i zalijepite ga u sljedeće 2 linija

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

Kako zamijeniti http://example.com sa vašim nov.

2. Site je sada otvori url poslu ali upload sadržaja kao što su slike, dokumenata i tako dalje nije vidljiv. Ovdje sada smetnje. Morate zamijeniti stari sa novim url-u baze podataka. Bio je užasno neugodan proces posebno za korisnike početnike, Ako to nećeš učiniti dobro s SQL sintaksa, но вече има доста приятен скрипт searchreplacedb2, To je neugodno za vas. Njegova upotreba je trivijalno – upload Internet to korijenski direktorij gdje wordpress je svoju stranicu i otvoriti u svoj preglednik-. След това следвате стъпките като първо ще ви пита за потребителско име и парола който е взел от вашия wp-config.php и след това ще ви пита за новото и старото url. След последната стъпка ще се наложи да поизчакате при мен отнемаше средно 40сек -50сек.

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

A shell script wants your job

Днес докато работех видях че една от машините лагна много жестоко. Влизам в нея гледам един cron наблъскал адски много зомби процеси (грубо около 50-60). Нямаше как да ги убия всички с killall затова се наложи да направя малко по грамотно решение на проблемада драсна едно елементарно udariti скриптче което да намери и убие процесите. 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. Обаче не е много добра практика да има много такива чести случаи 😀 Но никога не пречи да сме предпазени от всякакви шитни

Poboljšana po Zemanta

Image representing MySQL as depicted in CrunchBase

Преди известно време бях писал за MySQL Full tekst pretraživanje 🙂 Днес имах много интересно преживяване с една заявка. В общи линии заявката търси за резултати който липсват друга таблица. Един основне 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 метода 😀

Poboljšana po Zemanta