URL
  • ↓
  • ↑
  • ⇑
 
03:12 

Итоги-2016

Ну что ж, я продолжаю писать итоги года. Этот год лично для меня оказался очень интересным и приятным.

1. Сайт года: никаких открытий в этом плане не было
2. Знакомство года: Асель
3. Потери года: - #стабильность
4. Возвращение года: -
5. Сериал года: Westworld
6. Фильм года: Дедпул - вселяет надежду на появление супергеройских фильмов с рейтингом для взрослых
7. Блюдо года: вареные яйца на завтрак #стабильность
8. Напиток года: кофе - последние полгода я стал пить его гораздо чаще
9 .Ощущение года: скука #стабильность
10. Язык года: - #стабильность
11. Экстрим года: поездка в Смоленск на концерт Сплина
12. Концерт года: концерт Сплина
13. Интерес года: java #стабильность
14. Сбывшаяся мечта года: начал работать по профилю #стабильность
15. Несбывшаяся мечта года: - #стабильность
16. Город года: Питер
17. Место года: работа
18. Открытие года: жизнь меняется стоит только оторвать жопу от дивана (хоть я до сих пор скучаю по диванчику)
19. Персональное событие года: Оля
20. Исполнитель года: Сплин #стабильность
21. Песня года: если верить ластфм, то это Мороз по коже
22. Лучшая поездка года: Питер
23. Традиция года: -
24. Настроение года: скука (этот пункт практически повторяет 9-й) #стабильность
25. Лучший день года: 1 марта
26. Разочарование года: - #стабильность (когда ничего особенно не ждешь, то и разочаровываться не приходится)
27. Вещь года: беспроводные наушники
28. Пожелание года: спать нормально
29. Учитель года: работа #стабильность
30. Вопрос года: "Что происходит?"
31. Погода года: питерский дождь в середине октября
32. Цвет года: серый #стабильность
33. Время суток года: утро, в которое ты восстаешь и едешь на работу
34. Книга года: скорее уж "непрочитанная книга года" - Милый друг, ибо главный герой вызывает такое отвращение, что и читать не хочется
35. Игра года: Ведьмак
36. Софт года: PhpStorm
37. Одежда года: клетчатые рубашки и узкие джинсы #стабильность
38. Подарок года: клетчатая рубашка от Оли
39. Кафе года: FRESHCAFE
40. Фраза года: ок #стабильность
41. Любовь года: сон
42. Девиз следующего года: как и всегда - "Прорвемся!"

01:55 

Как я жесткий диск подключал

Однажды я присмотрелся к своему ноутбуку. Точнее - к одному из разъемов. Он довольно примечательный - это комбинированный USB+eSATA, т.е. туда можно подключить и USB, и eSATA. Красота! Однако почти 5 лет я пользовался им исключительно в качестве USB-разъема и был вполне доволен. Однако как-то раз мне стало интересно, что же это за мифический eSATA такой. Гугл раскрыл мне эту тайну. Оказывается eSATA - это external SATA, то бишь внешний SATA. Причем это оказался даже не просто eSATA, а eSATAp. "p" тут значит power, т.е. разъем еще и питание дает (что неудивительно, учитывая, что он еще и USB). Сразу же возникла идея подключить туда жесткий диск - родных 500 ГБ в условиях двух ОСей мне всегда было маловато, а в родительском компе практически без дела сидел диск на 1,5 ТБ. Прикинув, какой провод мне нужен, я заказал его на aliexpress.
И вот прошел месяц, провод благополучно добрался до меня. В предвкушении огромных объемов памяти я подключил жесткий диск к ноуту и... ничего не произошло. Неужели провод паленый? Я решил проверить на каком-нибудь другом диске, но его нужно было вытаскивать из родительского компа. Поэтому я воспользовался мелким жестким диском для ноутбуков (остался после замены жесткого диска на ноуте, который мне отдали на ремонт). Подключаю - все работает. Подключаю большой жесткий диск - ничего. Я в недоумении. Гугл снова пришел мне на помощь, и я выяснил, что мелкий жесткий диск для ноута (2,5'') требует для работы 5В, в то время, как большой (3,5'') - 12В. Вот и разгадка - разъем выдает всего 5В, и их не хватает для работы 3,5'' жесткого диска.
Казалось бы, тут и сказочке конец, однако я вспомнил про старый блок питания от компьютера, который уже пару лет лежит без дела, а там есть те самые 12В. Я хотел тут же все подключить, но понял, что провод, который я заказал, все портит - он подключается сразу и к SATA, и к питанию на жестком диске. Пришлось заказывать новый провод на aliexpress.
Прошло еще 1,5 месяца. Очередной провод доехал до меня. В этот раз все прошло хорошо: подключил БП, поставил перемычку, чтобы он включался, подключил жесткий диск к БП и ноуту, включил БП - все работает, я доволен. Однако доволен я был недолго, ибо вся конструкция выглядела вот так



