среда, 29 апреля 2009 г.

Восстановление D-Link DIR-130 после не удачной прошивки

Музыка: I.N.I - Desimal Tribute Mix (Скачать)

Пару недель назад установил я на свой DIR-130 новую прошивку с ftp://ftp.dlink.ru/, после чего аппарат скоропостижно скончался. Времени отнести его в сервис (благо роутер пока ещё на гарантии) в рабочее время всё как-то не находилось, вот и решил попробовать решить проблему своими силами.
Оказалось, что для восстановления DIR-130 после не удачной прошивки, нужно совершить всего лишь несколько простых телодвижений:
  1. Качаем с ftp://ftp.dlink.ru/ прошивку.
  2. Втыкаем витую пару от компьютера в любое LAN гнездо роутера.
  3. Настраиваем вручную параметры соединения на компьютере:
    • IP-адрес: 192.168.0.2
    • Маска подсети: 255.255.255.0
  4. Выключаем питание роутера.
  5. Зажимаем кнопку Reset (например зубочисткой).
  6. Включаем питание роутера и держим Reset зажатым 5 секунд.
  7. В браузере переходим по адресу http://192.168.0.1/.
  8. На открывшейся страничке указываем файл с прошивкой из п.1 и нажимаем Send.
  9. Ждём, пока прошивка установится (~2 минуты).
  10. После этого DIR-130 перезагрузится и запустится с новой прошивки.

среда, 15 апреля 2009 г.

SyntaxHighlighter 2.0. Подсветка синтаксиса программного кода в блоге

Музыка: LTJ Bukem - Earth Volume 1 >> LTJ Bukem - Earth Volume 2

