Задать вопрос
  • Как растянуть страничку?

    @egorinsk
    Фон в данном примере не растягивается, и просто прижат к низу блока и сдвигается вместе с ним.

    background: url(image.jpg) no-repeat 50%100%;

    Что значат 50% и 100%, читайте в описании свойства background-position на сайте w3.org или htmlbook.ru.

    Новичок должен поставить своей целью хотя бы пробежаться по описанию существующих свойств CSS. Солидный теоретический фундамент гораздо лучше тыканья наугад.

    p.s. Раз уж вы новичок, обратите внимание на неаккуратность в дизайне сайта на картинке: текст слишком близко прижат к левому краю блока, содержит слишком длинные строки и смотрится крайне рвано и неряшливо. Не вздумайте никогда делать так же, добавляйте поля и ограничивайте ширину текста (чтобы в строке было не более 50-80 символов).
    Ответ написан
    2 комментария
  • Путь к юзабилити и проектированию интерфейсов

    @egorinsk
    Начать можно с книг «Побег из психбольницы» Алана Купера (написана простым языком), и «Интерфейс» от Джефа Раскина (человек работал в Эппл). Эти книги помогут понять логику проектирования UI, избежать типичных ошибок. Также, можно почитать лебедевское ководство. Также, важно самому научиться мыслить определенным образом, чтобы видеть ошибки в существующих интерфейсах и понимать, как их можно решить. Также, нужны хорошо развитые навыки дизайнера, так как мало спроектировать интерфейс, надо его нарисовать.

    Отполировать теоретические знания лучше всего, поработав некоторое время в профессиональном коллективе с высокой нагрузкой.
    Ответ написан
  • Теория категорий для чайника

    @egorinsk
    Википедию почитайте. Хотя мне вынесло мозг уже определение транзитивных множеств (множество, элементы которого являются подмножествами этого множества).
    Ответ написан
    Комментировать
  • Очень "толстая" программа в списке "установка и удаление программ" win XP

    @egorinsk
    Это видимо используется компонент Internet Explorer для отображения списка со всеми вытекающими (у кого есть WinSpy++ из вижуал студии — проверьте, у меня нету).
    Ответ написан
  • Поиск скрытых ссылок в тексте

    @egorinsk
    1) Берем словарь русского + словарь английского. 2) Убираем из текста словарные слова 3) Склеиваем то, что осталось.

    Естественно, словарь придется дополнить опечатками, неологизмами, нецензуршиной и т.д.
    Ответ написан
    3 комментария
  • Отладка JavaScript в UIWebView?

    @egorinsk
    Аналог Firebug вас бы устроил? В таком случае предлагаю скачать и заюзать FirebugLite (это фаербаг для не-фаерфокса).
    Ответ написан
  • Помогите отладить автоконвертер видео на bash плиз

    @egorinsk
    Bash-скрипт в 99% случаев должен начинаться с set -e. Странно, что никто не замечает таких вопиющих ошибок.
    Ответ написан
    Комментировать
  • Как начать писать тесты?

    @egorinsk
    Тесты стоит писать для компонент, которые с большой вероятностью легко сломать (и которые вызовут у вас трачу времени на поиск проблемы). Если у вас есть код, выводящий из БД табличку или добавляющий пользователя, или типичный контроллер, или типичная модель, нет смысла его тестировать.

    А вот, если у вас к примеру есть класс HumanDateParser, который разпознает даты в тексте и возвращает их в виде timestamp, для него стоит сделать тест. Простейший тест будет словарь, вида строка — ожидаемый ответ, например (извините, Питон не знаю, пишу на яваскрипте):

    var answers = {
    «14 мая 2002»: '2002-14-05',
    «4 апреля»: '$currentYear-04-04',
    «114 марта»: false,
    «туруру»: false
    };

    После чего простейший цикл перебирает значения из словаря, скармливает их HumanDateParser и сравнивает ответы, если что-то не так, трубит об ошибке. Если потом вы найдете баг в этом модуле, вы добавите в answers строки, которые вызывали баг.

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

    А делать тесты ради тестов и 100% покрытия, по моему, глупо. Не забывайте, к примеру, что в случае каких-то изменений в покрытом коде вам, скорее всего, придется еще и переделывать тесты.
    Ответ написан
    1 комментарий
  • BluePrint CSS вытягивание по вертикали!?

    @egorinsk
    html, body { height: 100%}
    .l-layout { min-height: 100%; -height: 100%; -zoom: 1 /* IE 6 */ }
    .l-footer { margin-top: -50px; min-height: 50px; }

    Вот, держите, прибитый к низу футер фиксированной высоты. Если что-то непонятно, гуглите по словам «как прибить футер», найдете еще кучу способов.
    Ответ написан
    Комментировать
  • Как лучше организовать работу с ассетами?

    @egorinsk
    Храните в папке static основного репозитория, в чем проблема? Склеивать естественно надо автоматически, а не руками. Для простых проектов склейщик пишется за 10 минут на bash.
    Ответ написан
    Комментировать
  • Эффект перелистывающихся страниц на JavaScript

    @egorinsk
    Они все отвратительны в плане тормозов и юзабилити.
    Ответ написан
    Комментировать
  • Работа чисто на Python

    @egorinsk
    Питонщики обходятя дороже пхпшников. кто в здравом уме будет их брать, тем более в фрилансе, где на всем экономят?
    Ответ написан
    Комментировать
  • Программа как иерархия папок?

    @egorinsk
    В языках типа Java и так файлы разнесены по директориям. Права доступа можно задавать аннотациями в файлах. Можете к ним написать такую оболочку, но я сомневаюсь, что это имеет какой-то смысл.
    Ответ написан
    Комментировать
  • Проектирую "Ленту событий" для социального проекта?

    @egorinsk
    На всяких фейсбуках и вконтактах данные ленты генерирует демон на компилируемом языке, который к тому же кучу информации кеширует в памяти. Осилите? Ну не знаете Си, можете попробовать на Node или Java написать, ну или на PHP в крайнем случае, если заложить возможность масштабирования, тоже будет ОК до поры до времении.

    Алгоритм работы примерно такой: 1) выбираем id друзей юзера 2) выбираем последние события у каждого из них 3) отсеиваем защищенные приватностью 4) склеиваем списки, сортируем по дате и отдаем в браузер.

    А на MySQL у вас с ростом нагрузки, числа друзей все это быстро положит сервер. Сделаем простейший расчет: средний юзер делает 10 событий в день, если юзеров хотя бы несколько тысяч, таблица событий быстро подпрыгнет в размере до миллионов записей. А всякие конструкции типа JOIN во-первых, грузят сервер, во-вторых, не шардятся.
    Ответ написан
    7 комментариев
  • Постеры на тему АСОИУ

    @egorinsk
    Мило.
    Ответ написан
    Комментировать
  • Кроссбраузерная библиотека зависимостей (js, css)?

    @egorinsk
    Yepnope.js? А вообще, я бы сам лучше написал что-нибудь.
    Ответ написан
    1 комментарий
  • Заработок для человека с большой степенью близорукости

    @egorinsk
    Самому учиться очень сложно (разве что человеку с выдающемися способностями типа Эйнштейна). Лучший вариант прокачать навыки в IT-технологиях — поработать хотя бы годик-два в профессиональном коллективе.

    Потому вам на фрилансе будет сложно конкурировать с теми, у кого такой опыт есть, и кто может за 10 минут сделать то, что вы будете полдня мучать. Вы можете посмотреть, к примеру, какие заказы размещаются на фри-ланс.ру, и оценить, сможете ли вы с ними справиться. Да еще и не просто справиться, а сделать лучше других.

    Не знаю даже, что посоветовать… попробуйте все же найти то занятие, которое у вас лучше получается и в этом направлении развиваться. Статьи/учебники читайте. Например, по яваскрипту есть хороший сайт — javascript.ru. Английский до какой-то степени можно прокачать на фильмах с субтитрами, а дальше, почитывая сайты на английском. PHP изучать стоит с официального мануала, он неплохой, и есть русский перевод. По CSS есть сайт htmlbook.ru, хорошие (must read) статьи тут: softwaremaniacs.org/blog/category/primer/.

    Что касается фотошопа — там надо не только освоить инструменты/фильтры/эффекты слоев, но и определенное понимание тенденций в веб-дизайне, чувства вкуса. Надо сидеть на всяких дизайнерских и околодизайнерских сайтах, высматривать интересные идеи.

    А если в процессе изучения какие-то конкретные вопросы будут, пишите в Q&A, мы ответим :)
    Ответ написан
    Комментировать
  • Автодополнение строк из очень большой базы. Поиск по строке?

    @egorinsk
    А что непроизводительного в LIKE something%? Индекс же используется.
    Ответ написан
  • Расскажите про лучшие практики построения простых веб приложений на PHP+JS+jQuery?

    @egorinsk
    AJAX-приложения делаются не так и давно, потому найти собранные воедино best practices не так-то просто. Многие наработки просто не выложены в паблик, а используются разработчиками для каких-то своих проектов. Потому надо проявить старание и разобраться самому.

    Сначала посмотрите на то, что делают другие. Но здесь важно не брать плохие примеры (например, монстров типа Zend Framework и ExtJS. jQueryUI, кстати тоже уродливая вещь — вы его исходники смотрели?) Посмотрите, как написан клайентсайд у вконтакта. Посмотрите у фейсбука (хотя там код пожат, но разобраться можно). Посмотрите библиотеку Zforms. Посмотрите Google Closure Library (у Гугла есть чему поучиться, особенно в плане организации кода, посмотрите обязательно).

    Вообще, смотреть чужой код полезно. он не всегда хорошо написан, но даже в этом случае — это повод для размышлений на тему «а как правильно?».

    Теперь о теории. При построении более-менее сложных AJAX-приложений приходится решать примерно те же проблемы, что и на серверной части, а именно:

    — разделение кода на слабосвязанные компоненты (чтобы, меняя один из них, не ломать все остальное). Сюда входит как организация 3-звенной архитектуры (например, MVC), так и разбиение на модули, динамическая подгрузка модулей (посмотрите yepnope.js и сделайте то же, но проще). Выбор средства взаимодействия модулей — Dependency Injection или система событий (паттерн Observer). Мне больше нравится Observer.

    — организация хранилища данных — нужен какой-то модуль для получения данных с сервера с кешированием, проверкой актуальности, возможно с блокировками и нотификацией об изменениях. Посмотрите, например, как ведет себя Гугл Докс если открыть в 2 окнах 1 документ и править его. Нужна серверная половинка для приема/валидации/выдачи данных.

    — организация View: это решение вопроса о выборе шаблонов (jQuery Templates для начинающего — вполне пойдут), создание системы виджетов (чтобы например можно было вставить виджет графика в виджет формы и все работало) — я не знаю, правда, ни одной нормальной библиотеки виджетов, пишите сами.

    — роутер и контроллер — ну это элементарно пишется без всяких библиотек. Не знаете, как — посмотрите, как сделано у вконтакта.

    — повторное использование кода — копипаст недопустим.

    Также, есть проблемы специфичные именно для клиентсайда:

    — необходимость уменьшения числа запросов (неправильно: грузим диалог, обнаруживаем, что ему нужны CSS и JS файлы и грузим их) — лучше это делать одним запросом. То же про запросы к хранилищу: выбирайте все одним запросом. Несколько AJAX-запросов — это треш и ужас, особенно при пинге 100-200 мс.

    — необходимость минимизации объема и скорости работы JS-кода. Ради нее надо отказываться от тяжелых/перегруженных библиотек типа ExtJS, kendo и jQueryUI.

    — склеивание/сжатие JS файлов — элементарщина, можно склеивать хоть bash-скриптами (или make), плюс можно применить тулзы типа Google Closure Compiler. Разберитесь, как они работают.

    — необходимость создания адаптивной верстки — для этого есть библиотеки типа Modernizr, но по моему, это перегруженный монстр. Мне, например, хватает простого инлайн-скрипта, включаемого сразу после body, который ставит классы with/without-js, with-css3, with-ie, в итоге пользователи современных браузеров экономят трафик и видят rounded corners и CSS gradients, а пользователи ИЕ скачивают их в виде картинок.

    А, вот скрипт, если кому интересно: paste2.org/p/1947136

    — необходимость поддержки навигации средствами браузера — посмотрите библиотеку history.js (хотя имхо, ее тоже стоило бы урезать раза в 2-3, там много лишнего).

    Ну и для закрепления знаний нужна естественно практика.

    Напишите

    1) свой грид (грид — это в данном случае виджет, который отображает в виде таблицы какие-то данные), с сортировкой, фильтром и постраничным просмотром. Все должно работать через AJAX (а если яваскрипт отключен, то классическим методом). Если таблица помещается на экран без постраничной навигации, сортировки и фильтрация должны выполняться 100% на клиенте. Добавьте кеширование (при открытии уже закешированных данных они отображаются из кеша и посылается запрос на проверку их актуальности).

    2) Сделайте форму редактирования/добавления данных в этот грид с валидацией.

    3) А теперь сделайте так, чтобы он работал при пропадающем интернете (то есть, вы добавляете какие-то данные, они сохраняются, выживают при закрытии браузера и отправляются, когда соединение восстанавливается)

    4) если не испытываете отрицательных эмоций по отношению к вконтакту — решите эту задачу: vk.com/page-1_42054413. Она хорошо подходит для отработки навыков разработки AJAX-приложений.

    Что касается PHP, в AJAX-приложении он просто служит бекендом и умным хранилищем данных, не более. Слепите простейший ORM, его вполне хватит.

    P.S. И никогда не повтоярйте ошибок, которые делают косолапые разработчики Хабра. Размер textarea для комментариев должен вмещать минимум 20-25 строк.
    Ответ написан
    1 комментарий