LINUX.ORG.RU
ФорумTalks

Вот вы ругаетесь «индусы», «индусы»...


0

0

Давайте я вам лучше про русских раскажу?

Итак, невъ...нно "корпоративная платформа". Оракел, репликация, оперативный, бухгалтерский, табельный и прочие учеты, ынытрпрайз, все понты. Самописное _всё_

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

Казалось бы, что может быть проще? Берем торговый терминал, на котором ведется десяток табличек (товары/цены/операции), ставим его на endpoint, настраиваем выгрузку операций продажи на центральный сервер (в пакетном режиме по шедулеру), и такую же пакетную загрузку данных с центрального сервера.

Но нет - это не ынтырпрайс. Поэтому делается "почти-копия" центрального сервера со всей его невъ...ной базой, и ставится на комп этого самого удаленного объекта(!). Причем структура баз уже ОТЛИЧАЕТСЯ. Вплоть до различия в длине полей (фак!). Соответственно вместо компактной надежной, в которой из движущихся частей только винт и вентилятор блока питания, водружается сервер об двухъядерном процессоре и двух гигах оперативки, с ораклом 10g. На него ставится ДВЕ версии оракла - 10.2 и 8.0.5(!!!!), и клиентское приложение, написанное на... в общем не важно на чем. Достаточно точной альтернативой будет "на MS Access".

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

Итак, продолжаем банкет. Настройки винды (сервер на винде, да-да), оракла (noarchivelog), файрвола (отключен) оставим в стороне, заглянем под крышку этмоу чуду.

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

Ну и само собой, еще множество справочников имеет аналогичную структуру (ну например погрузочно-разгрузочные терминалы - есть таблица терминалов под каждый тип: водный, ЖД, автомобильный... и есть сводная таблица "вес терминалы" куда триггеры подкладывают копии записей). Ах да - не все документы ссылаются на сводную таблицу. Некоторые ссылаюстя на таблицу объектов конкретного типа.

Продолжаем банкет, исследуем базу. Находим таблицу "свойства товара", в которую можно записать всякие дополнительную информацию (ну например страна-производитель, цвет, размер - в общем что угодно). Организовано красиво - есть таблица свойств, есть таблица значений свойств - ссылка на товар, ссылка на свойство, значение свойства (строка) и дата начала действия данного значения свойства. Даты окончания действия этого значения тупо НЕТ. Rак в этой ситуации можно написать номральный запрос "по состоянию на конкретную дату"?!?! ХЗ. Ладно, хрен с вами. Переживем.

Начинаем работу, вводим товар, штрих-код (это такое свойство есть)... Что-то не то. То товар по штрих-коду не находится, то ошибка выскакивает, то еще что-то. На центральном сервере товар появляется, на серверах "на местах" - появляется но штри-код не вводится. Мля. Начинаем ковырять триггеры: оказывается, если кто-то пытается ввести занчение "штрих-код" для товара, то один из триггеров выкидывает такой фортель: если код (ID) свойства равен 10 то автоматически добавляется строка в специальную таблицу штрих-кодов! Причем этих триггеров существует два варианта - один на центральном сервере, другой на сервере точки продаж, причем дублирование штрих-кодов на центральном сервере возможно, а на сервере точки продаж на это специальной таблице стоит проверка на уникальность штрих-кода! На этом месте у меня начинается истерика, поскольку пользователи вводят товары на центральном сервере, где можно в результате получить дублирующиеся штрих-коды. И мы их получили. Обращаемся к разработчикам - они отказываются включать проверку на дублирование штрих-кода в базе центрального сервера. Проблема дублей их не волнует. Хрен с ними, пишу код сам, не трогая "аффтарские" чудачества.

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

Потом с помощью ораклового exp данные этой таблицы выгружаются в дамп (бинарник) и этот дамп отправляется к местоназначению. На той стороне с помощью IMP данные вливаются в базу и потом специальная программка формирует SQL-запросы, которые накатывает в базу. Причем термина "порядок репликации" (типа сначала реплицируем справочники, потом документы которые на них ссылаются) нет. Программа тупо делает три попытки, и если обломалась - репликация помечается как "ошибочная".

