• Как сохранить здоровье, работая за компьютером?

    Иллюстрация

    Вы заботитесь о своем здоровье?


    Лично для меня возможность свободно организовывать рабочее время стала главным доводом «за», когда я решил оставить офис и присоединиться к фрилансерам. За годы, проведенные в компании, я добился многих целей, которые были мне интересны, заплатив за это своим зрением, осанкой и истраченным временем. Основным уроком, который я из этого вынес, стало то, что успех, достигнутый за счет подорванного здоровья, не стоит потраченных на него усилий. Перенеся большую часть своей работы домой, я поставил задачу организовать время, проводимое за компьютером, так, чтобы снизить его воздействие на здоровье до минимума.

    Что оказалось непросто. В данной статье я расскажу о моем способе организации «правильного» рабочего дня, о том, что следует для этого делать, и где лежат грабли, на которые нельзя наступать. Тема «компьютер и здоровье» уже несколько раз поднималась на Хабре, поэтому я задумывал этот пост как статью, которую можно добавить в закладки и использовать в качестве «руководства к действию».

    Читать дальше →
  • AIR для всех

      image

      Цель данного обзора — дать описания 20-ти самым популярным AIR приложениям.

      Что такое Adobe AIR



      Рабочая среда Adobe® AIR™ позволит вам использовать ваши любимые web-приложения в любое время. Так как для функционирования приложений Adobe AIR на вашем компьютере наличие web-браузера не требуется, вы сможете использовать все преимущества настольных приложений.

      Такие компании как eBay* и AOL* используют Adobe AIR для создания эффектных приложений, которые дают вам возможность воспользоваться предлагаемыми им сервисами непосредственно на рабочем столе.

      Другими словами, Adobe AIR делает приложения более удобными, мощными и эффективными.
      Читать дальше →
    • Создаём свой персональный OpenID

        В последнее время стало популярным использование OpenID. Это удобно, быстро и по-современному.
        OpenID — это открытая децентрализованная система единого входа, которая позволяет использовать один логин и пароль на большом количестве сайтов. На сайтах, поддерживающих OpenID, пользователям не приходится регистрироваться и помнить данные для каждого сайта. Вместо этого им достаточно быть зарегистрированными на сайте «провайдера идентификации» OpenID (предоставляющего идентификатор). Так как технология OpenID децентрализованная, то любой сайт может использовать программное обеспечение OpenID в качестве средства входа; OpenID решает проблему не полагаясь на централизованный сайт для подтверждения подлинности пользователя. (Wikipedia)

        Лично для меня некоторое время создавало трудность запомнить строку ainu.myopenid.com. Со временем я, конечно, её запомнил, но теперь везде вместо ainu.myopenid.com пишу ramainen.ru (моя страничка, её то я запомнил), и сервисы меня прекрасно понимают. Конечно, я не стал OpenID провайдером, но вспоминание и ввод моего OpenID стал гораздо проще.
        как такое сделать?
      • 40 лет компьютерной мышке

          40 лет назад мир увидел первую компьютерную мышь. Деревянная коробка с красной кнопкой на верхней крышке — вот так выглядела первая мышка.
          image
          Человек, который изобрел мышь, 83-летний американец Дуглас Энгельбарт не получил за это ни копейки. Его патент истек до того, как мир стал использовать мышь.
          Первым компьютером, в комплект которого включалась мышь, был миникомпьютер «Xerox 8010 Star Information System», представленный в 1981 году. Мышь фирмы Xerox имела три кнопки и стоила 400 долларов США.
          В 1983 году фирма Apple выпустила свою собственную модель однокнопочной мыши для компьютера Lisa, стоимость которой удалось уменьшить до $25. Широкую популярность мышь приобрела благодаря использованию в компьютерах Apple Macintosh и позднее в ОС Windows для IBM PC.

          «Мышь» прошла трудный и тернистый путь, пожелаем ей дальнейшего успеха.

          UPD. Заинтересовавшись историей комп.мыши обнаружил ссылку на первую демонстрацию «мыши». и точную дату 9 декабря 1968, так что, Юбилей впереди! — Готовимся!
        • Мир лицензий: разбираемся с GNU GPL


            Рано или поздно каждый разработчик сталкивается с вопросом лицензирования своих разработок. Более или менее понятно, когда разрабатывается коммерческий продукт с закрытым кодом. Но когда разработчик желает распространять программу, плагин или библиотеку классов бесплатно и с открытыми кодами, то могут возникнуть трудности, потому что в природе существует масса лицензий подобного рода. Эта статья призвана собрать, упорядочить данные по лицензиям и вычленить самое главное.

            UPD: опубликован перевод небольшого куска официального GPL FAQ habrahabr.ru/blogs/Dura_Lex/45878
            UPD2: скорректирован и переформулирован список совместимых лицензий

            Читать дальше →
          • Разработка WEB-проекта на Node.JS: Часть 2

              В прошлой статье я начал рассказывать о своём опыте разработки экспериментального WEB-проекта «Что делать?» на Node.JS. Первая часть была обзорной, в ней я постарался раскрыть плюсы и минусы технологии, а также предупредить о проблемах, с которыми, возможно, придётся столкнуться в ходе разработки. В этой статье я подробнее остановлюсь на технических деталях.

              Несколько слов о «хабраэффекте»


              Читать дальше →
            • Считываем hash: пуленепробиваемый способ

              • Translation
              • Tutorial
              Это, вероятно, одна из тех задач, о которой все думают, что знают решение, но многие решают её в итоге некорректно. Наткнувшись на ещё один сверхслабый кусок кода, написанный для этой цели, я задумала разъясняющую блогозапись.

              Суть проблемы


              Вы хотите убрать символ решётки (#) из значения location.hash. Например, когда hash равен "#foo", Вы хотите получить строку, содержащую "foo". Это же просто, правда?

              Сложные случаи


              Вот что большинство разработчиков, кажется, упускает из виду: в современных, мощно наджаваскриптованных, приложениях переменная hash может содержать любые юникодовые символы. Она не обязательно должна соответствовать значению реального атрибута id с той же страницы. А когда она и соответствует, атрибуты id теперь могут содержать почти любые юникодовые символы. Да ещё часто забывают, что на странице может и не быть никакого хэша. Даже если URL оканчивается символом «#», строка location.hash равняется на самом деле "" (пустой строке), а не "#".

              Наивные подходы


              Вот наиболее недавний — я нашла его в книге, на которую составляла техническую рецензию:

              var hash = location.hash.match(/#(\w+)/)[1];

              У него сразу несколько проблем:

              Читать дальше →
            • Серверный процессинг LESS файлов «на лету» своими руками

              LESS — это популярный препроцессор для языка CSS, добавляющий возможности использовать константы, наследование, вложенные стили и много другое, чего так не хватает в CSS. Как только я познакомился с LESS я понял что это то, что мне нужно. Единственное, что омрачило мою радость — разработчики предлагают всего два варианта его использования: встраивать JavaScript файл, который занимается препроцессингом прямо в браузере или использовать специальный скрипт (который должен исполняться на node.js) который процессирует LESS файлы.

              Вариант c процессингом LESS файлов на клиенте мне не понравился тем, что для больших LESS файлов это вызывает ощутимые паузы при загрузке страницы. Если использовать LESS версию твиттерного bootstrap-a — загрузка увеличивается на несколько секунд, что абсолютно недопустимо.
              Вариант с предварительной компиляцией меня не устраивал тем, что приходится «вручуную» запускать препроцессор. Я видел программу, которая автоматически перегенерирует LESS файлы при их изменении, но она оказалась платной и только под МакОСь.

              Мне же хотелось, чтобы LESS файлы процессировались на лету по запросу веб-сервером и, следовательно, подключались также, как и css. Такой подход лишен всех недостатков описанных выше. Однако, в этом случае чуть сложнее наблюдать за ошибками в синтаксисе LESS файлов: их можно будет видеть только в логах процессирующего сервера. Однако ошибки именно в синтаксисе LESS файлов у меня случались крайне редко, так что это не стало проблемой.

              Как этого добиться?
            • Улучшаем юзабилити за 5 минут

              • Translation
              • Tutorial
              В этой блогозаписи я намерена поделиться несколькими такими советами по увеличению юзабилити сайта, каждый из которых очень лёгок в реализации. Не все они кросс-браузерны, но всё равно они «глазурь на тортике»: читатель и не заметит, что их нет.

              1. Отображайте нажатия кнопок и кнопкоподобных ссылок


              Мой излюбленный совет. Когда стиль кнопки задаётся в CSS, или когда для отображения необычной кнопки используется рисунок (либо как фон, либо как элемент <img />), то кнопка не реагирует на нажатие во всех или в некоторых браузерах (зависит от ситуации). Вот какой простой уловкою вы можете дать знать посетителю сайта, что он и впрямь нажал на нечто нажимаемое:

              .mybutton:active {
                 position: relative;
                 top: 1px;
                 left: 1px;
              }
              

              Этим кодом кнопка смещается на 1 пиксел направо и на 1 пиксел вниз, когда её нажимают. Испробуйте: выглядит весьма убедительно.

              Есть другие, не менее быстрые варианты: придать границе свойство inset, указать свойству text-indent значение 1px, изменить направление градиентного фона (что можно сделать быстро, если для этого не придётся прибегнуть ко графическому редактору, то есть если где-то ещё на сайте используется готовый перевёрнутый градиент), или комбинация нескольких из них.

              2. Плавные переходы (CSS3 transitions)


              Читать дальше →
            • Vim+Python. Для начинающих

                Небольшой видеоролик про редактирование кода в vim.
                Краткое содержание.
                1. Использование аббревиатур.
                2. Плагин MRU
                3- Плагин tagbar
                Сделано с помощью свободного редактора OpenShot — для изготовления видеороликов в домашних условиях он оказался вполне пригоден.

                http://youtu.be/eagC7PcGcCk



                P.S. В комментариях советуют массу плагинов. Но их такое количество разных, что если у кого-то есть желание написать про них-я не против. Но моё время ограниченно и вынужден ограничиться самым, на мой взгляд, важным.
              • Почему ИТшнику стоит стать ИПшником и почему не стоит регистрировать ООО

                  В этой статье даются ответы на нижеследующие вопросы, основываясь на личном опыте и опыте коллег.

                  1. Почему стоит начать работать «в белую»
                  2. Почему на начальном этапе ИП лучше ООО
                  3. Что делать, если партнёров несколько

                  Если вы – начинающий или уже опытный фрилансер и подумываете о работе «в белую», но ещё точно не определились с вопросами «Стоит ли оно того?» и «ИП или ООО?», вэлком
                  под кат
                • Модальные окна на CSS

                  В наше время для различных сайтов нормой стали всевозможные всплывающие модальные окна — popup'ы — для регистрации, авторизации, информационные окна, — всевозможных форм и размеров. Также существует огромное количество плагинов к тому же jQuery для простого и удобного создания таких попапов — тот же Shadowbox, например.

                  Читать дальше →
                • Самовызывающийся конструктор Джона Резига и размышление о том, почему это решение не прижилось

                  • Tutorial
                  Настала пора мысленно вернуться на четыре с небольшим года назад ко блогозаписи «Simple “Class” Instantiation» из блога Джона Резига, прославленного создателя необыкновенно удобной библиотеки jQuery. И вернёмся.

                  Однако же, так как я вовсе не вижу её в результатах поиска на Хабрахабре по слову «Resig», то поневоле приходится думать, что эту полезную блогозапись никто не удосужился перевести (или хотя бы пересказать) за четыре прошедших года — мне придётся, стало быть, самостоятельно пересказать блогозапись Резига прежде, чем я исполню моё главное намерение: поразмыслить вслух, почему же предложенный Резигом способ решения указанной им проблемы так и не сделался общераспространённым. И перескажу. (Сам этот пересказ ужé был бы полезен читателю, даже кабы я к нему ничего от себя не прибавил. А я прибавлю.)



                  Шестого декабря 2007 года Резиг рассмотрел, что получается, когда в джаваскрипте используется операция «new» для создания объекта (в языках с классами мы сказали бы «экземпляра класса»):

                  function User(first, last){
                     this.name = first + " " + last;
                  }
                  
                  var user = new User("John", "Resig");
                  

                  Резиг справедливо подметил, что для начинающих программистов на джаваскрипте не вполне очевидно, что появление «this» в коде функции указывает на то, что перед нами конструктор объекта. (Я от себя в скобках прибавлю: если функция находится в недрах некоторой библиотеки, то это обстоятельство нуждается также и в документировании — а не то пользователь библиотеки не многим будет отличаться от новичка: исходный код с телом функции читают не все, тем более что он нередко применяется в минифицированном, не читаемом виде.)

                  Поэтому, рассудил Резиг, рано или поздно кто-нибудь попробует вызвать «User()» без «new» и тем получит на свою голову сразу две неприятные проблемы. Во-первых, переменная «user» останется неопределённою: функция «User()» задумана ведь как конструктор, а значения она никакого не возвращает. Во-вторых, что ещё хуже, попытки обращения к «this» изнутри такого (некорректно вызванного) конструктора неизбежно приведёт к засорению глобального пространства имён — а это чревато зловещими и трудноуловимыми последствиями. Обе проблемы Джон Резиг продемонстрировал на примере:

                  var name = "Resig";
                  var user = User("John", name);
                  // здесь переменная «user» не определена
                  // БОЛЕЕ ТОГО: значение «name» теперь ужé не «Resig»!
                  if ( name == "John Resig" ) {
                     // фигассе!…
                  }
                  

                  Читать дальше →
                • Готовим Linux на Asus U31SD/P31SD и подобных


                  После приобретения обновки в виде Asus P31SD и последующей установки на него Linux было очень обидно увидеть всего 6 часов автономной работы вместо желаемых 10-12. На Windows обратно вернуться не удалось (тут даже cywgin не помог), поэтому было решено запастись кофе и занять ближайшие выходные решением этих проблем.

                  Рассматриваем решение на примере Ubuntu 11.10.

                  P.S. В теории гайд подходит для всех ноутбуков с Sandybridge и Nvidia Optimus.
                  Читать дальше →
                • CSS хаки

                  Браузеры и стандарты. Вечная погоня. Из-за несоответствий стандартам, из-за разных способов рендеринга страниц большая часть времени веб-дизайнера уходит на то, чтобы загладить эти несоответствия (использовать хаки). В итоге, вместо эффективной работы, дизайнер вступает в противоестественные отношения с браузерами, теряя драгоценное время.
                  Читать дальше →
                • Масштабируемые JavaScript приложения

                    Более месяца назад в статье FAQ по JavaScript: задавайте вопросы был задан вопрос «Подскажите примеры хорошего подхода организации JS кода к сайту на достаточно высоком уровне. Как можно узнать подробнее практики реализации например gmail?».

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

                    Эта статья о том, как сделать крупное веб-приложение расширяемым и поддерживаемым: архитектура, подходы, правила.
                    Читать дальше →
                  • Введение в HTML5 History API

                    • Translation
                    До появления HTML5 единственное, что мы не могли контролировать и управлять (без перезагрузки контента или хаков с location.hash) — это история одного таба. С появлением HTML5 history API все изменилось — теперь мы можем гулять по истории (раньше тоже могли), добавлять элементы в историю, реагировать на переходы по истории и другие полезности. В этой статье мы рассмотрим HTML5 History API и напишем простой пример, иллюстрирующий его возможности.

                    Основные понятия и синтаксис


                    History API опирается на один DOM интерфейс — объект History. Каждый таб имеет уникальный объект History, который находится в window.history. History имеет несколько методов, событий и свойств, которыми мы можем управлять из JavaScript. Каждая страница таба(Document object) представляет собой объект коллекции History. Каждый элемент истории состоит из URL и/или объекта состояния (state object), может иметь заголовок (title), Document object, данные форм, позиция скролла и другую информацию, связанную со страницей.

                    Основные методы объекта History:
                    1. window.history.length: Количество записей в текущей сессии истории
                    2. window.history.state: Возвращает текущий объект истории
                    3. window.history.go(n): Метод, позволяющий гулять по истории. В качестве аргумента передается смещение, относительно текущей позиции. Если передан 0, то будет обновлена текущая страница. Если индекс выходит за пределы истории, то ничего не произойдет.
                    4. window.history.back(): Метод, идентичный вызову go(-1)
                    5. window.history.forward(): Метод, идентичный вызову go(1)
                    6. window.history.pushState(data, title [, url]): Добавляет элемент истории.
                    7. window.history.replaceState(data, title [, url]): Обновляет текущий элемент истории
                    Читать дальше →
                  • Бесплатные образы Windows для тестирования сайтов в Internet Explorer

                      14 мая Microsoft обновили набор образов для тестирования сайтов в Internet Explorer.

                      Теперь под Windows XP остался только IE6.
                      IE7 есть под Windows Vista.
                      Также добавили образы Windows 7 c IE8 и IE9.
                      Читать дальше →
                    • Пять бесплатных инструментов для выбора цветовой схемы сайта

                      • Translation
                      Один из самых важных факторов при создании уникального и узнаваемого дизайна — цвет. Грамотный выбор цветовой схемы может определить успех или провал сайта. Когда посетитель бросает первый взгляд на веб-страницу, то выбранные вами цвета посылают ему мгновенное сообщение об этой странице. К счастью, существует много инструментов, которые помогут выбрать правильную цветовую схему. Вот пять лучших из них.
                      Читать дальше →
                    • Команда dd и все, что с ней связано


                        В UNIX системах есть одна очень древняя команда, которая называется dd. Она предназначена для того, чтобы что-то куда-то копировать побайтово. На первый взгляд — ничего выдающегося, но если рассмотреть все возможности этого универсального инструмента, то можно выполнять довольно сложные операции без привлечения дополнительного ПО, например: выполнять резервную копию MBR, создавать дампы данных с различных накопителей, зеркалировать носители информации, восстанавливать из резервной копии данные на носители и многое другое, а, при совмещении возможностей dd и поддержке криптографических алгоритмов ядра Linux, можно даже создавать зашифрованные файлы, содержащие в себе целую файловую систему.
                        Опять же, в заметке я опишу самые часто используемые примеры использования команды, которые очень облегчают работу в UNIX системах.
                        Читать дальше →