Сообщество - Лига программистов

Лига программистов

1 728 постов 11 639 подписчиков

Популярные теги в сообществе:

Ответ на пост «Технологии»1

Ответ на пост «Технологии» DOS, Microsoft, Текст, Windows, Cobol, Linux, 187, Ответ на пост

Вакансии для спецов COBOL:)

Для сведения - на дос или старой винде работает почти вся т.н. критическая инфраструктура 30 лет. И это надо сопровождать БЕЗ ТЕЗПОДДЕРЖКИ.

CVE тут - CVE там.

И был отрезан наш пропан.

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

Ответ на пост «Реальная цена за товар upd»1

Сайт с расчетом реальной цены стал недоступен, поэтому запилил свой калькулятор, правда без блекджека 😄

https://xt9.ru/truecalc/

Ответ на пост «Реальная цена за товар upd» Стоимость, Сайт, Цены, Ответ на пост, Длиннопост

Упор на быстроту и простоту набора, отдельных окон для каждой цифры нет, отдельной кнопки для расчета тоже.

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

При вводе открывается цифровая клавиатура, вводим цену товара, тире, вес, потом пробел. Все эти символы на цифровой клаве есть, переключаться никуда не надо.

По нажатию пробела происходит расчет, результат записываются в таблицу,а поле ввода очищается и готово к работе.

Строки подсвечиваются как светофор - красный, желтый, зелёный, где зелёный - самый дешёвый.

Лишние, случайные или ошибочные строки удаляются по нажатию крестика.

Весь калькулятор на Ява скрипте, теоретически можете сохранить и открыть страницу с устройства, на работу не повлияет

Код поставляется "как есть", без гарантий, распространяется свободно.

Собственно всё. Пользуйтесь!

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

Лучшая практика для создания сервера - корутины или poll / select

Добрый день, коллеги.

Возможно, вы уже видели данный пост уже есть на stackoverflow .ru, но та площадка плохо подходит для активного обсуждения, если оно завяжется.

Некоторое время писал разное прикладное клиент-серверное ПО на C++ по линуксовые ОС. Моя обычная практика (в общих чертах):

  1. создать "серверный" сокет для приема входящих подключений

  2. тем или иным образом "отметить" его как "серверный"

  3. написать фрагмент кода/функцию приема входящих подключений (1)

  4. написать фрагмент кода/функцию обслуживающий принятые подключения (клиентов) (2)

  5. написать фрагмент кода/функцию обслуживающий таймаут ожидания (3)

  6. завести массив / вектор для файл-дескрипторов

  7. запустить select / poll для этого массива

  8. при наступлении какого либо события (1),(2) или (3) - дернуть соответствующую функцию.

В принципе, для не сильно нагруженных приложений всегда хватало такого подхода. Корутины C++ для этого не использовал в основном потому, что они в этом языке неудобные (мнение субъективное). Однако прочитал я про замечательные примеры корутин в Go и, соответственно, примеры реализации клиент-серверных приложений на этих корутинах (ибо там они очень удобно выглядят). Как я понял, в общих чертах подход следующий:

  1. создать "серверный" сокет для приема входящих подключений

  2. написать функцию-корутину приема входящих подключений (1)

  3. написать функцию-корутину обслуживающую принятые подключения (клиентов) (2)

  4. на каждого из принятых клиентов заводить "свою" корутину

  5. корутины "сами дергаются" при наступлении события

Данный подход я практически полностью переписал с примера "кричащий сервер на go", как я его увидел и понял. В данном случае вообще не важно что там под капотом, особенно если смотреть с верхнего уровня.

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

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

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

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

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

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

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

Технологии1

Германия остро нуждается в системных администраторах, владеющих MS-DOS и Windows 3.11. Эти операционные системы морально устарели 30 лет назад, но все еще используются в работе немецкой сети железных дорог. Поиск специалистов осложняется тем, что многие современные администраторы еще не родились, когда Windows 3.11 и тем более MS-DOS были в ходу. Те, кто умеет с ними работать, уже давно на пенсии.

