Показаны сообщения с ярлыком Программистское. Показать все сообщения
Показаны сообщения с ярлыком Программистское. Показать все сообщения

четверг, 13 марта 2014 г.

json_encode with array_diff будьте осторожны

Столкнулся с проблемой что json_encode вместо массива [] почему то начал создавать объект, хотя я передаю в метод массив. Перед тем как передавать массив я использовал array_diff для того, что б отфильтровать некоторые элементы. В мануале почему-то это не описано, но оказывается при отборе элементов из массива1 функция сохраняет ключи массива. Причем интересно, если ключи идут по порядку нчиная с 0, то json_encode кодирует нормально, если ключи содержат промежуток, то уже кодирует как объект.

Примеры, что б проще понять:


пятница, 31 января 2014 г.

Куки в Zend Framework, setcookie и header('Set-Cookie: ');

По старинке для уставновки cookie всегда пользовался setcookie, но так как сейчас использую Zend Framework 1.12 то решил воспользоваться его методами. А именно так как они рекомендуют в мануале:

  1. $this->getResponse()->setRawHeader(new Zend_Http_Header_SetCookie(
  2.     'foo''bar'NULL'/''example.com'falsetrue
  3. ));

Все бы ничего, но позже у меня возникла ошибка и только после действительного долгого поиска я обнаружил что проблема в том, что такой метод отправки cookie перезатирает все остальные куки которые уже установила страница. Дальше я нарыл, что метод setRawHeader использует встроенную функцию php - header для установки cookie:

header('Set-Cookie:  ...');

И собственно эта функция и затирает все что уже было отослано.

Погуглив я нашел, что я не один - http://stackoverflow.com/questions/5499476/is-it-ok-to-send-cookie-headers-directly-with-header-calls (см после: EDIT: AN IMPORTANT NOTICE)

После этого пришлось вернуть код обратно к setcookie.

Но меня мучает вопрос - Что я упускаю в Zend Framework? Неужели Zend не знает об этом?

вторник, 19 ноября 2013 г.

Подключение внешнего диска с ext2/ext3 (Linux) файловой системой на MacOSX

В интернете достаточно много информации на эту тему, но она или частичная или частично устарелая. Пишу свой опыт акутальный на сегодня 19.11.2013.

Есть достаточное количество платных программ для этой задачи, но есть и бесплатный путь. Для подключения диска вам понадобятся 2 программы. Одна программа это эмулятор файловых систем с помощью которой вы можете подключать к MacOSX сторонние файловые системы - OSX Fuse, вторая же - непосредственно модуль для работы с ext2/ext3 (чтение/запись) - fuse-ext2.

Прямые ссылки для скачивания:
http://sourceforge.net/projects/osxfuse/files/latest/download
http://sourceforge.net/projects/fuse-ext2/files/latest/download

Сначала устанавливаете osxfuse. Тут очень важно обратить внимание, что osxfuse это текущий актуальный проект, а сам модуль fuse-ext был разработан для предшественника - Mac Fuse. Именно поэтому при установке osxfuse нужно выбрать пункт установки - MacFUSE compatibility layer. Если этот пункт не выбрать fuse-ext2 работать не будет.

После установки osxfuse устанавливаете fuse-ext2. По идее ваша система теперь сама должна уметь монтировать устройства с ext2/ext3 разделами. Если все такие устроуство не монтируется само - попробуйте примонтировать его в ручную: создать точку монтирования (папку) и замаунтить:


Обратите внимание на disk1s1 - вам возможно понадобится сюда вписать нечто другое. Какое конкретное имя вписывать вы можете посмотреть в Disk Utility.

После этого в Finder вы должны увидеть свой диск.

Монтируем как read/write

У утилиты fuse-ext2 есть дополнительный набор параметров которым вы можете задать режим запись/чтение. Если вы хотите что б у вас всегда монтировались все внешние накопители как запись/чтение вам нужно подправить файл  

sudo vim /System/Library/Filesystems/fuse-ext2.fs/fuse-ext2.util

Около 207 строки должна быть строчка вроде:

OPTIONS="auto_xattr,defer_permissions" 

Закоментируйте ее и добавьте:

# OPTIONS="auto_xattr,defer_permissions"
OPTIONS="auto_xattr,defer_permissions,rw+" 


После этого все ваши внешние накопители с ext2/ext3 должны подключаться в режиме чтение/запись.

Успехов!

вторник, 15 октября 2013 г.

Интеграция Composer в PHPStorm, папки библиотек PHPStorm

