<<

INDEX

A in plumbing example, 42–43 with relays, 49 absolute addressing, 129 Andreesen, Mark, 251 abstractions, 273–274, 433–434, 435 Android operating system, 376 accumulator register, 103–104 animation, 29–30 active high and low, 72 anodes, 50 active pull-up switch, 58 anonymized mapping, 410–411 ADC (analog-to-digital) converters, anonymous functions, 266 162–165 APIs (application program interfaces), adders, 60–63 433–436 addition, 8–10, 10–14 Apple, 417, 433 additive color system, 28, 173 application program interfaces (APIs), addressing 433–436 and I/O devices, 96–97 application vs. system programming, memory, 79–81 259, 282 modes, 104–105 approximations and shortcuts with pointers, 184–185 CORDIC algorithm, 313–318 relative and absolute, 128–130 efficiency goals, 283 Adleman, Leonard, 368 integer methods, 290–301 advisory locks, 339–340 of power series, 313 Aho, Alfred, 228, 438 quantization, 323–333 AI. See artificial intelligence (AI) randomness, 318, 322–323 AJAX (Asynchronous JavaScript and recursive subdivision, 301–312 XML), 252 table lookups, 284–290 algorithm efficiency vs. performance, 215 Arduino, 119 aliasing, 170, 180 arithmetic logic unit (ALU), 97–99 ALU (arithmetic logic unit), 97–99 Armel processors, 142 American Standard Code for ARPANET, 157 Information Interchange arrays, 185–187 (ASCII), 22–24, 213 artificial intelligence (AI) Ampère, André-Marie, 44 concepts, 388 amplitude, 155, 165 development, 385–386, 407 analog comparators, 163, 164 and neural networks, 402 analog devices self-driving ketchup bottle characteristics, 35–36, 37–38 example, 407–409 and transfer functions, 38–40 ASCII (American Standard Code for analog-to-digital (ADC) converters, Information Interchange), 162–165 22–24, 213 Anathem (Stephenson), xxxv Asente, Paul, 439 ancestor node, 243 assemblers, 218, 233–234 AND assembly language, 217–218 logic gates, 53–54, 59 asynchronous counters, 77 operation, 4–5, 5–6, 9 asynchronous functions and promises, Bell, Alexander Graham, 56 346–353 bell curve, 390–391 Asynchronous JavaScript and XML Bell Telephone Laboratories, 150, 179, (AJAX), 252 209, 220, 225, 416, 442 AT&T, 155 Bentley, Jon, 228 atomic operations, 339, 342, 343 Berners-Lee, Sir Tim, 159, 239–240 attack surfaces, 355, 373–374 Berryman, Jeff, 134 audio , 387, 409–412 amplifier transfer function, 39–40 binary-coded decimal (BCD) system, 18 differential signaling applications, 57 binary, defined, 3 digital representation, 165–173 binary numbers frame layout, 210 addition with, 8–10 audio filters, 168–169 coded as decimals, 18 authentication, 356, 358–359, context notation, 20 361–362, 370 as integers, 6–8 authorization, 361 as negative numbers, 10–14 autodialers, 355 octal and hexadecimal forms, 18–20 autoincrement/autodecrement as real numbers, 14–18 modes, 114 binary thresholds, 41 axon terminals, 401 binary trees, 199–203 binning, 71 B bipolar junction transistors (BJTs), 51 bison program, 226 B-trees, 205 bit density, 87 Babbage, Charles, 35 bitmaps, 187–188, 204, 312 back-EMF effect, 48 bits backdoors and security, 356, 368, as binary numbers, 6, 8 373–374 defined, 3 backpropagation, 404 groupings, 20–22 Backus, John, 222 overflow, 10 Backus-Naur form (BNF), 222–223 page table control, 131 examples, 226–227 as right choice for technology, bandpass filters, 168 33–34, 40–41 bandwidth, 156 BJTs (bipolar junction transistors), 51 Barlow, John Perry, 357 Blaze, Matt, 373–374 barrel shifters, 100 blits (terminals), 209 base-2 system, 6 storage devices Base64 encoding, 26–27 addressing, 203–204 bash shell, 437–438 hardware, 85–88 BASIC, 219–220 blockchain, 371 batch processing, 176 blocking mode, 341 Battle of Midway code breaking, Bluetooth, 158, 352–353 366–367 Boole, George, 4, 386 Baud rate, 154 Boolean algebra, 4–5 Baudot, Émile, 154 booting, 218 Bayer, Bryce, 325 bootstrap, defined, 218 Bayer matrix, 325–326 Bourne, Stephen, 438 Bayer, Rudolf, 205 branch prediction, 135 Bayes’ theorem, 389–390 branching instructions, 105–106 Bayes, Thomas, 389 Bray, John, 29 BCD (binary-coded decimal) system, 18 breadth-first traversal, 123 Bechtolsheim, Andy, 439 break statement (C), 195, 196

