Вчера пришёл Генеральный и говорит: "Нужно создать простой и понятный инструмент для составления графика работы водителя на предприятии".
Вчера пришёл Генеральный и говорит: "Нужно создать простой и понятный инструмент для составления графика работы водителя на предприятии".
Постановка задачи: водитель указывает в простой форме куда он едет, указывает дату, время начала и конца занятости. Его график должен выглядеть наглядно и быть понятный для всех, кому нужен водитель.
Итак, решаем поэтапно задачу.
1. Сначала нужен общий вид этой визуализации.
Был придуман и разработан такой вид:
2. Определяем настройки графика, которые нам нужны для отображения.
Вот такой набор настроек предлагается:
(Дополнительная ценность заключается в том, что можно выбрать интервал отображения - выпадающий список, месяц отображения - выпадающий список, указать год, время начала рабочего дня и его окончания. Графическое отображение графика изменится)
Из прикольного:
от изменения месяца меняется количество отображаемых дней;
от установленного интервала меняется отображение шапки таблицы;
от изменения времени начала и окончания рабочего дня также изменяется отображение;
всё оформлено в удобном виде с использованием выпадающих списков;
"заливка" календаря сформирована условным форматированием;
Т.е. заполняя постоянно таблицу с событиями в любой месяц можно получить отображение.
3. Оформляем таблицу для занесения информации.
У неё очень просто и понятный вид:
Умная таблица, которая легко продляется вниз.
4. "Всхлапываем" обе таблицы.
Тут я сразу должен сказать, что помогли ребята с известного форума.
Формулу, конечно, я переработал и получил такой её вид:
=ЕСЛИ(И($J3<>"";K$2<>"");--(ЕСЛИ(ИЛИ($J3="";K$1="");"";СУММПРОИЗВ(($J3=Таблица2[[Дата]:[Дата]])*((--ЛЕВСИМВ(K$1;5)>=Таблица2[[Время окончания]:[Время окончания]])+(--ПРАВСИМВ(K$1;5)<=Таблица2[[Время начала]:[Время начала]])=0)))>0);"")
Надо разобрать формулу, чтобы понять, что сделали ребята и как получили нужный результат. А что за результат? В календаре в задействованную дату и время выставляется 1 и на этой основе выстраивается условное форматирование.
Давайте разбирать поэтапно:
1. --ЛЕВСИМВ(K$1;5) - получает из строки "09:00 - 09:15" начальное_время в формате числовом (0,375) (если не значете, что это за число, то это 1/24/60*(9*60);
2. --ПРАВСИМВ(K$1;5) - - получает из строки "09:00 - 09:15" конечное_время в формате числовом (0,385416667) (если не значете, что это за число, то это 1/24/60*(9*60+15), где 15 - заданный временной интервал для отображения таблицы;
3. Соответственно, конструкция вида --ЛЕВСИМВ(K$1;5)>=Таблица2[[Время окончания]:[Время окончания]] возьмёт массив времени окончания и каждое значение сравнит с временем начала. Результатом такого действа для времени 09: 00 станет массив такого вида:
Что проверяется с помощью данного куска? Есть ли среди времени окончания такое, которое меньше для начала проверяемого интервала. Если нет, то формула выдаёт ЛОЖЬ
4. Аналогичным образом для начального времени операция вида --ПРАВСИМВ(K$1;5)<=Таблица2[[Время начала]:[Время начала]] выдаст результат:
5. Таким образом, операция вида (--ЛЕВСИМВ(K$1;5)>=Таблица2[[Время окончания]:[Время окончания]])+(--ПРАВСИМВ(K$1;5)<=Таблица2[[Время начала]:[Время начала]]) позволит получить массив такого вида:
6. Дальнее сравнение с 0 операции (--ЛЕВСИМВ(K$1;5)>=Таблица2[[Время окончания]:[Время окончания]])+(--ПРАВСИМВ(K$1;5)<=Таблица2[[Время начала]:[Время начала]])=0 приведёт к образованию массива вида:
Графическая интерпретация такова:
7. Поскольку в столбце "↓↓ ДНИ ↓↓" на рисунке "Пример отображения" на самом деле находятся даты, то операция вида ($J3=Таблица2[[Дата]:[Дата]]) выдаст массив подходящих дат для даты 01.09.2023 такого вида:
8. После перемножения результата проверки даты с результатов проверки времени, если получат ИСТИНА, то всё, мы говорим, что это время задействовано.
9. СУММПРОИЗВ необходимо, чтобы проверить везде и по всем сочетаниям событий и проверяемой даты. Сравнение с ">0" просто приведёт к постановке исключительно "1" в ячейку, т.е. не будет учитываться количество раз, если пересечение есть несколько раз.
Решение гениально и просто. Приложение полностью рабочее!
Вот готовый файл!
P.S. Если Вам было полезно, то рассчитываем на благодарность (автор формулы не останется неудел)!
Убирался в родительском доме и нашел свое сокровище. Столько эмоций и воспоминаний. Большая часть заработана в тяжёлых дворовых битвах на лавочках. Некоторые фишки стёрты почти в ноль. Вот теперь надо думать, куда бы это спрятать, что бы была возможность показать ребенку как подрастет) может эта мода вернётся когда-нибудь.
Жаль такая же коллекция наклеек и фантиков турбо была безвозвратно утеряна...
Кто какие собирал?)
Автору, респект за пост!
Я бы добавил для ликбеза, что у банковской карты можно быстро считать номер, чтобы сделать на неё перевод.
А то дикие яблоководы на меня смотрели как на демона, когда они мне показывали карту, чтобы Я с неё ручками номер перевбивал, а Я к ней телефон подносил и уже перевёл всё, пока они рот от удивления успели открыть! :-D
Приобретение телефона с NFC несколько лет назад открыло для меня новые возможности в повседневной жизни, которыми я активно пользуюсь. И речь идёт не только об оплате с помощью телефона, но и о некоторых фишках, которые были мне не очевидны сразу, но когда начал использовать - понял, что очень даже полезно знать о них.
Сразу опишу, что будет в статье:
1. Как нынче оплачивать с помощью NFC.
2. NFC метки и команды
3. Считывание домофонных ключей и пропусков.
Дисклеймер: автор статьи не рекомендует выполнять действия в пункте 3, т.к. это может попадать под статью о неправомерном доступе к информации. Все, что описывается в статье проводится сугубо с личными данными автора, а так же не используется для извлечения выгоды. Все ниже описанные действия были проверены на android-устройстве, у apple с NFC дела обстоят по другому. Владельцам яблок будет полезен только п. 2
1. Как оплачивать с помощью NFC?
Сейчас оплачивать с помощью Google Pay/Apple Pay не предоставляется возможным. Но есть альтернатива, которая в данный момент работает, но с некоторым НО. Рассмотрим вариант, которым пользуюсь - MirPay
По порядку:
- Заводим карту платежной системы МИР. Это как раз то самое НО. В приложении банка можно выпустить виртуальную карту, это нам подойдёт. Но зачастую банки дают выпустить только дебетовые карты МИР, с кредитными только visa/mastercard.
- Если все ок, и мы смогли завести карту - скачиваем приложение, заходим в него, жмём снизу "карты" и добавляем наш свежесозданный виртуальный пластик. Если не добавляется после нескольких попыток - попробуйте на следующий день, сам с таким столкнулся.
- И наконец, жмём снизу "настройки" и выбираем это приложение для оплаты по умолчанию
- Вы молодец!
Теперь можете оплачивать покупки как раньше - приложив телефон к терминалу.
2. NFC метки - зачем нужны, что могут, сколько стоят?
Это некие nfc чипы, которые могут быть оформлены в разных форм-факторах и содержат в себе небольшой объём информации - от 144 до 888 байт. Сразу скажу, что читать метку могут и android-телефон, и iphone.
Но писать 100% может андроид, для iphone нет возможности проверить. Однако можете попробовать - NFC tag writer by NXP (ios 13 и выше).
Вот таких 10 штук стоят 100 рублей, метки перезаписываемые, такие себе и взял.
Что можно сделать с таким объемом информации?
- Добавить текст (1 байт на латиницу/цифры и 2 на русские буквы). При считывании метки любым устройством можно увидеть этот текст.
- Сделать URL метку. При считывании предложит перейти по адресу, можно использовать для соц. сетей или меню в ресторане вместо QR кода.
- Добавить action на е-мейл, номер телефона, геотег. Если прислонить телефон к метке - можно заставить телефон перейти в приложение телефона с уже набранным номером, написать email или открыть карты с маршрутом до геолокации, зашитой в метку.
- Добавить action на подключение wifi сети сразу с паролем или подключение к bluetooth устройству. Фишка с wifi наверняка полезна для отелей или комнат ожидания.
- И ещё несколько функций, на которые не буду заострять внимания. Интерфейс у программы русский, выше перечислил самое основное и полезное.
Как записать метку? Качаем следующее приложение:
Открываем, и видим сверху четыре вкладки:
Чтение - мы можем получить информацию о метке: чтобы ней записано и сколько байт доступно, а так же много ненужной технической информации.
Запись - можем записать и перезаписать на метку наши действия, описанные выше. Добавляем запись, и когда убедились что все ок - жмём "писать метку"
Другое - можно заблокировать метку от записи навсегда, поставить пароль на метку от записи, массово копировать, и т.д.
Задачи - можно поставить приложение на телефон и ставить задачи при считывании метки - от регулировки уровня громкости и яркости экрана до вибрации азбукой морзе. Этим не пользуюсь, т.к. доступно только тем, у кого есть это самое приложение, и такая метка будет полезна только вам.
Как я использую метку
Одна метка наклеена на торпеде в машине. Когда сажусь - провожу телефоном и сразу подключаюсь к bluetooth системе. Т.к. машинка древних годов, то блютуз паял самостоятельно в магнитолу, мини-платка за 100 рублей достаточно тупая и сама не коннектится к телефону.
3. Считывание, а иногда и запись домофонных ключей, пропусков и прочих изделий с полноценным NFC чипом
Начнем со считывания - телефон способен прочитать почти любой NFC тэг с частотой 13.56мгц. Такие используются в беспроводных пропусках (например, в университет или на работу), в некоторых домофонных ключах, а так же в проездных и банковских картах. Что это нам даёт? Вы можете, к примеру, считать ваши домофонные ключи и записать с них серийник и информацию в память телефона. В будущем, если потеряете - можете попросить мастера вбить этот серийник на новый ключ, или купить болванки на каком-нибудь популярном маркетплейсе и записать с помощью ардуинки или телефона (с некоторыми НО) информацию.
Но строго не рекомендую таким образом присваивать себе уникальные ID чужих пропусков, ключей и чего бы там ни было.
Давайте заглянем, что внутри такой карточки.
Для этого качаем следующее приложение:
Заходим, жмём кнопку Read tag. Выбираем пак ключей std, прислоняем карту и жмём Start mapping and read tag. Карточку от телефона не отводим пока не откроется следующая кракозябра:
- Самая первая фиолетовая строчка (далее - блок) - зачастую самая важная. Это именно тот самый id карты, который читают домофоны и турникеты на КПП.
- Каждый четвертый блок - 3, 7, 11... - это параметры сектора (предыдущих трёх блоков). Собственно, где записаны FFFF-ки - это ключи А и Б. Не зная этих ключей вы не сможете прочитать метку. Да и никто не сможет, если их поменять и забыть. Это дефолтные ключи, и если посмотреть в тот самый std файлик, о котором выше шла речь - можно их увидеть. В общем не трогаем.
- То, что находится между ключей в каждом четвертом блоке - параметры чтения/записи/доступа. Есть много конфигураций, их описание можно найти внутри этой программы, вкратце можно сделать так, чтобы зная ключ А можно было только читать, ключ Б только писать. Или зная только ключ Б вы имели полный доступ к тегу, а ключ А не нужен.
Зачем нужны остальные сектора и блоки? В них, например, хранит информацию о балансе и поездках проездные карты, или другую информацию банковская карта. Но естественно без ключей А и Б так просто вы эти сектора не прочитаете. :)
С этим понятно, а что насчёт записи? Можно писать любой блок в любом секторе... Кроме блока 0. Связано это с тем, что NFC в телефоне может выполнять простые команды на запись. Нулевой же блок можно записать только с помощью спец. команд, в которые nfc чип в телефоне не умеет.
Есть несколько выходов:
1. Купить тэг с rewriteable block 0, они прямо так и называются.
2. Купить Proxmark3/ACR-122u и подключить к телефону или компьютеру. Или использовать ардуинку с RFID 13.56 - мой вариант.
Когда-нибудь запилю пост, как писать нулевой блок в таких тэгах с помощью ардуинки.
Данный же пост рассказывает о возможностях NFC чипа в телефоне, так что освящать этот аспект тут не буду.
Дополнение: Android позволяет эмулировать тэги, если у вас есть root. То есть вместо эмуляции банковской карты, которая постоянно транслирует свои данные через nfc чип чтобы произвести оплату при поднесении к терминалу - можно эмулировать любой другой тэг. Тот же пропуск, ключ от домофона, проездной... Но автор статьи не имеет телефона с root доступом, т.к. достаточно ленив, да и хрен знает, может ли стороннее ПО получить NFC-tag данные вашей банковской карты и передать третьим лицам.