1

Рособрпозор

Всем известно, что каждое учебное заведение в Этой стране обязано иметь свой веб-сайт. Давече мне в руки попал перечень требований к оформлению этих специализированных сайтов. Инициатива хорошая - стандартизировать интерфейс всех сайтов, чтобы пользователь без труда мог найти интересующую информацию, вне зависимости от фантазии разработчика. Но реализована она настолько отвратительно даже на этапе документирования, что я просто не могу не поделиться с общественностью. Это туча своих семантических атрибутов, представляющих собой смесь транслита с словами на английском и ошибками. Например, один из примеров схемы URL для раздела сведений по образовательным стандартам:

http://<адрес_официального_Сайта>/sveden/eduStandarts

Семантические атрибуты вроде:

itemtype="http://obrnadzor.gov.ru/microformats/UchredLaw"


itemprop="Ustav_DocLink"


itemprop="Tek_kontrol_DocLink"

Рособрпозор Рособрнадзор, Почему?, Web-Программирование, Стандарты, Госслужба, Бугурт

Зачем?! Уже 2016 почти, а Рособрнадзор не в курсе о существовании REST?


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


Но "финишем" для меня стали "рейтинги" в разделе с архивом приказов.

Рособрпозор Рособрнадзор, Почему?, Web-Программирование, Стандарты, Госслужба, Бугурт

Как-то это непрофессионально и бестолково. Почему у нас не принято читать то, под чем ставишь свою подпись? А? г-н Бисеров?

Показать полностью 1
8

Не останемся без билетов на поезд или пишем "Анечку"

На носу НГ, а ты, дорогой пикабушник, собираешься ехать домой/по гостям/в интересное место? Билет купить не забыл? Все ж раскупили! Ан-нет, не всё. В продаже билетов нет, но они еще будут "выбрасываться" пачками ближе к дате отъезда. Нужно мониторить сайт на наличие билетов. Не вставать же ради этого каждый день в 8 утра, ей богу! Нам срочно нужна наша личная секретарша! Кофе подождет, а вот дела не ждут.

Не останемся без билетов на поезд или пишем "Анечку" Программирование, РЖД, Люби ржд, Csharp, Howto, Анна, Длиннопост

Что у нас есть?

- Сайт РЖД, где мы в первоисточнике можем смотреть наличие билетов,

- браузер с инструментами разработчика (Chrome или Firefox+Firebug вполне подойдут)

- средства для программирования и окружение для запуска программ (C# и .NET Framework в моем случае).

Морда сайта имеет куку (идентификатор сессии) и делает три HTTP-запроса:


0) запрос самой HTML-страницы с сопутствующими ресурсами и их запросами (баннеры-х**неры, яндекс-метрики всякие, про них я не буду говорить),

1) запрос к базе, получает идентификатор ответа (rid),

2) по идентификатору ответа забирает данные


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

Не останемся без билетов на поезд или пишем "Анечку" Программирование, РЖД, Люби ржд, Csharp, Howto, Анна, Длиннопост

HTTP-запрос - это и есть HTTP-запрос.

Запросом к базе - я буду называть наш набор требований к билетам, с чем работает БД РЖД и что в результате дает нам данные.

Не останемся без билетов на поезд или пишем "Анечку" Программирование, РЖД, Люби ржд, Csharp, Howto, Анна, Длиннопост

Сервер нам всегда отвечает json-объектом, в котором есть поле "result", которое может быть { OK, Error, RID }.


На первый HTTP-запрос нам приходит объект с "result":"RID". Примерно такой:

{

"result" : "RID",

"discounts" : { },

"rid" : "202628254",

"timestamp" : "01.12.2015 11:13:29.077",

"tipFlags" : { "Ukr" : 0 }

}

Значит, мы можем смело лезть искать поле "rid" и подставлять код из него значением параметра rid во второй HTTP-запрос. Если в "result" json-ответа будет значение "OK", то у нас все получилось.


Тонкость в том, что если сервер не успеет извлечь результат между нашими запросами, то "result" будет "Error" или вообще ответ на предыдущий запрос. Лучше обезопасить себя принудительной задержкой между запросами или настойчиво запрашивать до тех пор, пока не получим OK.


В случае удачного запроса, мы получим данные вроде этих:

Не останемся без билетов на поезд или пишем "Анечку" Программирование, РЖД, Люби ржд, Csharp, Howto, Анна, Длиннопост

Теперь непосредственно Анечка.


Нам нужно нечто, способное делать HTTP-GET-запрос и хранить куки. Используем System.Net.WebClient с небольшой модификацией.

Не останемся без билетов на поезд или пишем "Анечку" Программирование, РЖД, Люби ржд, Csharp, Howto, Анна, Длиннопост

