$ grep -r Tag: «полезное»

-rw-r--r-- 8.8K 24 нояб. 2017 · 210FD78 · ~4 мин

Анимация касания индикатора в UISlider

swift ios полезное uislider

Анимация касания индикатора в UISlider

Стояла задача - при касании слайдера анимировать в приложении сделать анимированное увеличение ползунка. Так же, как это сделано у Apple в приложениях Apple Music и Podcasts в плеере, когда начинаешь перематывать позицию воспроизведения. Пока искал способ стандартными средствами, убил немало времени. Очень не хотелось писать прям свой кастомный слайдер, хотелось использовать системный UISlider, что мне, в итоге, и удалось.

[↵] открыть пост animatsiya-kasaniya-indikatora-v-uislider.md
-rw-r--r-- 1.0K 18 апр. 2016 · E93D4A7 · ~1 мин

Лог-функция для Swift с выводом файла, метода и строки

шпаргалки swift полезное

Функция-шпаргалка для логирования в Swift:

import Foundation

/**
 Лог-функция с выводом файла, метода и строки, откуда вызывается. 
 Пример использования: DLog("привет")

 - parameter messages: тексты/объекты, которые надо вывести
 - parameter fullPath: путь до файла, который вызывается
 - parameter line: номер строки в файле
 - parameter functionName: название метода/функции вызова
*/
func DLog(messages: Any..., fullPath: String = #file, line: Int = #line, functionName: String = #function) {
     let file = NSURL.fileURLWithPath(fullPath)
     for message in messages {
          print("\(file.pathComponents!.last!):\(line) -> \(functionName) \(message)")
     }
}

// Пример:
DLog("message 1", "message 2")
// YourClass.swift:42 -> someMethod() message 1
// YourClass.swift:42 -> someMethod() message 2
[↵] открыть пост log-funktsiya-dlya-swift-s-vyvodom-fajla-metoda-i-stroki.md
-rw-r--r-- 1.8K 6 апр. 2016 · EF30922 · ~1 мин

Простой console.log с выводом файла и номера строки в Node.js

node.js javascript полезное шпаргалки

Пока кодю на Node.js нужно постоянно что-то выводить в консоль. Например, ошибки. Но для большей информативности удобнее знать, где именно ошибка выводится. Тем более, что пока кодил под iOS такой удобный макрос всегда был под рукой, а с Node.js пришлось погуглить и поковыряться, т.к. многие примеры со Stack Overflow просто падали на последней версии Node.js 5.10.0. Падали из-за использования в них Error.captureStackTrace(err, arguments.callee), а сейчас уже нужно использовать NFE.

В итоге сделал то, что хотел. Оставлю тут как шпаргалку.

npm install colors --save

Файл logger.js:

'use strict';

let colors = require('colors');
colors.enabled = true;

exports.p = function logger(somethingForPrint) {
    somethingForPrint = somethingForPrint || '';
    const originalPrepareStackTrace = Error.prepareStackTrace;

    Error.prepareStackTrace = (error, stack) => { return stack; };

    let e = new Error;
    Error.captureStackTrace(e, logger);

    const stack = e.stack;
    const filename = stack[0].getFileName().split('/').reverse()[0];
    const trace = filename + ':' + stack[0].getLineNumber() + " " + colors.bold.black('%s') + "\n";

    Error.prepareStackTrace = originalPrepareStackTrace;

    console.log(trace, somethingForPrint);
}; 

Использовать:

const logger = require('../utils/logger');
logger.p('something happened');
// file.js:401 something happened 
[↵] открыть пост prostoj-console-log-s-vyvodom-fajla-i-nomera-stroki-v-node-js.md
-rw-r--r-- 1.2K 2 июня 2015 · FD87417 · ~1 мин

Transparent Image Viewer для OS X

os x objective-c полезное приложения

Transparent Image Viewer для OS X