446 Index Bresenham, Jack, 294–295 cat vs. meatloaf image example, 388, browsers. See web browsers 391–393, 396–400 buffer overflows, 275, 374–375 cathode ray tube (CRT) terminals, buffers 177–179 in logic gates, 53 cathodes, 50 program, 270–273, 274 CDs, 87–88, 170 raster frame, 311 cel animation, 29–30 bugs. See also errors cell phone programs, 425 buffer overflow, 275 cell phone systems likelihood of, 282 security exposures, 361–362, reporting and tracking, 441 373, 376 term origin, 50 surveillance, 359 build tools, 421 central processing unit (CPU), 97–102, Burks, Arthur, 125 118–119 buses, 80, 94–95, 96–97 certificate authorities (CAs), 370–371 Bush, Vannevar, 159 chaining code, 348–349 button circuits, 144 –146, 147–148 Chang Xiao, 363 bytes, defined, 21 Changxi Zheng, 363 characters C classification, 288–290 control, 23–24 C programming language defined, 22 brief overview, 114, 220 graphics display, 311–312 compiler, 268 and language variations, 439 input and output, 274–275 numbers as, 25–27 optimized code examples, 235 sorting, 213 primitive data types, 184–189 and steganography, 362–363 runtime libraries, 275–276 checksum method, 89 sorting functions, 213 chem (language), 228 unions, 190 Cheng Zhang, 363 C++ language concepts, 211–212 Cheriton, David, 439 CA (certificate authorities), 370–371 child nodes, 243 management, 134–135 chips. See also specific types calculator program examples, 226–227, design, 90, 119, 127, 376 229–230 economics, 154 Canny, John, 398 invention of, 52 canvas, 255, 290–291 chord construction, 166–167, 168 card reader technologies, 84, 85 ciphers career success complex, 366–367 decision-making, 427–428 one-time pads, 367 estimating and scheduling, substitution, 363–365 426–427 transposition, 365–366 job/career vs. calling, 430 ciphertext and cleartext messages, 363 and open source projects, 442–443 circuit-switched networks, 157 working with people, 428–429 circuits, 44, 47 and workplace culture, 429–430 circular buffers, 272–273 Carpenter, Loren, 322–323, 429 CISC. See complicated instruction set carrier waves, 155–156 (CISC) Cartesian coordinate mapping, 291, 301 class attribute (CSS), 267 Cascading Style Sheets (CSS), 244–248, 267

Index 447 classifiers compilers and artificial intelligence, 387–388 defined, 219 feature recognition, 399–400 execution, 232–234 ketchup bottle example, 406 vs. interpreters, 228–229 naive Bayes classifier, 389–390 complicated instruction set computers neural networks as, 405 (CISC), 113, 114 cleartext and ciphertext messages, 363 compositing, 30 Clipper chip, 374 compound data types clocks, 71, 77 doubly linked lists, 198–199 , 424 and memory allocation, 195–198 clusters, 87, 203 singly linked lists, 191–195 CMOS (complementary metal oxide suites/structures, 189–190 semiconductor), 52 animation, 30 CMRR (common-mode rejection computer architecture ratio), 56 basic elements, 118–119 coalescing nodes, 307 defined, 117–118 code computer vision libraries, 399 data as, 382–384 computers maintainable, 441–442 brief history, 416–418 portable, 439–440 languages, 1–3, 217–218, 219–220 refactoring, 441 major components of, 93–94, self-modifying, 407 109–113 source control and distribution, 440 resource usage efficiencies, 283 testing, 440–441 stored-program, 101 third-party, 376–378 computing devices writing vs. reusing, 436 analog vs. digital, 35–36, 37–38 code breaking, 366–367 mechanical, 34–35 code (machine language) generators, Concurrent Versioning System 233–234 (CVS), 440 codecs, 172 condition code instructions, 105 coding tools, 437–439 condition code register, 10, 98 collisions conductors, 43 Ethernet, 158 constants, 221 half-duplex, 154 constructive solid geometry technique, in hash tables, 214–215 304–310 color displays, 173–174, 181 containers, 422 color gradients, 296–297 context color representations, 27–30, 190–191 switching, 269–270 Colossus: The Forbin Project (film), 409 and symbols, 2, 3 combinatorial logic, 53 continuous values, 36, 37–38 command and control messages, 358 control characters, 23–24 command interpreters, 437–438 control unit. See execution unit command line interface, 268 conversion tables, 284 common-mode rejection ratio convolution kernels, 392–393 (CMRR), 56 convolutional neural network, 405 communications security, 356–357 Conway, Lynn, 90 compact discs, 87–88, 170 cooked buffer mode, 271 compare and swap instruction, 342 Coordinate Rotation Digital Computer (CORDIC) algorithm, 313–318