В экзешник программы репликации зашиты имя и пароль юзера, под которыми она подключается к базе(!!!) Эта программа формирует и выполняет SQL-запросы по алгоритму

$sql = "insert into tablename(field1,field2) values ('" + $value1 + "','" + $value2 + "')";

exec_sql( $sql );

И что происходит если $value1 является строкой, содержащей апостроф?

Вот так вот бывает. А вы говорите "индусы", "быдлокодеры"...

★★★★★
Ответ на: комментарий от UserUnknown

> А не проще было сделать через dblink или как его там?

Условие - НЕПОСТОЯННАЯ связь, возможно вообще "полный оффлайн" со сникернетом: мальчик с флэшкой за сникерсы бегает и таскает на флэшке репликации :-)

no-dashi ★★★★★
() автор топика
Ответ на: комментарий от friday

> Что, и такое бывает?

Бывает еще и не такое :-)

no-dashi ★★★★★
() автор топика

во бля... а я думал Парус-Бухгадтерия - это ужас.... теперь понимаю, что мне во многих смыслах повезло..... х_Х

Bobr
()

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

vada ★★★★★
()
Ответ на: комментарий от Bobr

> а я думал Парус-Бухгадтерия - это ужас...

"Парус" на этом фоне ну такая лапочка...

no-dashi ★★★★★
() автор топика

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

тут делается цикл по всем датчикам
begin
    вычисляем координаты
    проверяем допустимость
    если допустимо
        сбрасываем в файл
end

Именно в таком духе. На чистом русском языке, не в виде комментария.
Про libastral я в те далёкие годы не знал, так что предположил,
что это писалось на какой-то версии AI-Паскаля из далёкого будущего :D

KRoN73 ★★★★★
()

>Достаточно точной альтернативой будет "на MS Access".

Так и пиши: Дельфи. Дельфи 3 или 4 или 7? Скорее всего 7.

anonymous
()

Компания случайно не "МВ" называется? Очень похоже на их стиль разработки.

anonymous
()
Ответ на: комментарий от anonymous

> Так и пиши: Дельфи. Дельфи 3 или 4 или 7? Скорее всего 7.

Это НЕ дельфя. MS Access дает наиболее точное представление об среде разработки клиентской части :-)

no-dashi ★★★★★
() автор топика
Ответ на: комментарий от Bobr

а еще бывает такая контора ПОИСК...

anonymous
()
Ответ на: комментарий от lester_dev

>Делфи еще не самое страшное, вот M$ Visual FoxPro эт да :)

Не упоминай! Терь бессоная почь обеспечена. Кашмары...

Пришел в фирму, там у них прога на фокспро... Глючит жутко. Стал разбираться. Разобрался... Так, все сели? Покрепче держитесь. Сейчас! Сейчас! Сейчас!...

Вобщем, в таблице поле ID, естессено уникальный (это нормально). А вот и хер! Записей с одинаковым ID можно было насоздавать... да сколь хочешь! Причем, все это нормально индексировалось. Ни каких исерик об ошибках. А вот поиск уже накрывался. Ищем запись с ID 23456, напрмер, получаем список записей с абсолютно пох каким ID. Или изредка падение системы.

Такого косяка даже представить себе не мог!

vada ★★★★★
()
Ответ на: комментарий от anonymous

>Так и пиши: Дельфи. Дельфи 3 или 4 или 7? Скорее всего 7.

есть такая весчь как VBA от великой и всемогущей М$... и он интегрирован в acces %)

anonymous
()
Ответ на: комментарий от no-dashi

> Это НЕ дельфя. MS Access дает наиболее точное представление об среде разработки клиентской части :-)

Ну ты заинтриговал прямо.. Что же это может быть? На одинэсе они его что-ли написали? Может Forms или OPO?

anonymous
()

Собственно, никто никогда и не утверждал, что русские - это не индусы. Вон, те же руссонацыги себя "арийцами" кличуть, и не с просто так. Нормальных программистов в России очень мало, поскольку MIT-ов в России нет и не будет.

