2008-10-07 20 views
10

Đây là great virtue đầu tiên của các lập trình viên. Tất cả chúng ta có, cùng một lúc hoặc một nhiệm vụ tự động khác với một chút mã ném đi. Đôi khi phải mất một vài giây khai thác ra một lớp lót, đôi khi chúng tôi dành một lượng thời gian cắt cổ tự động hóa một nhiệm vụ hai giây và sau đó không bao giờ sử dụng nó một lần nữa.Nano hacks: các chương trình nhỏ bé hữu ích nhất mà bạn đã mã hóa hoặc đi qua

Bạn đã tìm thấy hack nhỏ nào đủ hữu ích để sử dụng lại? Để đi xa như vậy để làm cho một bí danh cho?

Lưu ý: trước khi trả lời, vui lòng kiểm tra để đảm bảo nó chưa có câu hỏi favourite command-line tricks using BASH hoặc perl/ruby ​​một lớp.

+0

Tôi không upvoting bất kỳ câu trả lời nào cho đến khi tôi thấy một số mã! –

Trả lời

1

Xin lỗi, không có mã chính xác tiện dụng, nhưng tôi đã mã hóa cụm từ thông dụng để tìm kiếm mã nguồn trong VS.Net cho phép tôi tìm kiếm mọi thứ không có trong nhận xét. Nó rất hữu ích trong một dự án cụ thể mà tôi đang làm, nơi mà mọi người nhấn mạnh rằng việc đưa ra mã là một thực hành tốt, trong trường hợp bạn muốn quay lại và xem mã được sử dụng để làm gì.

0

Điều này quay trở lại ngày COBOL của tôi nhưng tôi có hai chương trình COBOL chung, một lô và một chương trình trực tuyến (nhân viên máy tính lớn sẽ biết đây là những gì). Chúng là các chương trình có thể lấy bất kỳ tập hợp tham số và/hoặc tệp nào và chạy, lô hoặc được thực thi trong vùng thử nghiệm IMS. Tôi đã thiết lập chúng để tùy thuộc vào các tham số tôi có thể truy cập các tệp, cơ sở dữ liệu (DB2 hoặc IMS DB) và hoặc chỉ thao tác lưu trữ làm việc hoặc bất cứ thứ gì.

Thật tuyệt vì tôi có thể kiểm tra chức năng ngày đó mà không đoán hoặc kiểm tra lý do tại sao có cắt xén hoặc lý do tại sao có cơ sở dữ liệu ABEND. Các chương trình phát triển về quy mô khi thời gian tiếp tục bao gồm tất cả các loại thử nghiệm và trở thành một yếu tố chính của nhóm phát triển. Mọi người đều biết nơi mã được cư trú và bao gồm chúng trong thử nghiệm đơn vị của họ là tốt. Những chương trình này quá lớn (hầu hết các mã đã được nhận xét trong các bài kiểm tra) và tất cả đều được mọi người đóng góp qua nhiều năm. Họ đã tiết kiệm rất nhiều thời gian và giải quyết rất nhiều bất đồng!

0

Tôi đã mã hóa một tập lệnh Perl để phụ thuộc bản đồ, mà không đi vào vòng lặp vô tận, Đối với chương trình C cũ tôi thừa kế .... cũng có vấn đề về phụ thuộc kim cương.

Tôi đã viết chương trình nhỏ gửi e-mail cho tôi khi tôi nhận được e-mail từ bạn bè, trên tài khoản e-mail hiếm khi được sử dụng.

Tôi đã viết một chương trình nhỏ khác gửi cho tôi tin nhắn văn bản nếu IP nhà của tôi thay đổi.

Để đặt tên một vài.

0

Năm trước, tôi đã xây dựng bộ ứng dụng trên nền tảng ứng dụng web tùy chỉnh trong PERL. Một tính năng thú vị là chuyển đổi chuỗi truy vấn SQL thành câu có thể đọc được của con người, mô tả kết quả là gì.

Mã này tương đối ngắn nhưng hiệu quả cuối cùng là tốt.

0

Tôi có một ứng dụng nhỏ mà bạn chạy và nó đổ GUID vào khay nhớ tạm. Bạn có thể chạy nó/noui hay không. Với giao diện người dùng, một nút duy nhất của nó sẽ giảm một GUID mới mỗi khi bạn nhấp vào nó. Nếu không có nó sẽ rơi một cái mới và sau đó thoát ra.

Tôi chủ yếu sử dụng nó từ trong VS. Tôi có nó như là một ứng dụng bên ngoài và ánh xạ tới một phím tắt. Tôi đang viết một ứng dụng phụ thuộc rất nhiều vào xaml và guids, vì vậy tôi luôn tìm thấy tôi cần phải dán một guid mới vào xaml ...

1

Tôi có hai kịch bản ruby ​​mà tôi sửa đổi thường xuyên để tải xuống tất cả các webcomics khác nhau. Cực kỳ tiện dụng!Lưu ý: Chúng yêu cầu wget, vì vậy có thể là linux.Lưu ý2: đọc những điều này trước khi bạn thử chúng, chúng cần một chút sửa đổi cho mỗi trang web.

