понеділок, 2 червня 2008 р.

RubyOnRails 2.1

Стала доступна версія 2.1.0.

Основні нововведення:
  • Підтримка часових зон.
  • Відстежування "брудних" об'єктів (і, як наслідок, динамічне оновлення ActiveRecord).
  • Можливість задати залежності від gem-ів.
  • Інтеграція плагіна has_finder (тепер named_scope).
  • UTC-штампи для міграцій.
  • Покращене кешування.

>>> Подробиці.

Мій ~./vimrc

Цей допис не буде описувати структури конфігураційного файлу .vimrc.

Можливості:
  • ідентифікація типу файлу;
  • підстітка синтаксису;
  • заміна табуляції пробілами;
  • зміна кодування файлу для відкриття/зберігання;
  • зміна мови розкладки клавіатури;
  • перевірка орфографії;
  • статус-стрічка з інформацією про поточний файл;

Словники для перевірки орфографії можна скачати з сайту ftp://ftp.vim.org/pub/vim/runtime/spell/. Помістити необхідні файли *.spl в /usr/share/vim/vim70/spell/ .

set nocompatible          " We're running Vim, not Vi!
syntax on " Enable syntax highlighting
filetype plugin indent on " Enable filetype-specific indenting and plugging

set tabstop=2
set shiftwidth=2
set expandtab

set fileencodings=utf-8,cp1251,cp866,koi8-u
set encoding=utf-8
set termencoding=utf-8
set statusline=%<%f%h%m%r%=format=%{&fileformat}\ file=%{&fileencoding}\ spell=%{&spelllang}
set laststatus=2

" <F7> File fileformat (dos - <CR> <NL>, Unix - <NL>, mac - <CR>)
map <F7> :execute RotateFileFormat()<CR>
vmap <F7> <C-C><F7>
imap <F7> <C-O><F7>
let b:fformatindex=0

function! RotateFileFormat()
let y = -1
while y == -1
let encstring = "#unix#dos#mac#"
let x = match(encstring,"#",b:fformatindex)
let y = match(encstring,"#",x+1)
let b:fformatindex = x+1
if y == -1
let b:fformatindex = 0
else
let str = strpart(encstring,x+1,y-x-1)
return ":set fileformat=".str
endif
endwhile
endfunction

" <F8> File encoding for open
" ucs-2le - MS Windows Unicode encoding
map <F8> :execute RotateEnc()<CR>
vmap <F8> <C-C><F8>
imap <F8> <C-O><F8>
let b:encindex=0
function! RotateEnc()
let y = -1
while y == -1
let encstring = "#koi8-r#cp1251#8bit-cp866#utf-8#ucs-2le#"
let x = match(encstring,"#",b:encindex)
let y = match(encstring,"#",x+1)
let b:encindex = x+1
if y == -1
let b:encindex = 0
else
let str = strpart(encstring,x+1,y-x-1)
return ":e ++enc=".str
endif
endwhile
endfunction

" <Shift+F8> Force file encoding for open (encoding = fileencoding)
map <S-F8> :execute ForceRotateEnc()<CR>
vmap <S-F8> <C-C><S-F8>
imap <S-F8> <C-O><S-F8>
let b:encindex=0
function! ForceRotateEnc()
let y = -1
while y == -1
let encstring = "#koi8-r#cp1251#8bit-cp866#utf-8#ucs-2le#"
let x = match(encstring,"#",b:encindex)
let y = match(encstring,"#",x+1)
let b:encindex = x+1
if y == -1
let b:encindex = 0
else
let str = strpart(encstring,x+1,y-x-1)
:execute "set encoding=".str
return ":e ++enc=".str
endif
endwhile
endfunction

" <Ctrl+F8> File encoding for save (convert)
map <C-F8> :execute RotateFEnc()<CR>
vmap <C-F8> <C-C><C-F8>
imap <C-F8> <C-O><C-F8>
let b:fencindex=0
function! RotateFEnc()
let y = -1
while y == -1
let encstring = "#koi8-r#cp1251#8bit-cp866#utf-8#ucs-2le#"
let x = match(encstring,"#",b:fencindex)
let y = match(encstring,"#",x+1)
let b:fencindex = x+1
if y == -1
let b:fencindex = 0
else
let str = strpart(encstring,x+1,y-x-1)
return ":set fenc=".str
endif
endwhile
endfunction