Проблема: Некоторе папки в проекте PHPStorm считает как библиотеки, и соответственно не индексируются, игнорируются при поиске и т.д. Так же в настройках проекта изменения типа этих папок не сохраняется.

Причина: Собственно проблема возникла как раз из-за не до конца корректного использования Composer. В файле настроек composer.json была указана папка проекта  library как папка в которой стоит хранить библиотеки установленные с помощью Composer.

"vendor-dir": "library"
Получилось что в папке находились как собственные библиотеки так и 3d party. PHPStorm, будучи умным малым, автоматически считал конфигурацию composer и пометил все папки внутри указаннной как библиотеки.

Решение:
В версии 6.0.4  в которой работаю я мне пришлось убрать интеграцию проекта с composer. В более новых версиях PHPStorm появилась настройка "Add packages as libraries" для composer, которая говорит PHPStorm помечать или не помечать библиотеки, установленные composer, как "папки библиотек". Оба варианта все же оставляют возможность ошибочно внести в сторонюю библиотеку изменения. Мне кажется правильное решение будет разнести папки с собственными библиотеками и папку с библиотеками, установленными composer

среда, 28 августа 2013 г.

Тонкости отката ревизий используя SVN он же reverse merging

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

Пример:

svn merge -c-4,-5,-6 ˆ/trunk . - может привести к ошибкам
svn merge -c-6,-5,-4 ˆ/trunk . - ошибок быть не должно


вторник, 30 июля 2013 г.

Unicode to GSM / utf 8 to gsm / Кодировка из UTF 8 в GSM

Работая с смс сервисом столкнулся с проблемой, что хотя смс и короче чем 160 символов (англ. язык) сервис все равно разбивает СМС на части. Оказалось что смс сервисы работают с GSM кодировкой текста. Не вдаваясь в технические дебри GSM урезаный юникод. Немного погуглив нашел отличный класс, который и использовал на проекте.

https://github.com/onlinecity/php-smpp/blob/master/gsmencoder.class.php

понедельник, 13 мая 2013 г.

Правильный svn blame или как увидеть настоящего автора изменений в коде

Сегодня на работе меня попросили прокомментировать кусочек кода, который был якобы мой, но проверив в PHPStorm чей код - я обнаружил что не мой. И так как код действительно не мой, я решил исследовать этот вопрос и обнаружил что есть такой замечательный параметр в svn blame как "-g".

Разница будет видна если из ветки создавался бранч в котором делали изменения и реинтегрировали его обратно.

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

С ключом (svn blame -g) будет показываться настоящий автор и ревизия изменений которая была сделана в дочерней ветке..

четверг, 4 апреля 2013 г.

Новые методы для массивов в JavaScript 1.6|1.8 о которых я не знал

Сегодня с интересом обнаружил, что в JavaScript 1.6 появились достаточно интересные методы для работы с массивами. Что самое интересное в интернете не сразу нашел информацию по этому, на сайте w3schools это не описано почему то.
Собственно новые методы о которых я говорю: indexOflastIndexOfforEacheverysomefiltermapreduce(1.8), reduceRight(1.8).

Пройдясь по каждому все таки немного огорчился поддержкой этих методов Internet Explorer -  только начиная с 9-й версии браузер поддерживает эти штуки.


среда, 27 марта 2013 г.

Генератор md5 хешей для Ubuntu

В Ubuntu как такового генератора md5 для строки нет. Зато есть md5sum который генерит md5  для файлов (и как я понимаю из stdin тоже). Нашел и подправил небольшой скрипт, который можно добавить в .bash_aliases и имеем command line генератор md5 для строк.

Собственно скрипт:

Новая фича PhpStorm - REST Client plugin

В последней (6-й на данный момент времени) версии PhpStorm появился приятный плагин для тестирования REST сервисов. И мне как раз выпала задача связанная с сервисом.

Плагин достаточно простой и понятный, GET запрос работал на ура, а вот POST почему-то не проходил. Сам запрос шел, но данные не передавались.

Промучавшись несколько часов я понял в чем дело. Дело в том, что для POST запроса необходим заголовок Content-Type и в моем случае заголовок полностью должен был выглядеть: Content-Type: application/x-www-form-urlencoded. К сожалению плагин не дает возможности вписать полностью кастомный заголовок так как предлагает варианты на выбор, среди которых нет нужного. Ждем обновлений.

ЗЫ. Хотел добавить снимок экрана с выбором вариантов, но при открытом селект-боксе в убунту принтскрин не сработал :(


Популярные сообщения