Даже спрятав все это дело за ноутбук, я понял, что теперь мне придется каждый раз либо нажимать кнопку на БП, либо втыкать перемычку для включения этой шайтан-машины. Ни один из этих вариантов меня не устраивал - мне нужно было автоматизировать процесс.
Я вспомнил про arduino - диплом прервал мои первые шаги в изучении этого чуда, к которому я успел накупить кучу разных примочек. Пришло время снова достать все это и применить.
Сначала я думал воспользоваться кнопкой, чтобы проверить саму возможность подобных манипуляций - все работало, но плохо, т.к. неприпаянная кнопка шаталась, в следствие чего контакты постоянно отходили. Потом я решил сделать все максимально просто: управляющий сигнал (PS_ON) с БП идет на один из пинов arduino, а земля - к другому (6 и 7 пины соответственно). Настраиваю 6 пин на вход, а 7 - на выход. Прописываю в программе единственную команду, которая "открывает" седьмой пин на выход. Загрузил скетч на arduino - все работает. Даже комп специально перезагрузил, чтобы проверить - все отлично. Однако я замечаю, что провод от жесткого диска не подключен к ноуту. Подключаю, и в тот же момент отключается блок питания. Вытаскиваю - БП включается. ЧТО ЗА МАГИЯ?! Этого я так и не понял, к сожалению.
На форуме народ тоже недоумевал. Мне посоветовали воспользоваться реле, что я и сделал. Программа там простейшая - все работает. Перезагружаю ноутбук для проверки и замечаю, что в самом начале загрузки ОСи напряжение на arduino падает, и реле выключается. Всего на миг, но мне это не понравилось - постоянное включение-выключение БП может плохо на нем сказаться, да и этот звук будет раздражать (реле замыкается с щелчком). Поэтому пришлось искать способ замыкать реле непосредственно при загрузке ОСи. Для этого я несколько изменил программу, добавил пару условий (если на вход подается 1 - замкнуть реле, 0 - разомкнуть). Дальше я нашел утилиту для передачи информации на arduino по USB (ее можно найти тут). Загнал ее в автозагрузку с нужными данными и перезагрузил ноутбук. Вот теперь все работает идеально: БП начинает работать практически одновременно с загрузкой ОСи и выключается вместе с ним. Правда, все это работает только в линуксе - на винде я еще не пробовал, но, думаю, там тоже можно загнать эту команду в автозагрузку. В крайнем случае напишу простой bat-ник и закину в автозагруку уже его.
Теперь осталось заставить линукс автоматически монтировать этот диск, но об этом в другой раз.

02:13 

Как я список учеников составлял

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

Спустя еще минут 15 программа была готова, вот код.



Программа сработала идеально, дубликатов было около 200. Я доволен, как слон. Однако вдруг промелькнула мысль о том, что все это наверняка можно было сделать штатными средствами прямо в экселе. Погуглил, и первая же ссылка подтвердила мои подозрения. Я уж не стал гуглить, можно ли штатными средствами убирать циферки из строк - уверен, что можно.

В итоге: минуту назад я был крутым парнем, который быстро решил проблему, а теперь я просто заново изобрел велосипед.

@темы: программирование, epic fail, радость, DIY

19:42 

