coolerice2-blog
Шаги в IT-сфере
21 posts
Рассказываю о процессе обучения в сфере IT
Don't wanna be here? Send us removal request.
coolerice2-blog · 6 years ago
Text
Immutable стек и очередь, динамический максимум стека и очереди.
Задание:
1. Создайте версии стека и очереди с динамической поддержкой максимального значения.
2. Реализуйте иммутабельный стек.
3. Реализуйте иммутабельную очередь.
1 - необходимо реализовать стек(stack1) и очередь(queue1), для которых будут вспомогательные стек(stack2) и очередь(queue2).
stack2 и queue2, в свою очередь, будут хранить текущий максимум(или минимум, если захотим) в stack1 и queue1 соответственно.
2 и 3 - необходимо реализовать стек(stack1) и очередь(queue1), которые будут immutable(readonly).
Для работы и каких-либо модификаций с та��ими объектами мы будем создавать копию объекта stack1 и queue1, т.е. создавать новое состояние.
Соответсвтенно, текущее состояние объектов stack1 и queue1 изменяться не будет.
Сложность задания, наверное, лежит на поверхности в виду понимания смысла и представления решения в голове почти сразу после прочтения - осталось описать алгоритм и реализовать его.
Попробую декомпозировать решение:
1 - создаем класс SimpleStack(приведу словесное описание для стека, для очереди - все аналогично и по тому же шаблону),
через List<int>(в очереди используем LinkedList<int> - по ассимптотике получаем выигрыш) реализуем в нашем классе сам стек(stack1), для этого понадобятся методы:-
- Push(int value)
- Pop() - при вызове этого метода элемент будет удаляться из обоих стеков в нашем классе
- Peek()
Далее в нашем классе нам понадобится 2-й стек(stack2), в котором мы будем хранить наибольшее значение на каждом "уровне" stack1,
для этого реализуем private-метод PushMax(int value), который будет при операции Push(int value) сравнивать значение stack1.Peek() и value, большее из них подавать в PushMax(int value)
Для удобства можем завести в нашем классе метод CurrMax(чтобы понимать, какое значение в данном стеке на данный момент наибольшее),
которое будет всегда возвращать значение stack2.Peek(), если кол-во элементов в стеке более нуля.
2(задание 3 выполняется аналогично, единственное различие в методах, которые сами по себе определяют структуру - стек или очередь)
- создаем класс ImmStack<T>, в нем для простоты реализации методов Push, Pop и Peek воспользуемся встроенным в IDE Stack<T>.
Итак, реализация будет выглядеть следующим образом:
Push(T value) будет добавлять value в неизменяемый стек и вернет новый стек
Pop() удалит верхний элемент из неизменяемого стека и вернет новый стек
Peek() просто возвращает верхний элемент стека (аналогом этого метода в очереди будет First)
Такая реализация позволяет выполнять цепочку вызовов в духе:
stack.Push(1).Push(2).Push(3); (аналогично с Pop(), но тут уже стоит учесть момент, что стек может быть уже пустым)
0 notes
coolerice2-blog · 6 years ago
Text
Программирование "сверху вниз"
Это одна из методик разработки программ. Суть в том, что мы начинаем с результата, затем последовательно детализируем все, вкручиваем оставшиеся маленькие винтики.
Из учебной практики есть пример:
Tumblr media
Необходимо вычислить сумму ряда с погрешностью эпсилон.
Что у нас должно быть на выходе? Верно, сумма всех членов. Именно сумма! Едем дальше. Из чего состоит каждое слагаемое? Из двух множителей. Какие они? Одна - константа, другой - константа в степени. Сколько будет итераций? Ровно столько, пока модуль разности между текущим и предыдущим будет больше эпсилон:
( |a(i) - a(i - 1)| > e)
Вот так мы продумали программу от результата.
1 note · View note
coolerice2-blog · 6 years ago
Text
Windows-Forms_2(C#)
Сегодня допилил небольшой проект на шарпе. Суть в распределении задач между ис��олнителями по алгоритму round-robin.
Подробнее можете посмотреть на: https://github.com/YaphetS7 в разделе Windows-Forms.
Узнал как устроен таймер, глобальные настройки проекта, перерисовка списков. Это, пожалуй, самые основные нюансы, которые я усвоил. Трудности были в том, что:
Это рутина.
Сначала не представляешь за что взяться(по итогу начал с настроек).
Ну и сама тема настроек вызвала трудности :)
0 notes
coolerice2-blog · 6 years ago
Text
Windows Forms(C#)
На гитхаб залил свое первое приложение для с Windows Forms. Линк - https://github.com/YaphetS7/Windows-Forms
При запуске приложения открывается форма с кнопкой, переключателями, флажком:
Tumblr media
Кнопка PressMe инактивна, если не нажать на флажок.
Переключателем я выбираю что показать после нажатия на PressMe: численность или площадь городов, указанных в списке.
Так выглядит программа после нажатия на PressMe и с переключателем на "Численность":
Tumblr media
P.S. название не сменил с "Form2" на "Численность", забыл)
0 notes
coolerice2-blog · 6 years ago
Text
Модульное тестирование в Visual Studio. Сисемы управления проектами.
Применительно к vs разобрался как и что устроено(модульное тестирование). Оказа��ось все очень просто :)
Тестил я методы классы по отдельности через Assert.AreEqual().
Линк на гитхаб с проектом NativeDictionary(словарь): https://github.com/YaphetS7/Data_Structures/tree/master/NativeDictionary
Есть такие штуки как системы управления проектами. Там ведутся списки заданий на разных стадиях их выполнения, касаемо какого-либо проекта. Познакомился на днях с Jira (google it). Все весьма нативно, понятно. Проект задал сам себе по изучению CSS(весьма поверхностно), следовал своим же задачам и пунктам. Очень неплохая тема, если проект поглобальнее изучения CSS :)
0 notes
coolerice2-blog · 6 years ago
Text
Принципы тестирования программ
Тестирование программного обеспечения — процесс исследования, испытания программного продукта, имеющий своей целью проверку соответствия между реальным поведением программы и её ожидаемым поведением на конечном наборе тестов, выбранных определенным образом. (Википедия)
Нам интересны:
- Регрессивное тестирование. Условно, это проверка частей кода, где уже ранее была допущена ошибка.
- Модульное тестирование(сам его юзал, не зная). Это когда у нас есть функции, правильную работу которых мы проверяем отдельно. Например, написал функцию вычисления двойного интеграла(мое будущее семестровое задание) - проверил.
Подробнее можно прочитать в статье Бертрана Мейера, ныне преподающего в Иннополисе:
https://www.osp.ru/os/2008/07/5478839/
0 notes
coolerice2-blog · 6 years ago
Text
А ВЫ ЗНАЛИ?!(2)
Когда нас учат английскому в школах/ВУЗах - нам иногда дают интересные фичи для запоминания тех или иных вещей. Например, "did "перетягивает" на себя 2-ю форму глагола(если утвердительное предложение было в прошедшем времени), когда мы задаем вопрос"
What did you do?
А когда англоговорящих людей учат русскому языку, зачастую рассказывают:
В большом количестве случаев -ция = -tion
Station - станция
Information - информация
Tradition - традиция
Reaction - реакция
Operation - операция
Revolution - революция
Organization - организация
Consultation - консультация
Function - функция
Instruction - инструкция
Collection - коллекция
Civilization - цивилизация
Emotion - эмоция
Constitution - конституция
Registration - регистрация
Modernization - модернизация
Stabilization - стабилизация
Position - позиция
Исключения:
Милиция - militia
Полиция - police
Конференция - conference
Дальше -tion = -ние или -ия
Education - образование
Relationship - отношения
Attention - внимание
Action - действия
Condition - состояние
Population - население
Direction - направление
Generation - поколение
Топ- английских слэнгов, которые юзаются самими носителями языка:
-To bank(on something) - ожидать/надеяться(в несерьезной ситуации).
-To be cool with(относиться хорошо или нейтрально):
Would you be cool with me asking your sister on a date?))
-To slack(быть ленивым/работать слабо).
-Not half bad(неплохо).
-To be hooked on("быть на крючке" или подсесть на что-то. Говорят о том, что нравится и что постоянно делают. Например, просмотр сериалов)
Кстати!!! На английском сказать кинотеатр лучше как movie theater, а не cinema)
Ну и немного оффтопа. Писал тест по распределению по группам английского в КФУ. Попал в группу Intermediate(ну да, найс писать тест только по грамматике). Препод - полиглот. 14 языков. Обещал нас за полтора года до адвансов дотянуть :)
0 notes
coolerice2-blog · 6 years ago
Text
Переменные и идентификаторы.
Область видимости - это часть кода, в пределах которого доступна данная переменная.
В С# различают различают области доступа:
public - неограниченный доступ.
private - доступ только из класса, в котором описан метод.
Это вот те две области, которые я часто использую. Еще есть:
protected - доступ ограничен содержащим классом.
internal - доступ ограничивается текущей сборкой.
protected internal - Доступ ограничен текущей сборкой или типами, которые являются производными от содержащего класса.
Существует такое понятие, как связывание переменных. Это, получается, некая связь синтаксического элемента, содержащего имя метода, с логической частью программы. Различают раннее(статическое) и позднее(динамическое) связывание.
Основное отличие их в том, что раннее связывание происходит на этапе компиляции. Оно применяется при вызове обычных методов (не виртуальных). Позднее связывание напротив происходит во время выполнения. Выполняется оно при вызове виртуальных функций класса-потомка для определения того, какой именно метод следует вызывать.
В C# допускается совместное использование одного и того же имени двумя или более методами одного и того же класса, при условии, что их параметры объявляются по-разному.
Т.е. я могу объявить, скажем, три метода с одиноковым названием, но они должны отличаться во входных значениях(типах и/или кол-ве самих входных значений).
0 notes
coolerice2-blog · 6 years ago
Text
Продолжение С# и .NET
Я долговато искал в инете блоги/каналы/паблики о С# и .NET, но очень мало инфы, да и не по тематике(в вк вообще не нашел подобных групп)
Погуглив, натолкнулся на подборку с краткими описаниями. Для себя выбрал блоги:
https://blogs.msdn.microsoft.com/ericlippert/
https://blogs.msdn.microsoft.com/ruericlippert/ (русскоязычная версия блога :3 )
Цитата из подборки: "Fabulous Adventures in Coding. Блог Эрика Липперта, в основном посвящен дизайну языка C# и его возможностям."
http://www.hanselman.com/blog/
"Scott Hanselman’s Computer Zen. Еще один известный блог; посвящен не только платформе .NET, но и общим вопросам программирования и околокомпьютерным темам."
http://community.bartdesmet.net/blogs/bart/
"B# .NET BLOG. Bart de Smet’s On-line Blog. Один из самых сильных блогов по C#/.NET. Барт пишет не часто, но тема раскрывается на глубочайшем уровне, так что не пугайтесь, если даже с третьего раза вам все равно что-то будет неясно."
http://sergeyteplyakov.blogspot.com/?m=1
"Programming Stuff. Блог посвящен языку C#, .NET-у, архитектуре и принципам разработки; в целом, содержимое отражает название блога."
Есть еще, конечно, ютуб-каналы, но по видео изучил(если вообще изучил) html и css. Ну не то это немного, наверное)
Линк на саму подборку блогов/канал/подкастов: http://sergeyteplyakov.blogspot.com/2012/04/net.html?m=1
0 notes
coolerice2-blog · 6 years ago
Text
JSON
JSON(JavaScript Object Notation) - это популярный формат данных. Используется, в частности, в интернете при реализации внешних API различных сервисов.
Формат примерно такой:
{
"name" : "Olga",
//**//
"age" : 40
}
В С# с ним можно работать. Есть специальная библиотека Newtonsoft.Json.
После обращения к URL(чтобы получить JSON) можно распарсить JSON в определенный класс, а потом уже выполнять еще какие действия :)
0 notes
coolerice2-blog · 6 years ago
Text
Типы и коллекции в С#, типизация.
В С# имеются встроенные типы-коллекции. Я пользуюсь некоторыми из них:
Dictionary(Словарь) - хранит пару (Ключ - значение). Для ключа и значения можно использовать стандартные типы данных(int, string и т.п.).
List(список) - динамический массив, говоря простым языком. Очень удобная штука, можно заранее не гадать о
ArrayList - тот же динамический массив, но может хранить в себе разные типы данных.
Основные классы System.Collections:
ArrayList
BitArray
CollectionBase
Hashtable
Queue
Stack
SortedList
Подробнее можно почитать на https://msdn.microsoft.com/ru-ru/library/system.collections(v=vs.110).aspx
Существует динамическая и статическая типизации. Статическая типизация - это когда при объявлении переменной она связывается с типом(int, string и т.п.) и дальше не изменяет этот тип. В динамической же, наоборот, нет как таковой привязки переменных к типам данных.
"Сильная" и "слабая" типизация(сильная или слабая система типов)
Чем слабже система типов языка, тем больше риск, что система крашнется. И, соответственно, наоборот.
Что такое система типов - можно почитать тут https://ru.m.wikipedia.org/wiki/Система_типов
В С# поддерживаются обобщения. System.Collections.Generic
Их суть проста:
Если у нас есть, например:
class Names
{
public string Name
{
//**//
}
}
Класс имен, внутри метод, возвращающий тип string. А что если имя будет типа int(никто же не запрещал). Тут два пути:
Сделать возвращаемое значение типа object:
//**//
public object Name
{
//**//
}
//**//
Этот путь не самый лучший, т. к. при возвращении методом какого-то типа будет происходить boxing(упаковка) в object, а чтобы вновь извлечь тот самый тип данных будет происходить unboxing(распаковка). Это сразу минус производительность и ресурсы.
Лучше сделать через обощения(те самые System.Collections.Generic):
class Names<T>
{
public <T> Name
{
//**//
}
}
Так мы избегаем проблем с типобезопасностью, снижаем время работы и уменьшаем количество потенциальных ошибок.
0 notes
coolerice2-blog · 6 years ago
Text
CRL, метаданные, пространства имен, вариации построения приложений .NET и другие непонятные термины.
Обо всем по порядку:
CRL(Common Language Runtime) - это исполняющая среда, в которой компилируются программы, написанные на .NET совместимых языках(С# например). Ее главная задача - определение местоположения сборки и нахождение запрошенного типа в двоичном файле за счет чтения в нем метаданных(см. ниже). После этого преобразует код в необходимые инструкции для платформы, проводит необходимые проверки безопасности, выполняет нужный код.
Звучит страшно, но вот примерно так устроена исполняющая составляющая платформы .NET
Метаданные - информация об используемых файлах. Они описывают типы данных(классы и т. п.), члены каждого типа(свойства, методы, события).
С пространствами имен все попроще :)
Например, написав "using System;", уже можно не писать System.Console.*
Просто сразу System. Т.е. мы подключаем пространства имен для более удобного написания кода. Пространство имен - сильная штука, которую надо обязательно знать. В принципе синтаксис интуитивно понятен:
(Скрин из книги Эндрю Троелсена "Язык программирования С# и платформа .NET")
Tumblr media
Я уже писал про то, как "создавать" *.exe файл, имея код. Путей много помимо Visual Studio. Например, через csc.exe, Notepad++, SharpDevelop.
Также можно просмотреть сборку приложения с помощью утилит ildasm.exe и reflector.exe (google it)
Это небольшой интродьюс в "что такое платформа .NET и с чем ее едят"
0 notes
coolerice2-blog · 6 years ago
Text
А ВЫ ЗНАЛИ?!
В английском языке существует неофициальное окончание -ish
Оно обозначает неуверенность или неконкретность:
Я приду к тебе где-то(та самая неуверенность) в 6.
I'll come see you around 6-ish.
На ��ечеринке было где-то 30 людей.
There were about thirty-ish people at the party.
Ему где-то 40 лет.
He's about 40-ish years old.
Он вроде высокий(с сомнением).
He's tall-ish.
Еще глагол to find носители языка используют не только в значении "най��и", но и в значении "оценить что-то".
Например, твой брат придет с кино. Ты спросишь его: "Как тебе фильм?"
How'd you find the movie?
Твой зарубежный друг приехал в Россию, ты его спрашиваешь: "Как тебе Росиия?"
How are you finding Russia?
Тебе понравилась пицца?/Как думаешь, пицца хороша?
Do you find the pizza is good?
Еще в английском, как правило, не говорят: "Hello, how are you?". "Hello" носители языка говорят разве что тогда, когда берут трубку телефона от незнакомого номера :)
Вместо этого лучше: Hey, how's it goin'?/Hey, what's up?/What's goin' on?/What's happenin'?
На вопрос носителя языка: "What is your name?" лучше отвечать просто "I'm *имя*", а не "My name is...". Тогда будете звучать как носители :)
Если верить Lingualeo - мне совсем до лвла upper-intermediate не хватает(сейчас занимаюсь самой сложной темкой для меня в английском - временами английского(ну это незапоминающаяся жесть!!!))
Недавно еще прочел статью "400 английских слов, покрывающих 75% всех английских текстов ", записал себе те, что не знал. Всем советую:
https://pikabu.ru/story/400_slov_kotoryie_pokryivayut_75_vsekh_angliyskikh_tekstov_4136871
0 notes
coolerice2-blog · 6 years ago
Text
Git и github
Да, это разные вещи - ПРОСЬБА НЕ ПУТАТЬ.
Прошел туториал git, всем советую
https://ru.hexlet.io/courses/intro_to_git
Весьма интересная штука, логичная. Команд, конечно, запомнить придется много, но это вопрос времени! Удобный такой инструмент!
Вот ссылочка на мой гитхаб:
https://github.com/YaphetS7
0 notes
coolerice2-blog · 6 years ago
Text
Step 5
За неделю самостоятельного обучения английскому я:
Реже нажимаю на ПКМ+Перевестм страницу на русский
Пополнил словарный запас
Понял, что почаще нужно использовать "to get" и "used to", чтобы звучать, как носитель(это рекомендации в одном из прочитанных мною текстов на Lingualeo ) :)
Нашел для себя ютуб-канал англоговорящего парня, который выучил русский и теперь рассказывает про тонкости английского(ТАКОМУ В ШКОЛЕ НЕ НАУЧАТ)
Теперь иногда тут будут посты с названием "А ВЫ ЗНАЛИ?" с кратким содержанием его роликов
Ссылка на одно из его видео - https://youtu.be/PwTG7oxe8aA
Пока гуглил "что такое машинное обучение и с чем его едят", наткнулся как раз на интервьюшки(ютуб) преподавателя ML из КФУ. Подписался на его группу в вк, пытаюсь хоть что-то понять по этой теме, кроме принципа работы машинного обучения. Пока, к сожалению, не могу "прикоснуться" через компиляторы к этой теме.
Вот ссылка на эту группу - https://vk.com/machine_learning_kfu
0 notes
coolerice2-blog · 6 years ago
Text
Методологии разработки
Сам того не зная, когда я решал какие-либо задачи на С#, я придерживался итерационной модели решения. Т.е. я сначала описывал функционал, который становился базой для задачи. Подобных методологий много. Вот лишь часть из них
Waterfall model
Название само за себя говорит. Все четко. Step by step.
Tumblr media
Agile model
Планирование - разработка - тестирование - демонстрация. И это все повторяется, пока заказчик не будет удовлетворен.
Tumblr media
RAD-model
Работают несколько команд, жесткие дэдлайны
Tumblr media
Scrum
Повышение производительности труда в командах, дэдлайны, частые обсуждения проектов, "спринты"
XP
Экстремальное программирование - постоянно меняющиеся требования, как следствие высокая частота релизов. Полный хардкор :)
Более подробно можно почитать на:
https://geekbrains.ru/posts/methodologies
0 notes
coolerice2-blog · 6 years ago
Text
Machine learning
Поступаю в ВУЗ. КФУ(Казанский). Есть там темка неплохо развитая. Это машинное обучение. Очень хочу ей заниматься, но попал не на то направление(обязательно попробую перевестись!). Очень хочу компуктер научить находить кошечек и собачек на фотографиях! : D
0 notes