Я всё пытаюсь что-нибудь придумать, чтобы можно было удобно делать pixel perfect вёрстку экранов при разработке iOS-приложений. Чтобы можно было удобно и наглядно сравнивать макет и результат. Запилил сегодня вот такую тулзу для OS X - почти прозрачное окно, в котором можно открыть макет, наложить на Xcode или на симулятор и смотреть, что получилось. Ползунком можно менять прозрачность, чтобы проверять соответствие.

Может кому пригодится. А может кто-то тоже чувствует боль и поучаствует в разработке.

Исходники лежат на github.

Скачать бинарник.

P.S. моё первое приложение для OS X.

[↵] открыть пост transparent-image-viewer-dlya-os-x.md
-rw-r--r-- 1.6K 1 июня 2015 · 676411C · ~1 мин

Категория CALayer+UIColor

objective-c xcode полезное шпаргалки

Хорошую штуку нашёл на Stack Overflow. В Xcode в Interface Builder можно задать что-то для UI через User Defined Runtime Attributes. Мне понадобилось задать border. Так вот толщину границы layer.borderWidth задать можно и она подхватится, а вот цвет - нет. layer.borderColor хранит значение типа CGColorRef, а цвет, который ты можешь выбрать в Interface Builder - это UIColor. Простая категория позволяет использовать UIColor через свойство layer.borderUIColor.

CALayer+UIColor.h :

//
// CALayer+UIColor.h
//
// Created by Sergey Armodin on 29/05/15.
// Copyright (c) 2015 Sergey Armodin. All rights reserved.
//

#import <QuartzCore/QuartzCore.h>
#import <UIKit/UIKit.h>

@interface CALayer (UIColor)
/**
* CGColor to borderColor
*/
@property(nonatomic, assign) UIColor* borderUIColor;
@end

CALayer+UIColor.m :

//
// CALayer+UIColor.m
//
// Created by Sergey Armodin on 29/05/15.
// Copyright (c) 2015 Sergey Armodin. All rights reserved.
//

#import "CALayer+UIColor.h"

@implementation CALayer (UIColor)
/**
* Setter
*
* @param color UIColor
*/
- (void)setBorderUIColor:(UIColor *)color {
    self.borderColor = color.CGColor;
}

/**
* Getter
*
* @return UIColor
*/
- (UIColor *)borderUIColor {
    return [UIColor colorWithCGColor:self.borderColor];
}
@end

И вуаля:

Категория CALayer+UIColor

[↵] открыть пост kategoriya-calayer-uicolor.md
-rw-r--r-- 830B 14 апр. 2015 · 65C2C2F · ~1 мин

Симуляция плохого соединения с интернетом в OS X

шпаргалки os x полезное разработка

Network Link Conditioner

Оставлю ещё одну шпаргалку в виде ссылки. Network Link Conditioner - тулза от Apple из набора Hardware IO Tools for Xcode. Позволяет лимитировать в макоси скорость соединения. Можно протестить, например, как приложение ведёт себя в условиях EDGE-соединений или хуже. То же самое есть в разделе Developer в настройках iOS, но то на девайсе, а тут в OS X.

Кстати, в том же наборе лежит симулятор для HomeKit.

[↵] открыть пост simulyatsiya-plohogo-soedineniya-s-internetom-v-os-x.md
-rw-r--r-- 2.6K 13 авг. 2014 · 0B5B06B · ~2 мин

node-couchdb-mover

node.js couchdb полезное

node-couchdb-mover

На днях написал свою первую тулзу Node.Js. Писал лишь отчасти для себя, т.к. для меня она пока не очень актуальна, а вот кое для кого даже очень.

Тулза для CouchDB. Т.к. CouchDB хранит после изменений/удалений документов ревизии и не всегда их очищает, бывает, что база адски растёт в размере. Например, у ребят, для которых эта тулза актуальна сейчас, то, что должно весить 6 гигов, весит 50-60. Может быть они где-то запустили что-то или накосячили, понаменяв и понаписав кучу всего в базу, чем люто увеличили её размер. В общем, проще просто создать новую чистую базу и перенести туда все живые документы.

