Posted 3 years ago

Кроссдоменный AJAX на основе CSS

Кроссдоменный AJAX на основе CSS: “Недавно столкнулся с проблемой как передать данные с сервера A в
javascript на сервер B, если на сервере B серверный код писать нельзя,
а на А можно.
И нашел элегантное решение.
Суть решения в том, что для использования предлагается объект
CSSHttpRequest, предоставляющий выполнять AJAX-запросы на базе CSS. Это
работает, поскольку CSS не имеет ограничений безопасности, которые имеет
стандартный объект XMLHttpRequest.
Код выглядит следующим образом.

CSSHttpRequest.get(
 'http://www.nb.io/hacks/csshttprequest/hello-world/',
 function(response) { alert(response); }
 );

Данные кодируются на сервере в виде 2-х килобайтных цепочек. Ответ
возвращается в в виде:
 #c0 { background: url(data:,Hello%20World!); }
 #c1 { background: url(data:,I’m%20text%20encoded%20in%20CSS!); }
 #c2 { background: url(data:,I%20like%20arts%20and%20crafts.); }

На сервере B с помощью javascript создается невидимый IFRAME, в который
и загружается CSS.
Это также работает и в XHTML.

Данное решение совместимо с IE6+, Firefox 2+, Safari 3+, iPhone.
Вид лицензии: Apache License
"

(Via Хабрахабр:.)

Posted 3 years ago

Desktop Wallpaper Calendar 2010: Vote For Your Favorites!

Posted 3 years ago

Летите в Европу за пол цены используем распродажи,

Летите в Европу за пол цены http://buruki.ru/offerroll/?id=1680 используем распродажи, #piter #moscow #ru_lh
No Tags
Posted 3 years ago

Google API Tools

Описание работы с плеером YouTube http://code.google.com/intl/ru/apis/youtube/js_api_reference.html

В конце статьи есть полезные ссылки, так же интересный подход для работы с TTS от гугла

require 'open-uri'
require 'tempfile'

url = 'http://translate.google.com/translate_tts?tl=en&q=can%20I%20help%20you?'
buffer = open(url, 'UserAgent' => 'Sinatra-Rscript').read

mp3 = Tempfile.new('mp3').path + '.mp3'
File.open(mp3, 'w'){|f| f.write buffer}
`mplayer #{mp3}`

Posted 3 years ago

Install pecl extension on my Gentoo test machine

wget http://pecl.php.net/get/uploadprogress 
tar -xvzf uploadprogress 
cd ./uploadprogress-1.0.1 
phpize 
aclocal 
libtoolize —force 
autoheader 
autoconf 
./configure 
make 
sudo make install

Posted 3 years ago

Ротация логов рельсового приложения

hay roller

Введение

Это уже давно известная тема, и я не претендую на открытие Америки, но для себя зафиксирую это знание.