448 Index coprocessors, 135–136 data centers, 424 CORDIC (Coordinate Rotation Digital Data Encryption Standard (DES) Computer) algorithm, cracker, 216 313–318 data mining, 387 core memory, 82–83 data paths, 109–110 core rope memory, 84 data structures counters, 77–78 linear vs. hierarchical, 199 CPU. See central processing unit (CPU) and performance, 183–184 CRCs (cyclic redundancy checks), 89 spatial, 123 Creative Commons, 420 data types. See compound data types; crosstalk effect, 38 primitive data types CRT (cathode ray tube) terminals, management systems 177–179 (DBMS), 205 cryptography. See also ciphers; , 204–206, 216 encryption/decryption datagrams, 158–159 blockchain, 371 date-time structure, 189–190 concepts, 357, 362 DBMS (database management and digital signatures, 370 systems), 205 hash functions, 369–370 DDoS (distributed denial of service) and password management, attacks, 357 371–372 De Morgan’s law, 5–6, 54 public key, 368 deadlocks, 341–342 steganography, 362–363 debouncing, 144 –146 Cryptonomicon (Stephenson), 357 debugging practices. See also error crystals, 70–71 checking, 378 CSS. See Cascading Style Sheets (CSS) DEC. See Digital Equipment CSS selectors, 245–247 Corporation (DEC) Curie, Jacques and Pierre, 70 decimal number system, 6, 18, 20 current (I), 44 decision criteria, 37–38, 54–55 cutoff regions, 41 decision-making skills, 427–428 CVS (Concurrent Versioning decoders, 63–64 System), 440 demand paging, 132 cyclic redundancy checks (CRCs), 89 demodulation, 156 demultiplexers (dmux), 64–65 D dendrites, 401 denial of service (DDoS) attacks, 357 D/C converters, 161–162 depth-first traversal, 123, 244 D flip-flops, 74–76 DES (Data Encryption Standard) DAC converters, 161–162 cracker, 216 DAGs. See directed acyclic graphs (DAGs) descendant node, 243 dark adaptation, 29 desktop publishing, 254 Dark Star (film), 388 detents, 38 data. See also big data; encryption/ development methodologies, 430–431 decryption; personal data device drivers, 269, 270–273 as code, 382–384 diff program, 440 compression, 172 difference engine, 35 copying and moving, 206–211 differential signaling, 55–57 machine training, 387, 405, 406 Diffie–Hellman Key Exchange, 368 protection of, 352, 354–355, 359– Diffie, Whitfield, 368 360, 378–379 digital audio, 165–173 static and dynamic, 136 digital camera technology, 38–39, 82, 325

Index 449 digital devices, characteristics, 35–36, domain-specific languages, 228 37–38 doping, 51, 376 Digital Equipment Corporation (DEC) DoS (denial of service) attacks, 357 systems double-pole, double-pole (DPDT) PDP-10, 407 switches, 46 PDP-11, 21, 114 double-precision numbers, 17–18 vs. UNIX, 434 doubly linked lists, 198–199 digital images, 173–176 DRAM (Dynamic RAM), 82, 134 digital signal processors (DSP), 15 drawing. See graphics digital signatures, 370 DSPs (digital signal processors), 15 digital-to-analog (DAC, D/C) Duff, Tom, 30, 208 converters, 161–162 Duff’s Device, 208–209 digits, 3, 6 duty cycle, 148–149 digraphs, 365 , 87–88 diodes, defined, 142 dynamic data, 136 direct addressing mode, 104 dynamic memory (DRAM), 82, 134 direct memory access (DMA) units, 136 dynamic memory management, directed acyclic graphs (DAGs), 123, 195–198, 379–381 229, 242–243 directories, 204 E discrete values, 36, 37–38 disk drives, 85–87, 95, 203–204 EBCDIC (Extended Binary-coded display lists, 179, 181 Decimal Interchange displaying Code), 22 characters, 312 Eccles, William, 76 ellipses, 298–300 echoing, 270, 271 gasket example, 304–310 edges images, 173–176 detection, 393–398 polynomial shapes, 301 logic transition, 74 spirals, 301–304 tracking with hysteresis, 398–399 straight lines, 292–296 EEC (error checking and correcting) displays chips, 89 flat-screen, 178 EEPROM (electrically erasable LED, 146 –148 programmable read-only distortion, 39–40, 169 memory), 85, 88 distributed denial of service (DDoS) EFF. See Electronic Frontier attacks, 357–358 Foundation (EFF) dithering, 325–333 electricity division by zero, 18 plumbing analogy, 41–44 DMA (direct memory access) units, 136 switches and circuits, 44–47 DNS (Domain Name System), 159 electromagnetic deflection, 178 Document Object Model (DOM) electromagnets, 48 brief history, 344 Electronic Frontier Foundation (EFF), and CSS selectors, 245 216, 360, 363 manipulation, 252–253 electrostatic deflection, 177–178 structure, 242–244 ELF (Executable and Linkable Document Type Definition (DTD), 250 Format), 137 documentation, 432, 442–443 encoding dog-whistle marketing, 363 bit patterns, 24–25 DOM. See Document Object color and light, 30, 149–151 Model (DOM) defined, 2 Domain Name System (DNS), 159

