Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Odczyt inputu z klawiatury w czasie rzeczywistym, Klawiatura / czytnik kodów kreskowych
scanner
post 5.10.2004, 13:45:00
Post #1





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Mam do rozwiązania pewien problem:

Dysponując czytnikiem kodów kreskowych napisać aplikację reagującą na aktywność czytnika i zapisującą kod i inne dane w bazie.

Oczywiście jedynym zmartwieniem dla mnie jest przechwycenie z poziomu php (najlepiej w przeglądarce) sekwencjio znaków wypisanych z klawiatury (czytnik kresek jest wpięty równolegle z klawiaturą i generuje cyfry na stdin - tyle informacji a razie mam).
Odczyt powinien się odbywac oczywiście bez ingerencji uzytkownika.

Pytanie:
Gdzie i co poczytać o tym?
Dajcie mi lekturkę do obiadu, jeśli macie coś pod ręką.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
misterLu
post 5.10.2004, 17:16:10
Post #2





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 27.08.2004

Ostrzeżenie: (0%)
-----


Cytat
przechwycenie z poziomu php (najlepiej w przeglądarce)

Możesz coś przechwycic albo z poziomu php (po stronie serwera), alebo w przeglądarce (po stronie klienta).
Poczytać musisz o JavaScripcie, bo to jest narzędzie do działania po stronie przeglądarki, a co za tym idzie klawiatury, itp.
Polecam coś o 'dynamic forms'.

Przykładowe działanie skryptu:

na wejsciu ustaw focus (kursor) w polu w którym ma byc wczytana wartosc z czytnika.
Za kazdą zmiana zawartości 'tego' pola formularza (onChange()) zliczaj ilosc zankow w tym polu. Jezeli bedziesz mial ilosc znakow rowną ilosci znaków zczytanych z czytnika (czyli tyle, ile przewidujesz na kod kreskowy), to wyslij formularz (submit).

Ten post edytował misterLu 5.10.2004, 17:17:59
Go to the top of the page
+Quote Post
NuLL
post 5.10.2004, 21:53:26
Post #3





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Moge napomkan ze w php sa dostepne strumienie(o ktorych rzadko kto pamieta) takie jak w C - to chyba rozwiazuje problem - moge jutro cos podrzucic nt. - tzn. jakis przykladzik wkleje a manual reszte powie smile.gif

Ten post edytował null 5.10.2004, 21:54:48


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
scanner
post 5.10.2004, 22:01:19
Post #4





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Obu dzieki za naprowadzenie.. a co do strumieni.. zawsze sie ich obawiałem, ale chyba tak jak mówi null - przyszła pora na nie...
Będę wdzięczny za te przykłady.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
NuLL
post 5.10.2004, 22:28:00
Post #5





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Scanner wybacz za brak przykladu - sprobuje wytlumaczyc bo nie moge znalesc skryptu(napisze cos jutro i wkleje jak trzeba). Strumen otwieramy fopenem i korzystamy z standardowych funkcji systemu plikow- jak przeczytac pasek kreskopwy nie wiem za cholere - nie wiem jak jest zoorganizowany strumien(napisz cos smile.gif) jakbys cos napisal to moze napisze cos bardziej konkretnego

Pozdro


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
scanner
post 6.10.2004, 06:36:20
Post #6





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Więc tak.
Póki nie otrzymam czytnika do ręki, cięzko mi powiedzieć coś konkretnego, moge się tylko opierać na informacjach, jakie zleceniodawca mi przedstawił.

- Czytnik jest wpięty poprzez rozgałęziacz z portem klawiatury.
- Symuluje działanie klawiszy numerycznych
- Można mu ustawić poprzedzenie każdej odczytanej sekwencji dowolnym znakiem ASCII

Co do aplikacji:
Na razie przewiduję dwa moduły:
- Jeden pracujący w tle i obsługujący: odczytywanie sekwencji, zapis zdarzenia do bazy.
- Drugi pracujący w przeglądarce i obsługujący: drukowanie etykiet "Gość", zapis logu odwiedzin gościa (kto, do kogo, kiedy)

Całość ma pracować na zasadzie identyfikacji pracowników na portierniach.
Myślałem nad napisaniem tego w JAVie, ale tej dopiero zaczyna się uczyć i za długo by potrwało - php powinno sobie z tym poradzić.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
kszychu
post 6.10.2004, 06:40:00
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

Ostrzeżenie: (0%)
-----


Scanner: a nie lepiej napisać coś powiedzmy w c siedzącego u klienta, odczytującego te dane i przesylajacego je do php? Albo zaprządz gtk do uaktywnienia php po stronie klienta? No chyba, że jakoś (javascript?) oprogramować przeglądarkę, która po odebraniu określonej liczby cyfr wyśle je do serwera.


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
scanner
post 6.10.2004, 09:01:42
Post #8





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Ostatni raz pisałem cos w C 7 lat temu niestety.