Тулза просто берёт все документы из 1 базы в CouchDB, и кладёт их в другую. Работает пока довольно топорно, берёт все документы скопом и потом по 1 кладёт в базу. Для баз с относительно небольшим количеством документов работает нормально, а вот если их там тысяч этак 80, то у меня на компе получение документов длилось около 4-5 минут. Поэтому переделаю её вскоре, чтобы брала документы пачками и фигачила внесение в базу не асинхронно, а по очереди.

Но пока пользоваться можно. Тулзу можно встроить, например, в свой Node.Js проект.

В консоли:

npm install node-couchdb-mover

В коде:

var mover = require('node-couchdb-mover');
mover.moveDocuments('dbName1', 'dbName2');

Кроме того, её можно использовать прямо из консоли:

npm install -g node-couchdb-mover
couchdb-mover --from=dbName1 --to=dbName2

Ну, и как это положено, исходники на гитхабе | пакет на npmjs.org.

[↵] открыть пост node-couchdb-mover.md
-rw-r--r-- 1.2K 3 июля 2014 · 770754A · ~1 мин

Как узнать ретина дисплей или нет?

retina баловство полезное

Как узнать ретина дисплей или нет?

Ко мне в блог много заходов из поисковиков по запросам вроде «Как определить дисплей retina». Попадают они ко мне на статью про Objective-C, но ищут они явно не код :) Запилил в итоге такую вот страничку, на которую надо просто зайти через браузер с вашего устройства. Если ретина - результат будет зелёным, как на скрине выше. Если не ретина - то красный, как на скрине ниже.

Как узнать ретина дисплей или нет?

Работает для iOS-устройств (iPhone, iPad, iPod) и Mac с экраном Retina. На экранах с высокой плотностью пикселей на дюйм тоже пишет, что retina :)

Адрес страницы: https://arm1.ru/retina/

[↵] открыть пост kak-uznat-retina-displej-ili-net.md
-rw-r--r-- 1.7K 28 марта 2012 · 64007C0 · ~1 мин

Скрипт для фиксирования блока при скролле

jQuery Sticky Scroller javascript скрипты полезное

Давно хотел такую штуку сделать, чтобы при скролле страницы какой-то блок скроллился вместе со страницей до определённого момента, а потом прилипал. Сегодня нашёл такой плагин под названием jQuery Sticky Scroller

Скачать его можно тут.

Подключается он довольно просто:

var scroller = new StickyScroller("#menu",
{
    start: 270,
    end: 50800,
    interval: 200,
    range: 100,
    margin: 0
});

Собственно, по названию параметра понятно, что когда скролл уходит за 270 пикселей от верхней границы страницы - элемент #menu фиксируется на странице, то есть получает свойство CSS position: fixed;. Параметр end отвечает за нижнюю границу отслеживания скролла, на случай, если фиксированным элемент должен быть не всегда. Параметр margin задаёт то - с каким отступом от верхней границы окна браузера будет находиться элемент.

У плагина есть также несколько публичных методов, описывать их смысла не вижу, описание есть на странице плагина.

[↵] открыть пост skript-dlya-fiksirovaniya-bloka-pri-skrolle.md
-rw-r--r-- 4.1K 27 дек. 2011 · 522B2DC · ~2 мин

Увеличение громкости iPhone 4

ios jailbreak iphone 4 полезное

Увеличение громкости iPhone 4

У меня iPhone 4 из Франции. В телефонах для продажи во Франции Apple обязали ограничить громкость звука в наушниках, мол, заботятся о своих гражданах и не хотят, чтобы они глохли. Мне, в условиях метро, громкости в итоге не хватает, к тому же наушники бывают разные, какие-то играют громче, у каких-то сопротивление другое и они играют тише.

В общем это ограничение можно обойти. Для этого нужно сделать Jailbreak, после чего получить доступ к файловой системе и изменить пару plist-файлов. Вариантов много - от установки какого-нибудь Терминала через Cydia, до монтирования телефона как раздела на компе. Мне больше нравится второй вариант - поставил Phone Disk - он подключил мой телефон как раздел, а дальше надо пошариться по файловой системе.

[↵] открыть пост uvelichenie-gromkosti-iphone-4.md
-rw-r--r-- 1.1K 5 дек. 2011 · 2A8503A · ~1 мин