450 Index encryption/decryption. See also F cryptography Fantasia (film), xxx asymmetric, 368 feedback, 70, 72 cipher types, 363–367 feedforward networks, 403 concepts, 356–357 Feldman, Gary, 395 forward secrecy, 369 Feldman, Stuart, 414 key exchange, 367–368 Fender Bluetooth guitar exposure, one-time pads, 367 352–353 Public Key Infrastructure (PKI), fetch-execute cycle, 109, 111 370–371 FETs (field effect transistors), 51–52 standards development, 360 Fibonacci sequence program code, end-around carry, 12 107–108, 218, 219, 220 endianness, 96, 184 field effect transistors (FET), 51–52 Engelbart, Douglas, 181 field-programmable gate arrays entity references, 241 (FPGA), 90, 337 entropy harvesting, 375–376 FIFO (first-in, first-out) applications, EPROM (erasable programmable read- 162, 270 only memory), 85 file descriptors, 271, 274, 435 equation notations, 125 file pointers, 274 error checking. See also debugging filenames, 203, 271–272 practices files in memory allocation, 276–277 as locks, 343 practices, 373 treatments of, 434 error checking and correcting (ECC) filesystems, 204 chips, 89 filters, voltage frequency, 168 error message output, 274–275, 277 finite impulse response (FIR) filters, error propagation, 329–333 145–146 errors. See also bugs firmware, 90 dynamic memory allocation, 196, first-in, first-out (FIFO) applications, 197–198 162, 270 and logic circuit design, 71 fixed-point numbers, 14–15 in memory, 88–89 FLAC (Free Lossless Audio Codec), estimation skills, 426 172–173 Ethernet, 158, 341 flash converters, 163–164 event handlers, 254, 266 , 88, 382 event loops, 343 Fleming, Sir John Ambrose, 50 event queues, 344 flex program, 225 events, 128 flight computers, 35 exception handling, 276 flip-flops, 74–76 exclusive-OR (XOR) operation, 4–5, floating-point arithmetic, 100, 290, 294 9, 53 floating-point numbers, 15–18, Executable and Linkable Format 221–225 (ELF), 137 floppy disks, 87 execution unit, 100–102 flowcharts, 125–126 expert systems, 407 Floyd, Robert, 330 exponent, 16, 17–18 Floyd-Steinberg dithering algorithm, Extended Binary-coded Decimal 330–331 Interchange Code FM stereo, 171–172 (EBCDIC), 22 folding. See aliasing eXtensible Markup Language (XML), forth (programming language), 124 239, 248–251 FORTRAN, 212–213, 219–220, 226

Index 451 forward secrecy, 369 Gilmore, John, 418 Fourier, Jean-Baptiste Joseph, 167 Git, 440 Fourier transform, 167 GLANCE G terminals, 179 Fournier, Alan, 322 glass ttys, 178 FPGAs (field-programmable gate glibc function, 436 arrays), 90, 337 GML (Generalized Markup fprintf function (C), 277 Language), 239 fractals, 319–323 GNU project, 415, 418, 421 fragmentation of memory, 196 Goldberg, Adele, 158 frame buffers, 311 Gosling, James, 422, 443 free function (C), 195–196, 197, governments and privacy, 359–361, 379–381 373–374 Free Lossless Audio Codec (FLAC), GPUs (graphics processing units), 172–173 114–115 free space tracking, 204 gradient descent algorithm, 404 frequencies gradients defined, 155 color, 296–297 filtering, 168–170 in edge detection, 395–396 frequency shift keying (FSK), 155–156 granularity of locks, 340–341 Friedman, Elizebeth Smith, 363 graphic equalizers, 168 fsck program, 204 graphical user interface (GUI), 268, 338 FSK (frequency shift keying), 155–156 graphics full adder, 61 canvas, 290–292 full-duplex connection, 154 color gradients, 296–297 function calls, 120–121 constructive solid geometry, functions 304–311 and libraries, 137–138 drawing curves, 298–304 vs. macros, 290 drawing straight lines, 292–296 trapdoor, 368 and randomness, 322–323 Fussell, Don, 322 shifting and masking, 311–312 fuzzing, 375 graphics processing units (GPUs), 114–115 G graphics rotations, 291 graphics terminals, 177–178 garbage collection, 197–198, 381–382 Grateful Dead recordings, 57 gate arrays, 90 Gray code, 150 gated latches, 73–74 Gray, Frank, 150 Gates, Bill, 358 grayscale gates. See logic gates displays, 178 Gauss, Johann Carl Friedrich, 390 quantization, 323–333 Gaussian blur, 391–393 Greenblatt, Richard, 407 Gaussian distribution, 390–391, 394 grep utility (UNIX), 224 General Data Protection Regulation “Guess the animal” program, 260–262, (GDPR), 379 263–266, 276–282 General Electric, 416 GUI (graphical user interface), 268, 338 general purpose computers, 15 Generalized Markup Language (GML), 239 H genetic algorithms, 407–409 half adder, 61 Geschke, Chuck, 254 half-duplex connection, 154 Ghostbusters (film), 58 halftone printing, 325 gigabytes, defined, 21 Hamming codes, 89