Przy okazji już wykształcił mi się teoretyczny problem:
Co w sytuacji gdy portier generuje etykietke dla gościa a w tym momencie przechodzi przez bramke uprawniona osoba?

teoretycznie zadziałają dwie kalwiatury i portier w formularzu zobaczy wpisywane dane czytnika

Więc moduł czytnika musiałby pobrać dane z stdin() i od razu je usunąć z bufora - taka operacja powinna IMHO zając nie wiecej niż ułamek sekundy, więc zmieści się pomiędzy dwoma naciśnięciami klawiszy na klawiaturze przez portiera - ale musże miec to na uwadze.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
nocnyMark()
post 6.10.2004, 23:47:08
Post #9





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 26.04.2004

Ostrzeżenie: (0%)
-----


Scanner, mam prosbe

jak juz bedziesz mial cos konkretnego,
w sensie "jak pogryzles temat i co z tego wyszlo"
to wrzuc to na forum tutaj

osobiscie do tej pory stojac w supermarkecie w kasie obmyslalem sobie na ile sposobow mozna by wykorzystac taki czytnik

tylko problem byl zawsze jak zaczac od strony technicznej

czekam z niecierpliwoscia na twoje powodzenie smile.gif

Pozdr.
K.

Ten post edytował nocnyMark() 6.10.2004, 23:47:47
Go to the top of the page
+Quote Post
yeti
post 7.10.2004, 08:44:42
Post #10





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 12.09.2003

Ostrzeżenie: (0%)
-----


Nie wiem, dlaczego nie chcesz spróbować z JavaScriptem (jak radził misterLu). IMHO jest to najłatwiejszy sposób. W taki sposób oprogramowywałem system do obsługi biblioteki i działał jak marzenie.


--------------------
pozdrawiam
Krzysiek
Go to the top of the page
+Quote Post
patrycjusz
post 7.10.2004, 09:05:00
Post #11





Grupa: Zarejestrowani
Postów: 263
Pomógł: 0
Dołączył: 13.07.2003
Skąd: wawa

Ostrzeżenie: (0%)
-----


Cytat(scanner @ 2004-10-06 10:01:42)
Co w sytuacji gdy portier generuje etykietke dla gościa a w tym momencie przechodzi przez bramke uprawniona osoba?

teoretycznie zadziałają dwie kalwiatury i portier w formularzu zobaczy wpisywane dane czytnika

Więc moduł czytnika musiałby pobrać dane z stdin() i od razu je usunąć z bufora - taka operacja powinna IMHO zając nie wiecej niż ułamek sekundy, więc zmieści się pomiędzy dwoma naciśnięciami klawiszy na klawiaturze przez portiera - ale musże miec to na uwadze.

