0xDEADFA11

0xDEADFA11

На Пикабу
Дата рождения: 01 января 1945
поставил 374 плюса и 537 минусов
отредактировал 48 постов
проголосовал за 62 редактирования
Награды:
10 лет на ПикабуС Днем рождения, Пикабу!
17К рейтинг 106 подписчиков 60 подписок 14 постов 1 в горячем

Продавец на Ozon может безнаказанно менять карточку товара

В эти славные дни распродаж хочу предостеречь клиентов данной площадки.


TL;DR.: Продавец может молча подменить характеристики товара или сам товар постфактум (оплаты). Не страшно, ибо можно вернуть товар и деньги, но может стать неприятным сюрпризом.


Ситуация: вижу в продаже пару углекислотных огнетушителей ОУ-3 по цене одного (~1,5 килорубля), на картинке - пара, удостоверяюсь, что в описании всё про 2 шт. Клево, давно хотел заменить дома старый порошковый, а тут так удачно заскочил! Оформляю, оплачиваю, ползаю по сайту дальше.

Вдруг, замечаю неладное - на картинке заказа вдруг один огнетух и статус заказа сменился с "создано" на что-то вроде "собрано у продавца". В карточке уже и след простыл второго. Молча. Цена прежняя. Вдыхаю-выдыхаю, иду писать в ТП, дескать, вертайте в зад, как было при акцепте оферты. Ответом просят скриншоты карточки товара в изначальном состоянии, на что я развожу руками, конечно. А они, дескать, ничего знать не знают, сейчас там 1 шт. (спасибо, КО!).

Злюсь. Остываю. Решаю отменить заказ, чтобы пойти к сиреневым конкурентам. У ТП-бота прошу отменить заказ, и тут...

Продавец на Ozon может безнаказанно менять карточку товара OZON, Обман, Служба поддержки, Негатив, Длиннопост

Снова прежняя картинка товара! Может озон кэширует или еще что. Делаю скриншот, снова зову ТП-человека.

Продавец на Ozon может безнаказанно менять карточку товара OZON, Обман, Служба поддержки, Негатив, Длиннопост

Ничего они делать не собираются. Подарили царских 150 баллов-рублей на счет. Обидненько. Благо, заказ не отправлен и возврат денежек мгновенный.


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

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

Рособрпозор

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

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

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

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


itemprop="Ustav_DocLink"


itemprop="Tek_kontrol_DocLink"

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

Сервер нам всегда отвечает 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, Гайд, Анна, Длиннопост

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


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

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

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


{

"result" : "RID",

"discounts" : { },

"rid" : "202628254",

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

"tipFlags" : { "Ukr" : 0 }

}

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

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

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

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

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

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

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

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

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

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

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


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

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

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

Qt is cute [2]: QMake & third-party libs

Продолжаем буянить не по формату :-)
Qt is cute [2]: QMake &amp; third-party libs Продолжаем буянить не по формату :-)
Показать полностью 1

Qt is cute [1]: Signal-slots

Немного о сигналах и слотах в терминах Qt.
Qt is cute [1]: Signal-slots Немного о сигналах и слотах в терминах Qt.
Показать полностью 1

Qt is cute

Почему я люблю Qt? Ну, во-первых, он зеленый. А зеленый - мой любимый цвет...
Qt is cute Почему я люблю Qt? Ну, во-первых, он зеленый. А зеленый - мой любимый цвет...
Показать полностью 1

Лига Любительских Проектов Пикабу (ЛЛПП)

Лига Любительских Проектов Пикабу (ЛЛПП)

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

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


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

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

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

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