452 Index Hamming, Richard, 89 HTTP. See HyperText Transfer Protocol Hammond B-3 organ, 168 (HTTP) hard drives, 87 human interface devices, 176–181 hardware. See also logic gates humans. See also programmers and code optimizers, 236 hearing, 170 –171, 172–173 computing technology language, 1–3 components, 47–52 nervous system, 387 design issues, 36–38, 60, 119 thought processing, 386–387 electrical switches and circuits, vision, 29, 147, 174, 291, 393 44–47 Hurd, Earl, 29 logic gates, 53–60 hypertext, 159, 240 manufacturing issues, 71 HyperText Markup Language (HTML) and software, 90 documents, 240–242, 243 hardware exception handling, 133 elements and attributes, 241–242, Harvard architecture, 118 245–248 hash code checking, 89 evolution, 160, 238, 239 hash functions, 213–215, 369–370 HyperText Transfer Protocol heap, 136–137 (HTTP), 159 Hellman, Martin, 368 hypervisor, 425 Henkel-Wallace, DV, 418 hysteresis applications, 54–55, 398–399 Hennessey, John, 113 Hertz, Heinrich, 155 I Hertz (Hz), 155 Hewlett Packard (HP) I/O. See also input and output microcode implementations, 113 vectored, 210–211 reverse Polish notation I/O devices calculators, 125 computer access to, 96–97, 141–142 hex triplets, 30 mediation, 268–269 hexadecimal representation, 19–20 on-chip, 127 hi-Z (hi-impendance) state, 60 sharing, 337 Hibernate tool (Java), 423 I/O ports, 142–144 hidden layers, 403 IBM hierarchical data structures, 199–203 Hollerith cards, 83, 84 hierarchical filesystems, 204 Selectric terminals, 177 high pass filters, 168 IDE interface, 152, 154 Hilbert curve, 320 IDEs (integrated development Hilbert, David, 320 environments), 439 Hinton, Geoffrey, 404 IEEE floating-point numbers, 17–18 A History of Personal Workstations IF statements, 212–213 (Goldberg), 158 image processing and recognition hold time, 76 edge detection, 393–398 Hollerith cards, 83–84 edge tracking with hysteresis, Hollerith, Herman, 83 398–399 Honeywell computers, 20 feature extraction, 399–400 Hopper, Grace, 50 Gaussian blur, 390–393 horizontal partitioning, 216 nonmaximum suppression, 398 host (URL), 240 ImageMagick, 436 Hough transform, 399 images. See also graphics HTML. See HyperText Markup digital representation, 173–176 Language (HTML) texture mapping, 285–288 HTML5, 255 immediate addressing mode, 105 impedance (Z), 60

Index 453 index register, 129 internet indices accessing, 158–160 array, 185 as attack surface, 357–359 database, 206 interpreters hash table, 214–215 vs. compilers, 228–229 indirect address registers, 110 execution, 231–232 indirect addressing web browsers as, 237 and linked lists, 193–194 interrupt handlers, 129–130, 375 mode, 104 interrupts, 125–128, 341 indirect blocks, 204 inverters, 49, 53–54, 70, 72 infix notation, 125, 227 IP addresses, 159 inline styles, 267 isochronous transfers, 156 inodes, 203–204 input and output J computer access to, 96–97 device drivers, 268–269, 270–273 Japanese Industrial Standard (JIS) in UNIX file abstraction, 435 characters, 24 inputs. See also noise Java programming language, 198, 416, error-checking, 373, 374 422–423 and transfer functions, 39–40 Javadoc, 443 Institute of Electrical and Electronic JavaScript language Engineers (IEEE), 17 and asynchronous issues, 343–346 instruction register, 109 function example, 120 instructions. See also code and garbage collection, 198, addressing modes, 104–105 381–382 as bit patterns, 101 “Guess the animal” game, branching, 105–106 264–266, 276 condition codes, 105 and jQuery, 254 data as, 382–384, 387–388 and JSON, 255–256 layouts, 102–104, 106–107 promise construct, 346–350 insulators, 43 as self-modifying code, 407 integer methods and web browser, 251–253 in CORDIC algorithm, 313–318 JavaScript Object Notation (JSON), drawing curves, 298–300 255–256 drawing gradients, 296–297 Johnson, Stephen C., 226 drawing straight lines, 295–296 Jordan, Frank, 76 and performance, 290 JPEG compression, 122–124, 174 with polynomials, 301 jQuery, 253–254, 345–346 integer representations, 6–8 JSON (JavaScript Object Notation), integrated circuits. See also chips; logic 255–256 gates, 52, 53, 100 integrated development environments K (IDEs), 439 integrated peripherals, 127 Kernighan, Brian, 228, 434, 438 integrity verification, 370 ketchup bottle AI example, 406, Intel, 90, 113 408–409 interface design, 433–436 key exchanges, 367–369 interference, 37–38 keyboards, 181 interior node, 243 keyframes, 176 International Standards Organization Kilby, Jack, 52 (ISO) characters, 24 kilobytes, defined, 21 Kleene, Stephen Cole, 224