anonymous
()
Ответ на: комментарий от no-dashi

>Это НЕ дельфя. MS Access дает наиболее точное представление об среде разработки клиентской части :-)

Значит MS VB6?

>тут делается цикл по всем датчикам
begin
    вычисляем координаты
    проверяем допустимость
    если допустимо
        сбрасываем в файл
end

>Именно в таком духе. На чистом русском языке, не в виде комментария.
Про libastral я в те далёкие годы не знал, так что предположил,
что это писалось на какой-то версии AI-Паскаля из далёкого будущего :D

А вот кстати тут я не соглашусь. Я прочитал SICP, GoF, PoEAA, 
и много других книг по CS и ни в одной не было сказано об 
обязательности именования методов в кодировке 1252. Компилятору пох 
как мы называем классы, обьекты и методы. Хоть по русски, хоть на 
херакане, хоть на большой китайской кодировке.

anonymous
()

Ообщался с такими, только там кажется не точки продаж были, а более другие "подразделения на местах".

Короче в топку. Одна наша государственная контора, юзающая fido для передачи файлов и отчётов (fido == FTN-технология, а не сама сеть) меня в плане интересно сделанных решений прикалывает куда больше, нежели такие лузеры от энтырпрайза.

svr4
()
Ответ на: комментарий от svr4

Эта контора - МВД? Видал, видал это в деле. Всё бы хорошо, если бы не foxpro.

anonymous
()
Ответ на: комментарий от anonymous

Людям, которые эту китайскую грамоту потом будут читать далеко не пох.

Мне например удобнее и понятнее что-то вроде FreeObject, чем ОсвобОбъект.

Один из хороших примеров это бухгалтерские программы от 1С и Инфо-бухгалтера.

Например:
СООБЩЕНИЕ ("Сейчас произойдет чтение данных из системы Клиент-Банк и формирование Входящих и Исходящих платежей")
СОЗДАТЬ(файл, ТИП_ФАЙЛ)
путь_к_файлу="C:\CLB_IMPORT\"
СОЗДАТЬ_ДИР(путь_к_файлу)
ЕСЛИ СУЩ_ФАЙЛ (путь_к_файлу+ИмяФайла) ТО
файл=ФАЙЛ_ОТКРЫТЬ(путь_к_файлу+ИмяФайла,НЕТ)
ИНАЧЕ
файлв=ВЫБОР_ФАЙЛА(путь_к_файлу+"*.txt","Выберите файл базы выписки","Файлы выписок банка","txt")
файл=ФАЙЛ_ОТКРЫТЬ(файлв,НЕТ)
ЕСЛИ файлв="" ТО СТОП
КОНЕЦ_ЕСЛИ
СООБЩЕНИЕ ("Не найден файл "+путь_к_файлу+ИмяФайла)
КОНЕЦ_ЕСЛИ
СООБЩЕНИЕ ( "Сейчас будет открыт файл "+путь_к_файлу+ИмяФайла)

и=1
строка=файл.СЧИТАТЬ
ЦИКЛ ПОКА (НЕ ПОДСТР(строка,1,10)="ДатаКонца=")
и=и+1
...
...

UserUnknown ★★★★★
()
Ответ на: комментарий от anonymous

>Компилятору пох как мы называем классы, обьекты и методы.

А речь-то не о кодировке шла. Давно Пскаль научился понимать конструкции «тут делается цикл по всем датчикам»? :D Или я лет сто проспал вдруг? :) ... А!!! Друк! Ты прибыл из того самого будущего, из которого прибыл автор тех строк?! А не ты ли их писал?? :D

KRoN73 ★★★★★
()
Ответ на: комментарий от UserUnknown

>Один из хороших примеров

Всё относительно :) Вот кусок реально работающего кода:

: начальная_точка  ( -- )  0 to точка ;

: показать_точки  ( -- )
    указатели unless
        new-list
        зона list# 0 ?do
            0 over list+
        loop
        to указатели
    then

    начальная_точка
    зона list# 0 ?do
        показать_точку
        10 sleep
        следующая_точка
    loop
