пʼятниця, 5 квітня 2013 р.

as_json too slow

Проблема: json из 200-300 записей генерировался очень долго (около 5 секунд)
Benchmark показал, что 90% времени занимает вызов

json = my_model.as_json #  <---  около 40мс

для моделей.

То же , но как хеш ускорилось в 100 раз

json = {
  id: my_model.id,
  lat: my_model.lat,
  ...
}  #  <---  около 0.4 мс !!!

вівторок, 12 березня 2013 р.

Rails 3 validations

Validate URL 

(from https://gist.github.com/bluemont/2986523 and http://stackoverflow.com/questions/7167895/whats-a-good-way-to-validate-links-urls-in-rails-3)

Put this into app/validators

class UrlValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
valid = begin
URI.parse(value).kind_of?(URI::HTTP)
rescue URI::InvalidURIError
false
end
unless valid
record.errors[attribute] << (options[:message] || "is an invalid URL")
end
end
end

Usage

validates :url, :presence => true, :url => true

четвер, 24 січня 2013 р.

NGINX

Reguest body limit of 1 MB by default

для загрузки файлов обычно нужно увеличить значение параметра client_max_body_size (квоты в 1 МБ маловато для фоток)

upstream  backend {
   server unix:/home/... ..... ... /shared/unicorn.sock fail_timeout=0;
}

server {
        listen   80 default;
        server_name default;

        access_log  /var/log/nginx/localhost.access.log;
        error_log /var/log/nginx/localhost.error.log;

client_max_body_size 4M;    <-- 
client_body_buffer_size 128k;

        root /home/.... ..... /current/public;

        try_files $uri/index.html $uri.html $uri @myapp;

        location @myapp {
                proxy_pass http://backend;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_redirect off;
        }
}

четвер, 3 січня 2013 р.

MPFlipViewController и 3D перспектива

При попытке применить CATransform3DRotate к изначальной UIView для MPFlipViewController чтобы нарисовать такую листалку
 меня ждал облом :( . MPFlipViewController рендерит UIImage для листания и любые 3D транформации ios игнорит при этом. Получается картинка при листании теряет все 3D трансформации и становится абсолютно плоской.
Единственный способ — не использовать листалку из MPFlipViewController, а делать поворот самому (получение screenshot на айфоне возможно, но только через приватное api)

Анимирование:

[CATransaction begin];
{
    [CATransaction setCompletionBlock:^{
        можно задать вложенные транзакции/completions
    }];
    ...
    CABasicAnimation * anim = [CABasicAnimation     animationWithKeyPath:@"sublayerTransform.rotation.y"];
    anim.toValue = [NSNumber numberWithFloat:mp_radians(90)];
    anim.duration = 0.1;
    
     // эти две строки:  оставаться в посленей точке анимации (не возвращаться на исходную позицию)
    anim.removedOnCompletion = NO;
    anim.fillMode = kCAFillModeForwards;

    [self.rightPage.layer addAnimation:anim forKey:@"rotateRightPageAnimation"];
}
[CATransaction commit];



четвер, 27 грудня 2012 р.

Image resources -568h for iPhone5

Наивно ожидал, что ios умеет подгружать все файлы ресурсов с суфиксом "-568h".
Нет, по умолчанию понимает только Default-568h@2x.png . Для остальных мест, например фон страницы, необходимо создавать костыли — проверять высоту экрана : если 568 точек , то загружать файл ресурса вручную.

неділя, 23 грудня 2012 р.

Ruby Net:HTTP and https

# подготовка параметров
uri = URI('https://server/path')
request_params = {'param1' => 'val1'}

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true if uri.scheme == 'https'

http.start do |h|
  request = Net::HTTP::Post.new uri.request_uri
  request.set_form_data(request_params)
  response = h.request request # Net::HTTPResponse object

  # обработка response.body
end