" Russian support | CTRL+^
set keymap=russian-jcukenwin
" by default - latin keymap
set iminsert=0
" by default - latin keymap for search
set imsearch=0


" ftp://ftp.vim.org/pub/vim/runtime/spell/
if version >= 700
" По замовчуванню перевірка орфографії виключена.
setlocal spell spelllang=
setlocal nospell
function ChangeSpellLang()
if &spelllang =~ "en_us"
setlocal spell spelllang=ru
elseif &spelllang =~ "ru"
setlocal spell spelllang=uk
elseif &spelllang =~ "uk"
setlocal spell spelllang=en_us,ru,uk
elseif &spelllang =~ "en_us,ru,uk"
setlocal spell spelllang=
setlocal nospell
else
setlocal spell spelllang=en_us
endif
endfunc
" map spell on/off for English/Russian
map <F11> <Esc>:call ChangeSpellLang()<CR>
endif


Після перезапуску, Vim буде мати наступний вигляд:

субота, 24 травня 2008 р.

Monty Hall problem



# Парадокс Монті Холла (Monty Hall) - одна з відомих задач теорії ймовірності, рішення якої, на перший погляд
# суперечить здоровому глузду. Завдання формулюється як опис гіпотетичної гри, заснованої на американському телешоу
# «Let’s Make а Deal», і названа на честь ведучого цієї передачі. Найбільш поширене формулювання цього завдання,
# опубліковане в 1990 році в журналі Parade Magazine, звучить таким чином:
#
# Уявіть, що ви стали учасником гри, в якій вам потрібно вибрати одну з трьох дверей.
# За однією з дверей знаходиться автомобіль, за двома іншими дверима — кози. Ви вибираєте одну з дверей, наприклад, номер 1,
# після цього ведучий, який знає, де знаходиться автомобіль, а де — кози, відкриває одну з дверей, що залишилися,
# наприклад, номер 3, за якою знаходиться коза. Після цього він питає вас, чи не бажаєте ви змінити свій вибір і вибрати двері номер 2.
# Чи збільшаться ваші шанси виграти автомобіль, якщо ви приймете пропозицію ведучого і зміните свій вибір ?
#
GAMES = 10000
DOORS = [1, 2, 3]
stay_win = switch_win = 0

def choice(arr)
arr[rand * arr.length]
end

puts "Граємо #{GAMES} ігор..."
GAMES.times {
prize_door = choice(DOORS)
chosen_door = choice(DOORS)
opened_door = choice(DOORS - [prize_door, chosen_door])
switch_door = choice(DOORS - [chosen_door, opened_door])
stay_win += 1 if chosen_door == prize_door
switch_win += 1 if switch_door == prize_door
}

puts "Відсоток виграшів із стратегією зміни вибору становить: #{(switch_win.to_f / GAMES) * 100} %"
puts "Відсоток виграшів із стратегією не зміни вибору становить: #{(stay_win.to_f / GAMES) * 100} %"


Граємо 10000 ігор...
Відсоток виграшів із стратегією зміни вибору становить: 66.23 %
Відсоток виграшів із стратегією не зміни вибору становить: 33.77 %

вівторок, 25 березня 2008 р.

I'm alive!


Згадав про існування такого невеликого свого творіння. Давненько сюди не писав, тай узагалі забив на програмування.
Ні строчки коду за останні 2 місяці :(.
З головою пірнув у адміністрування і "енікейство". І тепер я спокійний: програмування залишиться для мене хобі, яке буде приносити мені моральне задоволення.

По трохи починаю відходити від усіх тих подій.
По трохи починаю звикати до нових умов.
По трохи починаю повертатися до розміреного життя.

Не я такий, життя змусило...

З самого початку цей блог задумувався як збірка думок, новин, матеріалів про Ruby і околорубінові теми. Настав час порушити це правило :). Вони ж для того і створенні. Вводжу новий тег [life].

понеділок, 21 січня 2008 р.

Rubular

Rubural - це новий онлайновий редактор регулярних виражень (regular expression) для Ruby. Дуже зручна річ для тестування. Особливо корисною буде для тим хто тільки починає знайомитись з такою потужною штукою як регекспи!