
dhh: Apple loves Ruby. Note how the Ruby icon for scripting language is taking precedence on the Snow Leopard page: http://bit.ly/xcxt2
Вполне очевидно, в python'е ничего особенного нет, а ruby повкуснее будет. За последние годы технология заматерела, обзавелась достойным набором либ, получился очень даже вкусный язык для скриптинга и веба.
Post A Comment | в избранное | рассказать другу | ссылка
Подсказали на фриноде, сижу в шоке :) А вы знали, что в форме условного оператора или оператора цикла в конце можно использовать несколько выражений? Я нет. И всегда писал, если нужно, как
unless false
expr1
expr2
end
оказалось, что никто не мешает писать вот так:
(expr1
expr2) unless false
Вау! Теперь мои руки будут уставать еще меньше! Хвала ruby :)
6 Comments | Post A Comment | в избранное | рассказать другу | ссылка
Сегодня ночью я решил поиграться с ruby. Вспомнил о таком веселом сайте, как http://99-bottles-of-beer.net. Там собраны версии программ, которые печатают знаменитую песенку про 99 бутылок на разных языках. Ну и немножко посидев, написал свою версию. Она получилась слегка громоздкой ;), поэтому не выкладываю ее здесь, а даю ссылку: http://pastie.caboo.se/private/fkjfxgx9w7ee0wqco9
1 Comment | Post A Comment | в избранное | рассказать другу | ссылка

Интересно, какой ninja way написан вот в таких книжках? И каков он вообще настоящий ninja way? И свой ли он у каждого человека или есть какой-то true ninja way?
3 Comments | Post A Comment | в избранное | рассказать другу | ссылка
Хм... продолжаю продвигать свое мнение, что хардкор (== противоположность попсы) это тоже попса, как это не парадоксально звучит.
Вот есть фанатики попсы (их уже ничего не спасет), есть фанатики НЕ попсы (их тоже ничего не спасет), а есть Infected Mushroom, которые плевали на то, что их считают попсой, которые не пишут музыку специально хардкорно, а пишут ее так, чтобы было приятно слушать.
1. Heavyweight 2. Becoming Insane 3. Artillery 4. Merlin (Infected Remix) 5. Deeply Disturbed (Infected Remix) 6. Vicious Delicious 7. Suliman 8. Change The Formality
И это только с последних альбома и сингла
Короче, истина она не с краю, она посередине.
7 Comments | Post A Comment | в избранное | рассказать другу | ссылка
По ссылке увидел это:
require 'date'
class Date
def self.last_of_month( arg = Time.now )
year = ( arg.is_a? Fixnum ) ? Time.now.year : arg.year
mon = ( arg.is_a? Fixnum ) ? arg : ( arg.mon rescue Time.now.mon )
raise ArgumentError unless mon.between?( 1, 12 )
begin; Date.new year, mon, mday ||= 31
rescue ArgumentError; mday -= 1; retry
end
end
end
Подумал, нафик так было извращаться и написал вот это:
class Date
def last_of_month
(self >> 1) - mday
end
end
1 Comment | Post A Comment | в избранное | рассказать другу | ссылка
Сходил в театр на "Медовый месяц в Венеции". Первый раз между прочим сходил за лет 8 как минимум. Можете кинуть в меня тапком, но вот такой вот я человек. Понравилось, рассчитываю появляться в театрах почаще. Море позитива и вдохновения и +1 очко к статусу ниндзя :)
3 Comments | Post A Comment | в избранное | рассказать другу | ссылка
...Please don't assume Lisp is only useful for Animation and Graphics, AI, Bioinformatics, B2B and E-Commerce, Data Mining, EDA/Semiconductor applications, Expert Systems, Finance, Intelligent Agents, Knowledge Management, Mechanical CAD, Modeling and Simulation, Natural Language, Optimization, Research, Risk Analysis, Scheduling, Telecom, and Web Authoring just because these are the only things they happened to list. -- Kent Pitman
1 Comment | Post A Comment | в избранное | рассказать другу | ссылка
 |