;

: убрать_точку  ( -- )
    указатели точка list@
    false unspawn
    10 sleep
    следующая_точка
;

: убрать_точки  ( -- )
    указатели unless exit then

    начальная_точка

    зона list# 0 ?do
        убрать_точку
    loop
;

:)

KRoN73 ★★★★★
()
Ответ на: комментарий от UserUnknown

>Мне например удобнее и понятнее что-то вроде FreeObject, чем ОсвобОбъект.

А мне как раз ОсвобОбъект понятнее. А ты исходники на ревизию англичанам или омериканцам отправляешь? Знаешь, я понимаю, когда люди в аутсорсе клепают или опенсорс выкладывают, там критично, чтобы все было по -английски. А наш закрытый софт лучше когда написан по русски, или хотя бы комментарии в 1251, меньше голову приходится напрягать при чтении. И так от английских книжек уже она распухла

anonymous
()
Ответ на: комментарий от anonymous

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

хотя, конечно, принципиально это ничем не ограничивается

anonymous
()
Ответ на: комментарий от vada

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

anonymous
()
Ответ на: комментарий от anonymous

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

anonymous
()

Все ниасилил - моного букв. Но причины биться головой об стену не вижу. Сам работаю на такой миленькой АБС "Новая АФина". Тоже Оракел, вся бизнес-логика на PL/SQL, дофига таблиц, представлений если не ошибаюсь то ~10000. Самое тривиальное платежное поручение разбито на несколько таблиц, это не считая доп. аттрибутов и таблицы DOCTREE, которая обеспечивает иерархию документов.

Процедур просто море, львиная доля их лежит в "плоском" пространстве. Какого-то штатного механизма отображения зависимостей не предусмотрено. Равно как и системы контроля версий. Обновления это вообще песня - ежедневные громадные архивы с SQL скриптами, которые гнать нужно руками и в определенном порядке.

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

Выгрузка XML (есть такой зверь УФЭБС) осуществляется как бы вы думали? print("<?xml ...");print("<tag>");...;print("</tag"); Т.е. никакой даже самой примитивной модели не создается... Что очень странно т.к. оракел поддерживает XML еще черт знает с какого времени. Ессно не проходит и месяца, чтобы не было косяков с синтаксически правильным, но семантически неверным платежным докуменом, т.к. логический контроль отсутствует.

Поддержка многофилиальных структур выполнена очень интересно. По архитектурным соображениям для каждого филиала свою отдельную базу иметь нельзя. Поэтому >10 филиалов работают в одной базе и в одной бизнес логике, изобилующей операторами if филиал такой-то.

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

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

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

Сама система не предназначена для работы через интернет. Что приводит к феерическим тормозам при самом минимальном глюке достаточно толстого канала "на Москву". У нас проблема решена путем того, что работаем в АБС мы через цитрикс. А это совсем не сахар.

Про контроль доступа к системе я распространяться не буду. Поскольку без мата это невозможно.

В идеале в АФИНЕ автоматизировать можно все. На практике - не автоматизированно ничего. И огромное количество ручных операций имеют место быть.

Короче, no-dashi, РАССЛАБЬСЯ ТЫ НЕ ОДИН!

Macil ★★★★★
()
Ответ на: комментарий от Macil

Ну так. Русские программисты индусам - достойный конкурент. Только вот индусы сами не напрягаются со своей репутации, даже гордятся ("зато нас много!"), а русские почему-то продолжают распространять нелепые слухи о своём превосходстве. Нет ничего тошнотворнее патриотических иллюзий.

anonymous
()
Ответ на: комментарий от anonymous