Обустраивая свой блог, в предыдущей статье столкнулся с необходимостью подсветки кода исходников в блоге. Google находит много всяких разных подсветчиков по запросу "подсветка кода в blogger", но мне понравился скрипт SyntaxHighlighter.
SyntaxHighlighter - это полнофункциональный самостоятельный скрипт подсветки синтаксиса (code syntax highliter) поддерживающий кучу языков, имеющий удобный небольшой тулбарчик с кнопками, позволяющими выводить исходник в отдельном окне и копировать его в буфер обмена. Скрипт абсолютно мультиплатформенный и может работать в любом блоге хоть в WordPress, хоть в Joomla!, хоть в Blogger.com.
Итак, хватит о том, какой SyntaxHighlighter хороший и красивый, далее о том, как его установить в свой блог на blogger.com.
  1. Зайди на страничку своего блога, далее Настроить -> Макет -> Изменить HTML
  2. Добавь в код своей странички, непосредственно перед закрывающим тэгом </head> следующий код:

    <link href='http://bitbucket.org/alexg/syntaxhighlighter/raw/8815b7f713eb/Styles/shCore.css' rel='stylesheet' type='text/css'/>
    <link href='http://bitbucket.org/alexg/syntaxhighlighter/raw/8815b7f713eb/Styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>
    <script src='http://bitbucket.org/alexg/syntaxhighlighter/raw/8815b7f713eb/Scripts/shCore.js' type='text/javascript'/>
    <script src='http://bitbucket.org/alexg/syntaxhighlighter/raw/8815b7f713eb/Scripts/shBrushPhp.js' type='text/javascript'/>
    <script src='http://bitbucket.org/alexg/syntaxhighlighter/raw/8815b7f713eb/Scripts/shBrushXml.js' type='text/javascript'/>
    <script src='http://bitbucket.org/alexg/syntaxhighlighter/raw/8815b7f713eb/Scripts/shBrushCSharp.js' type='text/javascript'/>
    <script type='text/javascript'>
    SyntaxHighlighter.config.bloggerMode = true;
    SyntaxHighlighter.all();
    </script>
    Если ты обратишь внимание, на текст свойства src тэга script, то увидишь, что в 4, 5 и 6-й строках мы подключаем необходимые нам языки (PHP, HTML и C#). Для подключения любого другого языка нужно, всего лишь, скопировать любую из этих трёх строк и изменить имя подключаемого файла на необходимое. Полный список поддерживаемых языков, их алиасов и файлов, необходимых для их подсветки, можно найти на сайте разработчика.

  3. Сохрани изменённый шаблон.

  4. Теперь, чтобы исходники в блоге отображались с помощью SyntaxHighlighter, тебе необходимо заключать куски кода в тэги <pre class="brush: php"></pre>, заменяя значение свойства brush на алиас языка, синтаксис которого необходимо подсвечивать. Список поддерживаемых алиасов можно посмотреть на сайте разработчика. Например, в этой статье я использовал нижеприведённый код:

    <pre class="brush: html">
    &lt;p&gt;Пример HTML-кода&lt;/p&gt;
    </pre>
Всё хорошо, но есть одно НО, для того, чтобы всё корректно работало, необходимо внимательно следить, чтобы в исходниках, которые ты вставляешь в блог, символ "<" был заменён на "&lt;".

среда, 8 апреля 2009 г.

Классы, их наследование и объекты "на пальцах"

Часто приходится объяснять студентам "на пальцах", что такое "классы", "объекты" и что значит это "наследование" в ООП. И вот недавно, объясняя эти вещи студентам в очередной раз, написал небольшой "жизненный" пример призванный облегчить переход мозга юного специалиста к объектно-ориентированному мышлению.

Итак, что же такое классы и их наследники и чем они отличаются от объектов.

Возьмём, к примеру, класс Стол. Этот класс обладает свойствами: Длина, Ширина, Высота. И имеет метод, например: Стоять.
У класса Стол есть наследники (дочерние классы). Например, класс ПисьменныйСтол и КомпьютерныйСтол. Эти классы наследуют от родительского класса Стол все его свойства (Длина, Ширина, Высота) и методы (Стоять), но класс ПисьменныйСтол, по мимо унаследованных от родительского класса Стол свойств и методов, может иметь дополнительное своство КоличествоЯщиков и метод ВыдвинутьЯщик. Также и класс КомпьютерныйСтол может иметь свойство КоличествоСекцийДляCD и метод ВыдвинутьСтолешницу.
Стол
, КомпьютерныйСтол и ПисьменныйСтол -- это классы.
Почему?
Потому что это некоторые сущности, которые описывают некий набор свойств и поведений характерных для всех столов (класс Стол) или только для компьютерных столов (класс КомпьютерныйСтол) или только для письменных столов (класс ПисьменныйСтол).
Но тогда что же такое объект?
Объект -- это стол за которым ты сейчас сидишь (причём скорее всего это объект класса КомпьютерныйСтол). Объект -- это (в большинстве случаев) экземпляр некоторого класса. Также как твой компьютерный стол является экземпляром класса КомпьютерныйСтол.

Перенося всё это в PHP код получим:

<?php

/**
* Стол
*/
class Table {
/**
* Длина стола
* @var float
*/
public Length;

/**
* Ширина стола
* @var float
*/
public Width;

/**
* Высота стола
* @var float
*/
public Height;

/**
* Осуществляет стояние стола
*/
public function Stand() {

}
}

/**
* КомпьютерныйСтол
*/
class ComputerTable extends Table {
/**
* Количество секций для CD
* @var int
*/
public CDSectionsCount;

/**
* Выдвигает столешницу с клавиатурой
*/
public function MoveOutTabletop() {

}
}

/**
* ПисьменныйСтол
*/
class Desk extends Table {
/**
* Количество ящиков
* @var int
*/
public DeskDrawerCount

/**
* Выдвигает ящик с указанным номером
* @param int $DeskDrawerNumber Номер выдвигаемого ящика
*/
public function MoveOutDeskDrawer($DeskDrawerNumber) {

}
}

$MyTable = new Table(); // а вот $MyTable -- это уже объект класса Table
$MyTable->Width = 1;
$MyTable->Height = 0.7;
$MyTable->Length = 3;

$MyComputerTable = new ComputerTable(); // $MyComputerTable -- тоже объект
$MyComputerTable->Width = 0.8; // и так как класс ComputerTable является
$MyComputerTable->Height = 0.7; // наследником класса Table, то он имеет
$MyComputerTable->Length = 0.5; // все теже свойства что и объект $MyTable
$MyComputerTable->CDSectionsCount = 5; // плюс новое свойство CDSectionsCount

$MyComputerTable->Stand(); // Аналогично свойствам наследуются и методы
$MyComputerTable->MoveOutTabletop();

?>


P.S.: PHP -- не лучший выбор для начала освоениея ООП, но сейчас я пишу в основном на нём.