Даже если вы используете капистрано для выкладывания проекта в сеть, логи приложения хранятся в одном и том же месте (папка shared/log и разрастаются до огромных размеров. Можно, конечно, запускать после каждого обновления файлов проекта комманду:

rake log:clear

Но есть более цивилизованные методы. Тем более, после определённого времени код проекта начинает обновляться всё реже и реже.

С помощью системы

Существует прекрасный системный инструмент, который назвается logrotate. С его помощью архивируются логи апача, баз данных и даже менеджера пакетов.

Чтобы организовать это удовольствие для своего проекта нужно создать файл /etc/logrotate.d/my_project:

/path/to/my_project/shared/log/*.log {
  weekly
  missingok
  rotate 10
  nomail
  compress
  delaycompress
  sharedscripts
  postrotate
    touch /path/to/my_project/current/tmp/restart.txt
  endscript
}
    Здесь написано:
  1. weekly — разбивать лог еженедельно;
  2. missingok — не выходить с ошибкой, если файла нет;
  3. rotate 10 — хранить 10 предыдущих томов;
  4. nomail — не высылать удаляемые тома на электронную почту;
  5. compress — архивировать;
  6. delaycompress — архивировать не сразу, т.к. после переименования файла и до перезапуска пэссенджера логи пишутся в тот же переименованный файл;
  7. sharedscripts — запускать скрипт один раз для всех логов по маске;
  8. postrotate…endscript — скрипт, который нужно запустить после ротации: в данном случае перезапустить пэссенджер.

Файлом должен владеть root:root. Теперь можно проверить и запустить принудительно, убедившись, что наш файл включается в общий список:

sudo logrotate -dv /etc/logrotate.conf
sudo logrotate -fv /etc/logrotate.conf

С помощью руби

В руби есть встроенный метод ротации логов. Достаточно в файе config/environment.rb написать внутри блока Rails::Initializer.run один из вариантов:

config.logger = Logger.new(config.log_path, 'weekly')

или

config.logger = Logger.new(config.log_path, 10, 1.megabyte)

Первый вариант осуществляет ротацию раз в неделю, а второй — по достижении файлом размера в 1 мегабайт и хранит 10 старых томов. Только в данном случае архивацию, если она нужна, придётся организовывать отдельно.

Было бы интересно

Для логротейт можно написать такую маску, которая бы включала в себя все логи всех рельсовых проектов. Но мне неизвестен способ потом написать такой скрипт, который бы перезапускал именно те проекты, для которых была сделана ротация. Например, если логротэйт не нашёл нужного файла, то и скрипт не запустит. А если мы указываем путь типа /path/to/**/shared/*.log, то и скрипт должен перебирать все эти проекты и создавать или просто менять дату редактирования файлов restart.txt. Или можно просто перезапускать апач.

Материалы для самостоятельного изучения

  1. Документация logrotate (по-русски)
  2. Что ещё можно делать с логами приложения на рельсах
Posted 3 years ago

Image Resizing with Rails Paperclip and ImageMagick

The Rails Paperclip plugin uses ImageMagick for creating thumbnail images, etc.

You specify the size of images using ImageMagick’s Geometry syntax which can be a little confusing. Here are the aspects of that which are most useful for Paperclip users.

The basic specification is <width>x<height> in pixels, optionally followed by a modifier. In some cases you can omit either width or height.


  • 256x256

  • This specifies the Maximum dimensions for the image, while preserving the aspect ratio of the image. So if your image were actually 512x256 it would be resized to 256x128 in order to fit inside the specified size.

  • 256x256!

  • This specifies the Exact image size, so a 512x256 image would be changed into 256x256, losing the aspect ratio.

  • 256x

  • This specifies the desired width of the target image, leaving the height to be set so as to preserve the aspect ratio.

  • x256

  • This specifies the desired height of the target image, while preserving the aspect ratio.

  • 256x256^

  • This specifies the Minimum size for the target image, so the resized image may be larger than these dimensions.

  • 256x256>

  • This specifies that the image will be resized only if it is Larger than the dimensions.

  • 256x256<

  • This specifies that the image will be resized only if it is Smaller than the dimensions.


Other options exist within the syntax. See the ImageMagick docs for more details.

Posted 3 years ago

Thinking Sphinx with Raspell (поиск с ошибками)

Installation

You’ll need the Aspell library (easily compiled by source, or installed via MacPorts). Don’t forget to install the English library as well – there’s instructions for both in Evan Weaver’s Raspell README.

Once that’s set up, grab the gem from GemCutter:

sudo gem install thinking-sphinx-raspell \
  --source http://gemcutter.org

You’ll want to add the gem to your config/environment.rb file (assuming you’re working on a Rails application):

config.gem('thinking-sphinx-raspell',
  :lib     => 'thinking_sphinx/raspell',
  :source  => 'http://gemcutter.org',
  :version => '>= 1.0.0'
)

Or, if you wish to do a manual require yourself:

require 'thinking_sphinx/raspell'

Usage

By default, Thinking Sphinx will not overwrite your search query, but you can view suggestions:

@articles = Article.search 'pnacakes'
@articles.suggestion? #=> true
@articles.suggestion  #=> 'pancakes'

You can also choose to redo the search using the provided suggestion:

@articles.redo_with_suggestion
@articles.each do |article|
  # ...
end
Posted 3 years ago

В чем разница между Proc и Lambda в Ruby?

Концепции Proc (сокр. От Procedure – процедура) и Lambda (Лямбда-функция) в Ruby имеют очень тонкие различия, которые новичкам могут показаться незначительными, а могут и вообще не показаться=) Этот пост — попытка продемонстрировать и объяснить эти их особенности.

Posted 4 years ago

Авторизация по OpenID в русских локалях

Loginza дает возможность вам, сделать авторизацию наиболее удобной для пользователей России. Так же в существует плагин RoR для этого сервиса http://github.com/galetahub/loginza

widget_overview_1
Posted 4 years ago

Расшарьте свой локальный веб-сервер в Интернете с помощью localtunnel

Иногда во время тестирования веб-приложений может понадобится доступ к ним снаружи (то есть из публичного Интернета). Например некоторые API используют коллбеки.

В таком случае можно создать обратный SSH-туннель чтоб расшарить свой локальный сервер. Но для этого нужен доступ к публично доступной машине с SSH и нужными портами открытыми на фаерволе.

Но не всегда найдется такая машина, и влом покупать VPS или что-то в этом роде. В таком случае localtunnel — как раз то что надо.

localtunnel — инструмент специально предназначеный для того чтоб временно расшарить локальный веб-сервер в Интернете. Он работает как клиент к публичному сервису обратного туннелирования с открытыми исходниками.

Использовать его очень просто:

localtunnel 8080

Эта команда сделает локальный сервис на порту 8080 доступным на порту 80 на домене который выведет утилита.

Конечно перед использованием все-таки надо устанавить и настроить программу.
Установка для всех пользователей:

sudo gem install localtunnel

После этого при первом запуске нужно указать свой публичный ключ для аутентификации:

localtunnel -k ~/.ssh/id_rsa.pub 8080

Если у вас нет готовых ключей для SSH, их можно сгенерировать такой командой:

ssh-keygen -t rsa

Больше информации (на английском) и исходники – на Гитхабе.

(Via Хабрахабр.)

Posted 4 years ago

Smashing Magazine * Smashing Magazine * Smashing Network Free Wireframing Kits, UI Design Kits, PDFs and Resources

To mock-up the user interface of a website, software or any other product, you’ll need some basic UI elements. And this is where wireframing kits and UI design kits come in handy. When you want to create a low-fidelity prototype for your projects, you can use these kits to give your idea a certain shape, keeping it abstract and not losing yourself in details.

In this post, we’ve prepared an overview of useful web and mobile user interface kits, handy PDFs and resources that you can use in your projects. We’ve carefully selected the most useful kits and resources to get you going in the early stages of a project.

Posted 4 years ago

Конструктор регулярных выражений

Время от времени необходимо писать небольшие регулярные выражения, но не всегда под рукой есть подходящие инструменты, чтоб проверить и наглядно увидеть их работу. В поисках чего-то легкого и быстрого был найден этот проект, который теперь надолго поселился в избранном браузера.

Posted 4 years ago

CSS Browser Selector

CSS Browser Selector is a very small javascript with just one line which empower CSS selectors. It gives you the ability to write specific CSS code for each operating system and each browser.

Posted 4 years ago

Создание графиков Charts

There are a number of JavaScript charting libraries available. In this episode we use Highchart in a Rails application.

(Via ASCIIcasts - Latest Episodes.)