Сообщения

Сообщения за 2012

Android - второй опыт

Изображение
Написал вторую программку под Android - сборник цитат и афоризмов. В этот раз столкнулся только с двумя проблемами: SimpleAdapter и проверка состояния сетевого подключения. SimpleAdapter Есть список авторов цитат, который загружается с удаленного сайта в формате xml:  <authors>   <author>     <id/>      <name/>     <link_to_image/>     <quote/>   </author> </authors> т.е. имя автора, ссылка на аватар и его последняя (новая) цитата. Все это надо отобразить в ListView так, чтобы в каждой строке были и имя автора и его аватар и цитата.  Разбираем данные из xml (ради экономии места обработку исключений пропускаем): HttpResponse resp = client.execute(request); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(resp.getEntity().getContent()); doc.getDocumentElement().normalize(); Author.AUTHORS = new ArrayList<HashMap<String, Object>

ActionMailer - медленное обновление страницы после отправки сообщения

Изображение
Есть два способа, как уменьшить задержку обновления страницы сайта, после нажатия на кнопку "отправить сообщение". Первый - настроить на сервере, где находится сайт, почтовый сервер, через который будут отправляться почта. Второй - использовать асинхронную отправку сообщений, чем сейчас и займемся. Самый простой способ реализации асинхронной отправки почты - использование плагина delayed_job. Добавляем в Gemfile:  gem 'delayed_job_active_record' и выполняем из директории проекта: bundle install rails g delayed_job:active_record rake db:migrate   Открываем контроллер и изменяем: AdminMailer.alert_message().deliver на AdminMailer.delay.alert_message() Осталось только выполнить в консоли: rake jobs:work Теперь обновление страницы будет происходит практически мгновенно, а в консоли можно будет отслеживать состояние отложенных заданий. 

RubyOnRails и Paperclip

Изображение
Шпаргалка по использованию Paperclip (плагин для работы с изображениями) в проектах RubyOnRails. Установка Прежде всего необходимо установить библиотеку ImageMagic, которая используется Paperclip для масштабирования изображений: sudo apt-get install libmagick9-dev После чего устанавливаем Paperclip: прописываем в Gemfile "gem 'paperclip'" и выполняем bundle install. Использование Модель с одним изображением. В качестве примера добавим аватар к модели User: rails g paperclip User avatar rake db:migrate Открываем User.rb и пишем: attr_accessible :avatar has_attached_file :avatar, :styles => { :small => '28x28#', :medium => '48x48#' } Т.е. мы сделали аватар доступным для редактирования и задали два стиля: "small" и "medium". Добавляем в форму редактирования профиля пользователя поле для выбора изображения: <%= f.file_field :avatar %> и - для отображения аватара пользователя - прописываем наприм

RubyOnRails - генерация sitemap

Изображение
Этот день должен был наступить, и он наступил - мне окончательно надоело обновлять sitemap ручками! И, поборов природную лень, я таки реализовал для  своего сайта  автоматическую генерацию sitemap.xml. Делается все просто. Создаем контроллер SitemapController: def index   @urls = ['http://ptica-govorun.ru/', 'http://ptica-govorun.ru/authors']   @quotes = Quote.all   @quotes.each do |q|     @urls.push( url_for :controller => 'quotes', :action => 'show',  :id => q.id)   end   headers['Content-Type'] = 'application/xml'   render :layout => false end Создаем index.rxml в директории views/sitemap/ xml.instruct! :xml, :version => '1.0' xml.tag! 'urlset', 'xmlns' => "http://www.sitemaps.org/schemas/sitemap/0.9" do   @urls.each do |url|     xml.tag! 'url' do       xml.tag! 'loc', url     end   end end И редактируем routes.rb: match "/sitemap.xml", :to =>

Как выделить таб в TabNavigator

Изображение
При изменении текущей вкладки в  TabNavigator, например, посредством selectedIndex, или через состояния, возникает такая проблема - активным остается таб предыдущей вкладки. Столкнулся с этой проблемой уже давно, но нашел решение только сегодня - помогло чтение документации) Решение очень простое - реализуем TabNavigator в виде компонента, внутри которого прописываем метод, принимающий индекс нужной вкладки: tabBar.selectedIndex = index;

Грязный Гарри 5

Изображение
Крутые фразочки от Гарри Каллахена

Android - первый опыт

Изображение
Написал первое приложение под Android - калькулятор расчета стоимости печати, с возможностью оформлять заказы в типографии онлайн. Программировать  под Android понравилось, сейчас думаю, чтобы еще написать) А пока небольшой список проблем, с которыми пришлось столкнуться. 1. По сценарию, получив стоимость изготовления буклета или листовки, пользователь должен иметь возможность отправить результаты расчета в типографию, т.е. оформить заказ онлайн. Для этого приложение должно получить разрешение на использование интернета - android.permission.INTERNET. С первого раза у меня это не получилось. Со второго - тоже) Проблема оказалась во мне - вместо "uses-permission" записал в манифесте " user -permission". Стыдно об этом рассказывать, но если погуглить - я не первый, кто наступил на эти грабли) 2. При получении заявки на сервере обнаруживаем в теле письма кракозябры. Решается изменением кодировки при формировании запроса: String url = Calc.CREATE_ORDER + "

JQuery и Rails - делаем кнопку "like it" со счетчиком

Изображение
В последнее время все больше и больше отдаю предпочтение JQuery в реализации разнообразных финтифлюшек для сайта. Это действительно мощный и впечатляющий инструмент, с помощью которого можно реализовать практически любую бредовую идею - красиво и по-настоящему эффектно! В общем, чем больше познаю JQuery, тем увереннее и монструознее (в лучшем смысле этого непонятного слова) себя ощущаю) Началось мое знакомство с JQuery с идеи прикрутить на http://ptica-govorun.ru/ форму для анонимного голосования за понравившиеся цитаты. Обязательное условие реализации - наличие счетчика и его обновление без перезагрузки страницы. Сделать это оказалось очень просто... 1. Добавляем в Gemfile: gem "jquery-rails" и выполняем bundle install. 2. Выполняем rails generate jquery:install после чего в public/javascripts/ должны появиться библиотеки JQuery и файл application.js. 3. Открываем application.js и пишем функцию для обработки submit-событий: jQuery.ajaxSetup({ 'befor