DN42 é um projeto maravilhoso que permite que você desenvolva suas habilidades de BGP sem quebrar o ambiente do produto, sem ter que ter dispositivos caros para fazer um laboratório para fazer simulações com o GNS3. Ao mesmo tempo, não deve ser um ambiente puramente de laboratório no qual não haja problemas do mundo real. Eu participo com 1 nó no projeto por cerca de um ano. Um dos problemas do projeto é 1:1 com o mundo real – quando alguém anuncia prefixos que não deve anunciar. Porque sou preguiçoso e não escrevo filtros à mão o tempo todo, Resolvi o problema com um script bash elementar que gera uma lista de prefixos chamada dn42 e despejo os prefixos válidos nele.

#!/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

A lista de prefixos válidos é obtida https://ca.dn42.us/reg/filter.txt de onde o pipeline principal + algumas modificações da minha parte para poder gerar folhas de prefixo. Comandos são executados através do vtysh.

Meu editor de texto favorito é Geany. É muito minimalista AQUI que suporta um enorme conjunto de idiomas – Concha, php, Pitão, C … etc. Possui acabamento próprio e ao mesmo tempo é muito ágil. Falta outra oportunidade agradável, mas no momento é mais do que suficiente para mim. Eu iniciei um curso online Programação Python no SoftUni – para atualizar meu conhecimento e atualizá-lo porque eu não monitorei adequadamente o que está acontecendo com o python 3. Os palestrantes do curso recomendam PyCharm como um IDE para programação pyton, mas eu não gosto disso, é claro que eu uso Geany para os exercícios.

Durante as palestras, senti-me dolorosamente 2 falta

  1. o preenchimento automático de python expira da documentação de funções e métodos
  2. nenhuma validação para padrão pep8

O bom é que o Geany é flexível o suficiente para configurar e pode ser facilmente complementado pelos que estão faltando.. As vezes adicionar documentação python para o nosso IDE:

  • nós puxamos o seguinte script em algum lugar do nosso PATH, por exemplo, / usr / bin e não esquecemos de torná-lo executável
  • edite o arquivo ~ / .config / geany / filedefs / filetypes.python adicionando a seguinte linha na seção de configurações context_action_cmd = pydocw% s. Se houver apenas adicionar o nome do binário da etapa anterior. Reiniciaremos o Geany se ele for lançado.
  • Já temos uma ação de contexto que fornecerá informações sobre a função. Аз си добавих shortcut за да ми е по удобно като не ми е ясно някоя функционалност. Eu gosto muito dessa abordagem porque estou muito irritado com a abordagem do netbeans.

Por enquanto, tudo bem. Então eu realmente quero ter a validação do código que escrevo – se eu escrevo de acordo com padrões geralmente aceitos ou se eu escrevo alguma feiura. Basicamente eu encontrei novamente tutoriais como as coisas acontecem, mas está um pouco desatualizado – Geany tem tudo embutido, você só precisa instalar o pacote pep8. No Debian apt-get install pep8 funciona em outras distros, você precisa descobrir por si mesmo como a mágica acontece. No menu Build, o segundo botão (pelo menos para mim) é Lint depois de clicar nele, você encontrará o código feio que criou 😀

Captura de tela de 2016-01-11 20-42-21

Aqui está um resumo geral de como fazer seu Geany funcionar melhor com Python enquanto ainda é rápido, sem fazer com que sua CPU deseje.

Да сменяш домейн във 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-тата работят но каченото съдържание като картинки, документи и прочие не се вижда. A intervenção grosseira já é necessária aqui. Os URLs antigos devem ser substituídos pelos novos no banco de dados. Este foi um processo terrivelmente desagradável, especialmente para usuários iniciantes, que não lidam bem com sintaxe SQL, но вече има доста приятен скрипт searchreplacedb2, quem faz tudo desagradável para você. Seu uso é trivial – você faz o upload para o diretório principal em que sua página do wordpress está localizada e a abre no navegador. След това следвате стъпките като първо ще ви пита за потребителско име и парола който е взел от вашия wp-config.php и след това ще ви пита за новото и старото url. След последната стъпка ще се наложи да поизчакате при мен отнемаше средно 40сек -50сек.

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

A shell script wants your job

Hoje, enquanto trabalhava, vi que uma das máquinas estava muito mal. Entro nele assistindo um cron esbarrar em um monte de processos zumbis (aproximadamente 50-60). Não havia como matar todos eles com Mate todos então eu tive que fazer uma solução um pouco mais competente para o problema – desenhar um elementar Bash um script para encontrar e matar processos. 50-PIDs não são fáceis de escrever manualmente :D. Arranhei o script por um minuto e é muito simples, mas ainda merece atenção 🙂

Na sua base é o transportador

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

Aqui temos uma planilha com todos os PIDs do processo que precisamos eliminar, excluindo grep desta lista. Agora que temos a lista, as coisas ficam fáceis, tudo se transforma em um por. Aqui está o resultado final

#!/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

Pode ser “afinação” como o nome é tomado como argumento após o nome do script e, portanto, é chamado como binário executável. No entanto, não é uma prática muito boa ter casos tão frequentes 😀 Mas isso nunca impede que sejamos protegidos de qualquer

Melhorado por Zemanta

Image representing MySQL as depicted in CrunchBase

Algum tempo atrás eu escrevi sobre Pesquisa completa de texto do Mysql 🙂 Hoje tive uma experiência muito interessante com um pedido. Em geral, a consulta procura resultados que estão faltando em outra tabela. Uma seleção básica e uma sub-seleção na parte WHERE da consulta. Em geral, o esqueleto é

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

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

Basicamente uma consulta simples. Eu escrevi para 30 sec Eu corro e a máquina dá laços. Depois de uma longa e paciente espera da minha parte ou mais precisamente ~ 43 seg . Eu cuspi o resultado lol . Pffff madhouse. Entro na máquina assistindo a CPU normalmente é carregada quase em condição ociosa. Choque e horror. Eu executo a consulta novamente o mesmo resultado. Fuck WTF. Eu corro explicar a consulta e tudo brilha – o segundo campo secondTextField é apenas pesquisa de texto completo sem índice, e aí a placa é modesta com cerca de 35k linhas. Quem ler – a pesquisa de texto completo não é um índice. O problema é rapidamente claro

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

E as coisas se encaixaram Consulta tomou 0.0005 sec 😀

Cuidado ao colocar os índices a partir deles, a velocidade da consulta depende de você marginalmente.

p.s Em geral, sou o culpado pela situação acima, não apenas porque não possui um índice, mas porque não usa o método de pesquisa de texto completo 😀

Melhorado por Zemanta