https://www.cnews.ru/news/top/2024-01-30_samoj_peredovoj_str...

Доброе слово и кошке приятно

К своему полтиннику я уже переболел синдромом самозванца, научился себя ценить и понимать свою квалификацию. Поэтому, когда на работе дают положительную оценку, то воспринимаю это как должное. Но пару раз в жизни меня хвалили совершенно неожиданно. Это какие-то мелкие задачи, они даже рядом не сравнимы с проектами на работе, но почему-то они очень греют моё самолюбие.
Эпизод первый. Сосватали фриланс проект, я довольно давно не фрилансил, но была возможность поработать по вечерам и необходимость подзаработать. На меня вышел немец и дал тестовое задание: в небольшой программе добавить какую-то функциональность. Ок. Я открываю программу и вижу какой-то невообразимый спагетти код. По итогу я переписал процентов 95% от первоначального исходника. Честно сказать, подумал, что специально дали такое говно, чтобы посмотреть на что я способен. Заливаю обратно, на завтра немец мне пишет: "Твой код - как учебник по программированию". Было очень приятно. Потом оказалось, что такого говно-качества у них весь код и автор в основном этот немец.
Случай номер два. По работе было нужно использовать не особо известный фреймворк с гитхаба, оказалось, что нам немного не хватает функциональности. Я дописал, а потом решил оформить им пулреквест. Оформил и забыл. Через месяца два видно у автора дошли руки посмотреть. Пишет мне: "За все время существования проекта - ты первый, кто понял как это работает и правильно реализовал изменения." Удивился, но тоже было очень приятно такое слышать.

Посоветуйте плагины для Wordpress аналоги wp all import

Здравствуйте, посоветуйте где взять про версию wp all import или его аналог, а то 300 долларов много за модуль. Или подскажите, как по ссылке(запросу) от поставщика импортировать xml в wordpress.

Битва с «чёрным бизнесом» на утерянных вещах

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

Битва с «чёрным бизнесом» на утерянных вещах Разработка, Веб-разработка, Мошенничество, Телефонные мошенники, Алгоритм, Поведенческий фактор, Текст, Длиннопост, Негатив

Примерно так, по мнению нейросети «Kandinsky», выглядят телефонные мошенники

В ответ на попытку проверить, действительно ли нашли или нет, включается психологическое давление.

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

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

Естественно, ни одному администратору онлайн-доски объявлений (не говоря уж об авторах объявлений) такая «охота» категорически не понравится: «чёрному бизнесу» как ставшему системным явлению – пора объявлять бой.

Перво-наперво – предупреждение для всех, кто собирается опубликовать новое объявление и выбрал пункт «Утеряно»: внимание, остерегайтесь мошенников!

Битва с «чёрным бизнесом» на утерянных вещах Разработка, Веб-разработка, Мошенничество, Телефонные мошенники, Алгоритм, Поведенческий фактор, Текст, Длиннопост, Негатив

Предупреждение для всех, кто выбрал пункт «Утеряно» при публикации нового объявления

Далее отключается открытый показ номеров телефонов, опубликованных авторами объявлений – теперь его можно получить, только нажав на ссылку «Показать телефонный номер», при этом клик записывается в список событий, множество которых уже представляет из себя некое подобие статистики. Для начала неплохо.

А что дальше? Как – хотя бы и посредством анализа статистики – отличить мошенника от порядочного человека, который нашёл что-то? А если это администратор учреждения или мероприятия, у которого на столе валяются десятки утерянных посетителями документов и вещей? А если он отыскал на сайте объявления об утере этих вещей и теперь собирается вернуть их владельцам?