Если у твоего софта задел крутиться только в узком кругу своей конторки, то, наверное можно и оставить всякие "ОсвобОбъект" и "ЕСЛИ НЕ ПРАВДА ТОГДА". Но вот тогда база кода становится малоликвидной. То есть из этого проекта выдрать кусок кода и вставить в более другой, интернациональный проект уже будет стоить некоторых усилий. Или вот другой пример: Тебе предлагают аутсорсную работу в, опять же, интернациональном проекте. Только вот стиль написания у тебя останется а ля "РусОС". Не задумывался почему итальянцы, французы, чехи... практически все, включая китайцев и тех же самых индусов пишут комментарии на английском? У индусов только имя и фамилия на своём языке, а всё остальное - на, пусть и корявом, но английском. То что "меньше голову приходится напрягать при чтении", попробуй вообще не программировать. А про комментарии в небогоугодном 1251 вообще жесть. Почему не в кои8? Человек знающий русский, но не имеющий шрифтов тоже фиг прочтет твои комментарии.

UserUnknown ★★★★★
()
Ответ на: комментарий от anonymous

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

Опаньки. А ссылку на этот стандарт можно? Или только через libastral:// в Вашу голову?

KRoN73 ★★★★★
()

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

anonymous
()
Ответ на: комментарий от KRoN73

> : начальная_точка ( -- ) 0 to точка ;

Прозреваю форт. А где же ЛОРовские лисперы, которые тоже легко привели бы русскоязычный пример?

Плохо, правда смешение языков. "указатели unless exit then", имхо, смотрится гаденько.

silent
()
Ответ на: комментарий от UserUnknown

> У индусов только имя и фамилия на своём языке, а всё остальное - на, пусть и корявом, но английском.

Это у индусов корявый английский?

anonymous
()
Ответ на: комментарий от silent

>Плохо, правда смешение языков.

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

Хотя решается алиасами нараз. Что-нибудь, типа:

«указатели нет? выход тогда»

:)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Но, вообще, конечно, в современном программировании нужно применять исключительно аналитические [натуральные] языки. А то с синтетическими встаёт проблема сконений.

...

Кстати, прикольно (и не так сложно) в язык ввести склонения. В тот же Форт - элементарно. Стемминг перед компиляцией. Буквально в несколько строк решается. Реализовать, что ли, в JBForth такую опицю :) Но тогда могут быть неоднозначности :)

: убрать_точки ( -- ) указателей нет? выход тогда

начальная_точка

зону список-делать убрать_точку цикл ;

А у нас убрать_точку и убрать_точки синонимом выходит...

KRoN73 ★★★★★
()
Ответ на: комментарий от Macil

>Короче, no-dashi, РАССЛАБЬСЯ ТЫ НЕ ОДИН!

Во жопа то!!!!!!!!!!!!!!!!!!!!!!!!!!!

vada ★★★★★
()
Ответ на: комментарий от vada

Ты, тупица, читать вообще не умеешь?

Хотя, да, вспомнил, ты действительно тупица, с IQ близким к нулю. Ты и раньше тут умудрялся обосраться на ровном месте, в любой теме.

anonymous
()
Ответ на: комментарий от Macil

Что только не сделают люди, чтобы своих толстых клиентов клепать и html с http не учить. Однако Новая АФина это еще ладно, ты вот с этим http://www.cnews.ru/reviews/free/gov2007/int/mvd/ дела не имел, ооооооо.

anonymous
()

> ... и дата начала действия данного значения свойства. Даты окончания действия этого значения тупо НЕТ. Rак в этой ситуации можно написать номральный запрос "по состоянию на конкретную дату"?

имхо, правильное решение. Если для каждого значения хранить даты начала и конца срока действия, то возможно появление перекрывающихся интервалов:

Товар:1; Свойство:цена; периодС:2008-01-01; периодПо:2010-12-31; значение:10.00

Товар:1; Свойство:цена; периодС:2008-03-01; периодПо:2010-12-31; значение:12.00

и пропущенных интервалов:

Товар:2; Свойство:цена; периодС:2008-01-01; периодПо:2008-03-31; значение:10.00

Товар:2; Свойство:цена; периодС:2008-04-15; периодПо:2010-12-31; значение:12.00

Как Ваш запрос поведет себя в этой ситуации? Сколько будут стоить эти товары 2008-04-01?

gdv2
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.