454 Index kleptography, 355, 368 liquid crystal display (LCD), 178 knife switches, 45 LISP programming language, 407 Knight, Tom, 407 living documents, 238 Knuth, Donald, 435 load-store architecture, 113 Koch, Helge von, 319 local area networks (LAN), 156–157, 158 Koch snowflake, 319 , 184 lock authorities, 341 L locks advisory, 339–340 L-systems (Lindenmayer systems), deadlocks, 341–342 320–322 granularity, 340–341 LAN. See local area networks (LAN) implementations, 342–343 Landin, Peter, 189 logic gates languages. See also programming concepts, 53–54 languages and hardware design, 60 human vs. computer, 1–3, 267–268 output variations, 58–60 markup, 238–239, 248–251 and propagation delay, 57 Lantz, Keith, 439 Schmitt triggers, 55, 56 large-scale integration (LSI) parts, 60 logic operations latches, 71–74 binary addition as, 9–10 LavaRand, 376 concepts and laws, 3–6 Lawson, Harold, 184 loop-invariant optimization, 235, 288 layering video, 176 lossless and lossy compression, 172 LCD (liquid crystal display), 178 low pass filters, 168–169, 170 leading zeros, 8 LRU (least recently used) algorithm, 132 leaf nodes, 123 LSB (least significant bit), 8 least recently used (LRU) algorithm, 132 Łuskasiewicz, Jan, 125 least significant bit (LSB), 8 LEDs. See light-emitting diodes (LEDs) Lesk, Mike, 225 M lex program, 225–226 MAC (Media Access Control) lexical analysis, 221–226 addresses, 158 LFSR (linear feedback shift McCarthy, John, 198, 407 register), 375 McCauley, Clark, 429 libraries, 137–138, 288–289, 399, 436 McCreight, Ed, 205 LIFO (last in, first out) structure, 124 machine intelligence. See also artificial light-emitting diodes (LEDs), 59, intelligence (AI); big data; 142–144, 146 –148, 160–161 machine learning (ML), 385 limit registers, 124 machine language, 218, 233–234 Lindenmayer, Aristid, 320 machine learning (ML). See also image Lindenmayer systems (L-systems), processing and recognition 320–322 concepts, 386–388 linear feedback shift register edge detection, 390–399 (LFSR), 375 feature extraction, 399–400 linear region, 39–40 naive Bayes classifier, 389–390 linked lists, 191–195, 198–199 and neural networks, 405 linker programs, 137–138 technology trends, 385–386 element (HTML), 246 training data, 406 links McIlroy, Doug, 435, 440 , 204 Macintosh API, 433 hypertext, 240 macros, 290 Linux, 418, 437 , 87

