Archive for мая, 2011

Уголок философа: Принципы и Адаптация

мая 12, 2011  |  Published in Уголок философа

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

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

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

Когда реакцию на любую ситуацию человек не обдумывает, а поступает по шаблону, то часто может оказаться, что он противопоставляет себя. Быть принципиальным — означает находиться в напряжении, принимать не всегда лучшие решения и подвергаться риску. Read the rest of this entry »

Tags:

Изучаем JavaScript, ч. 1: Функции: Основы работы с функциями в JavaScript

мая 11, 2011  |  Published in ClientSide, JavaScript, Новости

RubyDev учебник по клиентскому JavaScript

Почему именно по клиентскому? — Во-первых меня, по крайней мере пока, не интересует серверный javascript и не интересует node.js и т.п. Во-вторых, клиентский яваскрипт все-таки более популярен и конкретно он меня наибольшим образом интересует. В любом случае, если меня заинтересует серверный JavaScript и работа с Node.js, то будет выпущен соответствующий новый, отдельный цикл, уже по самой технологии, а не по самому JavaScript, поскольку отличия не существенны, это по прожнему тот же javaScript, только выполняющий работу иного характера.

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

В этом цикле статей будет также расмотрен фреймворк jQuery, который позволяет разработчику сконцентрироваться на написании логики не отвлекаясь на кроссбраузерность и так далее. Другими словами jQuery берет на себя весь рутинный труд.

Не смотря на то, что JavaScript является объектно-ориентированным (ОО) языком программирования, для него более родственной является концепция функций.

Любая функция в JavaScript — это экземпляр класса Function. Честно признаться, в JavaScript не того, что принято называть классами. Работу классов в JavaScript выполняют функции — конструкторы (или просто конструкторы), которые создают объекты с определенными предопределенными свойствами. Ниже приведен пример использования конструктора для создания объекта типа Array:

myArray = new Array(1,2,3,4,5); //1,2,3,4,5
myArray; //1,2,3,4,5
typeof myArray; //object
myArray.constructor; //возвращает конструктор Array

Пояснения:
1. Для создания новых объектов конструкторы вызываются через выражение new. Так же как и классы, функции конструкторы могут свои собственные свойства.
2. Оператор typeof используется для получения типа объекта. К сожалению он годится только для предопределенных типов: строки, числа, булевы значения. Все остальные объекты, например массивы и пользовательские объекты будут иметь тип object, что не о чем не говорит.
3. Метод constructor возвращает функцию-конструктор объекта — приемника.

Обявить функцию можно при помощи двух способов: выражения function и конструктора Function, ниже приведены примеры обоих:

function myFunction(){
alert("Hello!");
}

myFunction(); //Hello

var myFunction = new Function("alert(\"Bye-bye!\");");

myFunction(); //Bye-bye!

Пояснения:
1. Как видите, имя функции — это всего-лишь переменная, которая ссылается на объект функции в памяти компьютера.
2. Создание функций с использованием конструкторов — это моветон, посколько данный метод сильно сничает читабельность и использует eval для преобразования строки в код.
Read the rest of this entry »

Tags:

Уголок философа: Долой перфекционизм

мая 10, 2011  |  Published in Development Processes, Уголок философа

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

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

Недавно начал читать книгу «Человеческое, слишком человеческое» авторства Фридриха Ницше — очень познавательное чтиво, хотя написано очень тяжело из-за чего приходится по несколько раз перечитывать одно предложение. Там была выдвинута идея того, что, нет хорошего и плохого, и плохое не может породить хорошего. Мы можем лишь сравнить два примера и сказать какой из них лучше. Грубо говоря, нет ничего отрицательного — все лишь градиент положительного.

Таким образом код, который вы пишете не может быть говнокодом, он является отличным, замечательным кодом для тех условий в которых вы находитесь. Но ваш код не есть совершенным и никогда таким не станет! Вы должны осознать это и либо прекратить разработку, так как совершенства вы не достигните, либо продолжать писать код и пытаться достичь совершенства не в один присест, а итерациями, с каждой итерацией наращивая его качество и функциональность.

Итерационный подход — замечательный подход. Вы не делаете все и сразу, и выпускаете релиз через 5 лет,да еще и с кучей багов. Вы разбиваете весь процесс на кучу версий, а каждую версию на кучу более мелких итераций. Теперь, вы сфокусированы конкретно на выпуске продукта, который выйдет максимально быстро, будет содержать минимальное количество ошибок, которые можно перектыть патчем, либо в выпуске следущей версии.
Read the rest of this entry »

Tags:

Обратимые миграции в Rails 3.1

мая 10, 2011  |  Published in Ruby on Rails, Ruby on Rails 3, Базы данных

Миграции всегда были одной из основных «фишек» Ruby on Rails. В Rails 3.1 миграции приобретают еще один козырь, который упрощает процесс поддержки логики в up и down методах миграции. Если вам нужно немного восстановить свои знания о миграциях, я рекомендую прочитать официальный .

Давайте начнем с разбора примера миграции из Rails 3.0:

#db/migrate/20110505090317_create_posts.rb
class CreatePosts < ActiveRecord::Migration
  def self.up
    create_table :posts do |t|
      t.string :title
      t.text :body

      t.timestamps
    end
  end

  def self.down
    drop_table :posts
  end
end

Эта миграция создает в базе данных таблицу posts с двумя полями — title и body тип хранимых данных в которых соответственно string и text. Хэлпер timestamps создает поля типа datetime — created_at и updated_at. Для отката этой миграции нам просто необходимо удалить таблицу posts. Метод .down как раз и занимается откатом миграции — удалением таблицы posts. Когда Rails использует миграцию, миграция запускает метод .up. Для отката миграции (которая выполняется командой rake db:rollback) миграция выполняет метод .down.

Глядя на эту миграцию возникают два вопроса:

- Почему именно методы класса, вместо методов экземпляра класса?
- Для простых случаев почему бы не объявить только метод выполнения миграции и защитить миграцию от отката?

Замечательный человек Аарон Петерсон думает так же и решил упросить миграции.
Read the rest of this entry »

Tags: , ,