About design thinking
About Design thinking. It has not yet been fully embraced by business leaders as a means to navigate the constant rate of change in today's climate. This process is an essential tool that will give entrepreneurs the edge that they need to succeed.
typography
Система для голосований
Система для голосований позволяет в интересной интерактивной форме получить и визуализировать данные от гостей мероприятия


Простой демонстрационный код программы написан на Python3 и графической библиотеке Tkinter.

Пример рассчитан на получение данных от двух сетевых считывателей: один считает количество проголосовавших "Нет", а второй - "Да".
В программе реализована защита от повторного голосования.

Код программы
import socketserver
import threading
import tkinter
from tkinter import ttk

YES_IP = '192.168.0.120'
NO_IP = '192.168.0.121'

UID_LIST = []

root=tkinter.Tk()
root.title("Голосование!")
s = ttk.Style()
s.theme_use('aqua')

text1=tkinter.Label(root, text='Голосование!', width=25, height=5, font='arial 14')
text1.grid(row=0, column=0, columnspan=3)

bar1 = ttk.Progressbar(root, orient=tkinter.VERTICAL, mode = 'determinate', length=200, maximum=100)
bar2 = ttk.Progressbar(root, orient=tkinter.VERTICAL, mode = 'determinate', length=200, maximum=100)
bar1.grid(row=1, column=0)
bar2.grid(row=1, column=2)

tkinter.Label(root, text='Да!', width=25, height=5, font='arial 14').grid(row=2, column=0)
tkinter.Label(root, text='Нет!', width=25, height=5, font='arial 14').grid(row=2, column=2)

class MyUDPHandler(socketserver.BaseRequestHandler):
    def handle(self):
        data = self.request[0].strip()
        socket = self.request[1]
        if data in UID_LIST:
            print("voted already. decline")
        else:
            UID_LIST.append(data)
            print("got data from", self.client_address[0])
            if self.client_address[0] == YES_IP:
                bar1.step(1)
            elif self.client_address[0] == NO_IP:
                bar2.step(1)

def udr_server_start():
    HOST, PORT = "", 5555
    with socketserver.UDPServer((HOST, PORT), MyUDPHandler) as server:
        server.serve_forever()


threading.Timer(1, udr_server_start).start()
root.mainloop()


Можно значения "Да/Нет" записать в сами метки, то результат будет зависеть не от считывателя, к которому поднесли, а от выбора пользователя при голосовании.
typography
Чекпоинт в играх
Большое количество спортивных игр строится на необходимости найти/посетить разные точки на территории.
Использование считывателей позволяет автоматизировать этот процесс.
На старте всем пользователям выдаются RFID-метки с заранее записанными "флагами" (в примере их будет 8). Каждый считыватель при поднесении к нему, снимает только свой флаг. На финише организаторы могут посмотреть состояние карты с помощью программы.
Используемое оборудование и ПО
1
Автономный RFID считыватель
Считыватель с аккумулятором и специальной программой (ниже) будет снимать "флаги" посещённых мест.
2
Настольный RFID считыватель
Считыватель для записи и чтения карт с помощью компьютера на старте и финише.
typography
Работа с картами с заданным сроком действия без перепрограммирования считывателя
Зачастую часть считывателей пропускной системы находятся достаточно далеко от инфраструктуры и необходимость перепрограммировать их под каждую новую карту доставляет большое количество неудобств.
typography
Защита от клонирования карт
Использование one-time ключей защитит от использования нескольких карт одновременно.
Работать будет только одна