• Google docs. "Проверка данных...". Правила: "Значение из списка". Как брать значения из списка другой таблицы?

    dohlik
    @dohlik
    Сперва сделать ImportRange из Table2 в Table1, затем использовать его для валидации. Только так.
    Ответ написан
    Комментировать
  • Как правильно передать параметры через Ajax в action Kohana?

    dohlik
    @dohlik
    Вы путаете параметры роутера с параметрами query string ($_GET), которые вообще в роутинге не указываются и могут быть любыми или вообще отсутствовать. В данном конкретном случае id в роуте не нужен. А параметры lines и pages надо извлекать из запроса через $this->request->query(), как-то так:

    $data = array(
            'lines'    => (int)$this->request->query('lines') ?: 10,
            'pages'  => max(1, (int)$this->request->query('pages')),
        );

    Хотя я бы использовал более общепринятые параметры типа offset/limit или page/perpage. Более понятные названия, имхо.
    Ответ написан
  • Где можно получить доступ к базе бти?

    dohlik
    @dohlik
    Не знаю, что именно Вы хотите проверять, но возможно подойдет https://www.reformagkh.ru/. Там можно просто парсить информацию зданий или запросить доступ к их API.
    Ответ написан
  • Каким образом отобразить только тело документа Google Spreadsheets?

    dohlik
    @dohlik
    Файл - опубликовать в Интернете. Выбираете вкладку "встроить" и в выпадающем списке - название нужной вкладки. На выходе получаете код iframe, который можно встроить на страницу. Если выбрать вкладку "ссылка", то будет получена ссылка на документ, которую каждый может открыть в браузере. Безо всяких панелей инструментов
    Ответ написан
  • Как у Вас устроено командное хранение паролей?

    dohlik
    @dohlik
    Чем не устраивает гуглдокс/гуглдиск? Создайте папку, расшарьте ее на команду. Внутри храните файлы с паролями и прочей инфой, например с разбивкой по проектам. Каждому файлу на диске можно задавать свои права + использовать google groups для более удобного управления доступами.

    Если страшно за взлом гуглоаккаунта, то можно включить двухфакторную аутентификацию.
    Ответ написан
    Комментировать
  • Как группировать массив по имени?

    dohlik
    @dohlik
    array_combine(
        array_map($array, function($a) {return $a['name'];}), 
        $array
    );


    array_combine() создает массив из переданных аргументов (первый - массив ключей, второй - значения). для извлечения ключей используем array_map.

    Естественно, это ооочень упрощенный вариант, основанный на предположении, что всегда есть ключ name, а значения в нем уникальны.
    Ответ написан
    1 комментарий
  • Как оптимизировать сервер под 5 миллионов хитов?

    dohlik
    @dohlik
    Проблема в том, что рано или поздно Вы все равно упретесь в невозможность увеличивать количество воркеров. Разделите непосредственно сбор статистики и сохранение ее в относительно медленной БД. То есть переход по УРЛу делает только быструю работу (увеличить счетчик в условном редисе/мемкеше, записать что-то в сессию) и освобождает воркер для обслуживания следующего запроса, а сохранение в базу делают отдельные воркеры с некоторой периодичностью.

    Можно посмотреть в сторону связки Nginx+Lua, их возможностей может хватить для "быстрой" части.
    Ответ написан
    1 комментарий
  • Как лучше всего проверить наличие элемента в массиве?

    dohlik
    @dohlik
    $arr1 = mysql_fetch_assoc($ssql1);


    Замените на

    $arr1[] = mysql_fetch_assoc($ssql1);

    Аналогично для arr2. Вообще я бы для чтения подобных списков делал немного по-другому:

    while($row = mysql_fetch_array($s)) {
        $arr[$row['name']] = $row; 
    }


    Это позволит дальше делать проверку через isset($arr[$author]). Естественно, для этого name должно быть уникальным.
    Ответ написан
  • [ORM] Как соеденить таблицы users и types по has_many?

    dohlik
    @dohlik
    Обратите внимание, что весь функционал модели Model_User на самом деле расположен в Model_Auth_User, а в Model_User только наследование. Скопируйте Model_User в application и там добавляйте нужные связи, методы и тд. Одно НО - если Вы добавляете свойство $_has_many в Model_User, то оно перезатрет родительское. Выходов два:

    1. Скопировать свойства из Model_Auth_User и добавить еще свое. Это особенность Каскадной Файловой Системы Kohana, почитать можно в официальной доке или тут (или еще где-то в интернете, на русском про основы Коханы уже все давно разжевано).
    2. Свойства можно добавлять динамически, посмотрите на метод _initialize(), который вызывается для любой модели ORM. В Вашем случае будет что-то вроде:

    protected function _initialize()
    {
        // сперва пусть отработают родители
        parent::_initialize();
        $this->_has_many['types'] = array('model' => 'Type','through' => 'types_users');
    }
    Ответ написан
    Комментировать
  • Валидация для формы без перезагрузки страницы, как подключить проверку капчи?

    dohlik
    @dohlik
    1. Возвращаете обратно экшен, в котором проходила валидация и сохранение комментария (с перезагрузкой страницы). В нем будет проверка как данных собственно комментария, так и капчи.
    2. Добавляете проверку на is_ajax(), в зависимости от результата отдаете редирект или HTML-код вьюшки (для не-аякс запросов), либо JSON или еще что-то (можно смотреть на заголовки, можно не париться и отдавать всегда json). В json'е будет результат операции ('result' => true, к примеру) и список ошибок валидации ('errors' => {'field' : 'error', ...}. Если сохранение успешно, то отдавать id комментария или еще что-то, смотря что планируете делать в случае успеха.
    3. При сабмите формы отправляете ajax-запрос с данными (+капча). Если есть ошибки (смотрим на result, на errors и тд), то выводим их на форму.

    Соответственно, у пользователей с отключенным js добавление комментариев работает с перезагрузкой страницы, а для остальных есть ajax. При этом экшен один на всех.

    В любом случае, никогда не полагайтесь только на ClientSide-валидацию. На ServerSide (то есть в пхп) в любом случае все эти проверки делать надо будет.
    Ответ написан
  • Как сделать ссылку в условном форматировании в Таблицах Google Docs на предыдущую ячейку?

    dohlik
    @dohlik
    1. Выбираете диапазон ячеек, для которых форматирование будет применено. Например, B2:C (в общем случае возьмем не один столбец, а несколько).
    2. Формула описывает правило для верхней левой ячейки, в данном случае это будет B2. Выбираете тип проверки "Ваша формула" в выпадающем списке и пишете формулу:

    =2:2>3:3

    3. Очевидно, что соответствие такому условию должно выделяться зеленым цветом. Эта формула будет применяться ко всем ячейкам диапазона, при перемещении к нижним рядам автоматически увеличивая номера (так, для пятого ряда она бы выглядела как =5:5>6:6).
    4. Сохраняете правило, по аналогии добавляете "красное" правило.

    В общем случае достаточно писать правило как если бы в диапазоне была бы одна ячейка:

    =B2>B3

    PS. Чтобы не следить за выпавшими из диапазона условного форматирования ячейками, я просто оставляю верхний ряд пустым, а новые вставляю сразу после него. Диапазон захватывает этот пустой ряд, поэтому вставка новой строки в нем автоматически распространяет действие условного форматирования на него, без лишних телодвижений. Естественно, в таком случае формулу надо будет немного усложнить, чтоб отсеять пустой ряд и зря его не подсвечивать :)
    Ответ написан
    2 комментария
  • Kohana - как происходит авторизация из одной локальной сети?

    dohlik
    @dohlik
    А тупо сессии проверить? Ибо это больше на сессии похоже, чем на куки. Закиньте одному пользователю в сессию что-нить, появится у второго? Ну или поменяйте драйвер сессии.
    Ответ написан
  • Какой путь выбрать для оптимизации ооочень большой страницы с кучей инпутов?

    dohlik
    @dohlik
    Наверняка некоторые элементы повторяются на странице для каждой строки (я про эти пять инпутов). Почему бы не вынести их в отдельный Popup, а данные для отдельных элементов не хранить в JS или в hidden? И отдавать данные JSON'ом будет проще…
    Ответ написан
    Комментировать
  • Вопрос молодым родителям - приложение для iPhone для двухлетки

    dohlik
    @dohlik
    Добавлю отсебятины — посоветуйте и для iPhone 2G, если есть что-нибудь интересное. Проблема в старых прошивках, не все игрушки пойдут на «трешке». Talking Tom Cat требует 4.1, а вот «птички» идут.
    Ответ написан
    Комментировать
  • Какой выбрать лёгкий ноутбук для web-разработчика?

    dohlik
    @dohlik
    > нужен внешний HDD для торрентов и фото-коллекций
    > разрешение 1378x768 (в идеале хотелось бы FullHD или 1600х900)
    > нет HDMI выхода

    Т.е. Вы его еще и как торрент-качалку + медиасервер хотите задействовать? Лучше купите отдельный NAS под это дело. Заодно и требования к объемам винта уменьшатся. Глядишь, и 128Гб SSD хватит (и HDD может не понадобиться).
    Ответ написан
    Комментировать
  • Какой фрэймворк учить и по каким мануалам?

    dohlik
    @dohlik
    Я вовсю пропагандирую Kohana )) ИМХО, фигня насчет документации.

    Официальный мануал на английском
    Неофициальная вики (сборник рецептов)
    Отличный форум (в том числе и русская ветка)
    Куча русских мануалов (kohana3.ru, kohanaframework.su, 101.brotkin.ru) и блогов

    По поводу рефакторинга — ну он же в правильном направлении идет )) Тем более, что последняя ветка (3.3, еще пока RC) ИМХО достаточно красиво выглядит, чтобы этот самый рефакторинг на ней закончить.
    Ответ написан
    Комментировать
  • Проблемы с авторизацией на Хабрахабре

    dohlik
    @dohlik
    FF11. Слетела авторизация. После ввода логина/пароля редирект на главную, но якобы под гостем. Обновил страницу — все ок.

    Правда, подобные вещи бывали и раньше.
    Ответ написан
    Комментировать
  • Типизированные Request и Response

    dohlik
    @dohlik
    ИМХО, задача реквеста — принять входящие данные (POST/GET/COOKIE и прочие заголовки), инициировать запуск нужного метода контроллера, и вернуть реквест с результатом. Соответственно, вся логика (валидация, запросы к БД и т.д.) должна лежать в контроллере, но не запросе. Request — служебный класс, и его имеет смысл разбивать на подклассы, если возможны различные варианты обработки входящего запроса, но никак не подстраиваться под бизнес-логику.
    Ответ написан
    1 комментарий
  • [решен] Kohana 3 выполнение кода при завершении работы?

    dohlik
    @dohlik
    Могу предложить добавить вызов обработчика в файл index.php, сразу после Request::factory()->..;
    Как раз то, что нужно — контроллер отработал, фреймворк еще не закрылся.
    Ответ написан
  • PHP: постинг в твиттер, вычисление подписи?

    dohlik
    @dohlik
    Штатные библиотеки Kohana пробовали? Тот же OAuth должен работать.
    Ответ написан
    Комментировать