ngày downloader dựa trên:

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

Hoặc bạn có thể sử dụng số dựa một:

#!/usr/bin/ruby -w 

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

tôi sử dụng kịch bản này theo các loại linuxes để kiểm tra xem một bản sao thư mục giữa các máy (hoặc CD/DVD) đã hoạt động hoặc cho dù sao chép (ví dụ: tên tệp ext3 utf8 -> fusebl k) có các ký tự đặc biệt bị xáo trộn trong tên tệp.

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

Bất cứ lúc nào tôi viết hiểu danh sách thông minh hoặc sử dụng bản đồ/giảm trong python. Có một cái như thế này:

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

Lý do tôi nhớ chính là tôi đã thấy chính xác mã đó trên trang web của người khác. Bây giờ, nó có thể được thực hiện như:

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

tôi tìm thấy điều này trên dotfiles.org ngay hôm nay. nó rất đơn giản, nhưng thông minh. tôi cảm thấy ngu ngốc vì không tự mình nghĩ về nó.

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

Có cái này trong bashrc của tôi, bao gồm '* .ace) unace x $ 1 ;;' – gnud

5

Đây là bộ lọc đặt dấu phẩy ở giữa bất kỳ số lớn nào trong đầu vào tiêu chuẩn.

$ 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 $_; 
} 

Tôi thường sử dụng nó để liệt kê danh sách đầu ra dài, và tôi tính số thập phân. Bây giờ thay vì thấy

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

tôi có thể chạy mà như ls -l | comma và xem

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

Điều gì về ls -lh – Geoff

+0

Chắc chắn, ls -lh là một lựa chọn, nhưng đây là một vấn đề lớn hơn so với chỉ các tùy chọn thư mục. –

0

Tôi đã có 20 hoặc 30 của những điều này nằm xung quanh bởi vì một khi tôi mã hóa lên một khuôn khổ cho ứng dụng giao diện điều khiển tiêu chuẩn của tôi trong cửa sổ, tôi có thể giảm khá nhiều trong bất kỳ logic nào tôi muốn, vì vậy tôi nhận được rất nhiều thứ nhỏ nhặt này giải quyết các vấn đề cụ thể.

Tôi đoán những người tôi đang sử dụng rất nhiều ngay bây giờ là một ứng dụng giao diện điều khiển mất stdin và colorizes đầu ra dựa trên cấu hình xml phù hợp với biểu thức thông thường cho màu sắc. Tôi sử dụng nó để xem các tệp nhật ký của mình từ các bản dựng. Một trong những khác là một phóng dòng lệnh vì vậy tôi không gây ô nhiễm PATH env var của tôi và nó sẽ vượt quá giới hạn trên một số hệ thống nào, cụ thể là win2k.

1

Thay vì phải liên tục mở tệp trong Trình phân tích truy vấn SQL và chạy chúng, tôi đã tìm thấy cú pháp cần thiết để tạo một tệp lô và sau đó có thể chạy 100 cùng một lúc. Oh niềm vui ngọt ngào ngọt ngào! Tôi đã sử dụng điều này từ bao giờ.

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

tôi liên tục kết nối với máy chủ linux khác nhau từ máy tính để bàn của riêng tôi suốt ngày làm việc của tôi, vì vậy tôi đã tạo ra một vài bí danh mà sẽ khởi động một xterm trên những máy móc và thiết lập các tiêu đề, màu nền, và tinh chỉnh khác:

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

Tôi cũng có một loạt máy chủ mà tôi thường kết nối, nhưng tất cả chúng đều nằm trong mạng nội bộ của tôi. kịch bản Ruby này in ra lệnh để tạo bí danh cho máy tính bất kỳ với ssh mở:

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

Sử dụng nó như thế này trong .bash_profile của bạn:

 
eval `ruby ~/.alias_shares` 
3

Kịch bản này lưu nghề nghiệp của tôi!

Khá một vài năm trước, tôi đã làm việc từ xa trên cơ sở dữ liệu khách hàng. Tôi đã cập nhật một lô hàng để thay đổi trạng thái của nó. Nhưng tôi quên mệnh đề where.

Tôi sẽ không bao giờ quên cảm giác trong hố dạ dày khi tôi thấy (6834 hàng bị ảnh hưởng). Về cơ bản, tôi đã trải qua cả đêm thông qua các bản ghi sự kiện và tìm ra trạng thái phù hợp trên tất cả các lô hàng đó. Crap!

Vì vậy, tôi đã viết một tập lệnh (ban đầu là awk) sẽ bắt đầu giao dịch cho bất kỳ cập nhật nào và kiểm tra các hàng bị ảnh hưởng trước khi cam kết. Điều này ngăn cản bất kỳ điều bất ngờ nào.

Vì vậy, bây giờ tôi không bao giờ cập nhật từ dòng lệnh mà không phải trải qua một kịch bản như thế này. Đây là (bây giờ bằng 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) 
+1

Đó là lý do tại sao một số thiên tài được phát minh ** sao lưu **. ;) – leemes

Các vấn đề liên quan