Index 455 maintenance, 441–442 Men in Black (film), 356 malloc function (C), 195–196, 197, messages, command and control, 358 379–381 and security exposure, 359 man-in-the-middle attacks, 357, 368 metal-oxide semiconductor field effect Mandelbrot, Benoit, 319 transistors (MOSFETs), 52 mantissa, 15–16, 17–18 Metcalfe, Bob, 158 MapReduce, 216 methodology vs. ideology, 430–431 mark-space signaling, 153–154, methods, C++, 211–212 155–156 microcode, 112–113 markup languages, 238–239, 248–251 microcomputers, 119, 137, 375 mask-programmable ROM, 85 microprocessors, 119, 141–142 masking. See shifting and masking Microsoft, 339, 355, 358, 417 masks Miller, Frank, 367 bitmap, 187 MIP mapping, 285–288 defined, 85 MIT. See Massachusetts Institute of interrupt controls, 128 Technology in raster graphics, 311–312 MKUltra government program, 360 mass storage, 85–87 ML. See machine learning (ML) Massachusetts Institute of Technology, MMUs See memory management 407, 416 unit (MMUs) MD5 hash function, 370 modems, 156 Mead, Carver, 90 modulation/demodulation, 155–156 Media Access Control (MAC) moiré artifacts, 328 addresses, 158 MOSFETs (metal-oxide semiconductor medium-scale integration (MSI) field effect transistors), 52 parts, 60 most significant bit (MSB), 8 megabytes, defined, 21 motion compression, 176 memory. See also storage technologies mouse technology, 151, 181 arranging data in, 136–137 MP3 frame layout, 210 computer access to, 94–96 MSB (most significant bit), 8 error detection and correction, multicore processors, 119 88–89 multiplexers (mux), 65–66 hierarchy and performance, multiplexing, examples, 81, 147 133–135, 138 multiplication, 100 organization and addressing, 79–81 multiprocessor systems, 118–119, 216 random access, 82 multitasking, 118, 133, 177, 335–336 read-only, 83–85 The Mythical Man-Month: Essays on relative addressing, 129–130 Software Engineering as , 337 (Brooks), 219 memory chips, 81 memory controller, 134 N memory management. See also buffer overflows naive Bayes classifier, 389–390 bug prevention, 373, 374–375 namespaces, 249 in C programming, 276–280 NaN (not a number), 18 dynamic allocation, 195–197, NAND gates, 53–54 379–381 Napier, John, 34 garbage collection, 197–198, National Security Agency (NSA), 355, 381–382 368, 374 memory management units (MMUs) Naur, Peter, 222 design and operations, 130–132, 133 negative logic, 5–6 and libraries, 138, 195 negative number representation, 10–14

456 Index Nelson, Nils Peter, 288 operands, 97, 221 networking, 156–160 operating systems (OS) neural networks, 401–406 context switching, 269–270 new operator, 198 and files, 271–272 nixie tubes, 63 and I/O devices, 259–260, 268–269 no-execute bit, 131 locking functionality, in, 341 Node.js, 424 operations, 118, 128–129 nodes. See also trees with programs vs. browsers, 273–274 adding new, 280–281 threads, 337–339 in C programming, 276 time-sharing, 177 coalescing, 307 optical disks, 87–88 leaf, 123 optimizers, 234–236 lexicon, 243 OR noise logic gates, 53–54 and differential signaling, 55–57 operation, 4–5, 5–6 immunity, 38, 54–55 in plumbing example, 43 nonaligned access, 95 with relays, 49 nonblocking mode, 341 Ørsted, Hans Christian, 47 nonmaximum suppression, 398 OS. See operating systems (OS) nonrepudiation, 370 oscillators, 70–71 NOR gates, 53–54, 72 Ossanna, Joseph, 274 normalization, of numbers, 17 out-of-order execution, 135 NOT outputs operation, 4–5, 5–6, 11 in differential signaling, 56 with relays, 49 of gates, 58–60 notch filters, 168 and transfer functions, 39–40 Noyce, Robert, 52 overclocking, 71 NUL terminator, 188, 189 overflow condition, 10 numbers as characters, 25–27 nuxi syndrome, 96 P Nyquist, Harry, 169 package management, 421–422 packet-switched networks, 157 O packets (USB), 156 object code, 219 padding, 190 object-oriented programming page fault exception, 131 concepts, 211–212 page swapping, 132 octal representation, 18–19, 20 page tables, 130–131 octets, 24–25 pages, 82, 130–131 octrees, 310–311 The Paging Game (Berryman), 134 Ohm, Georg Simon, 44 parallel communications, 152, 154 Ohm’s law, 44 parallel connections, 43 one-time pads, 367 parallel processing, 119 one’s complement representation, 11–13 PARC. See Xerox Palo Alto Research opcodes, 97, 98 Center (PARC) open-collector (or open-drain) parent node, 243 outputs, 58–59, 148 parity checking, 89 open source software, 377, 418, parse trees 419–420, 436, 442, 443 construction and evaluation, OpenCV library, 399 229–230, 231 OpenGL graphics language, 181 examples, 242–243 OpenSSL cryptography library, 377, 436 optimizing, 234

