• Идеальный ноутбук для программиста

      Для чего?


      Я езжу на работу и обратно, домой. В день, провожу в общественном транспорте 3-4 часа (в зависимости от пробок). Далековато, не правда ли? Чтобы не скучать, мне был нужен рабочий жеребец, на котором бы я творил в дороге.

      Ряд качеств


      Для себя я выявил ряд качеств, которые необходимы, чтобы заниматься программированием.

      15'' мне показался слишком большим, для того чтобы держать его на коленях в транспорте. По этому я выбрал 13'' – оптимальный экран для программирования (я использую NetBeans). Забегая вперед скажу – 13,3'' оказался даже немного великоват для транспорта.

      Взвесив ноутбуки друзей, пришел к выводу, что хочу вес ниже 2.5 кг – оптимальный для таскания с собой (а подержав EEE на 1.5 кг – я вообще испытал щенячий восторг от его легкости).

      Особое внимание уделял раскладке и клавиатуре. Клавиши должны быть достаточно большими, а стрелки должны быть удобными. Page UP/DOWN должны находиться не в жопе мира.

      Интернет в дороге мне не нужен. В некотором роде, он отвлекает. Поэтому особо не заострял внимания на G4 моделях (с WiMax).

      А вот срубить с друзьями в multiplayer – неплохо. Чтобы ноут позволял это – процессор хотелось поинтерестнее, чем Celeron, а видеокарту помощнее.

      И обязательно (с чего я начал повествование), ноутбук должен жить. И делать это довольно долго – минимум 4 часа.

      ну так почему же не iPad?
    • End tag: optional

        Задача: Рассказать об красоте отсутствия закрывающихся тегов.

        Сейчас читаю множество статей на хабре, в которых хабра-авторы выкладывают свой HTML. Я хочу показать, как его можно сделать красивее.

        Речь пойдёт о тегах:
        • OPTION
        • P
        • LI, DT, DD
        • THEAD, TFOOT, TBODY
        • TR, TD, TH
        Суть в том, что эти теги не обязательно необходимо закрывать.

        Читать дальше →
      • Плохой пример для подражания

          Дорогой Жуковод! Вот уже пять месяцев вы не интересуетесь успехами своих жуков, не стремитесь к достижению новых вершин! Ваша карьера может бесславно завершиться. Если вы в ближайшее время не зайдете в игру, ваш персонаж вместе со всеми питомцами навсегда покинут проект. Для входа в игру перейдите по ссылке: zhuki......ru Если Вы забыли свой пароль, Вы можете восстановить его по этой ссылке: www.......html Желаем удачной игры! С уважением, администрация.
          В общем, если хотите произвести у пользователя негативное впечатление — всегда придерживайтесь правилам:
          1) (одно из главных) Старайтесь навязать ваше мнение, особенно, когда пользователь знает это лучше вас.
          Жуками я не интересуюсь уже более 5 лет. Первый раз интересовался, как только сервис запустился — но игра оказалась не для меня.
          1') Всегда пишите так, чтобы пользователь догадался, что к нему текст имеет малое отношение. Обобщайте абсолютно все моменты. Чтобы подошло к максимальному количеству пользователей.
          2) Попытайтесь заставить пользователя чувствовать себя виноватым.
          Да, я не стремлюсь к достижению новых вершин. И на бесславную карьеру мне пофиг.
          3) Обязательно ставьте условия. Пытайтесь шантажировать пользователя.
          3') Не забывайте постоянно удалять пользовательские аккаунты.
          4) Никогда не перечитывайте текст посылаемый пользователю и не задумывайтесь, как он или она может воспринять вашу информацию.
          Ну или доверяйте это людям, которым похрен на ваш проект.
          5) Ну и незабудьте после ваших издевательств пожелать удачи.
        • Палка о двух концах или ещё раз о хрупкости кода

            Я пишу этот топик, как ответ на недавнюю статью «10 приемов, разрушающих хрупкую красоту кода», в которой разгорелось множество споров.

            Многое уже написано в комментариях, многое не написано. Я лишь хочу здесь показать реальные примеры, что есть множество ситуаций, где Автор не прав, где предлагаеммые им решения будут мешать.

            Автор во многом прав, но он слишком категоричен в убеждениях. Профессия программиста заключается в том, чтобы думать и описывать решение задачи оптимальным способом. Как и в любом искусстве, если программист будет решать все задачи «подставляя лишь шаблоны», то все его решения — будут полнейшей ерундой. Программист — человек умеющий думать, а языки программирования предоставляют охрененно гибкий интерфейс для реализаций алгоритмов решений. По этому не стоит отказываться от особенностей языка — потому что в шаблоне написано не пользоваться — уж разработчики языков за вас уже продумали всё 100 раз, чтобы оставить эти методы и уверен, что в документации вы можете найти наиболее подходящие методы использования.

            То, что Автор рассказал, хорошие советы. Но он показал лишь одну сторону медали. Я сейчас покажу другую.
            Темная сторона силы
          • Блог Новости

              Давайте, чтобы хорошие блоги не ушли в Оффтопик, будем писать Copy-Paste Новости и другие сплетни в отдельный блог Новости или Ленту новостей.

              Недовольные, вспоминают правила Хабра.

              Я предлагаю держать блоги и Хабр в чистоте.
              Все, кто хотят читать новости на Хабре о Железе, ПО и прочем, просто подписывайтесь на этот блог.
              Давайте оставим блоги для интересных авторских статей.

              p.s. Блоги, например Google, Apple — всегда останутся новостными — потому что это блоги о компаниях и их продуктах.
              Я предлагаю «почистить» авторские блоги, такие как PHP, Железо итд.

              UPD: Интерестную идею развивают в комментариях.
            • Работа с модулями

                Задача:
                Использовать класс, в который можно добавлять новые методы воздействия, чтобы в последующем можно было ими пользоваться. При этом отделить эти методы по разным файлам.
                Представим космический корабль, в котором используются:
                a) методы перемещения по пространству, связанные с двигателем
                б) методы зарядки энергии, связанные с его солнечными батареями
                в) итд

                Есть варианты:
                1) Создание в объекте переменных и инициализация их через __construct, как новые классы.
                Но, при создании каждого нового объекта — мы получаем снижение производительности и постоянную модификацию класса (что может осложнять работу нескольких программистов).
                2) Работа через функции __call, __get, __set.
                В 3-10 раз более медленная работа этих функций. Особенно при вызове call_user_func_array с параметрами.

                Я предлагаю свой вариант.
                Быстрый, оптимизированный, но при этом есть небольшая сложность в отладке.

                В этом хабратопике я затрону темы:
                1. Overloading
                2. Ускорение загрузки модулей. Объединение модулей.
                3. Оптимизация
                Читать дальше →
              • output в PHP

                  Хочу узнать, как можно ускорить 'вывод' страницы, написанной на php?

                  Код такой:
                  $start=microtime(true);

                  echo $html;

                  echo microtime(true)-$start;
                  Страница загружается через сеть, посредством http запроса.
                  Результат работы скрипта:
                  0.023 — то есть потеря 0.02 sec на 20 килобайт текста.
                  Выделенный сервер — Athlon 2800+/512 ram/10 Mbit/Linux,
                  Apache 2 + eaccelerator + php 5.2.4. (объеденяющая сервер с клиентом сеть — 10 Mbit)

                  Расскажите мне:
                  Почему это происходит?
                  Как это можно ускорить?
                  Интересует, чемнибудь может помочь установка nginx или lighttpd?

                  Спасибо.

                  Upd.
                  Решение уже обсуждалась здесь: habrahabr.ru/blogs/php/45016 (спасибо DYPA и автору топика gnomeby)
                • Оптимизация загрузки статических данных

                    Небольшой хабратопик про то, каким образом можно оптимизировать загрузку большого количества статических данных в программу на PHP.

                    Встала проблема загрузки заранее посчитанных данных в программу поиска пути между двумя точками (не важно какую). Проблема встала настолько сильно, что загрузка просчитанных данных стала занимать 90% всех последующих расчётов.
                    Мои данные — двухмерный массив, состоящий из 200 на 200 ячеек примерно.

                    Тестирую unserialize, json_decode


                    с буквенными ключами
                    json_decode — 0.080sec
                    unserialize — 0.072sec

                    только цифровые ключи
                    json_decode — 0.041 sec (170kb)
                    unserialize — 0.037 sec (500kb)

                    Сам маршрут ищется за 0.0004-0.0012 sec :)
                    Значит, надо ещё что-нибудь придумать.

                    Читать дальше →
                  • Regexp — это «язык программирования». Основы

                      Несколько лет назад я думал, что regexp осуществляет линейный поиск по тексту, но какое моё удивление было, когда я понял, что это не так. Тогда я убедился на собственном опыте, что от простой смены местами а и b в схеме (...a...)|(...b...) поменялся полностью результат.

                      Поэтому сейчас я расскажу, как на самом деле работает regexp.
                      Поняв эти простые принципы и как оно работает, вы сможете писать любые запросы.
                      Для примера, я разберу сложную при первом приближении, но на самом деле простейшую задачу – выявление всех строк в кавычках.
                      Читать дальше →
                    • Очереди в Сбербанках по новому

                        Хочу дать несколько советов по улучшению Электронных очередей.
                        Сейчас в некоторых Сбербанках города Москвы реализована система «Электронных очередей».

                        В нашем центральном Зеленоградском Сбербанке это выглядит следующим образом:
                        На входе стоит аппарат, в котором одним кликом (на необходимую тебе операцию) можно получить чек c номером.
                        Ты садишься в кресло и ждёшь, пока робот назовёт твой номер и к какому окну тебе необходимо подойти.

                        Всё оставляет приятные впечатления, кроме нескольких вещей, которые (даже сейчас, простым обновлением ПО) можно и нужно улучшить.

                        Читать дальше →
                      • Как заказчик фрилансера нанимал. Русская народная сказка

                          Тебе, лансер, житье у меня будет лехкое, — не столько работать, сколько отдыхать будешь!

                          Утром станешь, как подобат, — до свету. Сайты с инету нарыщешь, на почту мне кинешь и —
                          спи-отдыхай!

                          Фотки обработаешь, артифакты на них приберешь —
                          спи-отдыхай!

                          Старый проект от багов вычистишь — мы с программерами смотреть сядем, а ты —
                          спи-отдыхай!

                          После этого новые баги всплывут, исправишь и —
                          спи-отдыхай!

                          Немного нового рабочего материала найти надо будет, всего мегов 300, а потом —
                          спи-отдыхай!

                          Материал найдёшь, в фотошопе обработаешь. Мы с дизайнерами будем смотреть, а ты —
                          спи-отдыхай!

                          Вечером составишь макет, кинешь его нам, а ты —
                          спи-отдыхай!

                          Для жены босса баннер сделаешь — его к завтрему, и —
                          спи-отдыхай!

                          По скайпу с тобой потреплимся, да спать сляжем. А ты, лансер, день-деньской проспишь-проотдыхашь — во што ночь-то будешь спать?
                          Ночью на сервере установишь новые библиотеки и опять —
                          спи-отдыхай!

                          Ну, под утро страницы сверстаешь, которы надо — слинкуешь к готовому и —
                          спи-отдыхай!

                          Да ведь, лансер, не даром. Деньги платить буду. Кажной год по рублю! Сам подумай. Сто годов — сто рублев. Богатейким станешь!

                          p.s. по мотивам
                        • Открытие блога. Улучшаем аватарку блога

                            Давно сам нуждался в этом блоге. Например, когда я писал эту хабра-статью, где мне нужен был совет.

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

                            Задавайте в этом блоге ваши вопросы по улучшению, а мы подскажем вам как улучшить, поделимся нашим опытом.
                            p.s. Не путайте с бизнес-линчем того, о ком не говорят™. Не путайте этот блог с «Я пиарюсь» :)

                            Блогу хорошо бы придумать картинку.
                            У меня есть одна идея, но мне она не нравится, потому что уже БАЯН :) и плохо читается текст.



                            По этому я жду интерестных ваших предложений по её улучшению и помощи у дизайнеров.
                          • Оптимизации системы разделения прав доступа в веб-приложении

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

                              В действительности, система сейчас не является оптимизированной и не может использоваться на серверах с высокой посещаемостью (так как, прошлая статья писалась больше для ознакомления).
                              Давайте попробуем это исправить.

                              В этой статье я рассмотрю:
                                1. Битовые поля, оптимизация
                                2. Serialize с денормализацией таблиц БД
                                3. Вы узнаете, как работает система, подобная Zend ACL

                              Читать дальше →
                            • Система разделения прав доступа в веб-приложении

                                В этой статье мы пройдём с вами полный цикл от идеи, проектирования БД, написания PHP-Кода, и завершающей оптимизации. Постараюсь рассказать обо всем, как можно проще. Использовать для примеров буду PHP и Mysql. Заодно потренирую новичков :).

                                В этой статье я коснусь вопросов:
                                  1. Идея ACL
                                  2. Проектирование БД
                                  3. Нормализация БД
                                  4. Рефакторинг кода
                                  5. Оптимизация рабочего кода

                                Статья является ответом на Бинарное распределение прав доступа в CMS. Пока автором пишется практическая часть, я хочу предоставить мой вариант, который я использую довольно давно.
                                То, что я сейчас расскажу, похоже на ACL.

                                Читать дальше →
                              • Познаём Русский язык. Цистерна первая, полная.

                                  10  INPUT string$
                                  20  LET from$ = "жы"
                                  30  LET to$ = "жи"
                                  40  GO SUB 1000
                                  50  LET from$ = "шы"
                                  60  LET to$ = "ши"
                                  70  GO SUB 1000
                                  80  LET from$ = "чя"
                                  90  LET to$ = "ча"
                                  100  GO SUB 1000
                                  110  LET from$ = "щя"
                                  120  LET to$ = "ща"
                                  130  GO SUB 1000
                                  140  LET from$ = "чю"
                                  150  LET to$ = "чу"
                                  160  GO SUB 1000
                                  170  LET from$ = "щю"
                                  180  LET to$ = "щу"
                                  190  GO SUB 1000
                                  200  PRINT string$
                                  300  STOP
                                  1000  LET lenstr = LEN string$
                                  1010  LET lenfrm = LEN from$
                                  1020  FOR n = 0 TO lenstr
                                  1030  IF string$(n TO n+lenfrm) = $from THEN LET string$ = string$(TO n) + to$ + string$(n+lenfrm TO)
                                  1040  NEXT n
                                  1050  RETURN

                                  Во второй полной цистерне я научу вас, как писать частицу «не» отдельно от глаголов :)
                                • Безразмерная разметка с помощью relative (без float)

                                    Навеянно этой темой.
                                    Пример, как это работает.

                                    1. Введение


                                    Представим, мы имеем класс relative, внутри которого имеется текст, и не задаём ему width:
                                    #bar{
                                    position:relative;
                                    border:5px solid #00FFFF;
                                    padding:10px;
                                    height:200px;
                                    }
                                    мы получим резиновый блок:
                                    <div id="bar">
                                    text
                                    </div>


                                    При этом, блок обладает неизменными padding+border и резиновым width, таким, что width_px+padding_px+border_px = 100%.
                                    Для absolute блоков, такой трюк не прокатывает.
                                    Читать дальше →
                                  • Сравнение матриц мониторов — TN и *VA.

                                      Давно меня мучал вопрос: чем отличаются изображение у современных мониторов с матрицами TN, S-IPS, S-PVA, P-MVA. Мы с другом ne0, решили сравнить.

                                      Для тестов взяли два 24'' монитора (на S-IPS к сожалению не нашли ничего:( ):
                                      — на дешевой матрице TN Benq V2400W
                                      — на матрице P-MVA средней категории Benq FP241W.

                                      Характеристики кандидатов:

                                      Benq V2400W

                                      Тип матрицы: TN+Film
                                      Дюймы: 24"
                                      Разрешение: 1920x1200
                                      Яркость: 250 кд/м2
                                      Контрастность: 1000:1
                                      Время отклика: 5мс / 2 мс GTG


                                      Benq FP241W

                                      Тип матрицы: P-MVA (AU Optronics)
                                      Дюймы: 24"
                                      Разрешение: 1920x1200
                                      Яркость: 500 кд/м2
                                      Контрастность: 1000:1
                                      Время отклика: 16 мс / 6 мс GTG


                                      Тенденции последних лет


                                      Матрицы TN (TN+film) улучшают по цветопередаче, яркости и углам обзора.
                                      Матрицы *VA (S-PVA/P-MVA) улучшают по времени отклика.

                                      До чего дошел прогресс?
                                    • Добавление разъема внешней Wi-Fi антенны на ноутбуки и Tablet PC


                                        В этой статье я расскажу о добавлении разъема внешней Wi-Fi антенны на ноутбуки и Tablet PC.
                                        Обычно антенны с высоким коэффициентом усиления используются для увеличения покрытия точками доступа, я же покажу какой эффект они оказывают на стороне передатчика.
                                        Экспресс тестирование направленных и всенаправленных антенн в качестве бонуса.
                                        Читать дальше →