Статьи

Linux'ы и неттоп IRU 115

Мой обзор самого неттопа, общие впечатления и заметки о его производительности можно найти здесь — http://inf1.info/nettopiru. Теперь подробнее о том, какие Линуксы я на него пыталась установить, что удалось, а что нет; несколько слов о графических средах.

Основу моего старого компьютера составлял процессор Celeron с частотой в 2.2Ггц, видеокарта была интегрированной (компьютер 2003 года выпуска). Современные дистрибутивы Linux (с их GUI) он уже давно не тянул, но в остальном все мои запросы решал. К новому компьютеру было основное требование - бесшумность. Решила остановиться на неттопе. К сожалению, оказалось, что его бесшумность весьма условное понятие.

На неттоп устанавливались (с успехом и без) следующие дистрибутивы:
Xubuntu 11
Debian 6
Simply 6 (beta)
Simply 5.0.2
AltLinux Master 5.0.2
Fedora 15 (Gnome 3)
Fedora 15 (KDE)

У данной модели компьютера нет привода для дисков, поэтому установка производилась с флэшки. Для создания загрузочного устройства USB c Линуксами на борту пользовалась утилитами Unetbootin и YUMI (Your Universal Multiboot Installer). Следует отметить, что с помощью второй удавалось благополучно создавать мультизагрузочную флешку только с дистрибутивами и системными утилитами, упомянутыми в ее списке. Сторонние для нее дистрибутивы не распаковываются, а помещаются в специальный каталог как есть, и установить их легко и беззаботно не получится. Программа Unetbootin - более универсальная вещь для создания загрузочных девайсов из образов iso, но способна установить на usb-устройство только одну систему.

С флэшки не удалось установить Simply 5.0.2 и AltLinux 5.0.2. В первом случае возникала какая-то ошибка памяти. Во втором вроде бы шло все хорошо, но при установке пакетов появились сообщения об ошибках, и установка завершалась ничем. Simply 6.0 установилась благополучно, но почему-то на английском языке. Это бы ладно, но после установки драйвера nvidia слетел звук, да так, что колонки гудели, как будто ни к чему не подключены. Восстановить звук не удалось. Поэтому до лучших времен, дорогой AltLinux.

Xubuntu действительно удобна и при установке, и при использовании. Ее загрузчик подключил все Линуксы, установленные до этого. Следовательно, Xubuntu надо ставить последней, если не хочется или не умеется конфигурировать grub. Производительность Xubuntu на неттопе нормальная. Комфортно работать можно. Например, Blender работает шустро, а вот Inkscape несколько неповоротливо. В обоих программах почему-то не работают горячие клавиши.

В Debian стоило установить драйвер видеокарты, как графический режим перестал запускаться, выдается ошибка. Лечится удалением xorg.conf. Пока живем без драйверов.

Fedora Gnome 3. Вот это интерфейс! Афигеть. Жаль, что неудобно и непривычно. А так круто вообще. Отсутствие привычных вещей на своих местах пугает. А где кнопка выхода? Неужели все открывают терминал и пишут reboot? Прям как в магазине я и два продавца прыгали вокруг MeeGo и так и не нашли как отрубить это чудо техники.

Вместо этого была установлена Fedora KDE. При установке было следующее. Предложили выбрать язык. Выбираю русский. Система ставится на английском, весь интерфейс английский, а по умолчанию ввод с клавиатуры осуществляется на русском. То, что по умолчанию язык переключается двумя шифтами, как-то мы не догадались. Поэтому пароль и имя вводила циферками. После установке пришлось пользователя убить, другого добавить. Сейчас стоит красавица вся на английском такая, разделы дисков я почему-то вручную подключаю, пакеты с поддержкой русского языка сама доустанавливаю. Прям как в старые добрые времена. Inkscape работает быстрее, чем в Xubuntu. В нем и Blender горячие клавиши работают. Хотя впечатление о шрифтах и быстродействии самой системы хуже, чем у Xubuntu.

Короче в Linux на этом неттопе работать можно, причем в любой графической среде. Что касается самих этих сред, то есть ощущение, что со временем большую популярность набирают так называемые "легкие" среды типа Xfce (по сравнению с 2006-2008 годами). Красота и спецэффекты зачастую дополнительной функциональности не добавляют, а наоборот вводят в заблуждение и мешают работать (похоже всё функционально полезное, что надо было изобрести в этой области, уже изобрели давно). Видимо старый верный Gnome канет влету, т.к. тот же Xfce по общему впечатлению его переплевывает.

Мнение об образовательных программах дополнительного образования детей по информатике

Летом этого 2014 года я завершила свою работу в учреждении дополнительного образования детей. Я начинала как педагог дополнительного образования и, хотя в последствие стала заниматься методической работой, имела часы педагогической деятельности. Таким образом у меня более чем десятилетний опыт преподавания компьютерных технологий детям. Хотелось бы отметить несколько моментов, которые касаются программ дополнительного образования.

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

