Рассылка закрыта
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
← Октябрь 2001 → | ||||||
2
|
3
|
4
|
5
|
6
|
7
|
|
---|---|---|---|---|---|---|
8
|
9
|
11
|
12
|
13
|
14
|
|
15
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
26
|
27
|
28
|
|
29
|
30
|
31
|
Статистика
за неделю
Программирование для начинающих #24
Программирование для начинающихВыпуск 24
Ведущий рассылки: Вячеслав Мацнев | e-mail: stac@stacmv.net |
|
В этом выпуске читайте: |
Если Вы более или мнение образованный человек, то Вы, наверняка, имеете свое собственное мнение насчет всего, что Вас окружает в жизни. Часто мы довольно сильно держимся за свое мнение, и нас нелегко переубедить или навязать другое мнение. У разных людей это свойство развито в разной мере. Но речь сейчас не об этом. Бывают ситуации, когда мы под влиянием каких-либо обстоятельств меняем свое отношение к вещам без всякого давления со стороны. Например, многие из вас, подписавшись на эту рассылку, изменили свое мнение о программировании. Теперь программирование означает для вас нечто другое, не то, что раньше. Может кто-то изменил свое отношение к конкретным языкам программирования, к каким-то программам, технологиям. Я, похоже, начинаю менять свое отношение к HTML. Недавно мне довелось "проникнуть" в ближайшее будущее HTML и ближайшее его прошлое (как бы странно это не звучало). Для кого-то и будущее и прошлое, которое я познал, является настоящим. Ну ладно, хватит философии. Рассказываю... В сентябрьском номере журнала Chip я прочел статью о применении CSS2 (каскадных таблиц стилей, уровень 2) в вебдизайне. Одной из основных идей статьи была следующая. С приходом CSS дизайнерам можно будет отказаться от распространенного сейчас, так называемого, табличного дизайна страниц. CSS предоставляют дизайнеру средства для размещения элементов (различных меню, навигационных панелей, ...) на странице. В настоящее время это часто делается с помощью таблиц. Описанные в статье возможности очень интересны дизайнерам, но их широкое применение будет возможно еще не скоро. Причина этого кроется в неоднозначном интерпретировании свойств CSS разными браузерами. Причем, по словам автора статьи, особенно "отличился" Internet Explorer. Он использует не соответствующий стандарту алгоритм определения ширины элементов страницы. Что приводит к очень некрасивым вещам. Но тем не менее, я уже начинаю думать об активном применении CSS в своих проектах (сейчас я тоже применяю CSS, но мало). Это будущее. Ближайшее. Окунуться в прошлое помог тот же номер Chip'а. На прилагаемом CD я нашел Pygmy Linux. Эта версия основана на Slackware. Особенность Pygmy Linux состоит в том, что она устанавливается в существующий DOS/Windows раздел и запускается прямо из DOS (это похоже на BeOS 5 Personal). Установка этой ОС заключается в распаковке zip архива. Что я и сделал. Pygmy Linux поставляется с минимальным набором программ. Графический интерфейс (X) отсутствует. Этот факт вызвал у меня всплеск энтузиазма и радости. Ведь, теперь я смогу установить все сам с нуля (как и положено тому, кто хочет разобраться в Unix). А возможности для этого есть. Можно использовать ПО, подготовленное для Slackware, а также широко распространенные Red Hat Packages (.rpm). Современные дистрибутивы Linux не предоставляют начинающему возможности построить свою собственную систему. Они все решают за него. Они идут по стопам Windows. Понятно, что ни к чему хорошему это не приведет. Причем здесь прошлое HTML? В Pygmy Linux штатным браузером является Links (аналог Linx). Это текстовый браузер. Но он поддерживает такие функции, какие мне не удалось найти (может они и есть) в современных браузерах. Одная из таких функций - поддержка тега <LINK>. Подробнее об этом сегодня в рубрике HTML. Когда я посмотрел сайт рассылки и ее выпуски в Links, то мне не понравилось то, что я увидел (довольно много "ляпов" в моем HTML коде) и, одновременно, понравилось то, что я мог бы увидеть. К этому моменту я уже отказался от некоторых используемых мной таблиц в пользу плавающих блоков. Однако Links не поддерживает всего этого DHTML и прочего. Поэтому, я думаю, век табличного дизайна еще не прошел. Друзья, вебдизайнеры, посмотрите свои странички в текстовом браузере. Это что-то. (Понимаю, что не у всех установлен Linux, поэтому, если кто-нибудь видел текстовый браузер для DOS/Windows, намекните, пожалуйста, где его можно взять.). А мое отношение к HTML изменилось следующим образом. Я уже не считаю графические "красивости" такими уж красивыми. CSS, DHTML, DOM, JavaScript. Это все здорово. Но и без этого тоже хорошо.
Тег <LINK> определяет взаимоотношения между документами, т.е. отношения данного документа к другим документам. С помощью LINK можно указывать на документы, логически связанные с данным. Можно указать на оглавление, индекс, следующую страницу в цепочке, предыдущую, первую, последнюю, домашнюю страничку сайта, глоссарий и др. Также с помощью LINK внешний файл со стилями (.css) связывается со страницей. В большинстве современных учебников, когда речь заходит о LINK, говорят именно о связи с таблицей стилей и приводят соответствующий пример. При этом применение тега для связи с оглавлением и т.п. не описывается, как будто этого не существует. Тег LINK всегда был для меня загадкой. Я не имел понятия о том, как он работает, использовал его только для связи с таблицей стилей. Поэтому я и не рассказывал о нем раньше. Все дело в том, что современные браузеры просто либо не понимают этот тег либо никак не показывают, что они его понимают. Я долго думал, зачем мне указывать ссылку на домашнюю страницу с помощью LINK, если по ней нельзя кликнуть или перейти другим образом. Но старый добрый Links показал мне, как это может быть использовано. Все связи, указанные в тегах LINK (их может быть несколько) он отображал на экране и давал возможность по ним перейти. Кажется такой же возможностью обладает браузер Mosaic (для каждой связи он создает кнопку на панели инструментов). Но сам я этого не видел. LINK имеет несколько атрибутов. Атрибут REL определяет отношение какого-то документа к данному. Атрибут HREF содержит URL этого (какого-то) документа. REL может принимать значения: stylesheet (таблица стилей), home (домашняя (главная) страница), toc или contents (оглавление, содержание; toc - table of contents), index (индекс, указатель), glossary (глоссарий, список терминов), copyright (страница с правовой информацией), up или parent (родитель, страница верхнего уровня), child (дочерняя страница), next (следующая в цепочке), previous (предыдущая), first (первая), last или end (последняя), help (страница помощи). Атрибут REV определяет отношение данного документа к другому. Например, если для данной страницы (page1.htm) страница contents.htm является оглавлением, то соответствующий тег LINK запишется так:
<HEAD> <TITLE>Страница 1</TITLE> <LINK REL="contents" HREF="contents.htm" </HEAD> Обратная связь может быть (не обязательно) записана в файле contents.htm:
<HEAD> <TITLE>Оглавление</TITLE> <LINK REV="contents" HREF="page1.htm" </HEAD> Это означает, что страница contents.htm является оглавлением для page1.htm. Как вы могли заметить тег LINK употребляется в заголовке html документа (между тегами <HEAD> </HEAD>). Атрибут REV может также принимать такие значения: made, author, editor, owner, publisher. В HREF при этом обычно указывается ссылка на email (типа mailto:someaddress@some.host). Для связи с таблицей стилей может быть необходимым еще атрибут TYPE со значением "text/css":
<LINK REL="stylesheet" TYPE="text/css" HREF="index.css"> Я еще не очень хорошо изучил возможности применения тега LINK, но мне кажется, что REL и REV может принимать любые значения. Как-нибудь потом разберемся в этом вопросе.
Вопрос: Насчет 23-го выпуска (Таблицы в HTML)... В каком редакторе это всё писать? (Viva*) Ответ: HTML код нужно писать в неформатирующем текстовом редакторе (типа Блокнот, Bred и т.п.) или в специальном HTML редакторе. Ниже (в рубрике ОКРУЖЕНИЕ) перечислены некоторые такие редакторы. Все они бесплатны. Вопрос: Как считать файл не с начала, а с определенного места, когда он открыт в режиме input? (Юлия) Ответ: Когда файл открыт for INPUT, это подразумевает только последовательный доступ к содержимому файла. Т.е. чтобы прочесть какую-то строку, нужно прочесть и все предыдущие. Если нужно часто читать произвольные строки, то обычно пишутся специальные процедуры или функции. Этот прием детально рассмотрен в рубрике СТРАТЕГИЯ И ТАКТИКА в этом выпуске.
Сегодня мы рассмотрим пример написания простой программы, которая будет модифицировать html файл. Хочу заметить, что врядли рассмотренная здесь программа понадобится всем. Но этого и не требуется. Главное, чтобы вы обратили внимание на приемы (методы, техники), которые будут использоваться в этой программе. Наверняка, у вас возникнут идеи, где вы сможете эти приемы использовать. Напишите мне о этом. Итак, приступим. Прежде чем поставить задачу, я хочу рассказать немного об условиях, в которых эта задача должна будет решаться. Сейчас у меня установлена ОС Windows 98. Ее оболочка (Explorer) заменена на альтернативную, а конкретно LiteStep (основана на идеях Linux'овских менеджеров окон AfterStep и WindowMaker, которые в свою очередь основаны на идеях интерфейса NextStep). Когда-нибудь покажу вам скриншот. Конфигурирование оболочки осуществляется путем редактирования нескольких конфигурационных файлов, в основном одного - step.rc У меня на desktop'е (использую оригинальную терминологию, чтобы не возникало путаницы с рабочим столом Windows) имеется shortcut, указывающий на html файл с программой телевизионного вещания. В step.rc есть соответствующая запись. Это "Удобная ТВ программа" (tv.schedule.tvserv) - рассылка Subscribe.ru. При клике на shortcut'е открывается броузер и отображает ТВ программу. При этом, чтобы перейти к нужному дню недели нужно кликнуть по соответствующей ссылке. Мне бы хотелось, чтобы при клике на shortcut'е браузер сразу показывал программу на сегодня. После некоторых размышлений я пришел к выводу, что это можно сделать так: ТВ программа хранится в файле tv.html. Для каждого дня в этом файле есть HTML закладка (якорь) вида <A name=d0></A>. Где цифра после буквы "d" обозначает номер дня (0 - понедельник, 6 - воскресенье). Чтобы перейти к, например, пятнице, нужно направить браузер по ссылке: file://c:\tv.html#d4. (ТВ программа у меня валяется в корне диска c:). Мои попытки сделать это из оболочки ни к чему не привели (может у вас получится). Поэтому остается сделать так чтобы браузер сам заставлял себя переходить по требуемой ссылке. В протоколе HTTP есть нужная нам фича, с помощью которой можно заставить браузер загрузить требуемую страницу через заданное время. Ее можно использовать в HTML с помощью тега <META>. Итак, я создал файл c:\tvstart.htm со следующим содержанием:
<HTML> <!--tvstart.htm--> <HEAD> <TITLE>ТВ программа на сегодня</TITLE> <META HTTP-EQUIV="refresh" CONTENT="1;url=tv.html#d4"> </HEAD> <BODY> <CENTER><A HREF=tv.html#d4>ТВ программа на сегодня</A></CENTER> </BODY> </HTML> Если открыть этот файл в браузере, то через 1 секунду в него будет загружена страница tv.html и осуществится переход к якорю d4. И мы увидим программу на сегодня - на пятницу. Но завтра будет суббота, значит нам нужно будет изменить файл tvstart.htm. Это мы и поручим нашей программе. Договоримся, что файл tvstart.htm может содержать произвольный html код, но в нем обязательно должны быть следующие строки (в терминах Бейсика):
"1;url=tv.html#d" "<A HREF=tv.html#d" Наша программа будет искать эти строки и менять номер дня. Программу эту можно написать легко и просто, но мы так делать не будем, сделаем ее чуть посложнее. Текст программы TVSTART.BAS
'#program TVstart DECLARE SUB WriteLine (f$, l AS LONG, buf$, replace AS INTEGER) DECLARE SUB ReplaceChar (s$, chpos!, ch$) DECLARE FUNCTION GetDayOfWeek! (date AS STRING) DECLARE FUNCTION ReadLine! (f$, l AS LONG, buf$) DIM pattern$(1 TO 2) 'массив строк для поиска DIM i AS LONG 'счетчик строк в исходном файле CONST HTM = "c:\tvstart.htm" pattern$(1) = "1;url=tv.html#d" pattern$(2) = "<A HREF=tv.html#d" Не правда ли, создается впечатление, что эта программа сложна для решаемой задачи, а точнее не оптимальна? Все верно. Можно бы написать более быструю и короткую программу. Но и у этой программы есть достоинства. Во-первых, она проста для понимания. Основная программа довольно короткая и простая, а все "тонкости" вынесены в отдельные подпрограммы. Во-вторых, каждая из подпрограмм тоже довольно коротка и понятна. Вы можете возразить, что вся программа в целом получилась большой и не такой уж простой. Я, конечно же, соглашусь с вами, друзья. Соглашусь, но расскажу о ситуации, которая сложилась с написанием программ в настоящее время. А дело обстоит так. Современные программы намного больше нашей программы и намного сложнее (в целом), но они, как правило, состоят из из огромного числа подпрограмм, каждая из которых довольно проста. И программисты работают не с целой программой, а с отдельными подпрограммами. Пишут, модифицируют, о том, что представляет собой вся программа, они могут и не знать. Такой подход к разработке программ я описал в выпуске 18 и назвал "принципом Джона" (это термин моего изобретения). Даже если программа не очень большая и сложная, часто выгодно применять принцип Джона - принцип разделения программы на небольшие независимые подпрограммы. Очень важным здесь является слово "независимые". Из-за этого мы даже готовы идти на некоторые издержки и терпеть не самую высокую производительность программы. Возьмите подпрограммы ReplaceChar, ReadLine(), WriteLine, GetDayOfWeek(). Эти подпрограммы можно назвать независимыми. Они не зависят от основной программы и от других подпрограмм, никак с ними не связаны. Это открывает перед нами уникальные возможности. Во-первых, мы можем использовать любую из этих подпрограмм в других программам без изменений! Во-вторых, мы можем модифицировать любую из этих подпрограмм, улучшить, оптимизировать ее, и это не скажется отрицательно на работе всей программы и нам не придется изменять код других частей программы. Например, очевидно, что функция GetDayOfWeek() в настоящее время имеет существенный недостаток - работает только для дат 2001-го года. В будущем мы можем переписать эту функцию так, чтобы она правильно работала с любыми датами. Переписывать другие части программы не придется! Таким образом, принцип Джона уже одержал победу в прикладном программировании. Написание оптимизированных под конкретную узкую ситуацию программ - в основном, удел системных программистов. Мне хотелось бы услышать (или хотя бы увидеть) ваши комментарии, мысли, замечания, предложения относительно программы TVstart. Как легко для вас оказалось в ней разобраться? Что осталось не понятным? Как бы вы написали эту программу? Особенно мне интересно мнение тех, кто планирует участвовать в наших проектах по написанию программ. Мой адрес: stac@stacmv.net . А у нас остался еще вопрос о том, кто и когда будет запускать программу TVstart. Если придется запускать ее самостоятельно, то это будет не на много лучше редактирования файла tvstart.htm. Поэтому запуск программы нужно автоматизировать. Для этого есть несколько возможностей. Можно: 1) Поместить программу или ее ярлык в группу Автозагрузка Windows или прописать ее вызов в реестре или win.ini. Но это, по-моему, будет не очень красиво - при запуске Windows будет открываться DOS окно. И чтобы оно закрывалось автоматически и, к тому же, всегда было минимизировано, нужно будет редактировать файл tvstart.pif. 2)Прописать вызов программы в файле autoexec.bat. Это уже лучше, программа будет выполняться в родной среде :). 3)Прописать вызов программы в файле winstart.bat. А это уже интереснее, т.к. о такой возможности знают далеко не все. Файл winstart.bat должен находиться в каталоге Windows. Он вызывается непосредственно перед загрузкой Windows GUI. Я поступил согласно последнему варианту - создал файл winstart.bat в каталоге Windows:
@ECHO Running TVstart... @c:\_.bat\tvstart.exe @ECHO Done. В каталоге _.bat я помещаю свои batch файлы и другие программы, являющиеся внешними командами DOS. Кстати... Наша программа, как мы уже заметили, не оптимизирована. Но оптимизировать ее не имеет смысла. Я провел замеры скорости ее выполнения. На моем компьютере она выполняется примерно за 5 миллисекунд. Конечно эта цифра получена для рассмотренного выше файла tvstart.htm и сильно зависит от его размера. Так, при увеличении этого файла в 4 раза (я скопировал содержимое файла в буфер обмена и вставил его 3 раза), время выполнения программы увеличилось до 11 миллисекунд. Для справки: процессор моего компьютера работает на частоте 500 МГц.
Основу этой подборки составили редакторы, помещенные на CD к августовскому номеру журнала Chip(www.ichip.ru), где вы их и сможете найти, если удастся достать Chip #8 (его еще можно встретить в продаже).
Ок. Это все, что я хотел сказать сегодня. "Все будет чики-пики. Бай!" (c)Ultra Productions
|
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу | Рейтингуется SpyLog |
В избранное | ||