2008-10-07 1 views
10

Это первый great virtue программистов. У всех нас есть, в свое время автоматизированная задача с небольшим количеством кода выброса. Иногда требуется несколько секунд, выбирая один лайнер, иногда мы тратим непомерное количество времени, автоматизируя двухсекундную задачу, а затем никогда не используем ее снова.Nano hacks: самые полезные крошечные программы, которые вы закодировали или попали

Какой крошечный взлом вы нашли достаточно полезным для использования повторное использование? Сделать так, чтобы сделать псевдоним?

Примечание: перед тем, как ответить, пожалуйста, проверьте, чтобы он еще не был на favourite command-line tricks using BASH или вопросы по одному вопроснику perl/ruby.

+0

Я не отвечаю на любые ответы, пока не вижу какой-то код! – 2008-10-07 01:24:16

ответ

1

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

0

Это относится к моим дням COBOL, но у меня было две общие программы COBOL, одна партия и одна онлайн (люди из мэйнфрейма будут знать, что это такое). Они были оболочками программы, которые могли принимать любой набор параметров и/или файлов и выполняться, запускаться или исполняться в тестовом регионе IMS. Я настроил их так, чтобы в зависимости от параметров я мог обращаться к файлам, базам данных (DB2 или IMS DB) и просто манипулировать рабочим хранилищем или любым другим.

Это было здорово, потому что я мог проверить эту функцию даты, не догадываясь или проверяя, почему произошло усечение или почему была база данных ABEND. С течением времени программы росли в размерах и включали в себя всевозможные тесты и стали основным продуктом группы разработчиков. Все знали, где код находился и включал их в их модульное тестирование. Эти программы стали настолько большими (большая часть кода была прокомментирована), и все это было сделано людьми на протяжении многих лет. Они спасли так много времени и устроили так много разногласий!

0

Я закодировал сценарий Perl для сопоставления зависимостей, не вдаваясь в бесконечный цикл. Для унаследованной программы на C, которую я унаследовал ...., которая также имела проблему зависимости от алмаза.

Я написал небольшую программу, которая отправила мне по электронной почте, когда я получил электронные письма от друзей на редко используемой учетной записи электронной почты.

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

Чтобы назвать несколько.

0

Несколько лет назад я построил набор приложений на пользовательской платформе веб-приложений в PERL. Одна интересная функция заключалась в том, чтобы преобразовать строки запросов SQL в читаемые человеком предложения, которые описывали результаты.

Код был относительно коротким, но конечный эффект был приятным.

0

У меня есть небольшое приложение, которое вы запускаете, и оно сбрасывает GUID в буфер обмена. Вы можете запустить его/noui или нет. С пользовательским интерфейсом, это единственная кнопка, которая при каждом щелчке мыши выводит новый GUID. Без него падает новый, а затем выходит.

В основном я использую его изнутри VS. Я использую его как внешнее приложение и сопоставляется с ярлыком. Я пишу приложение, которое в значительной степени опирается на xaml и guids, поэтому я всегда нахожу, что мне нужно вставить новый guid в xaml ...

1

У меня есть два рубиновых скрипта, которые я регулярно меняю, чтобы загрузить все различные webcomics. Очень удобно!Примечание: им требуется wget, поэтому, возможно, Linux.Примечание2: прочитайте их перед тем, как вы их попробуете, они нуждаются в небольшой модификации для каждого сайта.

Дата Загрузчик основы:

#!/usr/bin/ruby -w 

Day = 60 * 60 * 24 

Fromat = "hjlsdahjsd/comics/st%Y%m%d.gif" 

t = Time.local(2005, 2, 5) 

MWF = [1,3,5] 

until t == Time.local(2007, 7, 9) 
    if MWF.include? t.wday 
    `wget #{t.strftime(Fromat)}` 
    sleep 3 
    end 

    t += Day 
end 

Или вы можете использовать номер на основе одного:

#!/usr/bin/ruby -w 

Fromat = "http://fdsafdsa/comics/%08d.gif" 
1.upto(986) do |i| 
    `wget #{sprintf(Fromat, i)}` 
    sleep 1 
end 
2

Я использую этот скрипт под сортированными дистрибутивами Linux, чтобы проверить, является ли каталог копирование между машинами (или CD/DVD) или копирование (например, ext3 utf8 filenames -> fusebl k) имеет искаженные специальные символы в именах файлов.

#!/bin/bash 
## dsum Do checksums recursively over a directory. 
## Typical usage: dsum <directory> > outfile 

export LC_ALL=C # Optional - use sort order across different locales 

if [ $# != 1 ]; then echo "Usage: ${0/*\//} <directory>" 1>&2; exit; fi 
cd $1 1>&2 || exit 
#findargs=-follow # Uncomment to follow symbolic links 
find . $findargs -type f | sort | xargs -d'\n' cksum 
0

Каждый раз, когда я пишу умное понимание списка или использование карты/сокращения в python. Был один, как это:

if reduce(lambda x, c: locks[x] and c, locknames, True): 
    print "Sub-threads terminated!" 

Поэтому я помню, что это то, что я придумал это сам, то увидел тот же самый код на чужом сайте. Теперь-aday это, вероятно, будет сделано, как:

if all(map(lambda z: locks[z], locknames)): 
    print "ya trik" 
13

Я нашел это на dotfiles.org только сегодня. это очень просто, но умно. я чувствовал себя глупо, не подумав об этом сам.

### 
### Handy Extract Program 
### 
extract() { 
    if [ -f $1 ] ; then 
     case $1 in 
      *.tar.bz2) tar xvjf $1  ;; 
      *.tar.gz) tar xvzf $1  ;; 
      *.bz2)  bunzip2 $1  ;; 
      *.rar)  unrar x $1  ;; 
      *.gz)  gunzip $1  ;; 
      *.tar)  tar xvf $1  ;; 
      *.tbz2)  tar xvjf $1  ;; 
      *.tgz)  tar xvzf $1  ;; 
      *.zip)  unzip $1  ;; 
      *.Z)   uncompress $1 ;; 
      *.7z)  7z x $1 ;; 
      *)   echo "'$1' cannot be extracted via >extract<" ;; 
     esac 
    else 
     echo "'$1' is not a valid file" 
    fi 
} 
+1