Таким образом я прихожу к выводу, что в сложившихся условиях дополнительное образование детей актуально до 8 класса, и, следовательно, образовательные программы дополнительного образования (ДО) следует разрабатывать с учетом этого.

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

По некому положению количество часов первого года должно быть не более 144, а второго и последующего не более 216. Обычно расписание в учреждениях дополнительного образования составляется так, что в первый год обучения в неделю получается 2 занятия по 2 академических часа (всего 4 часа), а во второй год — по 3 занятия по 2 часа (всего 6 часов). На мой взгляд и во второй год также может быть достаточно двух занятий в неделю, как и в первый год. Это позволяет не создавать лишнюю нагрузку на детей. Три занятия имеет смысл оставить, если программа будет облегченной, содержащей развлекательно-познавательные моменты и рассчитанной либо на младший возраст, либо на детей, которые не «хватают на лету», и темп обучения должен быть снижен.

Возраст, с которого лучше начинать изучения предмета, конечно зависит от специфики предмета. Например, в учреждении, где я работала, авиамоделизм актуален с первого класса, а вот радиотехника — как минимум с класса 5-го. На свои занятия я преимущественно набирала детей с 5-го класса, но было немало и четвероклассников. У других педагогов, преподающих информационные технологии, были дети и более младшего возраста. Однако их программы, в отличие от моей, почти не содержали программирования. Также по некоторым иным причинам, связанным с психологией детей, я считаю, что нет необходимости детям младше 10 лет активно изучать компьютерные технологии.

Таким образом программы по количеству часов могут быть такими (1 год + 2 год + 3 год):

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

Если программа двухлетняя и ориентирована на младший школьный возраст, то единственный вариант — 144 + 144. Также данный объем подойдет для любого возраста.

Второй вариант (144 + 216) подойдет для более старшей возрастной группы (например, 6-7 класса), где можно «по быстрому» дать представление о компьютерных технологиях.

Трехлетние варианты желательно должны начинаться не старше 5-го класса, так чтобы к 8-му уже закончиться. Вариант 144 + 216 + 144 уместен тогда, когда последний год приходится на 8 класс, и нагрузку надо снизить.

Если теперь взять возраст детей, то получится такая картина (младше четвертого класса не берем и охватываем разновозрастных на 1 год детей):

Классы Возраст начала обучения по программе ДО На какой возраст рассчитана программа ДО Объем
4(5)-5(6) классы 10-11 лет 10-12 лет 144 + 144
144 + 216
4(5)-6(7) классы 10-11 лет 10-13 лет 144 + 144 + 144
144 + 144 + 216
144 + 216 + 216
5(6)-6(7) классы 11-12 лет 11-13 лет 144 + 144
144 + 216
5(6)-7(8) классы 11-12 лет 11-14 лет 144 + 144 + 144
144 + 216 + 144
6(7)-7(8) классы 12-13 лет 12-14 лет 144 + 144

Прежде чем рассматривать содержание образовательной программы, подумаем как она может называться. Я не имею ввиду основное название, типа «Лаборатория юного линуксоида» или «Компьютерный гений». Имеется в виду надпись, говорящая по какому предмету, виду деятельности данная программа. Существует ряд вариантов:

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

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

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

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

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

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

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

Также желательно пользоваться свободным программным обеспечением. Однако, если вы работаете в операционных системах семейства Windows, это не всегда бывает удобно и возможно. Например, KTurtle — среду программирования для детей — можно попробовать установить в Windows, однако не факт, что все получится. Поэтому в программах ДО по информатике желательно указывать ОС, на основе которой планируется обучение, и список ПО с ссылками на официальные сайты, где его можно получить.

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

Сравнение переменных в языках программирования C и Python

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

Как известно C относится к языкам со строгим определением типа переменных, а Python – с динамическим. В основном именно этим обстоятельством обусловлены различия при работе с памятью и, как следствие, с переменными.

В С мы обязаны сначала объявить переменную, а потом присваивать ей значение (хотя можно делать это в одном месте). В Python объявить переменную без присвоения ей значения невозможно в принципе, переменные как бы не объявляются вовсе, а сразу используются.

Когда в C мы объявляем переменные, то обязаны указывать их тип. Например, так: int base, float width. Тип переменной сообщает программе сколько памяти надо выделить под данные, и программа при обращении к переменной правильно может их прочитать (она читает определенное типом количество байт). В языке программирования C сведения о типе данных привязаны к переменным. Когда программа, созданная на C запускается, то все объявленные в ней переменные привязываются к определенным ячейкам памяти и уже не могут быть связаны с другими ячейками до конца выполнения программы.

В Python переменные не хранят информацию о типе данных, с которыми связаны. Сведения о типе привязаны к данным. Поэтому в Python не надо объявлять переменные заранее и не надо указывать их тип. Переменным все равно с чем их свяжут. Они появляются в момент присвоения им значения (count = 10, height = 1.45). Но, понятное дело, нельзя использовать в выражении переменную, которой не было присвоено значение ранее.

