• Отличия в адаптации сайта и AJAX веб-приложения для iOS
    0
    Я понимаю, что поднимаю демона из могилы, но у меня есть несколько дополнений, которые я прочувствовал, когда делал Web App для KiDROM.RU:

    1) запоминание текущего пути — это хорошо, но плохо работает со всем, что идёт не через ссылку (формы, например). В итоге: форму засабмитил, CurrentLocation != StoredLocation — редиректит на StoredLocation, который неправильный… В общем, было бы круто иметь базовый URL Web App (который был при сохранении), но я не знаю, как его получить, поэтому редирекчу на StoredLocation тогда и только тогда, когда CurrentLocation=/ и отличается от StoredLocation (как бы предполагая, но Web App сохраняют с корневой страницы). Если кто знает, как получить URL Web App — напишите!

    2) то ли в PHP, то ли в Yii с какого-то момента для сессионных кук форcировали httpOnly=true — это значит, что они больше не видны в document.cookie. Тут варианта два: или в конфигах прописывать httpOnly=false, или делать свой get/set для кук и теребить их через ajax.

    2.1) Yii при авторизации меняет SID — это нормально, такие моменты нужно учесть, чтобы сохранить возможность авторизироваться, и не сбрасывать новый правильный SID на тот, что в localStorage.

    3) в алгоритме какая-то непонятная логика: если кука есть, сохраняем её в localStorage, если нет, только тогда ставим куку из LS. Суть в том, что при сбросе сессии (выключил/включил Web App) сразу будет новый SID, а в LS хранится старый SID. Кука есть = сохранить в LS новый SID, то есть никакого толка вообще. Короче, «else» лишний в коде.

    4) ещё если делать для всех ссылок window.location = this.href, то будет выкидывать в Safari для энкоров на странице (href="#someID"), для таких случаев надо переделывать на window.location.hash = this.href.replace('#', '');

    В целом, я пришёл к тому, что надо бы сделать со стороны сервера страничку, куда аяксом передавать SID из localStorage: если они совпадают, то вернуть false, если изменился, то вернуть новое значение в зависимости от того, какое из них (кука или localStorage) нужно использовать, и сохранить его в LS. При таком подходе можно сохранить httpOnly=true, и вообще не нужно ничего считывать из кук в JS, плюс получаем возможность контролировать какой именно SID поддерживать и сохранять везде (как раз тот случай, когда SID меняется правомерно, и отследить такие моменты со стороны сервера проще, чем из JS). Но, это задача на следующую неделю уже…
  • Автоматизация монтирования samba-разделов в Mac OS
    0
  • Linux Mint 17 и DLNA
    0
    Вот я бы тоже первым шагом пошёл бы искать PPA…
  • Автоматизация монтирования samba-разделов в Mac OS
    0
    А у меня как-то само всё работает. TimeMachine по AFP сама подключается только тогда, когда может диск найти (есть диск — бекапится, нет диска — сидит молчит, только иконкой показывает, что не удалось бекапнуться). А шары подключаются по CIFS: при доступе к шаре (например, если открыть по закладке в Finder) оно само подключается. Проблема только с iTunes — в настройках музыка (да и вообще вся медиатека) завязана на шару, и вот при включении айТунец не вызывает автоподключение шары, а в панике переключает медиатеку на дефолтную папку.
  • Компания, создавшая S.T.A.L.K.E.R., прекратила свое существование
    0
    К чёрту «Сталкера», но если я не ошибаюсь, они же делали «Казаков» — вот это обидно.
  • Обзор видеорегистратора Каркам Q2
    0
    Вы так говорите, как будто это что-то плохое. :)
  • Обзор видеорегистратора Каркам Q2
  • Обзор видеорегистратора Каркам Q2
    0
    Приклейте намертво, и всё… :)
  • Обзор видеорегистратора Каркам Q2
    +1
    А я заказал в Китае за $35 (включая EMS доставку).
    Вот такой: 720p, 140º и в остальном всё то же самое, кроме наличия чехольчика (кстати, надо намекнуть поставщику, что чехольчик был бы приятным и отличительным бонусом).
    Жду любимую «Почту России», когда доставят…

    Увидел недавно, как наши предприниматели точно такие же через местный (дефолт сити) интернет-магазин по 5000 рублей продавали, при этом представляя его как «сертифицированное оборудование» и «собственное производство».
  • SVN → Подключение внешних библиотек
    0
    Как пожелаете.
  • Конференция системных администраторов «Стальной Бубен 3» (трейлер)
    0
    То, что на картинках — это не бубен! Это называется тамбурин.
    На бубен должна быть натянута ударная поверхность (чаще всего кожа с жопы дракона), чтобы в него можно было бить — отсюда и выражение «бить в бубен».
  • Делаем шифрование в Dropbox Mac (совместимо с Linux)
    0
    Плагинчик-то, походу, старенький совсем, не понимает ключи в .encfs6.xml (новая версия), а только хавает .encfs5 (старая версия). Соответственно, если вы используете последний EncFS (1.7.4), тогда плагин к MacFusion не сможет открывать созданное им (последним encfs) крипто-хранилище. Тогда надо даунгрейднуть EncFS, создать крипто-хранилище старой версии, а потом апгрейднуть обратно — новые версии отлично открывают старые хранилища.

    Я (до описанных манипуляций) использовал свежие версии из портов. Скачал и поставил сверху всё ровно так, как описано в статье (старые версии). Создал хранилище. Потом из портов поставил новые версии (надо force activate macfuse сделать перед install encfs). И теперь у меня полная совместимость и идиллия: и плагин к MacFusion может открыть хранилище, и используется новая версия EncFS, аналогичная той, что в Linux («гарантия совместимости»).
  • SVN → Подключение внешних библиотек
    +1
    $ svn help | grep prop
       propdel (pdel, pd)
       propedit (pedit, pe)
       propget (pget, pg)
       proplist (plist, pl)
       propset (pset, ps)
    
    $ svn help propedit
    $ svn help propset
  • SVN → Подключение внешних библиотек
    0
    Перенёс топик в блог «Разработка» — так вышло…
  • SVN → Подключение внешних библиотек
    +1
    Картинки перезалил.
    Но, подозреваю, что за давностью лет этот небольшой мануальчик уже утратил свою актуальность…
  • Ubuntu «Lucid Lynx» 10.04 LTS
    +2
    Файлы появились на releases.ubuntu.com.

    Вот мд5ки:

    a54366aa72d6b576ee8fc0215f8a13b9 *ubuntu-10.04-alternate-amd64.iso
    5b2dadacfd692b4f2d5c7cf034539262 *ubuntu-10.04-alternate-i386.iso
    3e0f72becd63cad79bf784ac2b34b448 *ubuntu-10.04-desktop-amd64.iso
    d044a2a0c8103fc3e5b7e18b0f7de1c8 *ubuntu-10.04-desktop-i386.iso
    0b0e0d36050d9980ec995262eb9f2e6b *ubuntu-10.04-netbook-armel+dove.img
    9e0d6ac7b69bb7912d49369a6807e39d *ubuntu-10.04-netbook-armel+imx51.img
    712277c7868ab374c4d3c73cff1d95cb *ubuntu-10.04-netbook-i386.iso
    8ee25c78f4c66610b6872a05ee9ad81b *ubuntu-10.04-server-amd64.iso
    15342636441181f7a19c65984b44e24c *ubuntu-10.04-server-i386.iso
    e81f931b1de017520f6d4aa4f78c5c8b *wubi.exe

    Немного не сошлось… (:
  • Не все лейблы одинаково полезны
    0
    Обычный стандартный авторский договор. Скорее всего из какого-нибудь «Консультанта+» или подобного и чуть-чуть подправленный «под себя».

    Такие договоры используется для «заказа» произведений, а не для организации взаимоотношений между автором и лейблом.
    То есть, например, если заведение «Бар сук», и владелец очень хочет, чтобы каждый день в 07:34 утра в помещении звучала их песня. Он нанимает музыкантов, которые пишут ему эту самую песню. И они подписывают именно этот самый договор, только обычно там не «50%», а какая-то одноразовая фиксированная сумма. Далее подписывается акт сдачи-приёмки и всё…

    При работе же музыкантов с лейблом чаще всего используются договора отчуждения авторских и/или смежных прав. Он сложнее и «грамотнее» что ли.
  • Прячемся от Anti-P2P организаций
    +1
    Непонятно, что это за «чёрный список», и что туда входит.
    Сомневаюсь, что там «Anti-P2P организации»…

    Хотя, всякое бывает…
    Может быть кто подскажет, откуда Transmission берёт этот список.
  • Защищаем SSH от брутфорса на любом порту
    0
    Может быть я обделён врождённой паранойей, но мне кажется, что лучшая защита от брутфорса — это длинный и сложный пароль. А если пароль утёк, то никакие нестандартные порты и задержки не помогут… Храните пароли в надёжном месте, и всё будет хорошо (:
  • Задача на сортировку
    0
    Скорее нет, потому что в данном случае такой составной индекс замедлит условие `date` < $date, которое будет очень быстро работать при индексе KEY `date` (`date`) за счёт «отбрасывания» из индекса всего, что >= $date.

    В данном конкретном примере лучше использовать два индекса. Но, спасибо вам за то, что акцентировали на этом внимание — это действительно важно!
  • Задача на сортировку
    0
    | 4 | 2010-03-01 12:00:00 | Test 3 |
    | 2 | 2010-03-01 12:00:00 | Test 2 |


    SELECT `id` FROM `test` WHERE `date` <= '2010-03-01 12:00:00' AND `id` != 4 ORDER BY `date` DESC, `id` DESC LIMIT 1
    Вернет: 2

    SELECT `id` FROM `test` WHERE `date` <= '2010-03-01 12:00:00' AND `id` != 2 ORDER BY `date` DESC, `id` DESC LIMIT 1
    Вернет: 4

    Вот и закольцевалось…

    Если вы хотите `date` <= $date AND `id` < $id сделать (как в первом комментарии этой ветки), тогда вы не сможете получить предыдущую запись по дате, у которой ID больше текущего.

    В моей тестовой таблице этого случая для предыдущей записи нет, но если вы попробуете таким запросом найти следующую запись: `date` >= $date AND `id` > $id, тогда 3 никогда не выпадет (по дате она после 4, но id у нее не > 4).

    WHERE `date` < $date or (`date` = $date and `id` < $id) остается правильным решением, учитывающим это.
  • Задача на сортировку
    0
    CREATE TABLE `test` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `date` datetime NOT NULL,
    `content` varchar(255) NOT NULL,
    PRIMARY KEY (`id`),
    KEY `date` (`date`)
    ) ENGINE=MyISAM;
  • Задача на сортировку
    0
    Откуда 2010-02-28?
    Все даты: 2010-03-01, отличаются только часом.
  • Задача на сортировку
    0
    Да, тут я сам спалился, попытавшись расшифровать своё же сложное условие задачи (:
  • Задача на сортировку
    0
    Наверное, не так поняли.
    При совпадении дат `date` DESC откидывается, и сортируется по `id` DESC.
    В данном случае будет возвращаться больший из последовательности ID, отличный от текущего. То есть, для 2 мы получим 4, а для 4 получим 2 — зациклились.
  • Задача на сортировку
    0
    Да! Молодец!
    У меня намного сложнее решение, но в принципе, подход примерно такой же.
    Спасибо за решение, оно действительно изящное и работает!
  • Задача на сортировку
    0
    Я очень долго бился над формулировкой задачи. Видимо, недостаточно.

    Попробую другими словами: есть таблица с записями, нужно для каждой записи таблицы получить предыдущую запись по следующим условиям:
    1) дата предыдущей записи меньше или равна текущей записи
    2) если дата равна, тогда предыдущая запись определяется последовательностью ID, например, если для записей 123, 456, 789 даты равны, то для 456 предыдущей будет 123, и т.д.

    В приведенной в задаче тестовой таблице правильная последовательность предыдущих ID от 5 будет следующая: 5, 3, 4, 2, 1
  • Задача на сортировку
    0
    Нет. Такой запрос для 3 записи вернет 2, а должен вернуть 4.
    Затем для 4 он вернет 2, а для 2 вернет 4 — зациклился…
  • Задача на сортировку
    0
    Опишите отдельный запрос с «полной сортировкой».
    Если я правильно понимаю, то вы хотите выбрать подзапросом все записи, подходящие под условия `date` <= $date AND `id` != $id, а основным запросом отсеять те, которые не подходят по условию совпадающих дат? Наверное, так тоже можно сделать, но тут всё-таки получится два запроса (точнее запрос с подзапросом), а это не самое лучшее решение — можно одним запросом однозначно определить.
  • Задача на сортировку
    0
    В таком запросе вы не получите предыдущую запись, если даты не совпадают, а ID предыдущей больше, чем текущей. Такое возможно по условиям задачи.
  • Задача на сортировку
    0
    Нужно найти предыдущую запись по дате, но если даты совпадают, тогда предыдущую запись нужно определять по ID.

    Посмотрите пример, там две записи (2 и 4) с одинаковыми датами. Нужно сделать так, чтобы для 4 возвращалась 2, а для 2 возвращалась 1. Но при этом нужно, чтобы работала нормальная сортировка по дате, если записей с совпадающими датами нет.

    Реально закручено всё, но на примере проще всего понять.
  • Постмортем iPhone игры Finger Physics
    +1
    Вот ещё, что я хотел спросить, чего не указано в тексте выше.
    Наверняка, разработчики смотрели с радостью на iPad из-за его размеров. Как ты сказал выше, фигуры отрисовываются программно, то есть, для миграции на iPad вам нужно только перерисовать фоны?

    Лично я, играя в Finger Physics на iPhone, иногда сильно бесился из-за того, что не мог попасть пальцем в нужное место. А на iPad, вроде как, это проблема должна быть полностью решена.
  • Постмортем iPhone игры Finger Physics
    +4
    Отличный постмортем!
    Прямо-таки захотелось написать что-нибудь под iPhone / iPod Touch.
  • Легким движением руки, плеер превращается…
    0
    Ваша правда.
  • Легким движением руки, плеер превращается…
    –1
    На картинке вижу USB вход у Lexicon и не вижу такого у Oppo.
    Вполне тянет на $3k… (:
  • MyShows.ru — сериалы, которые я смотрю
    0
    Мечтаю, конечно, но если бы вы прикрутили отслеживание новых серий на популярных российских трекерах, было бы неимоверно круто!
  • Реабилитации МТС пост
    0
    Интересно, а если у меня включена на яйцах переадресация, она считается услугой связи?
  • Дример — неконтролируемый поток сновидений
    –1
    «создает впечатление» — правильное выражение, потому что я такого смысла не вкладывал в эту фразу. А уж заставить всех понимать то или иное выражение одинаково — вне моих сил, простите.
  • Дример — неконтролируемый поток сновидений
    0
    Спасибо, идеи неплохие!

    Планирую добавить теги (пока только непонятно, в каком виде), они помогут структурировать и тематику, и позитив/негатив.
    По поводу возможности закрепить за собой свои сны, я уже писал выше. Таким образом можно будет прослеживать динамику и периоды.
    Ну а для глобальной динамики подождем момента, когда хотя бы 1% людей планеты напишет свои сны (: А там, видно будет…
  • Дример — неконтролируемый поток сновидений
    0
    На вкус и цвет колбаса бывает разная…
    Сравните формы для добавления сна там и тут.
    Я лично за простоту!