IT pro otrlé
Moderátor: Faskal
-
- Administrátor
- Příspěvky: 5829
- Registrován: 7. 6. 2004, 11:22
- Bydliště: Košice, SR.
Re: IT pro otrlé
VisualStudio.NET uz nefunguje ako stare Delphi, kde clovek naklikal okienka, naplacal tam kusy kodu, a vypadlo z toho EXE subor? A uvod do "stlacim tlacidlo, vypise sa text" sa dal naucit za 90 minut?
Dnes uz nie.C mi připadá jako vhodný kompromis mezi "vím co dělám" a časovou investicí.
Preklady [preklad/korektury/layout]:
Wilderness of Mirrors: 100%/99%/0
In a Wicked Age, CZ: 100%/100%/0
FATE SK: 100/100/0
Wilderness of Mirrors: 100%/99%/0
In a Wicked Age, CZ: 100%/100%/0
FATE SK: 100/100/0
-
- Příspěvky: 25789
- Registrován: 14. 7. 2004, 19:30
Re: IT pro otrlé
To zalezi, ceho chces dosahnout. Veci co dela neco na unixove konsoli? Asi jo. Gui aplikace? Tezko. Webova aplikace? Ani nahodou. Datovy sklad? Ses zblaznil.
“And, for an instant, she stared directly into those soft blue eyes and knew, with an instinctive mammalian certainty, that the exceedingly rich were no longer even remotely human.”
― William Gibson, Count Zero
― William Gibson, Count Zero
-
- Příspěvky: 5421
- Registrován: 26. 9. 2006, 11:34
Re: IT pro otrlé
Jakykoliv C/C++ jde pustit jako nativni kod, na coz potrebujes akorat wrapper v Jave nebo Objective C (coz ti vygeneruje NDK/SDK). A bude to rychlejsi nez Java, pokud si nedate tu praci a nepredkompilujete svuj Java program do nativniho kodu (Android 7+) taky, pak to bude +- stejny. Obdobne pro iOS.
Jinak C je takovej lepsi Assembler (a da se v nem Assembly psat, stejne jako v C++). Je dobry to znat, ale psat v tom neco, pokud vylozene nemusite, je dost za trest (kvuli vecem co rika Sos). Nicmene vedet, jak pocitac vlastne funguje je docela nutny pro jakykoliv jazyk. Umet cist Assembly taky.
Pythonu jsem nikdy na chut neprisel a to jsem v tom napsal vic nez bych kdy chtel. Tvari se hrozne multiplatforme, netypove atd, ale ve skutecnosti je to takova Ikea - udelej si sam. Nepise se to sice uplne od piky jako v C, ale knihovny C++, Javy nemluve o jinych interpretovanych jazycich jako JS jsou radove lepsi. Fakt nevim, proc si musim v Pythonu vytahnout socket a nastavovat mu nejake platform-specific flagy, abych dosahnul toho, ze mi ho bude OS poustet hned jak ho zavru (coz taky musim delat explicitne). Nebo proc si musim delat handlery na raw message a nedostanu proste callback na prichozi a odchozi message. O te typovosti netypovosti ani nemluve, aspon ze v 3.6+ uz muze clovek psat ty type hinty.
JS pustite rovnou v prohlizeci, takze netreba instalovat nejake runtimey ci doinstalovavat knihovny, byt je to teda docela trivialni task. Ale zas bez poradneho SDK v tom nic svetoborneho clovek taky neudela. A performance je dost meh. Ale tak to obecne v interpretovanych jazycich.
Fortranu bych se teda v tomhle tisicileti uz nedotknul ani desetimetrovou tyci. Absence stacku (mate prave jeden stack frame), tzn. zadna rekurze, maximalni limit 10 vnorenych while/for cyklu atd. Jeste budete s laskou vzpominat na C, pokud v tom zkusite neco seriozne delat...
Kazdopadne silne doporucuju ujasnit si cil (co chci udelat) a pak si na ten cil najit adekvatni nastroj. Muze to byt i to C nebo Java nebo Python nebo JS. Nebo treba Go.
Secrets are power.
-
- Příspěvky: 25789
- Registrován: 14. 7. 2004, 19:30
Re: IT pro otrlé
Resurrection píše: ↑26. 11. 2017, 08:39 Jakykoliv C/C++ jde pustit jako nativni kod, na coz potrebujes akorat wrapper v Jave nebo Objective C (coz ti vygeneruje NDK/SDK). A bude to rychlejsi nez Java, pokud si nedate tu praci a nepredkompilujete svuj Java program do nativniho kodu (Android 7+) taky, pak to bude +- stejny. Obdobne pro iOS.
Proc oteviras sockety v Pythonu?Pythonu jsem nikdy na chut neprisel a to jsem v tom napsal vic nez bych kdy chtel. Tvari se hrozne multiplatforme, netypove atd, ale ve skutecnosti je to takova Ikea - udelej si sam. Nepise se to sice uplne od piky jako v C, ale knihovny C++, Javy nemluve o jinych interpretovanych jazycich jako JS jsou radove lepsi. Fakt nevim, proc si musim v Pythonu vytahnout socket a nastavovat mu nejake platform-specific flagy, abych dosahnul toho, ze mi ho bude OS poustet hned jak ho zavru (coz taky musim delat explicitne). Nebo proc si musim delat handlery na raw message a nedostanu proste callback na prichozi a odchozi message. O te typovosti netypovosti ani nemluve, aspon ze v 3.6+ uz muze clovek psat ty type hinty.
EDIT: Python je hodne flexibilni, a da se v nem psat "Java" nebo "C++". Vlastne jsem hrozne smutnej, pac musim ted po nasem tymu z Petrohradu prebirat nejaky pythonovy udelatko a oni tam pouzivaji dedicnost a vsude pisou self.whatever = bla to je peklo.
“And, for an instant, she stared directly into those soft blue eyes and knew, with an instinctive mammalian certainty, that the exceedingly rich were no longer even remotely human.”
― William Gibson, Count Zero
― William Gibson, Count Zero
-
- černá eminence
- Příspěvky: 18577
- Registrován: 18. 6. 2003, 21:31
- Bydliště: Praha
Re: IT pro otrlé
Dobře. Jsem v prostředí korporátní byrokracie (tj. samý účetní nebo HR) a naše nástroje leckdy sajou. Proto se snažíme uplácat si nějaké nové z dostupných technologií (které jsou buď volné, nebo je korporát koupil globálně - čti O365), a některé z nás to dokonce baví. Nejde o žádné profesionální věci, ale některé jsou už docela sofistikované (čti: umí leckdy celkem hodně; ušetřily práci už asi 70 lidí; ušetřily stovky tisíc eur na profesionálních nástrojích). Takže teď co...Resurrection píše: ↑26. 11. 2017, 08:39 Kazdopadne silne doporucuju ujasnit si cil (co chci udelat) a pak si na ten cil najit adekvatni nastroj. Muze to byt i to C nebo Java nebo Python nebo JS. Nebo treba Go.
Ne croyez pas que les antisémites se méprennent tout à fait sur l'absurdité de ses réponses. Ils savent que leurs discours sont légers, contestables ; mais ils s'en amusent, c'est leur adversaire qui a le devoir d'user sérieusement des mots puisqu'il croit aux mots ; eux, ils ont le droit de jouer. Ils aiment même à jouer avec le discours car, en donnant des raisons bouffonnes, ils jettent le discrédit sur le sérieux de leur interlocuteur ; ils sont de mauvaise foi avec délices, car il s'agit pour eux, non pas de persuader par de bons arguments, mais d'intimider ou de désorienter. Si vous les pressez trop vivement, ils se ferment, ils vous signifient d'un mot superbe que le temps d'argumenter est passé.
-
- Příspěvky: 25789
- Registrován: 14. 7. 2004, 19:30
Re: IT pro otrlé
Ted vic specificky, co to ma delat?
“And, for an instant, she stared directly into those soft blue eyes and knew, with an instinctive mammalian certainty, that the exceedingly rich were no longer even remotely human.”
― William Gibson, Count Zero
― William Gibson, Count Zero
-
- Příspěvky: 5421
- Registrován: 26. 9. 2006, 11:34
Delal jsem simulatory nekolika ruznych servis a potreboval jsem je restartovat v ramci behu BDD testu. Jelikoz ale OS po zavreni spojeni nechava socket nejakou dobu volne viset (jde o ochranu proti neumyslnemu zapisovani do zavrenych socketu), je potreba mu nastavit flag, aby to zavrel rovnou. A samozrejme na kazdem OS jiny flag. A samozrejme v Pythonu se cross-platforme flagy pro sockety nedaji nastavit. Takze udelas neco jako:
Kód: Vybrat vše
self._server.socket.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('ss' if os.windows else 'ii', l_onoff, l_linger))
...
self._server.socket.close()
Kód: Vybrat vše
def stop():
self._server.shutdown()
self._server.socket.close()
t = threading.Thread(target=stop, args=(), kwargs={})
t.start()
t.join()
Nakonec jsme to vyresili tak, ze assignujeme porty dynamicky a predavame je do konfigurace v kazdem testu nahodnej, jelikoz takovehle low-level veci v Pythonu spolehlive evidentne nejdou.
Jo a vlastne takova perlicka, co jsem si ted vzpomnel. Kdyz posilate HTTP request do pythonu a do headeru si date jako content json, tak pak v pythonu musite replaceovat vsechny slozene uvozovky za jednoduche, protoze jinak to nejde naparseovat. Taky dobry.
Jako ano, ma to i plno dobrych veci (treba asyncio je dost tezky na pochopeni, ale fakt brutalne dobry), ale fakt jsem si to nijak zvlast neoblibil. Na to, ze je to interpretovatny skriptovaci jazyk, mi tyhle veci prijdou uplne zbytecny, to ma bejt davno vyreseny vnitrne, nevim proc to musim resit ja. To to potom rovnou muzu psat v necem co je na takovy veci delany.
Secrets are power.
-
- Administrátor
- Příspěvky: 5829
- Registrován: 7. 6. 2004, 11:22
- Bydliště: Košice, SR.
Re: IT pro otrlé
1) Mate VisualStudio k dispozicii?(které jsou buď volné, nebo je korporát koupil globálně - čti O365)
2) Preco to nespravit vo VisualBasicu For Applications?
Pri velkych korporatoch je casto problem s nasadenim a aktualizaciami (ako hovoril Sosacek). Preto sa casto, aj ked je to smiesne, pouziva VisualBasic, lebo to bezi v kazdom Worde a kazdom Exceli. Daju sa to do toho namontovat aj GUI.
Ked je k dispozicii VisualStudio.NET, daju sa robit trivialne lahke aplikacie, ktore sa tiez daju distribuovat ako EXE subory, ktore pobezia vsade.
Nie je marny ani PowerShell, ten je tiez zabudovany na kazdom Windowse, je to pomerne lahke, je to krajsi jazyk ako VisualBasic a daju sa v tom robit uzitocne veci. (Len to malokto pozna).
S Javou je problem v tom, ze nie vsade je nainstalovane prostredie, na ktorom ta Java pobezi a hadat sa so systemakmi sa ti asi nechce.
Detto Python.
Go mozno vyraba EXE subory, ale nemam skusenosti.
Zakladna otazka je: ma to mat graficke oknove GUI? Ma to byt utilita z prikazoveho riadku?
Preklady [preklad/korektury/layout]:
Wilderness of Mirrors: 100%/99%/0
In a Wicked Age, CZ: 100%/100%/0
FATE SK: 100/100/0
Wilderness of Mirrors: 100%/99%/0
In a Wicked Age, CZ: 100%/100%/0
FATE SK: 100/100/0
-
- Příspěvky: 25789
- Registrován: 14. 7. 2004, 19:30
Re:
Sockety jsou low-level API, nic jako "cross platform flagy" pro sockety neexistuje. To chovani socketu, na ktere si stezujes (CLOSE_WAIT a TIME_WAIT stavy) je chovani unixovych socketu (a windows to mozna delaji taky) pres vsechny programovaci jazyky.Resurrection píše: ↑26. 11. 2017, 12:52Delal jsem simulatory nekolika ruznych servis a potreboval jsem je restartovat v ramci behu BDD testu. Jelikoz ale OS po zavreni spojeni nechava socket nejakou dobu volne viset (jde o ochranu proti neumyslnemu zapisovani do zavrenych socketu), je potreba mu nastavit flag, aby to zavrel rovnou. A samozrejme na kazdem OS jiny flag. A samozrejme v Pythonu se cross-platforme flagy pro sockety nedaji nastavit.
Ty sis psal vlastni http server? Probohy proc?To prvni je reseni, to druhe je nutne, protoze nemas kontrolu na garbage collectorem, ktery se milosrdne rozhodne server smazat a socket tim zavrit. Jo a pokud je to nahodou http server, tak musis udelat:
Netusim co je to "posilate http request do pythonu" ale HTTP requesty se normalne v Pythonu posilaji pomoci knihovny k tomu urcene:Jo a vlastne takova perlicka, co jsem si ted vzpomnel. Kdyz posilate HTTP request do pythonu a do headeru si date jako content json, tak pak v pythonu musite replaceovat vsechny slozene uvozovky za jednoduche, protoze jinak to nejde naparseovat. Taky dobry.
Kód: Vybrat vše
>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
u'{"type":"User"...'
>>> r.json()
{u'private_gists': 419, u'total_private_repos': 77, ...}
Hlavni sila Pythonu je v jednoduchosti, prehlednosti a mnozstvi dostupnych hotovych veci - pokud ho chces 1) pouzivat jako C, a 2) si delat vsechno sam, tak s tim akorat budes bojovat.
“And, for an instant, she stared directly into those soft blue eyes and knew, with an instinctive mammalian certainty, that the exceedingly rich were no longer even remotely human.”
― William Gibson, Count Zero
― William Gibson, Count Zero
-
- Příspěvky: 5421
- Registrován: 26. 9. 2006, 11:34
Re: Re:
To samozrejme nechci (psat si to sam), ale jsem k tomu nucen kvalitou jazyka a dostupnych knihoven. Nicmene rozhodnuti pouzit Python nebylo moje a HTTP server si sam pochopitelne nepisu, ale pouzivam uz hotovy. Respektive on se tak tvari, ale plno veci si musis udelat sam (proto ta Ikea). Dostanes bytes, takze si to dekoduj na string, pokud je to json vymen ty uvozovky. Kdyz posilas json zpatky, tak to zase encoduj do bytu (nastesti z Pythonu nemusis menit uvozovky, on to encoduje spravne), socket si musim zavrit explicitne atd. Ale mozna je to jen debilni implementace.Sosacek píše: ↑26. 11. 2017, 13:42 Muzes to samozrejme delat tak, ze si otevres socket a posles "GET url HTTP/1.1\r\nHost: whatever.com\r\n\r\n" ale nevim, jestli je to dobry napad. Pokud chces pracovat se sockety a "mit kontrolu nad garbage collectorem" tak ty high-level jazyky asi nejsou co hledas.
Hlavni sila Pythonu je v jednoduchosti, prehlednosti a mnozstvi dostupnych hotovych veci - pokud ho chces 1) pouzivat jako C, a 2) si delat vsechno sam, tak s tim akorat budes bojovat.
A to, ze kazda platforma ma vlastni specifika je duvod, proc ma Python interpreta, ktery te od toho ma abstrahovat. Takze opet, netusim, proc to zrovna Python nedela (ostatni interpretovane jazyky co jsem pouzival, to delaj). Zrejme nejaka legacy vec.
Takze ve vysledku to paradoxne nebylo ani rychleji napsane a ani jednodussi. A dostat se k socketu uz v nejake hotove veci taky obcas neni tak trivialni, proto to ma mit public API, kterym to jde nastavit a vnitnre tam ma byt ta haluz co jsem psal vyse. Kdoviproc to pres public API neumoznuje. Znovu se ptam, proc mam low-level sockey proboha resit jako uzivatel high-level interpretovaneho programovaciho jazyka. Tohle treba nemusim resit v zadne networkove C++ knihovne co znam takhle naprimo treba - ani v Poco, a to se s uzivatelem te knihovny taky zrovna nesere.
Secrets are power.
-
- černá eminence
- Příspěvky: 18577
- Registrován: 18. 6. 2003, 21:31
- Bydliště: Praha
Re: IT pro otrlé
Všechno možné, vesměs nějaká komunikace tam a zpět s větší populací zaměstnanců, která je nějakým způsobem prediktabilní, ale příliš složitá na různé merge maily, tj. poslat třeba 2000 lidí komunikaci, která je upravená podle jeho osobní situace, kterou známe, a na což očekáváme nějak prediktabilní, ale velmi různorodou reakci, kterou chceme automaticky zpracovat.
Dále pak věci velmi různorodé denní potřeby, "process improvement" a tak (třeba nedebilní správa docházky a dovolených), věci navázané na nějaké databáze... Já bych třeba měl strašně rád něco, co připraví novému zaměstnanci počítač bez nějakých extra lidských zásahů (jakože dostanu mašinu s korporátním standardem, chci se zbavit nějakých zbytečností, nainstalovat jiné věci, nastavit registry, jazykové prostředí, favourites ve Windows Exploreru, favourites v prohlížečích,... teď tohle většinou lidem trvá dohromady tak den a vesměs vždycky udělají nějaké chyby).
1) V základu ne, ale mohu pracovat s nějakými těmi volnými versemi.
2) Přesně tohle děláme Ale jednak bych se rád naučil s něčím dalším (viz vedle téma o rozpolcenosti), druhak to má určité zásadní limitace (např. platformy, přístup ke sdíleným informacím,...).
Ten mě taky docela zajímá.Alef0 píše:Nie je marny ani PowerShell, ten je tiez zabudovany na kazdom Windowse, je to pomerne lahke, je to krajsi jazyk ako VisualBasic a daju sa v tom robit uzitocne veci. (Len to malokto pozna).
Ne croyez pas que les antisémites se méprennent tout à fait sur l'absurdité de ses réponses. Ils savent que leurs discours sont légers, contestables ; mais ils s'en amusent, c'est leur adversaire qui a le devoir d'user sérieusement des mots puisqu'il croit aux mots ; eux, ils ont le droit de jouer. Ils aiment même à jouer avec le discours car, en donnant des raisons bouffonnes, ils jettent le discrédit sur le sérieux de leur interlocuteur ; ils sont de mauvaise foi avec délices, car il s'agit pour eux, non pas de persuader par de bons arguments, mais d'intimider ou de désorienter. Si vous les pressez trop vivement, ils se ferment, ils vous signifient d'un mot superbe que le temps d'argumenter est passé.
-
- Příspěvky: 25789
- Registrován: 14. 7. 2004, 19:30
Re: Re:
Ta dokumentace piseResurrection píše: ↑26. 11. 2017, 14:33 To samozrejme nechci (psat si to sam), ale jsem k tomu nucen kvalitou jazyka a dostupnych knihoven. Nicmene rozhodnuti pouzit Python nebylo moje a HTTP server si sam pochopitelne nepisu, ale pouzivam uz hotovy. Respektive on se tak tvari, ale plno veci si musis udelat sam (proto ta Ikea). Dostanes bytes, takze si to dekoduj na string, pokud je to json vymen ty uvozovky. Kdyz posilas json zpatky, tak to zase encoduj do bytu (nastesti z Pythonu nemusis menit uvozovky, on to encoduje spravne), socket si musim zavrit explicitne atd. Ale mozna je to jen debilni implementace.
jakoze jsou to podpurne tridy, pokud si chces postavit vlastni webserver. Ale ja nevim, proc se snazis si postavit vlastni webserver.This module defines classes for implementing HTTP servers (Web servers).
Pokud chces hotovy webserver, ktery reaguje funkci v pythonu muzes treba takhle s pomoci bottle microframworku:
Kód: Vybrat vše
from bottle import route, run, template
@route('/hello/<name>')
def index(name):
return template('<b>Hello {{name}}</b>!', name=name)
run(host='localhost', port=8080)
Kód: Vybrat vše
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
Ja jsem furt totalne zmateny. Ty sis z nejakeho duvodu vybral socket api, u ktereho dokumentace pise, ze je kopie lowlevel Cckoveho api, a pak si stezujes, ze je low-level. A pak si stezujes, ze z toho min lowlevel api (ktere ale furt neni to, co bys mel pouzivat) se k tomu jeste vic lowlevel api blbe dostava? A pak si stezujes, ze se k nemu vlastne musis dostavat?Resurrection píše: ↑26. 11. 2017, 14:33A to, ze kazda platforma ma vlastni specifika je duvod, proc ma Python interpreta, ktery te od toho ma abstrahovat. Takze opet, netusim, proc to zrovna Python nedela (ostatni interpretovane jazyky co jsem pouzival, to delaj). Zrejme nejaka legacy vec. [...] A dostat se k socketu uz v nejake hotove veci taky obcas neni tak trivialni, proto to ma mit public API, kterym to jde nastavit a vnitnre tam ma byt ta haluz co jsem psal vyse.[..] Znovu se ptam, proc mam low-level sockey proboha resit jako uzivatel high-level interpretovaneho programovaciho jazyka.
Ja to fut nepobiram. Ze kdyz pouzijes nevhodne nastroje, a zacnes si psat vlastni webserver pomoci socketu, misto abys pouzil hotovy, tak je to vic prace, nez pouzit hotovy?
EDIT: kdyz nad tim tak premyslim, tak napsat neco pomoci unix socket api bude stejne prace v jakemkoli programovacim jazyce.
Naposledy upravil(a) Sosacek dne 26. 11. 2017, 15:10, celkem upraveno 1 x.
“And, for an instant, she stared directly into those soft blue eyes and knew, with an instinctive mammalian certainty, that the exceedingly rich were no longer even remotely human.”
― William Gibson, Count Zero
― William Gibson, Count Zero
-
- Administrátor
- Příspěvky: 5829
- Registrován: 7. 6. 2004, 11:22
- Bydliště: Košice, SR.
Re: IT pro otrlé
Powershell. Musíš mať admin práva, prirodzene.chci se zbavit nějakých zbytečností, nainstalovat jiné věci, nastavit registry, jazykové prostředí, favourites ve Windows Exploreru, favourites v prohlížečích
Inak ak máte striktne Microsoft prostredie, tak SharePoint možno niekde beží a to je úplná beštia, čo som počul.
Preklady [preklad/korektury/layout]:
Wilderness of Mirrors: 100%/99%/0
In a Wicked Age, CZ: 100%/100%/0
FATE SK: 100/100/0
Wilderness of Mirrors: 100%/99%/0
In a Wicked Age, CZ: 100%/100%/0
FATE SK: 100/100/0
-
- Příspěvky: 25789
- Registrován: 14. 7. 2004, 19:30
Re: IT pro otrlé
Hm, to je tezka objednavka, protoze cokoli, co ma mit integraci na korporatni megasystemy, je hrozna prace.Eleshar_Vermillion píše: ↑26. 11. 2017, 14:39 Všechno možné, vesměs nějaká komunikace tam a zpět s větší populací zaměstnanců, která je nějakým způsobem prediktabilní, ale příliš složitá na různé merge maily, tj. poslat třeba 2000 lidí komunikaci, která je upravená podle jeho osobní situace, kterou známe, a na což očekáváme nějak prediktabilní, ale velmi různorodou reakci, kterou chceme automaticky zpracovat.
Jakoze
- poslat email - hodina prace
- poslat email pres Exchange - tyden prace
- poslat email pres Exchange bez soucinnosti jejiho spravce - nemozne
- projit excel / otevrenou databazi se zamestnanci a identifikovat podmnoziny na zaklade nejakych kriterii - hodina prace
- projit korporatni databazi se zamestnanci a identifikovat podmnoziny na zaklade nejakych kriterii - tyden az mesic prace
- projit korporatni databazi se zamestnanci (...) bez plne soucinnosti vlastnika - nemozne
O automatizaci windows vim kolovy.Dále pak věci velmi různorodé denní potřeby, "process improvement" a tak (třeba nedebilní správa docházky a dovolených), věci navázané na nějaké databáze... Já bych třeba měl strašně rád něco, co připraví novému zaměstnanci počítač bez nějakých extra lidských zásahů (jakože dostanu mašinu s korporátním standardem, chci se zbavit nějakých zbytečností, nainstalovat jiné věci, nastavit registry, jazykové prostředí, favourites ve Windows Exploreru, favourites v prohlížečích,... teď tohle většinou lidem trvá dohromady tak den a vesměs vždycky udělají nějaké chyby).
“And, for an instant, she stared directly into those soft blue eyes and knew, with an instinctive mammalian certainty, that the exceedingly rich were no longer even remotely human.”
― William Gibson, Count Zero
― William Gibson, Count Zero