The Alphabet

Oct 20
2009

Python

import re
 
_char = re.compile(r'\w')
 
''.join([chr(i) for i in xrange(65,122) if _char.match(chr(i))])
 
# or just:
import string
 
string.ascii_letters
string.ascii_lowercase
string.ascii_uppercase

Ruby

(65..122).to_a.map{ |e| e.chr =~ /\w/ && e.chr }.compact.to_s

Perl

$chars .= chr() =~ /\w/ ? chr() : q{} for 65..122;

I don’t like the mess of Ruby, and Perl.

How to sort a file by its columns

Jun 04
2009
# sort by user id
ruby -a -F: -ne 'puts $F.values_at(2, 0).join("\t")' '/etc/passwd' | sort -g
 
# sort by user home directory
ruby -a -F: -ne 'puts $F.values_at(5, 0).join("\t")' '/etc/passwd' | sort -g
 
# sort by username
ruby -a -F: -ne 'puts $F.values_at(0).join("\t")' '/etc/passwd' | sort -g

Simple Ruby Text Parser

Mar 20
2009
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
filename = "sample records.txt"
file = File.open(filename)
data = []
record = {}
 
class MyParse
  Tokens = [
    ### change the regular expressions accordingly ###
    ### sale date, sale time, sale address,
    [/^Sale:\s*(\d+\/\d+\/\d+)\s+(\S+\s+\w\w)\s+(.+?)\s*$/,
        lambda { |m| m.to_a &&
            {"sale date"=>m[1], "sale time"=>m[2], "sale address"=>m[3] } }],
    ### seller name, seller time, seller address
    [/^Seller:\s*(\d+\/\d+\/\d+)\s+(\S+\s+\w\w)\s+(.+?)\s*$/,
        lambda { |m| m.to_a &&
            {"seller date"=>m[1], "seller time"=>m[2], "seller address"=>m[3] } }],
    ### Trustor: trustor
    [/^Trustor:\s+(.+?)\s*$/,
        lambda { |m| m.to_a && {"trustor"=>m[1] } }],
  ]
 
  def self.read(text)
    parse(text)
  end
 
  protected
  def self.parse(text)
    text.each do |line|
      Tokens.each do |token|
        if m = token.first.match(line)
          return token.last.call(m)
        end
      end
    end
    nil
  end
 
end
 
begin
  while line = file.readline
    if line.match(/^\s*$/)
      record = {}
      next
    end
    line.sub!("\r", "")
    if record = MyParse.read(line)
      data.push(record)
    end
  end
rescue EOFError => e
  puts "'#{filename}': #{e}"
ensure
  file.close
end
 
puts data.inspect
 
exit(0)

How to download an image from flickr

Mar 11
2009

I wasn’t able to download a photo from flickr. It happened to be 1px transparent image over the other. Here is a simple scaper in cases of such “protection”:

1
2
3
4
5
6
7
8
9
10
11
12
require 'rubygems'
require 'www/mechanize'
 
url = 'http://www.flickr.com/photos/46457493@N00/3162339409/in/set-72157612102050814/'
 
my_id = url.split("/")[-3]
agent  = WWW::Mechanize.new
page   = agent.get(url)
 
url   = page.search("//div[@id='photoImgDiv#{my_id}']/img").attr('src')
 
agent.get(url).save_as((File.basename(url)).split("?")[0])

Filtering Lists

Dec 01
2008

Ruby

arr = (1..10).to_a
arr.select{ |e| e % 2 != 0 }

Python

arr = range(1,11)
[e for e in arr if e % 2]

Perl

@arr = (1..10);
grep($_ % 2, @arr);

Sequence Types and Slice

Oct 21
2008

Ruby slice:

a = [1, 2, 3, 4, 5, 6]
a[0..-1] # [1, 2, 3, 4, 5, 6]
a[(0..-1)] # tha same

Python slice:

a = [1, 2, 3, 4, 5, 6]
a[:-1] # [1, 2, 3, 4, 5]
a[:] # [1, 2, 3, 4, 5, 6]
a[0:len(a):2] # [2, 4, 6]  Nice, isn't it?

Quick Scanner (Host/Port)

Sep 28
2008
#!/usr/bin/ruby
 
host_port = ARGV[0]
host = host_port.split(':').first
port = host_port.split(':').last
 
puts %x[nmap -p #{port} #{host}]

Or just:

#!/usr/bin/ruby
 
puts %x[nmap -p #{ARGV[0].split(':').reverse.join(' ')}]

Usage (cli and given that the script is named scan_proxy):

./scan_proxy 202.105.182.87:808

Simple Phonebook Script

Sep 20
2008
#!/usr/bin/env ruby
 
class Hash
  def search(arg)
    self.select { |k,v| k =~ /#{arg}/ or v =~ /#{arg}/ }
  end
end
 
search = ARGV[0]
search =~ /^[0-9]+/ and search = search.to_i
 
phones = {
  "me"        => "359880101020406",
  "Hitler"     => "+49 666",
  "Van Gog" => "+31",
  "devil"      => "666",
  "God"       => "1",
}
 
phones.search(search).each do |person|
  print "person:#{person.first}\tnumber:#{person.last}\n"
end

Ruby __DATA__ (embedded data)

Aug 22
2008
module Kernel
  RE_THIS_DATA = lambda{ |number| /^__DATA#{number}__\n/ }
  RE_THE_DATA  = /^__DATA\d+__/
 
  def __data__(num="")
    data = File.read($0).split(RE_THIS_DATA.call(num))
    data[1].split(RE_THE_DATA)[0] if data[1]
  end
end
 
puts "DATA"
print __data__()
 
puts "DATA1"
print __data__(1)
 
puts "DATA2"
print __data__(2)
 
__END__
 
__DATA__
data_1
data_2
data_3
 
__DATA1__
data1_1
data1_2
data1_3
 
data1_11
 
__DATA2__
data2_1
data2_2
data2_3
 
data2_31

Chdir Method with Block

Aug 22
2008
# temporary changes the cwd to '/tmp',
# adds content to a file and finally restores cwd
 
p Dir.getwd
 
Dir.chdir("/tmp") do
  p Dir.getwd
  File.open("test.txt", "a") do |f|
    f << Time.now << "\n"
  end
end
 
p Dir.getwd

Calendar

July 2010
M T W T F S S
« Apr    
 1234
567891011
12131415161718
19202122232425
262728293031  

Tags