• Маршрутизация в kohana 3.1, как изменить имя url через маршрут?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Два способа:
    1. Статический (Фиксированный) роут.
    Route::set('news', 'akcii/asia-pacific-primring-grand-prix')
     ->defaults(array(
      'action' => 'views',
      'directory'  => 'index',
      'controller' => 'news',
     ));

    2. Условно динамический роут.
    Route::set('news', '<category>(/<page>)', array('category' => '(akcii|news|something)', 'page' => '(asia\-pacific\-primring\-grand\-prix|some\-other\-page)'))
     ->defaults(array(
      'action' => 'views',
      'directory'  => 'index',
      'controller' => 'news',
     ));


    Хотя у меня работает все и без маршрутизации, если его убрать из бутстрапа.

    А вот с этим могут быть проблемы. Проверьте:
    - Стоит ли кэширование роутов Коханы.
    - Модифицирован ли файл .htaccess
    Ответ написан
  • Важно ли уметь реализовывать структуры данных и алгоритмы?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Качество реализации структур данных и алгоритмов в проекте определяет:
    - Масштабируемость (scalability)
    - Поддерживаемость (maintainability)
    - Производительность (performance)

    Если вы штампуете сайты на вордпрессе или магазины на битриксе и джумле пачками никакого смысла заморачиваться о этих понятиях нет, но судя по вашим же задачам, у вас более масштабная направленность. В проектах с высокой посещаемостью, big data, или на поддержке без знания алгоритмов и структур данных не обойтись. В поддерживаемых high-load проектах с big data, алгоритмы и структуры данных это в принципе главное о чем вам нужно думать.
    Ответ написан
  • Системный скролл не работает в IE в компе, но работает в демо на GitHub. В чем причина?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Предположу. Если открываете страницу не через локальный HTTP сервер, а просто как файл (ссылка начинается file:///C:/...) то в этом случае IE блокирует javascript сценарии страницы из соображений безопасности. Ранее это регулировалось подтверждением запроса при открытии страницы, как сейчас не знаю.
    Ответ написан
  • Как перевести значение поля в XML при распарсивании в число Float?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Ну начать можно с того что не:
    (string)$badprice = $product->ЦенаЗаЕдиницу;
    А:
    $badprice = (string) $product->ЦенаЗаЕдиницу;
    Это первое что стоит попробовать.
    У вас достаточно странный заголовок вопроса. Потому, что вы похоже пытаетесь получить таки целое число. Иначе было бы 1.137 и:
    $priceExec = (float) str_replace(" ", ".", $badprice);

    P.s. Лучше при передаче числа в Query таки насильно приводить его к необходимому типу:
    $priceExec = (float) str_replace(" ", ".", $badprice);

    Получишь 1137.00. И ты и мускул будете чувствовать себя спокойнее. =))
    Ответ написан
  • Действительно ли использование селектора по ID - признак абсолютно плохого стиля?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Пробежал статью глазами. Мое мнение - весьма бредовая статья. Клинический перфекционизм в разработке + собственные вкусовые пристрастия выставлять как канон... В ID нет ничего ничего, ну абсолютно ничего плохого, особенно учитывая описанный вами подход.

    Хотя если очень захотеть то можно извращаться сколько угодно. В свое время пробовал построить веб страницу используя haml scss и модификатор строгости в CSS. Удалось полностью избавится и от классов и от ID. Вот только код был как Китайская стена длинной. Оно вам надо?

    Более того при разработке фронта (javascript) от ID полностью уйти невозможно. А в общем вы правильно описали принципы применения и того и другого, так что не смешивайте конвенции сжатого и читабельного кода с идеей божественного сечения. Главное пишите, пишите и еще раз пишите, стиль как свой так и "правильный" вырабатывается только с практикой. И не всегда "как надо" необходимо больше нежели "как хочется" ;)
    Ответ написан
  • Как сделать ЧПУ при помощи PHP?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Я сомневаюсь, но попробуйте после
    RewriteRule ^(.*)
    Добавить символ окончания строки $
    Таким образом:
    #...
    RewriteRule ^(.*)$ index.php?%{QUERY_STRING}
    #...
    Ответ написан
  • Как добавить полосу прокрутки при длинном кол-ве контента?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    CSS
    .element {
       overflow-y:scroll;//Лифт содержания по вертикали
       overflow-x:scroll;//Лифт содержания по горизонтали
       overflow:scroll;//Лифт содержания общий
    }


    htmlbook.ru/css/overflow
    Ответ написан
  • Как перехватить ответ из дочерней вкладки, находясь в родительской?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Ну вообще когда окно открыто через
    window.open();
    из него к инициатору открытия можно обратится через
    window.opener.document
    По крайней мере именно так делали за не имением html5 хранилища.
    Далее дело техники. Кастомный ивент на окне родителя. И его вызов в дочернем окне:
    Родительское окно (псевдокод, требует отладки)
    window.addEventListener('childWinResponse',function(e){
          console.log(e.detail.name);
    });

    Дочернее окно:
    var childWinResponse = new CustomEvent('childWinResponse',{
           'detail' : {
                 name : 'Derfirm'
           }
    }
    window.opener.dispatchEvent(childWinResponse);


    UPD: Более того Webkit браузеры устанавливают opener даже для окон открытых через
    <a href="... ." target="_blank">... .</a>

    javascript.ru/window.opener
    javascript.ru/forum/dom-window/13283-vernut-ehleme...
    www.codeproject.com/Articles/25388/Accessing-paren...
    Ответ написан
  • Почему столько front-end вакансий?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Я полагаю виной всему социальные явления.
    Достаточно часто программисты компилируемых языков проявляют фантастическое высокомерие и дискриминацию по отношению к Javascript, CSS (ну и к PHP). Сам не раз видел подобные шуточки. Почему? Потому что им приходится думать о гораздо большем количестве вещей, часто за те же деньги, потому что порог вхождения в их языки тяжелее, соответственно большие затраты по времени/деньгам на обучение. Вот и насадили мнение что выше описанное "не программирование вовсе".

    Но времена изменились. Борьба за количество пользователей перетекает в качество. Маркетологи с ужасом обнаружили что австралопитек на IE6, вопреки всем надеждам и ожиданиям не является хорошим покупателем. Просто потому что не разберется с интерфейсом магазина. А значит его можно смело отсеивать. Теперь маркетологи нацелились на "сознательных" пользователей, и знают как им прокусывать артерию. Почему я это описываю?

    Потому что появилась культура адекватного браузера. А значит можно начать "перекладывать" нагрузку с сервера на плечи юзера.

    А вот тут давайте умножим на дефицит специалистов которых вовремя "отговорили" избыток "Специалистов которые что-то, где-то видели". Что получим?

    Скажу больше. Видел Back-end программистов которые поджав хвост по требованию работодателя(который не хочет понимать/видеть/размениваться на разницу), скрипя зубами, учат fron-end, и не мало. Потому что Back-end на самом деле переполнен и чтобы занять достойное место надо быть действительно шикарным спецом.
    UPD: Увидел что @dedik даже лучше расписал то о чем я говорил ;)
    Ответ написан
  • Front-end

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Как правильно заметил в комментарии @GearHead выбор серверного языка зависит от поставленной задачи.
    Если необходима работа в реальном времени и сильное сцепление интерфейса с сервером (Открыть пользователю окошко с новыми данными при изменении их на сервере, используя направление от сервера к пользователю) то Node.js (оптимальный) и т.д. - RoR,Python,.Net (Кроме PHP, на нем можно это сделать но это будет противоестественным актом мазохизма, который рано или поздно приведет к "неврозам" и "психозам" сервера).

    Если предполагается высокая загруженность проекта и не "хранящий" а вычислительный функционал (имеется в виду не 2 * 2, а нечто большее) лучше выбирать из RoR,Python,.Net.

    Успешными примерами применения Node.js являются raindrop.io и tactoom.com
    Ответ написан
  • Что пишет front-end разработчик в трудовой, что бы не быть верстаком?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Если хотите на русском то тут (внезапно) вы относитесь к "Программист" / "Инженер-Программист" / "Старший инженер программист".

    Дальше можно действительно извращаться "UI Architect" / "(Junior|Middle||Senior) Software (Developer|Engineer|Architect)" / "(Junior|Middle||Senior) UI (Developer|Engineer|Architect)", "(Junior|Middle||Senior) Front-end (Developer|Engineer|Architect)". В общем полет для фантазии не ограничен. Англоязычные интерпретации тоже вписываются, хоть гос. значения не имеют но для любой адекватной компании понятны. Если компания "не может разобраться, что оно такое" то из нее стоит делать ноги.

    Кроме того...
    Лифт стоит делать если он хоть чуть чуть "заполнен". Пишите то что знаете. Потому что иначе при последующем трудоустройстве этот лифт рухнет вам на голову, когда с вас взыщут то что вы приукрасили.

    P.s. Jav-еры, .Net-еры, Python-щики и прочие могут плеваться грязью с пеной у рта, но:
    Если вы качественно владеете css3/html5 вы эмбрион программиста. Если вы владеете Javascript(даже jQuery) вы начинающий программист. Потому можно смело: "Программист" / "Инженер-Программист" / "Старший инженер программист". Разбираться чего именно, вопрос последующего трудоустройства и лежит на компании куда устраиваетесь
    Если с английским нормально: Job Titles in the Web...
    Ответ написан
  • Как реализован toster, raindrop, hantim?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Насчет PHP в Habrahabr и Тостере - правда. Стоит плагин который никогда еще не ошибался и он четко показывает что пыха. Можно проверить по спец инструкциям которые вшиты в exe интерпретатора и при запросе отображают лого PHP но очень лень лезть. И даже один из друзей когда-то специально компилировал из исходников чтобы от него избавится.

    Благодаря замечанию @Stmol обратил внимание что на Brainstorage плагин действительно молчит.

    Хабрахабр и Livestreet
    Вот с клонами не совсем так как сказал @VitaZheltyakov. Когда-то читал ряд публикаций на тему истории создания хабра. Так вот история Хабра и история LiveStreet невероятно переплетается. Помню что чтение напомнило какой-то испанский сериал. Кто-то куда-то уходил, кто-то куда-то возвращался. Одно ясно помню, что руки разработчиков хабры участвовали в разработке этого движка, посему не клон а скорее копия мастера. И тут даже остается открытым вопрос, что было раньше.
    Вообще вопрос "Каким образом сделана такая тесная интеграция javascript с сервером, я понимаю, что ajax, но реализация?" очень общий и размытый но...
    Современная разработка насчитывает массу методов предварительного проектирования ПО. Именно они при последовательной и продуманной разработке ПО позволяют реализовать эту интеграцию оптимальной с точки зрения нагрузки на сервер и количества кода.

    Если интересно заглянуть "под капот", возьмите IDE которая форматирует код (PhpStorm например) и заставьте ее отформатировать код. Она его разложит по полочкам.
    Реально ли самому написать идентичный сервис?

    Если вы имеете в виду собрать и возглавить команду из нескольких человек, то да более чем. Если же имеете в виду "соло на клавитуре", то с очень большими трудностями, и по соотношению КПД на отрезок времени который придется посидеть абсолютно не оправданно. Кроме того Тостер это не только разрабы. Это дизайнеры, контент редакторы, когорта профессиональных журналистов, маркетологов для разработки стратегии (и самой компании ТМ в частности) которые знают и как подать, продать и как раскрутить. Это то о чем стоит помнить.
    Ответ написан
  • Как запретить отправку формы, если цикл вернул false?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Я лично не совсем понял как у вас отрабатывает представленный пример. Есть два способа повесить хендлер на событие.
    Первый, проприетарный :
    jQuery('form').on('submit',function(e){
         e.preventDefault(); //Отменили нативное действие
         (e.cancelBubble) ? e.cancelBubble : e.stopPropagation; //Погасили всплытие
    }

    И второй, через алиас:
    jQuery('form').submit(function(){
    return false; //Отменили нативное действие
    });

    А у вас что-то среднее получилось.
    Кроме того почему не сделать так:
    jQuery('form').on('submit',function(e){
        var flag = true, 
            inputs = jQuery('input:not([type="submit"])',this); // Вторым аргументом указываем где искать
        inputs.each(function(){
            if(jQuery(this).val() == ''){
                flag = false;
            }
        });
        if(flag){
              /* Ajax запрос */
            alert('Запрос!');
         } else {
            alert('Заполни меня!!!');
         }
         e.preventDefault(); //Отменили нативное действие
         (e.cancelBubble) ? e.cancelBubble : e.stopPropagation; //Погасили всплытие
    });

    Рабочий пример
    Ответ написан
  • Как реализовать фильтр (php + mysql)?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    1. Не увидел схему таблицы категорий
    2. Не понял каким боком тут mysql. Подозреваю что хотите работать с json отсевом на уровне mysql но не уверен. Если хотите: LIKE, RLIKE и собственный генератор регулярных выражений. Хотя и смысла особо не вижу. Если объем данных не большой, то нагрузка что с поиском применяющим RLIKE, что просто на уровне php равноценна. А может даже на MySQL будет больше
    3. На счет того что "усложнил" склонен согласится.
    4. Не понял зачем хранить категории в json, подозреваю что нужна система подкатегорий, но тогда Adjacency List, Materialized Path и Nested Set в помощь.
    Ответ написан
  • Как раскодировать json?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Предположу что при раскодировке json_decode вам возвращает объект вместо массива. Для того чтобы получить массив и доступится к нему как $myvar['result']['message_id'] делайте $myvar = json_decode($inputstr,true) Если же все таки хотите оперировать объектом не передавайте второй аргумент (true) а просто доступайтесь как к объекту $myvar->result->message_id
    Стоит помнить объект ссылочный тип. Если изменяете его в одном месте, изменится везде.
    Ответ написан
  • Каков план личностного развития PHP программиста с нуля?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Буду исходить из "дано" задачи "PHP программист" и из того что автор вопроса стремится заниматься сугубо back-end программированием. Заранее прошу прощения, я несколько увлекся
    Итак:
    1. Установка сервера (Open Server, Xampp, Denver), на начальном уровне. (просто из exe)
    2. Общие принципы.
    2.1. Типы данных.
    2.2. Переменные.
    2.2.1. Работа с переменными по ссылке.
    2.2.2. Методы объявления и уничтожения переменных.
    2.3. Управляющие конструкции (если знаком, то особенности синтаксиса в рамках языка).
    2.3.1. Условия.
    2.3.2. Циклы.
    2.4. Конструкции вывода(print, print_r, echo).
    2.5. Конструкции отладки и управления выполнением(var_dump,die,exit,break в циклах, пустой return;).
    2.6. Пред определенные глобальные переменные($_GET,$_POST,$_REQUEST,$_SERVER), константы зарезервированные под модификаторы (static, function, const, $this)
    2.7. Особенности версий 5.3, 5.4.
    2.7.1. Анонимные функции.
    2.7.2. Замыкания.
    2.7.3. Особенности объявления массивов.
    2.7.4. Пространства имен.
    3. HTTP протокол.
    3.1. Заголовки входящие.
    3.2. Заголовки исходящие.
    3.3. Процесс общения.
    3.4. Метод php “header(…)” в контексте темы.
    3.5. Глобальная переменная $_SERVER[] в контексте темы.
    4. Установка сервера на среднем уровне (основы файла .htaccess и RewriteRule)
    5. Процедурное программирование.
    5.1. Математические методы.
    5.2. Оперирование типами.
    5.2.1. Методы оперирования массивами (array_values,array_keys,array_map и т.д.)
    5.2.2. Методы оперирования строками (strlen,substr и т.д.).
    6. ООП.
    6.1. Классы.
    6.1.1. Инкапсуляция(public,protected,private). Понимать разницу.
    6.1.2. Наследование.
    6.2. Интерфейсы.
    6.2.1. Имплементация интерфейсов.
    6.3. Абстрактные классы.
    6.4. Полиморфизм.
    6.5. Магические методы.
    6.5.1. Базовые (__construct,__get,__set,__destruct)
    6.5.2. Расширенные (__invoke,__serialize,__isset)
    6.5.3. Разобраться когда стоит применять магические методы а когда это плохая практика.
    7. Библиотека SPL, и расширение поведенческих возможностей классов за ее счет.
    8. Базы данных.
    8.1. SQL
    8.2. Примитивный уровень общения с БД. (mysql_connect,mysql_close,mysql_query).
    8.3. Средний уровень общения с БД(PDO и другие кастомные библиотеки).
    8.4. Высокий уровень (ActiveRecord,DataAccessObject,ObjectRelationMapping).
    8.5. NoSql БД на примере MongoBD (настоятельно рекомендуется, но не обязательно).
    9. Фреймворки. На мой вигляд можно начать с Kohana. Сужу по уровню вхождения стажеров которых видел и отсутствию пространств имен с которыми по первах могут возникать проблемы.

    И главное, Внимание! Личностные качества.
    - Усидчивость.
    - Владение Google при оттачивании темы или сложной задаче на уровне, когда поисковик видит в пользователе не то что DDOS а полноценный физический краш. тест.
    - Не брезгливость. Умение заставить себя разбираться в гов… хм. Нелицеприятных дебрях.
    - Збагойствие. Отсутствие паники при различных ошибках и не состыковках. Всегда остыть и попробовать снова, но по другому.
    Ответ написан