суббота, 31 октября 2015 г.

LINKS: подборка ссылок по XML комментариям в коде C#


Практически в любом первом-втором занятие по программированию (языку программирования) говорят о комментировании. По случаю, собрала ссылки для студентов по XML-комментариям в C#-коде. Немного, но вполне представительно.

Сначала общее, об оформлении кода в принципе:
C# Coding Conventions (C# Programming Guide) (https://msdn.microsoft.com/en-us/library/ff926074.aspx)

Русскоязычные источники  [RU]
Статья с хабра: XML документация в C# (http://habrahabr.ru/post/41514/) и ссылки из комментариев к этой статьи (для особенно ленивых):

Англоязычные источники [EN]
XML Documentation Comments (C# Programming Guide) (https://msdn.microsoft.com/en-us/library/b2s063f7.aspx)

Soft
Sandcastle - Documentation Compiler for Managed Class Libraries (http://sandcastle.codeplex.com/)

пятница, 23 октября 2015 г.

EDUPRACTICE: Учебный эффект Хакатона

Страсти-мордасти по поводу участия студентов в Хакатоне всероссийского конкурса "Открытые данные РФ" [http://opendatacontest.ru/region/] улеглись, и я решила записать свои мысли.

Итак, в первую очередь мне хотелось сходить на Хакатон, чтобы посмотреть будет ли от него учебный эффект. И если будет, то какой? Второй моей целью было посмотреть и понять отличается ли хакатон от олимпиады по программированию.

Наблюдала я за двумя командами: ребятами 4 курса бакалавриата и сборной 1-2 курса бакалавриата Программной инженерии, ФКН. Естественно, уровень обученности и зрелости как специалистов разный, но тем интереснее.

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

На протяжении двух дней я наблюдала как две команды студентов придумывают идею, разделяют роли в своей команде, пишут код, презентуют софт.

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

Младшая группа к моменту моего появления на хакатоне (вечер первого дня) уже отмела идею, с которой явилась, придумала новую, договорилась с представителями YotaPhone о реализации версии приложения для этого устройства. Видео презентации

Я старалась не вмешиваться.

суббота, 22 августа 2015 г.

ACTIVELEARNING: Мост из Meccano и немного программирования

Сегодня по телевизору попала на передачу, в которой описывался проект Джеймса Мея по созданию моста из механического конструктора Meccano.
Джеймс Мей
Было это в 2009 году и подробности можно почитать в новостях или даже посмотреть видео на YouTube.
Мост из Meccano
Я большая любительница механических конструкторов, сейчас занимаюсь активным поиском достойного для сына, поэтому смотрела передачу придирчиво, чтобы за одно выяснить для себя где раздобыть этот раритет. Но сегодня, я не об этом.
Очень интересным оказалось участие студентов-архитекторов в проекте. По большому счёту ребята были задействованы как "бесплатные" сборщики конструкции. Работа шла под контролем полноценного КБ, студентам выдали чертежи и схемы сборки. Собирали модули в университеской аудитории, на которой я рассмотерела табличку "Active Learning laboratory".
Не исключаю, конечно, эффекта съёмок, но у меня сложись ощущение, что ребятам такоё проект активного обучения был неимоверно интересен.
Сейчас активное обучение пытаются использовать все подряд. И это скорее хорошо, популярность неизбежно ведёт в том числе и к сомнительному применению технологии. Иногда я сталкиваюсь со мнением, что активное обучение обятазетельно должно проводиться на реальных задачах в профессиональной среде (работе в компаниях). В проекте ливерпульского моста профессиональная среда присутствовала. Прямо скажем изрядно опосредованно. Студенты продолжали работу в стенах университета. Однако же, они работали с реальными документациями, выявляли соответствие схемам сборки и т.д. и т.п.
Чего интересного в учебном плане было в проекте Мея? 
Во-первых, задача была если и реальной (постройка моста через канал), то очень фантастической (постройка моста через канал из конструктора).
Во-вторых, материал исполнения серьёзно отличался от предполагаемых реальных материалов, с которыми будущие строители и архитекторы будут работать. В этом и сложность задачи, использовать свои теоретические (а может быть и практические навыки) в неожиданных условиях.
В-третьих, а на самом деле в продолжение первого, использование детского конструктора, наверное, только подогревало интерес. Потому что не смотря на серьёзность задачи, был в ней изрядный элемент игры.
И тут я подумала, а можно ли сделать что-то очень похожее для студентов по направлению "Компьютерные науки" (Computer Science)?
Обсуждения дома сначала свелись к тезису: "Это же олимпиады". На олимпиады похоже, но не очень. Не всегда, олимпиадные задачи предполагают создание (конструирование) завершённого проекта (аналога моста, по которому можно пройти). Также не всегда речь идёт о групповой работе и, уж тем более, взаимодействии с кучей сторонних лиц, таких как заказчик, специалисты КБ и проч., проч., проч.
Потом мы стали думать про "Хакатоны". Собственно, на них предложенный проект похож больше. Предложен инструмент исполнения. Сначала искалась идея (я не написала об этом выше, но думаю, что заинтересовавшиеся не пожалеют 40 минут на просмотр передачи), потом идея дорабатывалась до готового решения. Да, момент поиска идеи и прототипа - чистейший хакатон, а вот дальше, похоже, что уже не очень.
Мне показалось самым главным - отсутствие соревновательсности.
Студенты столкнулись с кучей проблем: нехватка времени, не вовремя поставляемые материалы, косяки в документации, огрехи сторонней сборки. Но. Они не были поставлены с условия соревнований с другими студентами, которые собирали бы точно такой же мост в предположении"кто быстрее". Если они и соревновались, то скорее с реальностью и самими собой.
К сожалению, пока готовый ответ я ИТ-студентов я не придумала.
Более того, я знаю, что у нас на Программной инженерии, очень много тем или иным боком похожих проектов, не таких, конечно, масштабных и безрассудных, без съёмок телепередач и проч.
Кроме того, любой хакатон для ИТ-студентов - это развитие и шаги вперёд для участников.
Но вот так, чтобы воскресить какой-то инструмент просто для того, чтобы напомнить о его существовании. Попробовать сделать что-то современное или неожиданное с его помощью, заставив себя думать по-новому, такое, наверное, сложно и мне не попадалось. Буду очень благодарна за ссылки и наводки.

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

P.S. Да, мне очень понравился стиль изложения передачи. Там были и вздохи "ах, где ты, Старая-добрая Англия" и очень конструктивный ответ на эти вздохи. 

пятница, 17 июля 2015 г.

EDUPRACTICE: Представление графов в памяти компьютера

Второй день на школе учителей был посвящён представлению графов в памяти компьютера. Я действовала из соображения, что мы хотим помочь преподавателям подготавливать школьников к участию в олимпиадном программировании. Поэтому в презентацию включала способы "улучшить", "подкрутить", "повысить эффективность". Благо базовая книга была удачной.
 Презентация дня прилагается:
 
Работа над ошибками (зафиксируем, чтобы не забыть к следующему году):

  1.  Одного дня на разбор основ (и как получилось не основ) C++ очень мало. Не смотря на то, что от занятий был явный прок, физически и слушателям и преподавателям очень сложно работать в режиме жёсткого ограничения времени и при этом наличии кучи материала. Достаточно много из того, что я считала важным, осталось за бортом. 
  2.  Работа с графами потребовала повторения знаний и навыков работы со структурой данных список (односвязный и двусвязный). Собственно, именно это занятие очень просилось между первым и вторым, но перерывчик был уж больно небольшой, и занятия у меня там не было. 

 Итак, была б моя воля, я бы поставила себе ещё одно занятие после основ C++. И, конечно, намного удобнее и эффективнее было бы не проводить лекцию, а затем семинары, а работать в формате мастерской (мастер-класса), в этом году компьютерные классы не были доступны с утра до вечера. Так что получилось, так как получилось. Надеюсь, что я смогла выжать максимум.

среда, 1 июля 2015 г.

EDUPRACTICE: С++ за 4 пары. Буду помнить

Вчерашний день я буду помнить :). Школа учителей подарила мне отличную возможность рассказать о языке программирования C++ в двух лекциях и двух семинарах. Без пролога и эпилога.

Учителя наших школ очень разные, пишут на разных языках, поэтому в итоге я поставила задачу сама себе: определить и рассказать чем С отличается от С++, отбросив С и, сконцентрировавшись только на С++. Думаю, что если бы у меня было дня 2-3, рассказ получился бы не такой сжатый.

Презентация прилагается:

среда, 27 мая 2015 г.

LINKS: Visual Studion 2013 и GitHub

Сегодня возникла необходимость загрузить работу студента на GitHub. Подобрались ссылочки по теме.
Как отправить из VS2013 файлы на GitHub

Use Visual Studio with Git
(https://msdn.microsoft.com/ru-ru/library/hh850437.aspx)

Git и Visual Studio: как правильно приготовить (http://habrahabr.ru/company/microsoft/blog/216037/)
Setting Up GitHub to work with Visual Studio 2013 Step-by-Step

Оформление README.md
Markdown Basics 
Markdown Cheatsheet 
Описание особенностей Markdown для на GitHub в статье GitHub Flavored Markdown (https://help.github.com/articles/github-flavored-markdown/)

вторник, 19 мая 2015 г.

LINKS: Оформление кода C#, нужно ли что-то выдумывать для авто-реализуемых свойств?

Написала авто-реализуемое свойство и задумалась, а не появились ли какие-нибудь супер-пупер требования по их именования. Полезла смотреть, судя по странице на MSDN
Auto-Implemented Properties (C# Programming Guide) [https://msdn.microsoft.com/ru-ru/library/bb384054.aspx]
свойства - они и в Африке свойства.

Нашлась занятная блог-статья Wouter de Kort про авто-реализуемые свойства:
Desugaring auto-implemented properties [http://wouterdekort.blogspot.ru/2013/10/desugaring-auto-implemented-properties.html]

Ещё по дороге попалась куча ссылок разных видов про оформление C# и не C#-кода.
Top 7 Coding standards & Guideline documents for C#/.NET developers by Anoop Madhusudanan [http://www.amazedsaint.com/2010/11/top-6-coding-standards-guideline.html]
C# coding conventions
[https://msdn.microsoft.com/en-us/library/ff926074.aspx]
C# coding standards and naming conventions
[http://www.dofactory.com/reference/csharp-coding-standards]

PDF
С# coding style guide, ver. 3.0 by Mike Kruger [http://www.icsharpcode.net/TechNotes/SharpDevelopCodingStyle03.pdf]
C# coding standards for .NET by Lanc Hunt
[http://se.inf.ethz.ch/old/teaching/ss2007/251-0290-00/project/CSharpCodingStandards.pdf]

Mono
Coding guidelines [http://www.mono-project.com/community/contributing/coding-guidelines/]

При работе со студентами такая вещь, как стандарт оформления кода - вещь полезная. А ссылки — нужная :)

понедельник, 11 мая 2015 г.

LINKS: Некоторые R-packages, связанные с обработкой результатов тестирований

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

Классическая теория

Современная теория тестирования, она же теория параметризации педагогических тестов, она же IRT (модели Раша и связанное с ними)

Теория тестлетов, она же модификация IRT, она же TRT



среда, 6 мая 2015 г.

OER: История дистанционного образования на временной шкале

Коллега из Marketing Executive of the Brighton School of Business & Management [http://www.brightonsbm.com/hnd-hnc-hospitality-management/hnd-diploma-hospitality.php] поделился отличной временной шкалой (timeline) по истории дистанционного образования, по-моему, это однозначный мастрид,

С позволения публикую:
 The history of distance education [http://goo.gl/Q7407c].

четверг, 30 апреля 2015 г.

TEST: Почему quiz, а не test, и чем тестовое задание отличается от задач, вопросов и просьб.

Пожалуй, что я обдумала своё выступление про контроль в EdX. Мне запомнились два тезиса, которые, во-первых, хочется записать, чтобы не потерять, а, во-вторых, записать, чтобы проиндексировали поисковые системы.

Без претензии на научность, но некоторые ссылки я написать не поленилась.

Тезис первый. В MOOC платформах нет тестов [test, educational test], в них есть опросники/вопросники [quiz]. Мне кажется, что это связано с желанием отстраниться от термина тестирование. В конце-концов, просто так в образовании спекулировать словом "тестирование" нежелательно. Тогда нужно как минимум гарантировать одинаковость условий для всех участников тестирования. А какие уж тут гарантии? Один может проходить тест из аскетичной комнаты общежития, а другой из бани с подругами, а подруги, вообще, могут оказаться экспертами в проверяемой области и решить тест за тебя. Сплошное надувательство.

Тезис второй. Где заканчиваются задачи и начинаются тестовые задания?
Тут коротко не получится.
Этот вопрос мою фантазию беспокоил много лет. Когда я писала диплом, то прочтение кило-тонн литературы по педагогическому тестированию вгоняло меня в состояние благоговейного трепета. По одной единственной причине, интуитивно понятно, что такое тестовое задание, но определения его нигде не было.
Сегодня, кстати, я попыталась ещё раз найти что-то похожее на определение в своей подборке отечественных книг. И не нашла. Всё сразу начинается с "типологии", "классификации", "видов" тестовых заданий. А что это такое, тестовое задание? Да какая, вообщем-то, разница.

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

С импортными источниками немного полегче, например, есть Web Glossary of Testing, Measurement and Statistical Terms (Joint Committee on Standards for Educational and Psychological Testing of the AERA, APA, and NCME. (1999). Standards for educational and psychological testing. Washington DC: American Educational Research Association), не самая свежая версия в моих запасах, но уже кое-что:
Item - A general term referring to a single statement, question, exercise, problem, or task on a test or evaluative instrument for which the test taker is to select or construct a response, or to perform a task. Includes all the elements of an item as a collective unit: the stem, response options, prompt, stimulus, etc.
Этим определением вполне можно пользоваться до момента возникновения острого желания автоматизировать процесс тестирования на этапе прохождения теста.
Однако эпоха компьютерного тестирования началась. Причём довольно давно. Вернее, настолько давно, что отдельно взятые товарищи умудрились даже нацарапать таксономии новых тестовых заданий, тех самых, которые можно реализовать только с помощью компьютера. Например, с видео- или аудио-содержимым.

Самое интересное, что наша литература меня порадовала. Ещё тогда, давно, когда я барахталась в написании диплома. Помощь подоспела с неожиданной стороны: из Энергетического института, глава 2 книги "Разработка компьютерных учебников и обучающих систем", авторы Башмаков А.И., Башмаков И.А. Похоже, что они первые в России написали про правила оценивания в привязке к тестовым заданиям (учебно-тренировочные задания, УТЗ у Башмаковых). Остальные авторы, видимо, про это знали, но предпочитали не писать. По каким причинам не известно, но начинающим это доставляет массу неудобств.
Но окончательное осознание того, что такое тестовые задания пришло ко мне после прочтения главы 7 ("Innovative Item Types for Computerized Testing", авторы Cynthia G. Parshall, Tim Davey, & Peter J. Pashley) книги "Computerized Adaptive Testing:Theory and Practice" (2002) под редакцией Wim J. van der Linden и Gees A.W. Glas. В этой главе к вопросу привязывается алгоритм оценивания [scoring algorithm], и появление этого алгоритма превращает вопрос в тестовое задание.
Всё гениальное просто.
Человека, так уж и быть, можно убедить жить в недоопределённом мире, а компьютер не получится. Если уж взялись ставить баллы за задания при помощи компьютера, то он однозначно должен "знать", как ему это делать.
Сегодня я убедилась в том, что алгоритм оценивания прочно "приклеился" к тестовым заданиям. В книге "Testlet response theory and its applications" (2007), авторы Wainer H., Bradlow E.T., Wang X. во введении я натолкнулась на следующее:
The term “question” encompasses any sort of interrogative:
Where’s the bathroom?
What time is it?
Do you come here often?
What’s your sign?
These are all questions, but they should not be confused with items. For a question to be called an item, it needs an additional characteristic:
There must be a scoring rule
Последняя упомянутая книга и описанная в ней теория сами по себе достойны отдельного поста. Отмечу, что такой важный сейчас индекс Хирша у авторов такой, что не снился многим, начиная с меня :))). Но это уже совсем другая история.

вторник, 28 апреля 2015 г.

MOOC: Контроль знаний в курсах OpenEdX

Сегодня делала сообщение "Контроль знаний в курсах платформы OpenEdX".
Получилось собрать ссылочек по разным темам:
  • MOOC
  • Формы контроля в EdX
  • Python
  • JavaScript
Не дублирую, все ссылки с заметками, контактами словами в презентации.

Сейчас думаю о том, что есть ещё вопросы, на которые я не нашла ответы:
  1. Как же перенести достижения в MOOC в реальный учебный курс (перезачесть)? Есть ли путь, кроме некоторого внешнего срезового контроля после курса или влияния на структуру курсов?
  2. Анализ результатов контроля. С одной стороны инструментов полно, с другой стороны почти все они используются в контролируемых экспериментах. То, что их можно использовать где угодно, независимо от условий, я нигде в толково обоснованном виде не встречала.
Ещё думаю, что зря не сказала про то, что образовательные подходы и технологии сейчас активно примеряются к MOOC, по крайней мере я сталкивалась с такими работами. Впрочем, всё сразу не расскажешь.

понедельник, 20 апреля 2015 г.

MOOC: Тестовые задания и читинг (часть 2)

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



Полноразмерное изображение

Что не так? Задание решается простым просмотром кода в веб-браузере и статистикой редактора Word.

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

Идеи по улучшению.

  1. Если бы задание было практическим, то есть необходимо было бы представить код, то никаких "вторых путей" его решения и не возникло бы. Но этот вариант - изменение типа задания.
  2. Если оставить задание MCQ, то изменение числовой последовательности на сумму элементов этой последовательности уже притормозило бы как минимум мою прыть, тем более, что длина последних двух строк, ввиду наличия "отбивающих" пробелов уже не просто измеряется статистикой ворда, но и требует фантазии.



воскресенье, 19 апреля 2015 г.

MOOC:Тестовые задания и читинг (часть 1)

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



Полноразмерное изображение
Коротко о проблеме: вместо тестового задания, получилась загадка. При чём для отгадки не нужно владеть никакими знаниями и умениями, полученными на курсе. Достаточно уметь пользоваться браузером. По ссылке на тьюториал, открывается json-документ, в котором поиском отыскиваются вхождения вариантов ответов. Два не находятся, оставшиеся два элементарно анализируются.
Вопрос: что измеряет это тестовое задание? Мою догадливость? Охотно верю, что я записалась не на самый лучший курс. Однако предыдущий от этого же производителя был существенно лучше. Как узнать, что в фантике именно та конфетка, которую ты хочешь?

LINKS: R packages creation

Общая загруженность привела к тому, что дневник по освоению MOOCа я не завела. Видимо, не в этот раз или не в этой жизни. Процесс освоения, тем не менее, идёт. Подобрала ссылки по созданию пакетов R.

R package
Creating R packages: A tutorial (http://cran.r-project.org/doc/contrib/Leisch-CreatingPackages.pdf)
R packages (in-progress book) (http://r-pkgs.had.co.nz/)
Adding Packages (http://www.statmethods.net/interface/packages.html)
Building packages in R (http://rfunction.com/file/BuildingRPackagesPaper.pdf)
Step by Step Tutorial to creating R Packages (http://www.stt.msu.edu/~cui/Groupmeeting/R_package_tutorial.pdf)
Writing an R package from scratch (http://hilaryparker.com/2014/04/29/writing-an-r-package-from-scratch/)

Different OS
Making R packages under windows: a tutorial (http://www1.appstate.edu/~arnholta/Software/MakingPackagesUnderWindows.pdf)
Building R packages for Windows (http://robjhyndman.com/hyndsight/building-r-packages-for-windows/)
Making R packages for the Mac: A simplified guide (http://personality-project.org/r/makingpackages.html)

RStudio
Developing Packages with Rstudio (https://support.rstudio.com/hc/en-us/articles/200486488-Developing-Packages-with-RStudio)
Video
Create an R Package in Rstudio (http://www.youtube.com/watch?v=9PyQlbAEujY)
Building Packages (http://rfunction.com/building-packages)

Rcpp
Writing a package that uses Rcpp (http://dirk.eddelbuettel.com/code/rcpp/Rcpp-package.pdf)

понедельник, 13 апреля 2015 г.

LINKS: Events C#

Пока готовила задачку к семинару по событиям, нашла интересные ссылки. Свежие и не очень. Но для генерации идей и использовании в качестве вспомогательных материалов вполне годные.
MSDN
  • EventHandler - делегат (https://msdn.microsoft.com/ru-ru/library/system.eventhandler(v=vs.110).aspx)
  • EventHandler - делегат (https://msdn.microsoft.com/ru-ru/library/db0etb8x(v=vs.110).aspx)

    Tutorials. Step by step instructions. Practices
  • Chapter 4. Advanced C# (https://www.safaribooksonline.com/library/view/c-40-in/9781449379629/ch04.html)
  • Events 2015 (http://www.bogotobogo.com/CSharp/csharp_events.php)
  • C# Tutorial - The Built-In Generic Delegate Declarations (http://tech.pro/tutorial/861/csharp-tutorial-the-built-in-generic-delegate-declarations)
  • C# Event Implementation Fundamentals, Best Practices and Conventions (http://www.codeproject.com/Articles/20550/C-Event-Implementation-Fundamentals-Best-Practices)

    Другие полезности. Other useful links
  • Generic EventArgs to go with generic EventHandler? (http://codereview.stackexchange.com/questions/5470/generic-eventargs-to-go-with-generic-eventhandler)
  • События .NET в деталях (http://habrahabr.ru/post/148562/)
  • WeakReference Event Handlers (http://paulstovell.com/blog/weakevents)
  • Delegates, Lambdas and Events (http://www.dreamincode.net/forums/topic/220479-delegates-lambdas-and-events/)
  • Использование событий с C# (http://sonyks2007.blogspot.ru/2013/11/c_9.html)
  • Understanding and implementing events in C# (http://www.nicoschuele.com/posts/understanding-and-implementing-events-in-c)
  • For once and for all: Delegates, Events, Anonymous Methods and Lambda Expressions (https://sdesmedt.wordpress.com/2009/05/21/for-once-and-for-all-delegates-events-anonymous-methods-and-lambda-expressions/)
  • среда, 8 апреля 2015 г.

    TRAINING: Event handling, C#

    В этом году по событиям удалось провести два семинара: в первом разобрались с событиями, дописывали код. Второй сделали полностью практическим с возможностью написать весь код самостоятельно.
    Задача, которая вызвала больше всего трудностей:
    В библиотеке классов описать:
    1. Тип-делегат
    public delegate void ChainLenChanged(double r);

    2. Класс Bead - бусина
    2.1. Поле r – вещественное число, радиус бусины
    2.2. Конструктор с вещественным параметром – радиус бусины. Если радиус – меньше или равен нулю, конструктор создаёт исключение ArgumentOutOfRangeException
    3. Класс Chain – цепочка бусин
    3.1. Поле l – вещественное число - длина нити, на которую нанизаны бусины
    3.2. Поле beads – список List, составленный из бусин, нанизанных на нить
    3.3. Событие ChainLenChangedEvent, определённое типом-делегатом ChainLenChanged
    3.4. Свойство L. Обеспечивает доступ к полю – длина нити. При изменении длины нити активируется событие ChainLenChangedEvent
    3.5. Конструктор с двумя параметрами – вещественной длиной нити len и целым числом N бусин в цепочке. Создание бусин выполняет вспомогательный метод CreateBeads(). Радиус бусин одинаков и равен целому
    3.6. Метод CreateBeads() – создаёт объекты-бусины и добавляет их методы-обработчики в список обработчиков события ChainLenChangedEvent
    4. Добавить в код событие, возникающее при изменении N - количества бусин на нити, предполагается, что длина нити не изменяется, а размеры бусин «подстраиваются» под длину нити так, чтобы занять её.
    4.1. В обработчике этого события добавить код (в классе Bead)
    4.1.1. Пересчёта и изменения радиуса бусин
    5. Добавить в код событие, возникающее при изменении радиуса бусин
    6. Подписать объект Chain на события 5
    6.1. В обработчике пересчитывать количество бусин, которые могут поместиться на нити заданной длины, удалять/добавлять бусины
    Тестирование кода выполните в консольном приложении.
    (*) Создайте оконное приложение, в поле pictureBox визуализируйте цепочку бусин. Добавьте возможность изменения параметров цепочки и бусин. Свяжите изменения в интерфейсе с изменениями бусин и цепочки.
    UPD: На Blogger нашла подробный пост по использованию событий.Developer's notes. Использование событий в C# Терминология мне не очень нравится, но вряд ли это может быть сильной придиркой к посту в блоге.

    четверг, 26 марта 2015 г.

    FORMATIVE: Нашлась причина вопроса, из предыдущего поста

    Вопрос из предыдущего поста появился на занятиях после проведения десятиминутной самостоятельной работы. Когда фантазия по вариантам на "летучку" иссякла, я сделала заготовку для вершины двусвязного списка.
    using System;
    
    public class Node {
        double weigth; // вес вершины
        Node next; // следующая вершина
        Node prev; // предыдущая вершина
        // свойства
    
        public double Weigth { get { return weigth; } }
        // конструктор с параметром - вес вершины
        public Node(double weigth) {
            if (weigth >= 0) {
                this.weigth = weigth;
                next = null;
                prev = null;
            }
            else throw new ArgumentOutOfRangeException("Должен быть не меньше нуля!");
        }
        
        // добавить вершину после текущей addAfter
        
    }
    
    class Program {
        static void Main(string[] args) {
            Node head = new Node(0);
            Node curr = head;
            int N = 33;
            // добавляем N вершин с случайными 
            // весами из диапазона от [0;1)
            Random rnd = new Random();
            for (int i = 0; i < N; i++) {
                curr.addAfter(new Node(rnd.NextDouble()));
                curr = curr.Next;
            }
            curr.addAfter(new Node(1));
            curr = head;
            // вывод списка на экран
            do {
                Console.WriteLine("{0:f3}", curr.Weigth);
                curr = curr.Next;
            } while (curr != null);
        }
    }
    

    И задание: В файле HandOuts_56.4.1.cs Класс Node представляет вершину двусвязного списка, поля класса – следующая и предыдущая вершина (Справка: у первой вершины списка ссылка на предыдущую вершину равна null, у последней ссылка на следующую равна null). Вершины связаны между собой отношением агрегации. Дополните описание класса: 1. кодом свойств Next и Prev, возвращающих ссылки на предыдущую и следующую вершину 2. методом addAfter() с параметром – Node – вершиной добавляемой после текущей. Остальной код консольного приложения оставьте без изменений.

    четверг, 19 марта 2015 г.

    MEMO: ссылки и значения

    На днях на семинаре по интерфейсам студент задал вопрос по изменению значений по ссылкам и изменению значений самих ссылок. Кода было много, поэтому записываю вопрос в упрощённом виде.

    Есть код на C#:
    using System;
    
    class Program {
        static void Display(int[] ar, string name) {
    Console.Write(name + ":");
            foreach (int i in ar)
                Console.Write(i + " ");
            Console.WriteLine();
        }
        static void Main(string[] args) {
            int[] a = new int[3];
            a[0] = 1;
            a[1] = 2;
            a[2] = 3;
            Display(a, "a");
            int[] b;
            b = a;
            Display(b, "b");
            a[1] = 5; // изменили значение
            Display(a, "a");
            Display(b, "b");
            b = new int[2]; // изменили ссылку
            Display(a, "a");
            Display(b, "b");
        }
    }
    
    почему два последних вывода различны, если была команда b = new int[2]; ?

    четверг, 12 марта 2015 г.

    Let's get loud

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