Проблема осложняется ещё и тем, что у мобильных устройств (а мошеннические действия на 99% производятся именно с них) нет постоянного IP-адреса, по которому можно было бы идентифицировать «завсегдатаев» – IP-адреса выделяются мобильным устройствам динамически, при включении/перезагрузке.

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

  1. Не используют поиск по сайту – просто открывают очередное объявление в ленте и запрашивают номер телефона автора объявления.

  2. Обзванивают авторов объявлений, которые потеряли что-либо в совершенно разных населённых пунктах – к примеру, в Москве, Сочи и Петрозаводске.

  3. Не переходят в категории утерянных вещей – сразу же начинают с ленты, в которой опубликовано всё вперемешку.

Попутно (на будущее) здесь стоит отметить и другие, не столь очевидные симптомы: выбор наименее грамотно написанных объявлений, с наибольшим количеством орфографических ошибок; выбор наиболее эмоционально составленных объявлений («умоляю, верните, это дорого мне как память!!!»); выбор объявлений об утере наиболее дорогостоящих либо трудновосстановимых предметов и документов – айфонов, загранпаспортов, удостоверений и пр.

Ну что, начинаем сражение? Для пущей надёжности будем производить идентификацию каждого пользователя по связке «IP-адрес + заголовок браузера/устройства». Конечно, один и тот же адрес может быть предоставлен разным людям, даже устройство и браузер у них могут оказаться идентичными, но чтобы каждый из них последовательно пожелал в двух-трёхдневном интервале узнать телефонные номера из объявлений с одного и того же сайта? Маловероятный сценарий, согласитесь.

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

А значит, в нашем распоряжении имеется совокупность признаков, по которым можно отсеивать недобросовестных посетителей. Что значит «отсеивать»? Ну, например, блокировать им на некоторое время (скажем, часа на три) доступ к последующим показам телефонных номеров – что и реализовано на данный момент на «Столе Находки».

У вас может возникнуть вопрос: разумно ли засвечивать здесь, на Pikabu, алгоритм блокировки? Не даст ли это возможность мошенникам использовать способы обхода блокировки? Мой ответ: сильно сомневаюсь. Большинство мошенников слишком ленивы, чтобы искать на просторах интернета подобную информацию.

Конечно, полностью исключить возможность мошенничества таким образом невозможно. Но об этом речи и не идёт: на данный момент главная задача – максимально затруднить мошенникам массовый доступ к телефонным номерам на сайте и тем самым способствовать переходу «чёрного бизнеса» в категорию невыгодного занятия, чтобы тот прекратил своё существование как системное явление.

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

Каждый год зимой происходят странности

Например, что-то пропадает. У одних важные вещи, у других новогоднее настроение. В этот раз — потерялись помощники Деда Мороза. Но есть хорошая новость: вы можете их найти! Вернее, помочь им найтись…

Помощь Паскаль

Всем здравствуйте. Нужна помощь. Суть задания заключается в том, что нужно создать матрицу С из А и В по условию. Но у меня получается пока ерунда какая-то. Вот, собственно, код
Program Matrix;

var

A:array[1..3,1..3] of real;

i,j:integer;

B:array[1..3,1..3] of real;

k,l:integer;

C:array[1..3,1..3] of real;

x,y:integer;

BEGIN

Writeln('Введите элемента матрицы А:');

for i:=1 to 3 do

for j:=1 to 3 do

Read(A[i,j]);

Writeln('Введите элемента матрицы B:');

for i:=1 to 3 do

for j:=1 to 3 do

Read(B[i,j]);

for i:=1 to 3 do

for j:=1 to 3 do

begin

if a[i,j]+2<b[i,j] then

c[a,j]:=a[i,j]+b[i,j]

else

c[i,j]:=a[i,j]-1/b[i,j];

end;

Writeln('Матрица C:');

for i:=1 to 3 do

begin

for j:=1 to 3 do

Write(C[i,j]:4:2,' ');

Writeln;

end;

END.

Буду признателен за помощь.

Показать полностью
Отличная работа, все прочитано!