Как я Gyazo настраивал

Дефолтный инструмент для снятия скриншотов, который использует Gyazo, не работает корректно - снимает слой под тем окном, которое выделяешь. Поэтому пришлось искать другие варианты. К счастью, есть инструкция на странице проекта в GitHub. Однако она претерпела некоторые изменения. Раньше нужно было редактировать файл gyazo.rb, а теперь предлагалось править файл .gyazo.config.yml в домашней директории и изменить там одну строчку:

Казалось бы - что сложного? Однако никакого .gyazo.config.yml в домашней директории просто не было! То есть у меня есть старая версия программы и новая версия инструкции, от которой мне никакой пользы.
Сначала я просто переустановил Gyazo, но конфигурационный файл в домашней директории так и не появился, потом я открыл gyazo.rb и стал смотреть на код. С Ruby я не знаком, совсем, поэтому лишь смутно догадывался, что происходит в каждой из строк, но я приметил строчку

и что-то шевельнулось в памяти. Что-то похожее было в старой инструкции! Но что конкретно там было? Мне нужна была старая инструкция. Благо гугл все помнит - в кеше нашлась старая копия страницы проекта со старой инструкцией. Я помню, что тогда решил воспользоваться gnome-screenshot. А вот и строчка из старой инструкции, о которой я вспомнил.

Нужно было найти в gyazo.rb "отрицательную" строчку и заменить ее на "положительную". Однако в нынешнем gyazo.rb не было такой строчки. Я продолжил анализ кода и нашел такую строчку:

Взглянув на старую инструкцию, я понял, что именно этот import и нужно менять, поэтому я так и сделал:

И все сработало! Теперь Gyazo работает, как надо. Все бы ничего, но после всего этого мне в голову пришла запоздалая мысль, что можно было просто создать этот конфигурационный файл и добавить туда эту строчку. Так я и поступил. И знаете что? Сработало. Я, вроде, рад, что могу нормально пользоваться нужной программой, но все же как-то обидно потратить кучу времени, а потом понять, что все можно было решить меньше, чем за минуту.

@темы: фейл, победа!

19:42 

Итоги-2015

Интересно, для кого я все это пишу? Все равно никто не читает этот дневник.
P.S. Я бы тоже не стал читать - тут скучно.