| 2007-05-14 20:59 |
| (без темы) |
| Public |
| что-то психоделично-депрессивно-веселое от infected mushroom |
| ruby, study, why |
|
Задание: технический перевод с английского на русский. Сижу и думаю, для кого пишутся эти тексты? Вот кому-то доставляет удовольствие читать сухие технические тексты, где слов реально написано в 3-4 раза больше чем надо, а diagnostics utility program через каждые 3 слова просто убивает мозг к концу текста? Почему нельзя писать это по-человечески? Впрочем для этого нужен талант и чувство меры, который дан не каждому. Вот _why's poignant guide этими качествами пропитана, а Учебник по Ruby на wikibooks нет.
2 Comments | Post A Comment | в избранное | рассказать другу | ссылка
У нас конечно не смолток, но тоже кое-что умеем:
class << nil
def nil?
false
end
end
Только вот проверить уже не удается, irb после такого умирает на следующей инструкции.
4 Comments | Post A Comment | в избранное | рассказать другу | ссылка
Michael G.
в груви прикольно сделали.. там имя метода любое может быть..
Michael G.
по-моему даже с пробелами (не уверен)
Yurii R.
в руби тоже можно с пробелами
Michael G.
впрочем.. там это описано
Michael G.
метод? как?
Yurii R.
View paste
irb(main):002:0> Fixnum.class_eval do
irb(main):003:1* define_method("hello world") { 1 }
irb(main):004:1> end
=> #<proc:0x00088aa4@(irb):3>
irb(main):005:0> 1.send "hello world"
=> 1
Michael G.
ми в шоке
Yurii R.
View paste
irb(main):007:0> 1.public_methods.sort.grep /hello/
=> ["hello world"]
5 Comments | Post A Comment | в избранное | рассказать другу | ссылка
Я конечно не думаю, что вам интересно смотреть на мой код, но все же буду флудить сюда хотя бы для себя :)
Реализация следующей вещи (идея взята из Groovy GPath): tasks - коллекция каких-то элементов Task имеет аттрибут name Тогда tasks.names вернет коллекцию их имен.. А такие вещи можно будет соединять: tasks.names.uppercase - выдаст коллекцию имен в верхней раскладке: NAME_1, NAME_2, ...
Ах, да.. еще зачем-то решил задавать метод на лету прямо в объекте, не знаю.. будет ли быстрее, нужно провести бенчмарки.
require 'rubygems'
require 'active_support'
module GPathable
alias :old_method_missing :method_missing
@@method_missing_stack_deep = 0
def method_missing(sym, *args)
begin
if ((@@method_missing_stack_deep += 1) == 1)
old_method_missing(sym, *args)
else
raise NoMethodError
end
rescue NoMethodError
meth = sym.id2name.singularize
instance_eval %Q{
def #{meth}(*args)
collect { |elem| elem.#{meth}(*args) }
end
}
@@method_missing_stack_deep = 0
send(meth, *args)
end
end
end
class Array
include GPathable
end
class MyTest
attr_accessor :name
def initialize(name)
@name = name
end
end
puts (1..100).inject([]) { |tests, i| tests << MyTest.new("name_#{i}") }.names.join(', ')
P.S. И сорри за такие длинные табы, я исправлюсь :)
11 Comments | Post A Comment | в избранное | рассказать другу | ссылка
Если Ruby - это все объект, то SmallTalk все-все-все объект: Все взаимодействия это посылки сообщений - абсолютно все: if, while, for, or, and, etc - это не структуры языка, это сообщения.
Примерчик?
charlie radius: 40. [simon radius > charlie radius and: [simon radius > teresa radius]] whileTrue: [ simon shrinkBy: 10 ].
Код тяжеловато сначала прочитать, но вполне возможно привыкнуть. Будем учить ST вместе? :) Update от 9__: Еще задолго до появления Smalltalk Алан Кей сформулировал три фундаментальных принципа объектно-ориентированного программирования: • Объект — базовая единица объектно-ориентированной системы. • Объекты могут обладать состоянием. • Посылка сообщения — единственный способ обмена информацией между объектами. Просто и красиво, не так ли?
2 Comments | Post A Comment | в избранное | рассказать другу | ссылка
При написании спеки (rspec) в Scite случайно нажал F5. И бинго! Она запустилась. Чего-то я пропустил этот момент при чтении документации.
Post A Comment | в избранное | рассказать другу | ссылка
С помощью 9__ написал клиентик к http://colorer.sourceforge.net/php/generator.php. Может быть это решение проблемы слегка через задницу, но оно хотя бы уже работает.
#client to http://colorer.sourceforge.net/php/
#usage ruby colorize.rb [path/to/file] -t [type]
#if filename were not provided, source text would be given from the windows clipboard
%w{hpricot net/http uri win32/clipboard}.each { |it| require it }
require 'win32/clipboard' if RUBY_PLATFORM =~ /win/
COLORER_URL = 'http://colorer.sourceforge.net/php/generator.php'
if !($*[0]) || $*[0] == '-t'
content = Win32::Clipboard.get_data
else
content = File.new($*[0]).read
end
res = Net::HTTP.post_form(URI.parse(COLORER_URL),
{:file_content => content, :i_encoding => 'UTF-8', :hrd_color => 'default',
:type => $*[-1], :o_encoding => 'UTF-8'})
doc = Hpricot(res.body)
Win32::Clipboard.set_data((doc/"pre").to_html.gsub!(/\nCreated with colorer.*\n/, ''))
Post A Comment | в избранное | рассказать другу | ссылка
Вот это они называют простым? http://feeds.feedburner.com/~r/dion/~3/112824381/001469.html
<R, T extends java.io.Closeable, throws E>
R with(T t, {T=>R throws E} block) throws E {
try {
return block.invoke(t);
} finally {
try { t.close(); } catch (IOException ex) {}
}
}
Да я убьюсь 3 раза, пока это просто прочитаю. Я правильно понимаю, что они хотят с помощью замыканий сделать гарантированную обработку ошибок? ТИПА транзакции.. Для сравнения нечто похожее на ruby:
class File
def File.my_open(*args)
result = file = File.new(*args)
if block_given?
begin
result = yield file
ensure
file.close
end
end
return result
end
end
#А используется вот так.. И мы точно знаем, что файл закроется..
File.my_open(__FILE__) { |file| puts file.entries }
Post A Comment | в избранное | рассказать другу | ссылка
Требую _why'ю присвоить звание дважды героя планеты Земля: За это: 1. http://poignantguide.net/ruby и за это: 2. http://hacketyhack.net/
Вы поняли, да? Even infants can learn Ruby! It's just that simple!
На форуме заметил поползновения по переводу hacketyhack на другие языки (человеческие). Может сподвигнуться и перевести на русский? От 12-летних детей глупо требовать хороший английский.
9 Comments | Post A Comment | в избранное | рассказать другу | ссылка
BDD не заменяет TDD Они должны использоваться вместе.
Крутилась в голове некоторое время, а Олег Андреев (http://novemberain.com) ее озвучил.
5 Comments | Post A Comment | в избранное | рассказать другу | ссылка
|