@scanner: w javie nie bedzie to trudne, poczytaj o standardowym wczytywaniu informacji z inputu, a co do tego zacytowanego problemu, wielowątkowość smile.gif
a to juz troche wyższa szkoła jazdy winksmiley.jpg
zoba, masz jeden wątek który nie przerwanie nasłuchuje z czytnika, i jeżeli czytnik się "odezwie" to go obsługuje, dodatkowo wątki które nasłuchują z innych urządzeń dostępowych, czy to czytnik czy cokolwiek innego (koleś za biurkiem smile.gif
i wsio smile.gif
pzdr


--------------------
www.tigroup.pl Rozwiązania informatyczne dla sektora MSP.
Projektowanie i tworzenie stron www, dedykowane rozwiązania e-biznes, outsourcing usług programis
Go to the top of the page
+Quote Post
scanner
post 14.10.2004, 16:50:13
Post #12





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




No i zdobyłem już czytnik.
Pierwsze eksperymenty wykazują, ze przesyła on do komputera 13 cyfr i znak końca linii.
Próby robiłem w notepad.exe - linijka po linijce pokazywał kody wszystkiego co skanowałem.

mając jeszcze chwile wolnego czasu, próbowałem coś sklecić:
  1. <?php
  2.  
  3. $File = fopen( 'php://stdin', 'r');
  4. if ( !$File )
  5. {
  6. echo &#092;"'Błąd...n\";
  7. }
  8. while( true )
  9. {
  10. $sChar = fgetc( $File );
  11. echo $sChar.&#092;"n\";
  12. } 
  13. ?>
Ale nie wyszło... Chyba nie mam natchnienia dzisiaj...
Załozęnie jest takie, że czytnik jest podpięty bezpośrednio do komputera, na którym działa oskryptowanie. PHP5 jako moduł.

Mógłby mnie ktoś nakierować w dobrą stronę?
Prirytetem na chwile obecną jest odczyt wspomnianej sekwencji znaków. Jak to zrobię, to jestem w domu - reszta aplikacji to już betka.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
Vengeance
post 14.10.2004, 18:18:41
Post #13





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


@scanner

zamiast fgetc() ktore pobiera jeden znak daj
fgets() dodajac moze drugi parametr czyli dlugosc lini do pobrania (z tego co mowiles to 13+1 > 13 znakow i znak nowej lini)

Powinno śmigać.

Pozatym kiedyś coś takiego robiłem w Delphi i działało na zasadzie, że gdy TEdit zmieniał swoją wartość i osiągał te np. 13 znaków to zaczynało się wyszukiwanie. To samo (co już ktoś zaproponował) mógłbyś i ty zastosować. W javascript sprawdzać te znaki i wysyłać formularz gdy będzie ich 13. przecież czytnik wstawia txt "na raz". a jakby ktoś chciałby wprowadzać kod ręcznie to też zadziała. to chyba nawet bardziej miłe dla użytkownika wyjście niż STDIN


--------------------
Go to the top of the page
+Quote Post
matid
post 14.10.2004, 18:25:19
Post #14





Grupa: Zarejestrowani
Postów: 362
Pomógł: 0
Dołączył: 18.02.2004
Skąd: Knurów

Ostrzeżenie: (0%)
-----


Skrypt poprawnie czyta /dev/stdin, tylko nic nie jest przekazywane przez wejście tego procesu.
Spróbuj odpalić ten skrypt z lini poleceń:
php skrypt.php
Wtedy po naciskaniu przycisków na klawiaturze itp. wszystko działa. Trzeba znaleść jak sprawdzać dane wchodzące na wszystkie wejścia a nie tylko na jedno.
Go to the top of the page
+Quote Post
ActivePlayer
post 14.10.2004, 20:11:23
Post #15





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

Ostrzeżenie: (0%)
-----


a te kody wczytywane z czytnika mają jakąs sumę kontrolną ?
Go to the top of the page
+Quote Post
scanner
post 14.10.2004, 20:52:47
Post #16





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Nie zagłębiałem się jeszcze w sposoby generowania kodów - ale chyba widziałeś cyferki pod kreskami - jakis algorytm na to jest.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
Vengeance
post 14.10.2004, 21:02:48
Post #17





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


co do kodow jeszcze u mnie na forum bylo podobne pytanie:
http://strefaphp.net/index.php?page=forum&...iew_topic&t=114


--------------------
Go to the top of the page
+Quote Post
scanner
post 15.10.2004, 06:46:46
Post #18





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Dzięki za link.

Co do generowania kodu - informatyk firmy ma już w głownej aplikacji odpowiednie implementacje i wybrany sposób kodowania.

Co do problemu. Wymysliłem na razie (teoretycznie) coś takiego:
  • Pakiet musi działać zarówno pod Win jak i Linuxem. (odpada zastosowanie JS?)
  • Jest proces działający w tle - strażnik (Sentinel.php) który nasłuchuje wejścia klawiatury. Dodaje znaki do wewnętrznego bufora i w momencie, gdy sekwencja ma określoną długość i pasuje do wzorca (RegExp) wysyła impuls do bazy danych zapisując zdarzenie.
    Detekcja zdażeń może być nieco utrudniona, ale wystarczy zrobić X znakowy bufor, z którego spada najstarszy element:
    Out <------ [buffer] <------ In
    (robiłem to już w Basic'u na Meritum) i patrzeć czy ToString() bufora pasuje do wzorca i teoretycznie mamy po sprawie.
  • Jest proces aktywny (Doorman.php), który działając w przeglądarce (może GTK? Jeszcze się tym nie zajmowałem, może pora) umożliwia:
    • Podgląd zapisanych zdażeń,
    • Generowanie i wydruk kodów tymczasowych (pdf),
    • Export i import określonych danych,
    • ... innych zadań wykonywanych jawnie przez obsługującego
Podstawowy problem jest w tym, jak odczytać (wiadomo, jesli będzie potrzebne, Sentinel rozpozna system na którym jest zainstalowany) to co przychodzi z portu klawiatury.

Na razie czytam o wielowątkowości w Javie, ale chyba jestem lekko za słaby jeszcze na ten język, poza tym ambicjonalnie chciałbym udowodnić zleceniodawcy, że to jest możliwe do wykonania w php/MySQL.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
ActivePlayer
post 16.10.2004, 12:45:48
Post #19





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

Ostrzeżenie: (0%)
-----


Nie jestem pewien ale chyba musisz tez wziasc pod uwage ze user w czasie kozystania ze skryptu moze robic cos innego i musialbys jakos sprawdzac czy te dane które "strażnik (Sentinel.php)" bedzie wczytywał w tle, będą tymi które chcesz nasłuchiwać...
Go to the top of the page
+Quote Post
matid
post 16.10.2004, 13:33:46
Post #20





Grupa: Zarejestrowani
Postów: 362
Pomógł: 0
Dołączył: 18.02.2004
Skąd: Knurów

Ostrzeżenie: (0%)
-----


No przecież napisał że skrypt będzie sprawdzał czy sekwencja ma odpowiednią długość i czy pasuje do wzorca. Wystarczy dobrze czytać :]
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.09.2024 - 23:03