Перестановка символьных значений местами без использования промежуточной переменной в PHP

PHP

Вводная


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

Есть несколько вариантов такой перестановки: «Перестановка через XOR», «Перестановка через арифметические вычитание и сложение», не буду приводить их здесь полностью, любопытные могут воспользоваться ссылкой в конце текста.

Собственно созерцание этих алгоритмов навело меня на мысль о возможности перестановки строковых (символьных) значений.

Читать дальше →

Chrome to phone — передача ссылок, номеров телефонов, текста на Android телефон из Google Chrome

У меня часто возникала потребность передать какую-нибудь небольшую, но сложную для ручного написания, информацию на телефон. Скажем с номерами телефонов проблем особо не возникало, в этом нет ничего сложного — набрать номер телефона, но скажем, необходимость перейти по ссылке, найденной на большом компьютере, вызывала небольшое количество проблем: приходилось либо повторять немного сокращенный путь поиска, либо вбивать ссылку вручную. Безусловно для этого могут быть и другие способы, но я бы скорей назвал их «граблями»

Недавно, я, после долгих сомнений, внезапно приобрел телефон, а точнее коммуникатор с установленной на ней ОС Android. И столь же внезапно была решена проблема передачи ссылок, текста, номеров и т. д. на телефон. Тут ещё стоит отметить, что я пользуюсь и являюсь большим поклонником браузера Google Chrome.

Случайно, то ли в новостях, то ли в Android Market, я наткнулся на приложение «Chrome to Phone», о нем и поведаю.

Читать дальше →

Добавление поля регистрации пользователя в Magento

Здравствуйте, уважаемые!
В этой статье я постараюсь дать описание процесса добавления нового поля в форму регистрации нового пользователя в Magento.
Существует платное решение, но если нужно всего лишь добавить одно поле, например компанию, или мобильный телефон, то покупать его несколько странно… Так что кому интересно — прошу под кат.
Читать дальше →

Простой рецепт устойчивой работы 3G под Linux

Используя 3G модем Huawei E160 (lsub пишет E620) под Linux столкнулся с проблемой неустойчивого подъема соединения после перезагрузки системы. В сообщениях wvdial проблема выглядела так:
--> Sending: ATDT*99#
--> Waiting for carrier.
--> Timed out while dialing.  Trying again.
С настройками wvdial по умолчанию — сообщения шли бесконечно. По всем симптомам — модем «зависал». Проблема решалась просто — ручным кратковременным вытаскиванием модема из USB разъема.
Но мне требовалось более надежное решение, независящее от моего присутствия. Сам рецепт подсказывал мне — надо научиться программно перезапускать модем.

Самый надежный и универсальный способ — управление питанием по шине USB. Выключить и включить питание модема и все — проблема будет решена.
К сожалению, USB-хабы, поддерживающие управление питанием весьма редки. А исследование устройства с точки зрения Linux указывало на отсутствие такой функции на шине USB модема. Поэтому, такой вариант пришлось исключить.

Второй вариант — попробовать AT командой поуправлять модемом. Хотя бы заставить переподключить к GSM/3G сети.
Пришлось заняться поиском документации по AT коммандам.
И они нашлись от первоисточника:
http://www.3gpp.org/ftp/Specs/html-info/27007.htm
Команда, решающая мою проблему выглядит так:
AT+CFUN=1,1
Команда заставляет модем перегрузиться и снова перейти в рабочий режим.
Модем действительно перегрузился, даже находясь в режиме передачи данных — команда была послана через ttyUSB2.
В консоли команда отправляется так:
echo -e "AT+CFUN=1,1\r\n" >/dev/ttyUSB0
Проблема теоретически решена. Осталось автоматизировать процесс.

В /etc/wvdial.conf добавил ограничение на количество попыток соединения:
Dial Attempts = 5
После пяти не успешных попыток дозвониться, wvdial завершит работу.