1. Сайт года: javarush.ru
2. Знакомство года: однозначно Аня - мир оказался слишком тесен))
3. Потери года: - #стабильность
4. Возвращение года: Звездные войны
5. Сериал года: Сорвиголова
6. Фильм года: 7 жизней
7. Блюдо года: вареные яйца на завтрак #стабильность
8. Напиток года: каркаде
9 .Ощущение года: скука #стабильность
10. Язык года: - #стабильность
11. Экстрим года: поездка в Тверь и Торжок
12. Концерт года: мог бы быть концерт Сплина((
13. Интерес года: java, arduino #стабильность
14. Сбывшаяся мечта года: - #стабильность
15. Несбывшаяся мечта года: - #стабильность
16. Город года: Default-city #стабильность
17. Место года: home sweet home #стабильность
18. Открытие года: можно слушать не только грустную музыку (#стабильность), но она чаще всего подходит под настроение
19. Персональное событие года: - #стабильность
20. Исполнитель года: Сплин #стабильность
21. Песня года: если верить ластфм, то это Небо в алмазах
22. Лучшая поездка года: TWERRR
23. Традиция года: скорее уж "нарушенная традиция года", но нарушил ее не я, а Зеленая скотина >_<
24. Настроение года: скука (этот пункт практически повторяет 9-й) #стабильность
25. Лучший день года: -
26. Разочарование года: - #стабильность (когда ничего особенно не ждешь, то и разочаровываться не приходится)
27. Вещь года: arduino
28. Пожелание года: перестать поменьше страдать херней
29. Учитель года: работа #стабильность
30. Вопрос года: -
31. Погода года: декабрьские дожди - прелесть ^__^
32. Цвет года: серый #стабильность
33. Время суток года: ночь #стабильность
34. Книга года: "Цвет Волшебства" Терри Пратчетта, ибо он открыла дверь в фантастический Плоский мир
35. Игра года: ничего нового на моем старичке уже не запустить((
36. Софт года: Intellij IDEA #стабильность
37. Одежда года: клетчатые рубашки и узкие джинсы
38. Подарок года: деньги на татуировку, которую я так и не сделал
39. Кафе года: кальянная La Brume
40. Фраза года: ок
31. Любовь года: - #стабильность
42. Девиз следующего года: как и всегда - "Прорвемся!"

20:05 

Сессия: Лето 2015

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

Постараюсь восстановить хронологию.

@темы: победа!, крайняя сессия, МАИ, учеба

05:53 

Сессия: Зима 14/15

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

UPD 25.03.2015 Сессия закрыта, хоть и осталось утрясти некоторые формальности.
запись создана: 03.02.2015 в 20:14

@темы: МАИ

13:05 

Итоги-2014

Итоги 2013 года я благополучно пропустил, а сейчас уже и не вспомню, наверное.

1. Сайт года: контактик
2. Знакомство года: из запоминающихся - только Ксюша
3. Потери года: -
4. Возвращение года: Годзилла
5. Сериал года: мог бы быть HIMYM, если бы не ужасная концовка, так что мой выбор падает на The Suits
6. Фильм года: Интерстеллар
7. Блюдо года: вареные яйца на завтрак
8. Напиток года: чай с лимоном ван лав
9 .Ощущение года: скука
10. Язык года: ---
11. Экстрим года: военные сборы
12. Концерт года: ни на один концерт не сходил((
13. Интерес года: java
14. Сбывшаяся мечта года: -
15. Несбывшаяся мечта года: -
16. Город года: Default-city
17. Место года: home sweet home
18. Открытие года: можно слушать не только грустную музыку
19. Персональное событие года: -
20. Исполнитель года: Сплин
21. Песня года: это трудно
22. Лучшая поездка года: Липецк
23. Традиция года: -
24. Настроение года: скука (этот пункт практически повторяет 9-й)
25. Лучший день года: 30 августа, конец военки, можно не бриться))
26. Разочарование года: -
27. Вещь года: телефон
28. Пожелание года: перестать страдать херней
29. Учитель года: работа
30. Вопрос года: Когда это закончится?
31. Погода года: -
32. Цвет года: серый
33. Время суток года: ночь
34. Книга года: "К новой свободе" Мюррея Ротбарда, хоть я ее и не дочитал
35. Игра года: наконец-то сыграл в Dragon Age
36. Софт года: Intellij IDEA
37. Одежда года: стандартно - футболка, джинсы, толстовка
38. Подарок года: как-то не запомнился
39. Кафе года: антикафе "Зеленая дверь"
40. Фраза года:

31. Любовь года: -
42. Девиз следующего года: как и всегда - "Прорвемся!"

@темы: итоги года

05:51 

Общество мертвых поэтов

Укрылся я в лесах, чтоб жизнь прожить не зря,
Чтоб высосать из жизни костный мозг.
Искоренить все, что не жизнь,
Чтоб не понять на смертном ложе, что я не жил.

Генри Девид Торо


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

А теперь, дорогие ученики, мы будем учиться мыслить самостоятельно. Будем учиться вникать в слова, в язык. Пусть говорят все, что угодно, но слова и идеи могут изменить мир

Однако и это еще не все. Учитель (тот самый, который с большой буквы) вдохновляет, дает понять, что все не бессмысленно

Пьеса жизни ещё не кончилась, и ты, быть может, впишешь свою строку. Какую строку вы впишете?

Каждый эпизод с участием мистера Китинга - это урок. Не только для его учеников, но и для нас, зрителей.

Зачем я сюда встал? Я встал на стол, чтобы напомнить себе, что надо смотреть на жизнь с разных точек зрения. Отсюда мир кажется совершенно другим. Если не верите, попробуйте сами. Давайте! Когда вы считаете, что в чем-то разбираетесь, постарайтесь посмотреть на это с другой точки зрения. Даже если это покажется глупым или ложным, вы все равно должны попробовать. А когда вы читаете, пусть вас не заботит, о чем думает автор, главное, что думаете вы. Ребята, постарайтесь обрести собственный голос. И чем дольше это откладывать, тем менее вероятно, что вы вообще его обретете. Торо сказал: "Большинство людей проводит жизнь в тихом отчаянии". Не поддавайтесь этому! Нужен прорыв! Не прыгайте с обрыва, как лемминги. Оглянитесь вокруг! Наберитесь смелости! Отыщите новый взгляд!

Мысль о том, что надо найти себя, свой взгляд, свое мнение пронизывает весь фильм. Мистер Китинг учит ребят не столько поэзии, сколько помогает найти свой путь. Поэзия - лишь инструмент, но очень действенный. Встретить такого Учителя - великая удача, и я желаю каждому подобной встречи.

Ловите момент, и пусть ваша жизнь будет необыкновенной!

@темы: размышления

18:31 

Как я музыку выкачивал

Недавно из-за нелепой случайности потерял всю инфу на телефоне, благо там почти не было ничего важного. Однако меня больше интересовала музыка, ибо последний раз я делал резервную копию больше года назад. Учитывая, что уже давно я загружаю музыку в телефон, минуя компьютер, накопилось довольно большое количество треков, которых не было на компьютере. Таким образом передо мной стояла задача скачать около 70 аудиозаписей.
Существуют расширения для браузера, позволяющие сделать то, что мне нужно, однако у них имеются минусы:
  • с помощью VKopt можно загружать аудиозаписи с нормальными названиями, но только по одной
  • SaveFrom.net позволяет загрузить сразу ВСЕ свои аудиозаписи

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

Мое внимание привлекла вот эта часть ссылки Rise%20Against%20-%20Hero%20Of%20War. Выходит, что ссылка уже хранит нормальное название, надо только найти способ извлечь его оттуда.

План начинал вырисовываться:
  1. Выудить названия файлов из ссылок
  2. Привести их в нормальный вид (если кто не заметил - пробелы были заменены на %20)
  3. Составить список названий таким образом, чтобы каждой ссылке поставить в соответствие нужное название
  4. Воспользоваться утилитой wget для загрузки аудиозаписей

План идеален, осталось только реализовать. И вот тут я столкнулся с некоторыми трудностями. Чтобы зациклить wget и выкачать файлы, логично было бы написать скрипт, но работать со строкой в bash сильно неудобно. Со строкой удобно работать, например, в java. По идее, я мог бы написать всю программу на java, но я понятия не имею, как оттуда запустить wget с нужными мне параметрами. Поэтому мною было принято решение: список имен получу с помощью программы на java, а файлы загружу с помощью bash-скрипта.

Java-часть: тут
Bash-часть: тут

Наконец, после всех стараний я наслаждался видом автоматически скачиваемых аудизаписей :)
P.S. Забыл сказать, что с кириллическими названиями все равно пришлось поработать ручками (благо их было не так уж много), ибо писать перекодировщик было уж совсем лень.

@темы: программирование, DIY

22:16 

Ubuntu 14.04

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

Сегодня решил все же обновить свою старенькую Ubuntu 12.04. Честно, меня купила возможность подключать телефон к компу и работать с файлами. В старой версии это все происходило через airdroid, а он очень не любит кириллические символы, в следствие чего возникали определенные трудности. Я подумал, что за полгода, прошедших с момента релиза 14.04, большую часть багов исправили либо сообщество, либо Canonical. Поэтому как-то не поинтересовался, как там обстоят дела, и просто обновился.

Начнем с того, что обновлялось это дело ~1.5 часа. Однако я терпел ради высшей цели. Что же я получил в итоге?

Из плюсов:

  • Система стала работать быстрее (правда, загрузки приходится ждать дольше)

  • Работа с файлами на телефоне при подключении по USB работает из коробки без всяких бубнов

  • Локально-интегрированное меню. Наконец-то меню "Файл Вид Изменить" вернулось на свое место.


На этом, собственно, замеченные мною плюсы закончились.

Перейдем к минусам:

  • Пропала возможность переключать раскладку зажатым капслоком. Было очень удобно писать короткие комментарии к коду.

  • При переключении раскладки привычной комбинацией Ctrl+Shift гаснет индикатор Num Lock (просто гаснет, циферки все так же можно вводить), что несколько сбивает с толку

  • Не работает функция "Свернуть все окна". Точнее она срабатывает всего два раза, а потом перестает работать.



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

UPD 21:48
Переключение раскладки по зажатому Caps Lock удалось сделать вручную через связку «setxkbmap -layout 'us,ru' -option 'grp:ctrl_shift_toggle,grp:caps_switch'» в автозагрузке + Xneur с отключением всех опций кроме индикатора. Перед этим пришлось в настройках клавиатуры выключить все горячие клавиши для переключения раскладки.

UPD 22:13
Починил функцию "Свернуть все окна" через CompizConfig в настройках Unity Plugin. Кстати, заметил, что после установки Xneur Num Lock перестал отключаться при смене раскладки.
Выходит, что пофиксил все минусы, которые нашел. Теперь я доволен :)
запись создана: 26.10.2014 в 17:24

16:41 

Сессия: Лето 2014

Все готово
запись создана: 09.07.2014 в 18:23

@темы: учеба, радость, МАИ

00:58 

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

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


18:12 

Сессия: Зима 13/14

UPD 9.07.2014 Что-то я совсем стормозил. Зимнюю сессию я закрыл за неделю до начала летней. Методы оптимизации с третьего курса оставил на осень, как и большую часть нынешней летней.

challenge accomplished
запись создана: 18.01.2014 в 09:41

@темы: учеба, МАИ

03:05 

День рождения

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


На днях мне стукнул 21 год. Дни рождения мы с друзьями обычно празднуем довольно однообразно, но только не в этот раз!
Ребята придумали для меня целый квест, который начался в полночь. Меня попросили выйти в общий коридор. Открыв дверь, я обнаружил двух своих друзей в черных костюмах и очках (просто кадр из MIB, честное слово). Они вручили мне письмо и скрылись в поджидающем их лифте. В письме говорилось, что каждый мужчина, достигший 21 года, должен пройти некий обряд, чтобы доказать, что он Избранный.



На следующий день перед домом меня встретил друг, облаченный в черный балахон, скрывающий лицо, и проводил к парку, где я должен был встретиться с Хранителями Света. Однако все оказалось не так-то просто: по пути мне встретились Хранители Тьмы. Они предложили мне отринуть Свет и присоединиться к ним. В конце концов я все же добрался до Светлых, и они объяснили, что мне надо пройти несколько испытаний, чтобы доказать свою Избранность.

1 испытание
Перевести людей через Огненную Пропасть (на деле - пешеходный переход). Предполагалось, что я подойду к первому попавшемуся человеку и предложу свою помощь. Однако, чтобы не выглядеть глупо, мне пришлось выкручиваться: я просто шел по пятам за переходящими дорогу, оглядываясь по сторонам и иногда давая указания ("Вперед, все чисто", "Не бойтесь, я за всем слежу"). Испытание пройдено!

2 испытание
За успешное прохождение первого испытания я получил 2 Огненных Посоха (римские свечи, по 8 зарядов на каждой). Теперь мне предстояло ими воспользоваться: надо было попасть в отмеченную область с расстояния в метров 10. Первая свеча ушла на то, чтобы понять: пересохший борщевик явно мешается. Следующая попытка увенчалась успехом, и я смог перейти к следующему испытанию.

3 испытание
Это было испытание силы. Я должен был победить в лесенку двух Хранителей Света. Давненько я не подтягивался, но личную норму в 15 раз я выполнить все же смог, что принесло мне победу. И метку Силы (игра "Башня").

4 испытание
Я должен был встретиться со Старцем, который должен был определить, являюсь я Избранным или нет. Должен сказать, что на каждое испытание меня провожал как минимум один Хранитель, однако в этот раз мне пришлось идти одному по той простой причине, что началась новая война Света и Тьмы, и хранителям пришлось срочно вернуться в штаб, предварительно указав мне направление, в котором надо двигаться, чтобы достичь Башни Старца. По пути мне опять повстречались Темные. Они рассказали мне о Реликвии, которой может обладать лишь избранный, по легенде она дарует невероятную мощь своему обладателю. Хранители Тьмы вновь предлагали выбрать их сторону, я обещал подумать над этим, а они в свою очередь вызвались проводить меня.
Когда мы уже подходили к Башней (которая оказалась зданием, в котором я живу), Темных от меня отогнал, размахивая мечом, один из Светлых. Поднявшись к Старцу, я узнал, что метку Силы никто не получал уже несколько столетий! Доказать свою Избранность оказалось довольно просто - надо было обыграть Старца в "Башню". И вновь победа за мной!

На этом испытания закончились, я доказал, что Избранный. Теперь надо было получить Реликвию. Ею оказалась катана, которую мне вручили после того, как я выбрал сторону (Светлых, разумеется. Решающим фактором стал тот факт, что, по рассказам, Темные оказались вегетарианцами). Далее шла небольшая тренировка, во время которой рукоятка меча была мною благополучно сломана. Кое-как перемотав ее, мы отправились во дворец королевы Виктории (как можно было догадаться, это был магазин "Виктория", а точнее - ресторанный дворик прямо над ним). Там я перекинулся парой слов с этой королевой, узнал, что Темные ждут нас на базе Светлых.
Вернувшись в парк, мы с Хранителями Света обнаружили, что одного из наших братьев взяли в плен, околдовали и заставили идти на меня с мечом. Мне пришлось его расколдовать. Хранители Тьмы, поняв, что их замысел провалился, спаслись бегством.

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

@темы: радость, слоупок

22:53 

Хроники Панды: значение и цвет карт

Надо же, новости появились быстрее, чем я думал.

Хочу рассказать про генерацию игрового поля.

Требовалось заполнить поле из 54 ячеек случайным картами со значениями в промежутке [2; 15] (валет - 11, дама - 12, король - 13, туз - 14, джокер - 15) черного и красного цвета. Причем карты в отрезке [2; 14] должны быть представлены в количестве 4 штуки каждая (по 2 карты красного и черного цвета), а джокеров должно быть только 2. Именно они и доставляли больше всего хлопот в самом начале.

Решил в первую очередь разобраться со значениями карт, оставив цвета на потом.
Вот так это выглядело (первоначально я делал все для поля в 16 ячеек, поэтому здесь MAXCELL = 16):


Однако я быстро понял, что цвета тут распределяются неправильно, а когда вспомнил, что джокеров в колоде не 4, а 2, стало ясно - надо все менять.

Пришлось отвлечься от своих изысканий на 2 недели, ибо сессия неумолимо приближается. Видимо, все это время подсознательно я продолжал думать о проблеме, т.к. стоило мне вернуться к работе, как решение было найдено очень быстро. Зачем генерировать случайные числа в промежутке [2;14] при заполнении массива? Я ведь точно знаю, какие значения и в каком количестве должны в нем быть. Гораздо проще будет изначально забить массив нужным содержимым, а потом просто перемешать его.
Дабы не возиться, отсчитывая нужное количество нулей (черный цвет карты) и единиц (красный цвет карт), решил просто ставить их попеременно. В конце-концов это не имеет никакого значения, главное, чтобы обычные карты имели по две красные и две черные карты, а при перемешивании мы перемещаем не только значение ячейки, но и соответствующую ему ячейку с цветом, так что цвета не сбиваются.
(в данном варианте MAXCELL = 54)


Если интересно, про алгоритм тасования можно почитать здесь


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



А еще вывел в отдельную функцию запрос на бросок кубика



Так что класс Main теперь выглядит очень опрятно, ничего лишнего нет.

Пока это все изменения. Следующим шагом будет добавление триггеров.

@музыка: Malukah - The Dragonborn Comes

@темы: хроники панды, программирование

17:50 

Хроники Панды: level up

Да уж, пропал я надолго, что лишний раз напоминает, что сессия близко. Времени на Панду остается совсем мало, но я не собираюсь это дело бросать.

Я решил последовать совету Pashtet.s2lan и перешел на объектно-ориентированный язык, и мой выбор пал на Java.

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

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

На этом я вас оставлю, ждите обновлений.

P.S. Все исходники лежат в репозитории github.com/the-elf/panda

@темы: хроники панды, программирование

16:58 

Хроники Панды: первые трудности

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

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

Например, сама структура Token не полностью отражает все характеристики фишки:

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

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

  • Десятка
    • Черная: игрок пропускает ход

    • Красная: игрок делает дополнительный ход

  • Валет
    • Черный: игрок меняет направление движения

    • Красный: выбранный оппонент меняет направление движения

  • Дама
    • Черная: игрок открывает любую закрытую карту, находящуюся позади него; если открытая карта активная, то игрок должен использовать ее в СЛЕДУЮЩИЙ ХОД

    • Красная: игрок открывает любую закрытую карту, находящуюся позади него; выбранный оппонент в свой СЛЕДУЮЩИЙ ход не сможет использовать карты такого же цвета

  • Король
    • Черный: игрок поворачивает любые две карты, превращая их в препятствие, которое можно только "перепрыгнуть"

    • Красный: игрок меняет местами 2 открытые и закрытые карты

  • Туз
    • Черный: усиливает следующую черную карту игрока или ослабляет красную карту выбранного оппонента

    • Красный: усиливает следующую красную карту игрока или ослабляет черную карту выбранного оппонента

  • Джокер
    • Черный: в свой следующий ход игрок разыгрывает любую открытую черную карту

    • Красный: в свой следующий ход игрок разыгрывает любую открытую красную карту



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



Поле из обычного целочисленного массива превратилось в структуру Board:



Так что, мне кажется придется несколько повременить с переходом на объектно-ориентированный язык. Лучше для начала досконально продумать реализацию функций.

@темы: хроники панды, программирование

01:06 

Хроники Панды: начало

Я не был тут очень давно (посты про сессию не в счет), однако думаю с этим что-то делать. Этим объясняется небольшой редизайн и, собственно, эта запись. О чем же она будет? Я отвечу - об игре.
После того, как UnL1M рассказал мне про свою карточную игру (почитать о ней можно тут: первая часть и вторая часть), я подумал, что ее вполне реально перенести на компьютер, и решил этим заняться. Так как более-менее хорошо я знаю только Си, на нем и буду все это дело реализовывать. Паша пока не придумал название для игры, поэтому я дал проекту рабочее название "Panda". Спасибо фишке, которую он использовал во время первого теста.

Вот как я это себе представляю:

  • игровое поле - это массив из 54 ячеек

  • фишки представлены в виде структуры, имеющей следующие поля:

    • текущее положение

    • направление (положительное/отрицательное)

    • способность, которая так же является структурой с полями:
      • цвет
      • наименование

  • кубик - генератор случайных чисел



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

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

Спустя какое-то время мне это удалось:


С исходным кодом можно ознакомиться тут: main.c, token.c, token.h

На этом, пожалуй, пока и остановлюсь. Завтра приступлю к следующему шагу: проходу двух фишек и смене направления движения.

@музыка: Shinedown - Bully

@темы: хроники панды, программирование, возвращение

23:03 

И вновь о том же

UPD 13.10.2013

Все сдал, однако выяснилось, что оценка по методам оптимизации в ведомости отсутствует, препод глянула запись в зачетке и сказала, что это нее рука.
Быстренько сходил к начкурса, она проинформировала деканат. Так что к моменту, когда преподша пошла на меня в деканат жаловаться, тот уже был на моей стороне.
Написал заявление, чтобы оценку в ведомость таки поставили. Жду результатов.

UPD 12.09.2013
2 неделя нового учебного года почти завершена, а я уже успел завалить одну пересдачу и сдать другую. Что ж, все не так уж плохо.

UPD 06.07.2013
Сессия откладывается на конец августа, а я могу отдохнуть.
основной пост
запись создана: 13.06.2013 в 00:33

@темы: учеба, МАИ

Ушастые заметки

главная