Можно сказать, в Python переменная в процессе выполнения скрипта может менять сколь угодно раз свой тип. На самом деле типа у нее просто нет.

Рассмотрим конкретный пример. Пусть есть вот такой код на языке C:

int qty;
scanf("%d", &qty);
qty = qty + 2;

Если вы не знаете язык, отмечу, что во второй строке у пользователя просто запрашивается целое число и присваивается переменной qty. Когда программа, содержащая такой код, запускается, то в памяти "бронируется" ряд ячеек под эту переменную. Устанавливается связь между именем qty и первой ячейкой блока памяти, отведенного под данные. Программа анализирует тип переменной и получат сведения, что ее значение простирается на четыре байта (в языке C integer обычно имеет длину в 4 байта). Переменная qty на все время выполнения программы прикреплена к определенным ячейкам. Нельзя оторвать имя qty от этих ячеек и связать с другими. Мы можем только менять содержимое определенных ячеек. Далее сначала запрашивается число у пользователя и кладется в qty, пусть это будет число 5 (понятно, что в памяти хранится двоичный код, но для наглядности на картинке десятичные цифры), затем это число увеличивается на два и содержимое ячеек переписывается.

Создание переменной и изменение ее значение в языке C

Еще раз отметим, что в данном случае память выделяется в момент запуска программы и ее объем не меняется в процессе выполнения. Не меняется и место: где выделилось, там и лежит.

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

int a = 3, num = 5;
int *pa; // это указатель
pa = &a; // записали адрес данных переменной a
printf("%d ", *pa); // получим 3
pa = #
printf("%d ", *pa); // получим 5

Да, указатели конечно тоже привязываются к определенным ячейкам. Под любой указатель (независимо от типа) в языке C выделяется 4 или 8 байтов (зависит от операционной системы). В указателе хранится адрес области памяти. А тип указателя сообщает на сколько простирается память определенного значения под этим адресом. Если в процессе выполнения программы сначала в указателе хранился один адрес, а затем другой, то получается интересная ситуация, когда с помощью одного указателя мы можем обращаться то к одному участку памяти, то к другому:

Изменение значения указателя

Если еще учесть, что в языке C есть специальные функции позволяющие захватывать участки памяти, то мы можем хранить в указателе адрес ранее недоступной памяти. т.е. динамически захватывать и освобождать память.

char *pch;
pch = (char *) malloc(10);
pch = "hello";
pch = NULL;

Динамическое выделение памяти в языке программирования C

В Python все переменные являются ссылками. Предположим, что они могут менять свои адреса "на корню", т.е. там, где хранится информация о переменных.

Все осложняется тем, что в Python есть изменяемые и неизменяемые типы данных. Числа и строки — это неизменяемые данные, а списки и словари — изменяемые. Разница не всегда очевидна, когда пытаются объяснить это так: строку и число мы не можем изменить, а список запросто. Например, a = "Hello". Попытка сделать так: a[0] = "h", чтобы получить "hello" вызовет ошибку. Но если есть список b = ['a', 'b', 'c'], то выражение b[0] = 'z' пройдет гладко, и b будет содержать ['z', 'b', 'c'].

Однако значение переменной a можно изменить так: a = "hello". На самом деле происходит следующее. Создается новый объект "hello", переменная привязывается к нему, а старый объект остается на прежнем месте. Поскольку на него больше не ссылается ни одна переменная, то он уничтожается.

a = "Hello"
a = "hello"
a = 12

Изменение значения переменной в языке программирования Python

Со списками, как изменяемыми объектами, несколько иная история. Предположим, переменная хранит сведения о том, где находится информация о списке. А сам список уже хранит сведения о том, как разбросаны в памяти его элементы. Когда меняется состав и содержание элементов списка, переменной все равно, ей положено знать, только где начинается список. Поэтому для переменной, а значит и для нас, список - изменяемый объект, т.к. переменная не устанавливает новую связь с другим объектом, а продолжает указывать на прежний.

nums = [100, 38]
nums[0] =  89
nums.append(26.5)

Изменение списка

В Python есть еще одна интересная вещь. Все изменяемые и некоторые простые значения неизменяемых объектов (0, 1 и т.п.) при присваивании их другим переменным не копируются, а просто связываются с еще одной переменной. В результате получаем множество ссылок на один объект. Эти объекты существуют до тех пор, пока есть хотя бы одна ссылка на них. Если на один изменяемый тип ссылается несколько переменных, то его изменение по одной из них можно увидеть через другую. А вот если тип неизменяемый, то изменение значения одной переменной создает новый объект, а другая переменная остается связанной с прежним значением.

dt = [1, 'a']
n = 0
mdt = dt
m = n
mdt[1] = 'b'
m = 100
del dt

Поведение изменяемых и неизменяемых типов в языке программирования Python

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