Теперь обертываю вызов wvdial в скрипт:
rm -f /var/log/3g.log
while true;
do
        echo "wvdial" >>/var/log/3g.log
        wvdial >&/var/log/wvdial.log
        echo "sleep 10" >>/var/log/3g.log
        sleep 10
        echo "reboot modem" >>/var/log/3g.log
        echo -e "AT+CFUN=1,1\r\n" >/dev/ttyUSB0
        echo "sleep 30" >>/var/log/3g.log
        sleep 30
done
Вызов скрипта добавляю в скрипт загрузки системы.
/var/log/wvdial.log — будут писаться события wvdial
/var/log/3g.log — события скрипта
30 секунд оказалось вполне достаточно для перезагрузки модема.

Желаю устойчивого connect'a!

ТРИЗ для дизайнера

Многим дизайнерам не совсем понятно, каким образом ТРИЗ (теория решения изобретательских задач) Генриха Альтшуллера можно применять в работе. Альтшуллер написал книгу «Найти идею: Введение в ТРИЗ». Но книга сложная, техническая и для дизайнера не адаптированная.

Я постарался адаптировать приёмы, законы и саму теорию именно для дизайнеров. Вы увидите как на основе законов развития технических системе можно прогнозировать развитие или проектировать интерфейсы. Почему интерфейсов? Всё просто, дизайнерская задача — это сути создание интерфейса, интерфейса системы.

Вся наша техническая цивилизация держится на изобретениях, сделанных методом проб и ошибок. Столетиями укоренялось представление, что других методов нет. Творчество воспринималось как решение задач путём перебора, в слепую. Как следствие, творчество ассоциировали с озарением, интуицией, счастливым случаем.

Альтшуллер проанализировал свыше 40 000 патентов и пришёл к выводу, что все технические системы (ТС) развиваются закономерно. Все ТС развиваются на основе законов, которые базируются все основные механизмы решения изобретательских задач.


Читать дальше →

Полноценный кроссдоменный AJAX для пользовательских скриптов Opera 10.6 на транспорте script

Недавно наткнулся на подобную заметку "Кросс-доменные запросы в Opera UserJS" — метод основан на window.name транспорте. Но в комментариях было замечание, что данная техника не работает в Opera 10.64, хотя работает в 10.10. Я детально не
Читать дальше →

Различие между «SYSDBA», «SYSOPER» и «DBA» в базе данных Oracle

Начинающий разработчики часто путают SYSDBA и DBA между собой. Поэтому столь необходимо осветить различие между ними. Вкратце, SYSDBA – это системная привилегия, а DBA – это роль.

Читать дальше →

ITOA Project – инструмент портирования iOS приложений на Android

Итак у Вас есть iPhone приложение, и Вы хотите портировать его на Android. Какие есть варианты? Если только Вы не писали приложение изначально на чём-нибудь кросс-платформенном (PhoneGap, etc), то вариант у Вас только один — всё переписать. На другом языке программирования, в другой среде, и с использованием другого API.



Или… использовать ITOA Project! Это плагин для XCode (плюс компилятор и набор библиотек), который позволит Вам перекомпилировать существующее iOS приложение под Android. Или разработать новое, но с использованием знакомой среды, языка и API.

Посмотрите на скриншот. Это простейший “Hello world”, без изменений компилирующийся и работающий на обеих платформах (код).


Читать дальше →

Обработка больших потоков трафика в Linux

В этой заметке я опишу методы увеличения производительности линуксового маршрутизатора. Для меня эта тема стала актуальна, когда проходящий сетевой трафик через один линуксовый маршрутизатор стал достаточно высоким (>150 Мбит/с, > 50 Kpps). Маршрутизатор помимо роутинга еще занимается шейпированием и выступает в качестве файрволла.

Читать дальше →

NodeJS vs PHP. Тест на производительность

Недавно очень заинтересовался NodeJS. Чем больше с ним разбирался – тем больше он мне нравился, вплоть до идеи «отныне пишу все на NodeJS». Но перед переходом мне стало интересно, на сколько серверный js выигрывает в производительности, в сравнении с php.


Читать дальше →