• Структура и интерпретация компьютерных программ

      image
      Перевод второй лекции Джеральда Сассмана
      «Процедуры и процессы: подстановочная модель.»

      Эти лекции были прочитаны 25 лет назад сотрудникам HP, но на самом деле это тот легендарный вводный курс 6.001, который читался в MIT в 1980 году. С тех пор эти лекции sine qua none во всем мире программирования. Хотелось бы чтобы каждый программист посмотрел этот курс, ничего не учит абстрактному мышлению лучше, чем SICP.
      Приятного просмотра на ночь глядя.
      Читать дальше →
    • Теория и практика игры «Морской бой» — по-честному

        Читая в очередной раз Хабр, я заинтересовался статьей «Морской бой с искусственным интеллектом — по-честному» и программой «Интеллектуальный морской бой».
        Попробовав сыграть с ней, я обнаружил, что стратегия программы пока оставляет желать лучшего, т.к. счет был 9:1 в мою пользу.
        Я решил поделиться своими мыслями со всеми, и в частности с автором(michurin) программы, т.к. проект очень интересный.

        Внимание!
        После прочтения данной статьи исход игры «Морской бой» перестанет быть для вас случайностью.

        Статья писалась простым языком без использования формул.
        «Любая формула, включенная в книгу, уменьшает число ее покупателей вдвое» Стивен Хокинг.
        Читать дальше →
      • Гай Кавасаки и Путь Макинтоша

          Гай КавасакиПочти каждого человека (как правило, в юном возрасте) посещает желание изменить этот мир к лучшему. Одни ради этого устраивают революции, другие войны. Однако в так называемую эпоху научно-технической революции некоторые реализуют это стремление посредством внедрения технических новинок, дающих людям неведомые ранее возможности.

          Дипломированный психолог Гай Кавасаки — будущий автор пособия «Искусство делания революций», тоже был из числа людей, желавших изменить мир. В своей первой книге «The Macintosh Way» Кавасаки процитировал на яблочный лад известную загадку о том, сколько сотрудников компании нужно для того, чтобы вкрутить лампочку: «Сотрудник Apple берет в руку лампочку, и мир начинает вращаться вокруг него».
          Однако самый важный для рассказа о Кавасаки культурный слой — в самом заглавии «The Macintosh Way»…

          Читать дальше →
        • HP отзывает батареи для ноутбуков. 70 тысяч устройств в зоне риска

            Порядка 70 тыс литий-ионных батарей, установленных в ноутбуки HP и Compaq, могут самопроизвольно воспламениться, сообщает ZDNet со ссылкой на заявление американского варианта общества защиты потребителей (Consumer Product Safety Commission). Известно о двух зафиксированных подобных случаях, правда, завершившихся без последствий для владельцев портативных устройств.

            В зоне риска — ноутбуки, которые были в продаже в период с августа 2007 года по март 2008 года, всех ценовых категорий — от $500 и до $3,000, приобретенные в том числе и в Интернет-магазинах hp.com и hpshopping.com. Кроме того, речь идет об отдельно продающихся аккумуляторах ($100 и $160). На картинке ниже указаны партии и серийные номера этих аксессуаров.

            Ноутбуки:

            image

            Аккумуляторные батареи:

            image

            Краткая инструкция по нахождению серийного номера:
            image

            Компания HP просит незамедлительно прекращать использование дефектных батарей и советует бесплатно заменить их на новые.

            UPD: эта новость и на русскоязычной версии сайта HP
          • Вопросы html-верстальщику

              Приветствую всех хабровчан и хабровчанок :)

              Сегодня меня озадачили следующим: придумать список вопросов для того, чтобы оценить знания и умения человека, претендующего на вакансию html-верстальщика.
              Лично мне кажется, что по таким тестам реальный уровень оценить сложно, но все-таки общие представления о знаниях они дадут.

              Накатала такие
              вопросы
            • Ninja Editor

                Здравствуйте. Вы будете смеяться, но я написал маленький текстовый редактор для сайтов. Он совсем маленький и совсем текстовый. Но он мне нравится. Встречайте, Ninja Editor

                Ну и картинка для привлечения внимания:


                Читать дальше →
              • 5 бесплатных антивирусов для Windows

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

                  Читать дальше →
                • Что нам стоит док настроить

                    Существует много программ позволяющих настроить док, добавить или изменить его функциональность и т.д и т.п. Лично меня из всего предлагаемого разнообразия интересовало всего несколько конкретных вещей:
                    • Запрет на изменение расположения иконок в доке (ну а когда надо, быстрая отмена такого запрета).
                    • Запрет на изменение размера дока (подобрать оптимальный и зафиксировать).
                    • Добавление в док разделителей для визуального выделения приложений в группы.

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

                    Читать дальше →
                  • Методы применения алгоритма нахождения максимального потока в сети

                      Введение


                      Задача о максимальном потоке является классической и имеет множество применений. Напомню постановку проблемы. Дан взвешенный ориентированный граф с неотрицательными весами (пропускными способностями). Выделены две вершины: исток S и сток T такие, что любая другая вершина лежит на пути из S в T. Потоком назовем функцию F: V x V с такими свойствами
                      1. Ограничение пропускной способности. Поток по ребру не может быть больше его (ребра) пропускной способности.
                      2. Антисимметричность. Для каждого ребра (u, v): F(u, v) = -F(v, u).
                      3. Сохранение потока. Для каждой вершины (кроме S и T), количество входящего потока (отрицательного) равен количеству исходящего потока (положительного). Тоесть, алгебраическая сумма потоков для каждой вершины (кроме S и T) равна нулю.

                      В этом посте вы можете ознакомиться с реализацией поставленной проблемы.

                      Перейдем непосредственно к типичным задачам, которые сводятся к алгоритму нахождения максимального потока в сети. Часто выявить в таких задачах поток очень не просто.

                      Читать дальше →
                    • Пишем свою ОС: Выпуск 1

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

                        Каждый решает проблему обучения по-своему. Кто-то читает много литературы, кто-то старается поскорее перейти к практике и разбираться по ходу дела, кто-то пытается объяснять друзьям всё, что сам изучает. А мы решили совместить эти подходы. Итак, в этом курсе статей мы будем шаг за шагом демонстрировать, как пишется простая операционная система. Статьи будут носить обзорный характер, то есть в них не будет исчерпывающих теоретических сведений, однако мы будем всегда стараться предоставить ссылки на хорошие теоретические материалы и ответить на все возникающие вопросы. Чёткого плана у нас нет, так что многие важные решения будут приниматься по ходу дела, с учётом ваших отзывов.
                        Читать дальше →
                      • Компиляция. 6: промежуточный код

                          Первый этап — разбор синтаксиса нашего джей-скрипа — пройден; подбираемся к генерации кода.

                          Начнём с генерации п-кода (промежуточного переносимого псевдокода) — нечто вроде «абстрактного машинного языка». Его выбирают так, чтобы
                          • его было легко генерировать;
                          • его было легко обрабатывать.
                          Обработка п-кода — это, как правило, его переработка в исполнимый машинно-зависимый код. Тем не менее, можно ограничиться лишь генерацией п-кода, и объявить его готовой скомпилированной программой. Запуск такой программы будет, по сути, интерпретацией п-кода. У этого подхода всё больше и больше сторонников; так что и мы для начала ограничимся компиляцией в п-код.

                          Далее в посте:

                          1. Выбор кода
                          2. Компиляция
                          3. Выполнение
                          4. Backpatching
                          Читать дальше →
                        • Компиляция. 4: игрушечный ЯП

                            С грамматиками калькуляторов поиграли достаточно, переходим к языкам программирования. Бета-тестеры статьи подали идею писать JavaScript-подобный язык: начнём с простейшего скобчатого скелета, и будем его постепенно обращивать наворотами — синтаксическим сахаром, типами данных, поддержкой функций, и т.д.

                            Чтобы неполноценность нашего языка была понятна уже из названия, назовём его JSkrip.

                            Далее в посте


                            1. Синтаксис
                            2. Грамматика
                            3. Парсер
                            4. Синтаксическое дерево
                            5. Pretty-printing

                            Читать дальше →
                          • Компиляция. 2: грамматики

                              В предыдущем посте было много кода и, по некоторым мнениям, недостаточно объяснений. Будем чередовать: в этот раз будет много теории, а до практики почти не дойдёт.

                              Далее в посте:

                              1. Магазинный автомат
                              2. Формальные грамматики
                              3. LR-парсинг
                              Читать дальше →
                            • Компиляция. 1: лексер

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

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

                                Далее в посте:

                                1. С какой стати писать компиляторы?
                                2. Общий план
                                3. Анализ текста
                                4. Практический пример
                                5. Как это работает?
                                Читать дальше →
                              • XSD — умный XML

                                  XSD — это язык описания структуры XML документа. Его также называют XML Schema. При использовании XML Schema XML парсер может проверить не только правильность синтаксиса XML документа, но также его структуру, модель содержания и типы данных.

                                  Такой подход позволяет объектно-ориентированным языкам программирования легко создавать объекты в памяти, что, несомненно, удобнее, чем разбирать XML как обычный текстовый файл.

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

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

                                  Рассмотрим в качестве примера XSD документ, описывающий часть структуры аккаунта на хабре.



                                  Читать дальше →
                                • Unlimited IE one-time CSS expressions

                                    В поддержку дней CSS expressions на хабре

                                    Думаю все, кто сталкивался с решением каких-нибудь проблем в IE<8 знает про CSS expressions и про «одноразовые» CSS expressions, которые применяются к элементу только один раз, тем самым не создавая постоянной нагрузки на процессор. Обычно это решается так:
                                    .my-class {
                                        behavior: expression(someMagick(), runtimeStyle.behavior = 'none');
                                    }
                                    А что, если хочется использовать больше свойств?
                                  • Python: советы, уловки, хаки (часть 1)

                                    • Translation
                                    Предлагаю читателям «Хабрахабра» перевод статьи «Python Tips, Tricks, and Hacks». Статья будет полезна на начальном и среднем этапах изучения Python.

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

                                    Содержание

                                    1. Маленькие уловки. Четыре типа кавычек. Правдивость различных объектов. Проверка на вхождение подстроки. Красивый вывод списка. Целочисленное деление и деление с плавающей точкой. Лямбда-функции.
                                    2. Списки. Генераторы списков и выражения-генераторы.
                                    Читать дальше →
                                  • Производительность простых и сложных конструкций в JavaScript

                                      Периодически натыкаясь на статьи, посвященные оптимизации кода на JS (вот одна из популярных) я ловил себя на мысли, что информации в них катастрофически мало. Перечислены 2-3 конструкции, 1-2 браузера и все на этом.

                                      Как говорится, если хочешь сделать что-то хорошо, сделай это сам.
                                      Я решил протестировать, в первую очередь для себя, скорость работы различных языковых конструкций (начиная с самых базовых) в основных современных браузерах и на основе этого сделать выводы о том, что и как использовать в скриптах, требовательных к производительности.

                                      Ну и раз уж результаты получены, почему бы не выложить их для всеобщего пользования?

                                      Upd: добавил графики результатов, предоставленные хабраюзером deerua (для тех, кто воспринимает визуальную подачу информации лучше чем табличную)
                                      читаем дальше
                                    • Проект по переводу «Погружения в Python 3»

                                              Осенью вышла книга Марка Пилгрима «Dive into Python 3», и я решил попробовать её перевести на русский язык.
                                              Собственно, вся работа ведётся в Викитеке — ru.wikisource.org/wiki/Погружение_в_Python_3_(Пилгрим).
                                              Пока переведено только несколько первых глав, потому что занимаюсь этим я один.
                                        Читать дальше →