Index 457 Pascal (programming language), 220 ports passive pull-ups, 59 I/O, 97, 142–144 password exposures, 353, 354, 378 IEEE 1284 parallel, 152 password management, 371–372 RS-232 serial, 154 path (URL), 240 positive logic, 5–6 pattern matching, 224–225 positive number representation, 6–8 Patterson, David, 113 POSIX (portable operating system PCs. See personal computers (PCs) interface), 421, 439 PDF (Portable Document Format), post function (jQuery), 345–346 254–255 postfix notation, 125, 227 Peano, Giuseppe, 319 PostScript language, 124, 254 perceptrons, 402–403 power consumption vs. performance, 138 periodic signals, 70 power series approximations, 313 peripherals, 96, 127 power wall, 119 personal computers (PCs), 417, 418 prefetching, 135 personal data prefix notation, 125 privacy, 352, 359–361, 410–412 prepress technologies, 29 and trust, 353–355, 361 primitive data types phase difference, 170 arrays, 185–187 phone security, 359, 361, 362, 373 bitmaps, 187–188 phones. See cell phone programs; cell overview, 184–185 phone systems strings, 188–189 photolithograpy, 51 Principles of Compiler Design (Aho and physical security, 355–356 Ullman), 228 piezoelectric effect, 70 print servers, 337–338 Pike, Robert, 24, 209, 434 printers pins, defined, 127 color system, 173 pip (Peripheral Interchange Program, and steganography, 363 DEC), 434 printf (print formatted) function pixels (C), 277 in Gaussian blur, 392–393 priority interrupts, 128 as image representation, 27, 173 privacy. See also personal data and MIP mapping, 286 and data visibility, 378–379 unions, 190–191 as security, 352 in video, 175 privileged instructions, 133 voxels, 310 privileges, and security, 356 PKI (public key infrastructure), PRNGs (pseudorandom number 370–371 generators), 375 pointers, 114, 184–185, 212 procedures. See functions polar coordinates, 301–304 processes, 337–338 Polish notation, 125 processor cores, 119, 135 polling, 127 processor interrupt handling, 341 pop and push, 124 production grammars, 320–322 portable device programming, 425 program counter, 101–102 Portable Document Format (PDF), programmable read-only memory 254–255 (PROM), 85 portable operating system interface programmers. See also career success (POSIX), 421 adding value, 414–416, 442, 443 portable software, 416, 420–421, finishing projects, 419 439–440 productive environment for, Porter, Thomas, 30 437–439 training, 418, 426

458 Index programming. See also software hygiene queues, 270, 272–273, 344 discipline of, 428, 443 Quoted Printable (QP) encoding, 26 Linux environment, 437 productivity tools, 437–439 R programming languages assembly language, 217–218 race conditions, 335–336 compiler execution, 232–234 radial zones, 87 compilers vs. interpreters, 228–229 radians, 301 domain-specific, 228 RAM (random-access memory), 82 grammar, 226–227 ramp converters, 165 and hardware, 236 random back-off-and-retry, 158 high level, 219–220 random logic, 112 interpreter execution, 231–232 random number generators, 368, and lexical analysis, 221–226 375–376 optimizers, 234–235 randomness structured vs. unstructured, 220 approximating, 318, 322–323 Programming Pearls (Bentley), 228 dithering as, 325 programming projects raster graphics, 180–181, 311–312 documentation, 432 raw buffer mode, 271 fast prototyping, 432–433 Raymond, Eric, 434 interface design, 433–436 RCS (Revision Control System), 440 and library code, 436 read-only memory (ROM), 83–85 programs. See also user programs real numbers, 14–18, 283 development vs. maintenance, 349 realloc function (C), 195–196, 379–381 machine learning, 281–282 recurrent neural network, 405 running, 137–138 recursion, 122–125 testing, 440–441 recursive subdivision third-party code, 376–378 and constructive solid geometry, and value proposition, 414–416 304–311 PROM (programmable read-only defined, 122 memory), 85 drawing spirals with, 301–304 promise construct, 346–350 reduced instruction set computers propagation delay, 43, 57, 70, 71 (RISC), 113–114 properties (C++), 211–212 Reed, Brian, 439–440 prototyping, 432–433 refactoring, 441 proxies, 358 reference addressing, 101, 185, 198 pseudo-instructions, 218 reference voltages, 163–164 pseudocode, 122 registers pseudorandom number generators accumulator, 103–104 (PRNGs), 375 in computer design, 133–134 pseudorandomness, 318–319, 375–376 condition code, 10, 98 public key cryptography, 368 index, 129 public key infrastructure (PKI), 370–371 indirect address, 110 punched paper tape, 84 instruction, 109 push and pop, 124 limit, 124 memory, 79–81 program counter, 101–102 Q schematic, 78–79 qsort function (UNIX), 213 regression testing, 441 quadrature encoding, 150–151 regular expressions, 224–225 quadtrees, 123, 304–310 relative addressing, 129–130, 186 quantization, 323–333 relays, 47–50

Index 459 reset bar, 72 SCCS (Source Code Control Resig, John, 253 System), 440 resistance (R), 44 schematic diagrams, 44 resolution scheme (URL), 240 CRT screen, 178 Schmidt, Eric, 225 digital-analog conversion, 161, 165 Schmitt, Otto H., 55 graphics, 180, 291 Schmitt triggers, 55, 56 reverse Polish notation, 125 Schwartz, Barry, 429 Revision Control System (RCS), 440 scientific notation, 15–16 RGB color model, 28

Web Analytics