Пару слов о разборе json-данных. Для этих целей я использую Newtonsoft.Json, который можно взять через NuGet. Требуется создать модель данных (C# классы), чтобы спроецировать на них json. Например, для объекта-ответа с rid, пример которого я приводил выше, можно написать такой класс:


{

"result" : "RID",

"discounts" : { },

"rid" : "202628254",

"timestamp" : "01.12.2015 11:13:29.077",

"tipFlags" : { "Ukr" : 0 }

}

Не останемся без билетов на поезд или пишем "Анечку" Программирование, РЖД, Люби ржд, Csharp, Howto, Анна, Длиннопост

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

Не останемся без билетов на поезд или пишем "Анечку" Программирование, РЖД, Люби ржд, Csharp, Howto, Анна, Длиннопост

По этим принципам организуем остальные проекционные типы

Не останемся без билетов на поезд или пишем "Анечку" Программирование, РЖД, Люби ржд, Csharp, Howto, Анна, Длиннопост
Не останемся без билетов на поезд или пишем "Анечку" Программирование, РЖД, Люби ржд, Csharp, Howto, Анна, Длиннопост
Не останемся без билетов на поезд или пишем "Анечку" Программирование, РЖД, Люби ржд, Csharp, Howto, Анна, Длиннопост

Теперь мы можем показать Анечке, как можно приносить нам апдейты с сайта РЖД.

Не останемся без билетов на поезд или пишем "Анечку" Программирование, РЖД, Люби ржд, Csharp, Howto, Анна, Длиннопост

Значения station*_name и station*_code можно почерпнуть из API автодополнения на том же сайте, оно так же работает через json. Базируется здесь , есть HTML-интерфейс, код языка - ru.

Вот и всё. Смс-оповещалку с какого-нибудь смс.ру прикрутить не составит труда.

Поделие на Гитхабе с таймером и бегунами, кто не умеет в GIT, тому по ушам ссылка на zip-архив.

Предложения, пожелания, форки и срачи в комментариях приветствуются.


P.S. Зачем это все? Почему это все так плохо ?

А потому что могу! ;))

Показать полностью 9
2

Нужна ли программисту математика?

Текст позаимствован из поста хабропользователя arielf. Очень советую прочесть статью полностью, речь идет о высшем образовании.
--------


У каждой специальности есть свой минимальный набор обязательных знаний. У информатики и программирования такой основой служат математические курсы; так что вопрос: «нужно ли программисту образование?», обычно превращается в «нужна ли программисту математика?» или «нужно ли программисту так много математики?» Учитывая, что программист в классическом смысле – это инженер, вопрос можно сформулировать и иначе: «нужно ли образование инженеру?» Споров на этот счёт обычно не возникает. Проблема разве что вот в чём: не все хотят быть учёными и инженерами. Если предел ваших мечтаний – успешная игра в App Store, а не проектирование искусственного интеллекта, криптографического алгоритма или программ трёхмерной анимации, вы можете смело минуя вуз приступить к её выполнению, но и в этом случае знания не испортят вам карьеру. В вузах не знают, кем вы себя видите через много лет и чем планируете заниматься – не говоря уже о том, что вы сами в семнадцать лет можете ещё этого не знать. Считается, что лучше заранее научить вас всем основам, чем упустить что-то важное. Кроме того, основные курсы, как правило, взаимозависимы и нельзя просто взять и изъять некоторые из них. И их главная цель – не научить вас всему на свете, что в принципе невозможно, а предоставить вам примерную карту современных научных и инженерных знаний, чтобы при столкновении с неизвестным, вы смогли принять верное решение, в каком направлении идти.

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

Математика является тем каркасом, на который нанизываются все прочие знания. Увы, многие начинают осваивать профессию с конца. Программист, изучивший языки программирования, инструменты разработки, различные технологии и паттерны, но не освоивший математические основы, напоминает художника, научившегося в совершенстве разбираться в красках и кистях, освоившего множество приёмов, но при этом не знающего композиции, перспективы, анатомии и прочих основ. У него может быть много гениальных мыслей, но выразить их он не сможет, и всё, на что ему остаётся рассчитывать – это работа ассистентом или раскрашивание чужих картин. Изредка незнание основ формирует новые стили, как, например, в случае с Ван Гогом (к его чести нужно сказать, что он осознавал свои проблемы и брал уроки живописи у профессионалов), но чаще становится препятствием в творчестве. И если в искусстве это ещё можно оправдать тем, что автор так видит, то в промышленности неправильный алгоритм генерации случайных чисел, приведший к тому, что миллионы долларов честных налогоплательщиков промахнулись мимо цели, не оправдан ничем.

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

Кто такие программисты?

Текст позаимствован из поста хабропользователя arielf. Очень советую прочесть статью полностью, речь идет о высшем образовании.
--------


Представьте, что вы спросили, какая профессия у некоего человека, и вам ответили, что он строитель. Не имея никакой иной информации, сможете ли вы сказать, чем он занимается? Он может быть архитектором с художественным образованием, инженером, прорабом, квалифицированным рабочим или уборщиком строительного мусора. Не говоря уже, что во многих перечисленных направлениях есть свои специализации. И всё равно его бы назвали строителем, но, очевидно, что это разные строители. Чтобы сколотить собачью будку, не нужно специальное образование, а вот небоскрёб без него не возвести. Однако тех, кто занимается первым, обычно строителями не считают. Программистами же сейчас называют кого угодно. Математик, занимающийся алгоритмами; разработчик навигационных программ в НАСА; эксперт в ассемблере, изучающий вирусы; школьник, верстающий HTML страницы – всё это программисты. Так что прежде чем ответить на вопрос: нужно ли программисту образование, вам следует уточнить – какому именно. Возможно, в вашем конкретном случае образование действительно не нужно.
492

Парадокс пикабу

Фильтрация контента работает настолько неэффективно , что "свежее" с редким тонким юмором читать куда интереснее, чем "горячее" (котосиськи, МДК-юмор).

UPD: Пикабу, ты меня совсем не так понял! =))
UPDUPD: Ну и как вы снова умудрились поднять в горячее пост о том, что в горячем много барахла???)) Кто плюсы ставит? Ну-ка, руки с мыши!)
Отличная работа, все прочитано!