(no subject)

197 // Революции 
Революции революциями, а вот есть ли тупо опен сорс программа для мобил , что-бы проводить сбор результатов голосований, типа опросов exit polls? Хотя, вообще то лайками в фейсбуке будут голосовать за президента. И будет так лет через 15. А от вращения Оруэлла в гробу, можно будет запитывать электричеством целый мегаполис.

(no subject)

196 // Кто бы мог подумать лет 5 назад... 
Мой знакомый друган мониторит свою жену через find my phone. Типа доверяй, но проверяй.

(no subject)

195 // Рельсы. 
Прошел курс руби для зомби, весьма занимательно. Из зачотных видео есть примеры как просто хорошего тона, так и кодовые фишки. Итак курс построен на примере гламурной твиттер аппликации. Пока запощу выжимки первой части из пяти.

1. Жирная модель и тощий контроллер.
Рекомендуется рефакторинг кода из контроллера который отвечает за логику в соответствующую функцию в модели.
Есть экшн в контроллере TweetController - retweet. Логику которая проверяет, какой именно юзер ретвитит (нельзя самому себе делать ретвит), а также создает сам ретвит, стоит вытащить в модель Tweet < ActiveRecord::base - retweet_by(retweeter). А в контроллере только находить твит, делать вызов созданной функции из модели и полученный текст статуса ставить во флеш нотис, а затем делать редирект.

2. Cтиль запросов.
Не писать Tweet.find(:all,:conditions.....много букав унутре скобок...), а цепочкой в очередь писать, типа Tweet.where(:user => "vasya").order('created_at').limit и т.д. Я сам тоже такой стиль люблю еще с доктрины под похапе. А вместо поиска по Васе, если это текущий пользователь, лучше писать current_user.tweets....

3. Скопы.
Скоп позволяет описать условия фильтрации и сортировки данных запроса в модели и оформить в качестве вызова. Имплементация скопа это по сути реализация бизнес логики. К примеру есть модель твитов. Есть связь между пользователем и твитом. Так вот для "последних" твитов пользователя, можно сделать scope :recent, order('created_at') (в class Tweet < ActiveRecord::Base), и пишем user.tweets.recent. Вообще в скопах можно применять любые запросы, но если речь идет о датах или вычислениях, скажем 1.day.ago, то компилятор подставит жестко хардкодное значение в запрос. Что-бы использовать постоянно свежие данные, нужно поместить код скопа в лямбду (для тех кто продвинуто знаком с жаваскриптом - будет легко понять почему), пишем scope :last_emails, lambda { |num = 10| where('received_at > ', 1.day.ago).limit(num) }. Фишки с num нужна если мы хотим передавать параметры или ставить их по умолчанию. Как пример - user.last_emails(3). Задать скоп по умолчанию - default_scope ..., а если мы хотим в коде сделать запрос минуя умолчания, пишем user.unscoped.order и т.д.

4. Еще о скопах и о стиле.
Рекомендуется писать код как в романах про войну и про любовь, главное лаконично. Плохой стиль письма когда:
t = Tweet.new
t.user = current_user
t.status = @tweet
t.save

А хороший - current_user.tweets.create(:status => @tweet)

5. Тощие контроллеры атакуют снова.
Есть скажем твит контроллер, с 3 действиями. Каждое действие ищет твит по ид из запроса, а потом им оперирует. Так вот если прикинуться умным и засунуть @tweet = Tweet.find(param[:id]) в приватный get_tweet внутри контроллера, а затем написать before_filter :get_tweet, :only => [список экшнов], то это не хорошо. Потому что мы прячем @tweet приватным. И вообще, незачем этому хелперу знать про param[:id]. Поэтому хелпер только ищет так get_tweet(tweet_id), а методы контроллера присваивают результат в @tweet.

6. Для чего нужны фильтры в контроллере?
Для авторизации, логирования и визардов, типа степ бай степ, пока от монитора не ослеп.
class TweetController < ApplicationController - Local filter
	before_filter :auth, :only => [:edit, :update, :destroy],
		:except => [:index, :create]
		
class ApplicationController < ApplicationController::base  - Global filter
	before_filter :require_login
	
class SessionController < ApplicationController - Ignore global filters
	skip_before_filter :require_login, :only => [:new, :create]



(no subject)

194 // Фонтастега. 
Мой отец наверняка бы сильно удивился, скажи ему кто нибудь двадцать пять лет тому назад (еще при совке), что его сын будет изучать руби на рельсах в виде видеоуроков оформленных в стиле зомби-way. И главное эти уроки действительно прикольные.

(no subject)

193 // Фонтастега. 

Читаешь тут фантастов разных и получается вот что. Допустим (как-бы) человечество уподобилось богу. Достигли все что только можно. Все знания мироздания известны. Сами могут какое хошь мироздание создать, а то и два. Вот че дальше то им делать? Я думаю что играть. Ради удовольствия.


Ну типа надо умное что-то иногда писать.

(no subject)

192 // Квест нах. 
Блеадь блеадь блядь, да почему так у музыкантов все запутано?????????!!!! Дрочишь два месяца одни ноты, потом находишь другие еще луче, потом смотришь нормальное четкое профессионально разложенное видео и комбинируешь и понимаешь что опять делал не так все это время! Типа играл и по нотам и по метроному правильно, а звук все равно не тот.... А теперь вот посмотрел и понял оказывается почему. Но не все потеряно и наработанная техника пригодилась, чисто чуток рефакторинг нужен.

(no subject)

191 // Archive. 
Есть у меня жесткий диск, который простоял в коматозном состоянии года два, тупо в компьютере. Тот самый жесткий, который перестал определятся биосом и был "невидим", даже не запускался и не дрожал на ощупь как ни пытайся. Разве что линукс кернел, каким-то образом его подымал, что позволило на него скинуть бэкап моих данных и зная такой фокус их же и прочитать. Так и стоял он в родительском компе года два без изменений. Никто его не трогал, как пришло время переставлять винду, затем баловался с акронисами, диск директор и все такое. Случайно обнаружил что диск прочитался. И печатая в жж это дело я теперь понял почему. Диск директор - линукс.
Ладно, бог с ним диском. Главное что я бекап кину на макинтошег и в веб сервисы - пикаса и дропбокс.

(no subject)

189 // apple's mobile me. 
Таки не выдержал, честно попробовал триал, который увы длился ровно 10 минут. Потому что:

1. Find my phone использует гугло карты и вместо Израиля показывает стерильную белую простыню. Понятно что это лицензионные заморочки Гугля, но нахрен мне такой сервис?

2. Я три раза пытался, но не смог войти в почту через красивый веб интерфейс. Выкидывало обратно на главную и без обьявления войны. С айфона доступ был, но где гламур то?

3. Веб интерфейс адрес бук такой же простой как и офлайн версия. Только контакты и редактор. Ни импорта с фейсбука или дополнительных синхронизаций.

Но молодцы, отмена аккаунта прошла ненапряжно.