Встраивание Facebook sdk в ios-приложение

objective-c json ios шпаргалки полезное

Шпаргалка. Инструкция по тому, где скачать и как встроить - в документации Facebook. Несмотря на то, что обновляли они проект на Github недавно (23 ноября на данный момент), в нагрузку идёт у них старая версия фреймворка для работы с JSON. А, т.к. в мой проект уже встроена более новая версия фреймворка приложение не компилилось.

Решение:

  1. после добавления SDK в проект удалить папку JSON из SDK Facebook;
  2. в файле FBRequest.m заменить строку #import "JSON.h" на #import "SBJson.h";
  3. в том же файле строку
    SBJSON *jsonParser = [[SBJSON new] autorelease]
    заменить на
    SBJsonParser *jsonParser = [[SBJsonParser new] autorelease]

Должно работать.

[↵] открыть пост vstraivanie-facebook-sdk-v-ios-prilozhenie.md
-rw-r--r-- 1.4K 22 авг. 2011 · 1F09394 · ~1 мин

Обрезание слэша в url с 301 редиректом

php seo полезное

А собственно почему бы и не повесить этот тут, потом будет легко найти, когда опять понадобится. Зачастую поисковики воспринимают страницы вида

arm1.ru/blog/yandex-upal-panika-v-twitter

и

arm1.ru/blog/yandex-upal-panika-v-twitter/

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

<?php

# убираем QUERY_STRING строку из REQUEST_URI
$uri = $_SERVER['REQUEST_URI'];
if ( false === empty( $_SERVER['QUERY_STRING'] ) )
    $uri = str_replace( '?' . $_SERVER['QUERY_STRING'], '', $uri );
			
# переадресация через 301 редирект при присутствии слэша в конце $uri
if ( substr( $uri, -1 ) == '/' && strlen( $uri ) > 1 ) {
    $queryString = '';
    if ( false === empty( $_SERVER['QUERY_STRING'] ) )
        $queryString = '?' . $_SERVER['QUERY_STRING'];
 
    header( 'Location: ' . substr( $uri, 0, -1 ) . $queryString, true, 301 );
    exit;
}
[↵] открыть пост obrezanie-slesha-v-url-s-301-redirectom.md
-rw-r--r-- 2.8K 14 июля 2011 · 35BB245 · ~2 мин

Пара настроек FCKEditor

fckeditor полезное

Пара настроек FCKEditor

В качестве шпаргалки - чтобы быстро настроить FCKeditor. Хоть он уже и устарел и разработчики делают CKEditor - но в нём нет бесплатного файлового менеджера, а в CKEditor - есть.

Это что-то вроде шпаргалки для быстрого подключения FCKEditor.

[↵] открыть пост para-nastroek-fckeditor.md
-rw-r--r-- 8.0K 13 июля 2011 · 7912FD1 · ~4 мин

Ресайз анимированных gif-изображений с помощью Imagick

php imagick programming скрипты полезное

По работе столкнулся с необходимостью обработки анимированных gif-аватарок. Исходные картинки могут быть любого размера, и их нужно уменьшить до нужного размера с кадрированием до квадрата. Под катом - как мы это решали.

[↵] открыть пост resize-animirovannih-gif-izobrazheniy-s-imagick.md
-rw-r--r-- 725B 13 мая 2011 · 2C445DF · ~1 мин

Простой онлайн TimeStamp конвертер

php javascript timestamp unix скрипты полезное

По работе периодически приходится смотреть какие-то данные из базы. Время мы в основном храним в TimeStamp (количество секунд, прошедших с сотворения мира Unix, то есть 1 января 1970 года).

По цифре вроде 1305233826 хрен поймёшь, что это за дата. Каждый раз писать в каком-нибудь скрипте конвертирование неудобно, поэтому сделал онлайн-конвертер. Показывает время в удобочитаемом виде.

Enjoy. Online TimeStamp Converter

[↵] открыть пост prostoy-online-timestamp-converter.md
makoni@arm1:~/blog$ cd .. // ↵ ко всем постам