Имейте это в моем bashrc, включая '* .ace) unace x $ 1 ;;' – gnud 2008-10-14 15:59:12

5

Вот фильтр, который помещает запятые в середину любых больших чисел в стандартный ввод.

$ cat ~/bin/comma 
#!/usr/bin/perl -p 

s/(\d{4,})/commify($1)/ge; 

sub commify { 
    local $_ = shift; 
    1 while s/^([ -+]?\d+)(\d{3})/$1,$2/; 
    return $_; 
} 

Обычно я использую его для длинных выходных списков больших чисел, и я устаю подсчитывать десятичные знаки. Теперь вместо того, чтобы видеть

-rw-r--r-- 1 alester alester 2244487404 Oct 6 15:38 listdetail.sql 

Я могу работать, что, как и ls -l | comma см

-rw-r--r-- 1 alester alester 2,244,487,404 Oct 6 15:38 listdetail.sql 
+0

как насчет ls -lh – Geoff 2008-10-07 03:32:42

+0

Конечно, ls -lh является опцией, но это большая проблема, чем просто параметры каталога. – 2008-10-07 03:48:31

0

У меня 20 или 30 из этих вещей, лежащих вокруг, потому что, как только я закодирован до рамки для моего стандартного консольного приложения в Windows я могу в значительной степени отказаться от любой логики, я хочу, поэтому я получил много этих мелочей, которые решают конкретные проблемы.

Я думаю, что те, что я использую сейчас, - это консольное приложение, которое принимает stdin и раскрашивает результат на основе xml-профилей, которые соответствуют регулярным выражениям для цветов. Я использую его для просмотра файлов журнала из сборщиков. Другой - это пусковая установка командной строки, поэтому я не загрязняю свой PATH env var и в любом случае превысит предел для некоторых систем, а именно win2k.

1

Вместо того, чтобы многократно открывать файлы в SQL Query Analyzer и запускать их, я нашел синтаксис, необходимый для создания командного файла, и затем мог запустить 100 сразу. О сладкая сладкая радость! Я использовал это с тех пор.

isqlw -S servername -d dbname -E -i F:\blah\whatever.sql -o F:\results.txt 
0

Я постоянно подключение к различным серверам Linux от моего рабочего стола на протяжении всех моего рабочего дня, поэтому я создал несколько псевдонимов, которые будут запускать xterm на этих машинах и установить название, цвет фона и другие настройки:

alias x="xterm"   # local 
alias xd="ssh -Xf [email protected]_host xterm -bg aliceblue -ls -sb -bc -geometry 100x30 -title Development" 
alias xp="ssh -Xf [email protected]_host xterm -bg thistle1 ..." 
0

У меня есть куча серверов, к которым я часто подключаюсь, но они все в моей локальной сети. Этот скрипт рубин выводит команду, чтобы создать псевдонимы для любой машины с SSH открытым:

#!/usr/bin/env ruby 

require 'rubygems' 
require 'dnssd' 

handle = DNSSD.browse('_ssh._tcp') do |reply| 
    print "alias #{reply.name}='ssh #{reply.name}.#{reply.domain}';" 
end 

sleep 1 
handle.stop 

Используйте его, как это в вашем .bash_profile:

 
eval `ruby ~/.alias_shares` 
3

Этот сценарий спас мою карьеру!

Несколько лет назад я работал удаленно в базе данных клиентов. Я обновил груз, чтобы изменить его статус. Но я забыл, где предложение.

Я никогда не забуду ощущения в яме живота, когда увижу (6834 строки затронуты). В основном я всю ночь проводил журналы событий и выяснял надлежащий статус на всех этих отправлениях. Crap!

Итак, я написал сценарий (первоначально в awk), который запустил транзакцию для любых обновлений и проверил строки, затронутые до совершения. Это не давало никаких сюрпризов.

Так что теперь я никогда не делаю обновления из командной строки, не пропуская сценарий вроде этого. Вот он (сейчас в Python):

import sys 
import subprocess as sp 
pgm = "isql" 
if len(sys.argv) == 1: 
    print "Usage: \nsql sql-string [rows-affected]" 
    sys.exit() 
sql_str = sys.argv[1].upper() 
max_rows_affected = 3 
if len(sys.argv) > 2: 
    max_rows_affected = int(sys.argv[2]) 

if sql_str.startswith("UPDATE"): 
    sql_str = "BEGIN TRANSACTION\\n" + sql_str 
    p1 = sp.Popen([pgm, sql_str],stdout=sp.PIPE, 
      shell=True) 
    (stdout, stderr) = p1.communicate() 
    print stdout 
    # example -> (33 rows affected) 
    affected = stdout.splitlines()[-1] 
    affected = affected.split()[0].lstrip('(') 
    num_affected = int(affected) 
    if num_affected > max_rows_affected: 
     print "WARNING! ", num_affected,"rows were affected, rolling back..." 
     sql_str = "ROLLBACK TRANSACTION" 
     ret_code = sp.call([pgm, sql_str], shell=True) 
    else: 
     sql_str = "COMMIT TRANSACTION" 
     ret_code = sp.call([pgm, sql_str], shell=True) 
else: 
    ret_code = sp.call([pgm, sql_str], shell=True) 

 Смежные вопросы

  • Нет связанных вопросов^_^