Red de conocimiento informático - Problemas con los teléfonos móviles - Contenidos sobre el arte de la programación UNIX

Contenidos sobre el arte de la programación UNIX

Prefacio xxv

Parte I 1

Capítulo 1 Filosofía 3

1.1 ¿Cultura? Qué cultura 3

1.2 La vitalidad de Unix 4

1.3 Razones en contra de aprender la cultura Unix 5

1.4 Desventajas de Unix 6

1.5 Beneficios de Unix 7

1.5.1 Software de código abierto 7

1.5.2 Portabilidad multiplataforma y estándares abiertos 8

1.5.3 Internet y todo el mundo Web 8

1.5.4 Comunidad de código abierto 9

1.5.5 Flexibilidad de pies a cabeza 9

1.5.6 La diversión de Unix Hack 10

1.5.7 La experiencia de Unix también se puede aplicar en otros lugares11

1.6 Conceptos básicos de la filosofía Unix11

1.6.1 Principio del módulo: utilice interfaces simples para ensamblar componentes simples14

1.6.2 Principio de claridad: la claridad es mejor que la astucia14

1.6.3 Principio de combinación: considere el empalme y la combinación al diseñar15

1.6.4 Principio de separación: estrategia y mecanismo Separación, la interfaz está separada del motor16

1.6.5 Principio de simplicidad: el diseño debe ser simple y la complejidad debe ser lo más baja posible17

1.6.6 Principio de parsimonia: A menos que no haya otra manera, no escriba programas enormes18

1.6.7 Principio de transparencia: El diseño debe ser visible para revisión y depuración18

1.6.8 Principio de robustez: la robustez proviene de la transparencia y la simplicidad18

1.6.9 Principio de presentación: superponer conocimiento en datos para lograr una lógica simple y sólida19

1.6.10 Principio popular: evitar la novedad en diseño de interfaz20

1.6 .11 Principio de silencio: si un programa no tiene nada que decir, manténgase en silencio20

1.6.12 Principio de remedio: cuando ocurre una excepción, salga inmediatamente y proporcione suficiente error información21

1.6.13 Principio económico: es mejor gastar un punto en la máquina que un segundo en el programador22

1.6.14 Principio de generación: evitar hacks manuales e intentar escribir programas para generar programas22

1.6.15 Principio de optimización: debes tener un prototipo antes de tallar y debes aprender a caminar antes de correr23

1.6.16 Principio de diversidad: Nunca creas en la afirmación del llamado "método único"24

1.6.17 Principio de extensión: Diseñar pensando en el futuro, el futuro siempre es más rápido de lo esperado24

1.7 La filosofía Unix en pocas palabras25

1.8 Aplicando la filosofía Unix26

1.9 La actitud también importa 26

Capítulo 2 Historia - Shuangliu Ji 29

2.1 El origen y la historia de Unix, 1969-1995 29

2.1 .1 Génesis: 1969-1971 30

2.1.2 Éxodo: 1971-1980 32

2.1.3 TCP/IP y Unix Civil War: 1980-1990 35

2.1.4 Contraataque al Imperio: 1991-1995 41

2.2 El origen y la historia de los hackers : 1961-1995 43

2.2.1 Juegos en el bosque del campus: 1961 -1980 44

2.2.2 La gran convergencia de Internet y el movimiento del software libre: 1981- 1991 45

2.2.3 Linux y la respuesta de los pragmáticos: 1991-1998 48

2.3 El movimiento del código abierto: 1998 y después 49

2.4 Lecciones históricas de Unix 51

Capítulo 3 Comparación: Comparación de la filosofía Unix con otras filosofías 53

3.1 Elementos estilísticos del sistema operativo53

3.1.1 ¿Qué es la unidad? concepto del sistema operativo54

3.1.2 Capacidad multitarea54

3.1.3 Proceso colaborativo55

3.1.4 Límites internos57

3.1.5 Atributos de archivo y estructura de registros 57

3.1.6 Formato de archivo binario 58

3.1.7 Estilo de interfaz de usuario preferido 58

3.1.8 Público objetivo 59

p>

3.1.9 Umbral de desarrollo 60

3.2 Comparación de sistemas operativos 61

3.2.1 VMS 61

3.2.2 MacOS 64

p>

3.2.3 OS/2 65

3.2.4 Windows NT 68

3.2.5 BeOS 71

3.2.6 MVS 72

3.2.7 VM/CMS 74

3.2.8 Linux 76

3.3 Cosechas lo que siembras 78

Parte II 81

Capítulo 4 Modularidad: Mantenlo claro, mantenlo simple83

4.1 Encapsulación y tamaño óptimo del módulo85

4.2 Compacidad y ortogonalidad 87

4.2 .1 Compacidad 87

4.2.2 Ortogonalidad 89

4.2.3 Principio SPOT 91

4.2.4 Compacidad y centro único fuerte92

4.2.5 El valor de la separación94

4.3 El software tiene varias capas95

4.3.1 De arriba hacia abajo y de abajo hacia arriba95

4.3.2 Capa de pegamento97

4.3.3 Ejemplo de análisis: lenguaje C considerado como una fina capa de pegamento98

4.4 Biblioteca de programas 99

4.4.1 Ejemplo de análisis: complemento GIMP 100

4.5 Unix y lenguajes orientados a objetos 101

4.6 Codificación modular 103

Capítulo 5 Textualización: Los buenos protocolos producen buenas prácticas 105

5.1 La importancia de la textualización 107

5.1.1 Análisis de ejemplo: formato de archivo de contraseña Unix 109

5.1.2 Análisis de ejemplo: formato .newsrc 110

5.1.3 Análisis de ejemplo: formato de archivo gráfico PNG 111

5.2 Metaformato de archivo de datos 112

5.2.1 Estilo DSV 113

5.2.2 Formato RFC 822 114

5.2.3 Formato Cookie-Jar 115

5.2.4 Formato Record-Jar 116

5.2.5 XML 117

5.2.6 Formato INI de Windows 119

5.2.7 Convenciones de formato de archivos de texto Unix 120

5.2.8 Pros y contras de la compresión de archivos 122

5.3 Protocolo de aplicación diseño 123

5.3.1 Análisis de ejemplo: SMTP, un protocolo de socket simple 124

5.3.2 Análisis de ejemplo: POP3, protocolo de oficina postal 124

5.3. 3 Análisis de ejemplo: IMAP, Protocolo de acceso a mensajes de Internet 126

5.4 Metaformato del protocolo de aplicación 127

5.4.1 Metaprotocolo de aplicación de Internet clásico 127

5.4.2 HTTP como protocolo de aplicación general 128

5.4.3 BEEP: Protocolo de intercambio extensible en bloque 130

5.4.4 XML-RPC, SOAP y Jabber 131

Capítulo 6 Transparencia: algo de luz 133

6.1 Ejemplo de investigación 135

6.1.1 Ejemplo de análisis: audacia 135

6.1.2

Análisis de ejemplo: opción –v de fetchmail 136

6.1.3 Análisis de ejemplo: GCC 139

6.1.4 Análisis de ejemplo: kmail 140

6.1.5 Análisis de ejemplo : SNG 142

6.1.6 Análisis de ejemplo: base de datos Terminfo 144

6.1.7 Análisis de ejemplo: archivo de datos Freeciv 146

6.2 Para transparencia y accesibilidad Diseño para Explicidad148

6.2.1 El Zen de la Transparencia149

6.2.2 Codificación para lograr transparencia y explicidad150

6.2.3 Transparencia y evitar la sobreprotección151

6.2.4 Transparencia y representación editable 152

6.2.5 Transparencia, diagnóstico de fallas y recuperación de fallas 153

6.3 Diseño para mantenibilidad 154

Capítulo 7 Multiprogramación: Separación de procesos en funciones independientes 157

7.1 Separar el control de la complejidad del ajuste del rendimiento 159

7.2 Clasificación de los métodos Unix IPC 160

7.2.1 Transferir tareas a programas especializados 160

7.2.2 Pipes, redirecciones y filtros 161

p>

7.2.3 Wrappers 166

7.2.4 Wrappers de seguridad y cadenas Bernstein 167

7.2.5 Procesos esclavos 168

7.2 .6 Comunicación entre procesos de igual a igual169

7.3 Problemas y métodos a evitar176

7.3.1 Métodos obsoletos de Unix IPC176

7.3.2 Llamadas a procedimientos remotos 178

7.3.3 Subprocesos: intimidación o amenaza 180

7.4 Partición de procesos en el nivel de diseño 181

Capítulo 8 Mini lenguajes: la búsqueda Cantar notas musicales 183

8.1 Comprender la taxonomía del lenguaje 185

8.2 Aplicar el microlenguaje 187

8.2 .1 Estudio de caso: sng 187

8.2.2 Estudio de caso: Expresión regular 188

8.2.3 Estudio de caso: Glade 191

8.2.4 Estudio de caso : m4 193

8.2 .5 Análisis de caso: XSLT 194

8.2.6 Análisis de caso: Las herramientas de Documenter's Workbench 195

8.2.7 Análisis de caso: fetchmail's ejecutar sintaxis de control 199

8.2.8 Estudio de caso: awk 200

8.2.9 Estudio de caso: PostScript 202

8.2.10 Estudio de caso: bc y dc 203

8.2.11 Estudio de caso: Emacs Lisp 205

8.2.12 Estudio de caso: JavaScript 205

8.3 Diseño de mini lenguajes 206

8.3.1 Elegir la complejidad adecuada 207

8.3.2 Extender e incorporar lenguajes 209

8.3.3 Escribir sintaxis personalizada 210

8.3 .4 Macros: úselas con precaución 210

8.3.5 Lenguaje o protocolo de aplicación 212

Capítulo 9 Generación: aumento del nivel de especificación 215

9.1 Datos Programación dirigida 216

9.1.1 Análisis de ejemplo: ascii 217

9.1.2 Análisis de ejemplo: estadísticas estadísticas de spam 218

9.1.3 Análisis de ejemplo: cambios de metaclase en fetchmailconf 219

9.2 Generación de código especial 225

9.2.1 Análisis de ejemplo: Generar visualización ascii

El código mostrado 225

9.2.2 Análisis de ejemplo: Generar código HTML para la lista 227

Capítulo 10 Configuración: Dar el primer paso correcto 231

10.1 Qué debe ser configurable 231

10.2 ¿Dónde está la configuración? 233

10.3 Ejecución del archivo de control 234

10.3.1 Análisis de ejemplo: archivo .netrc 236

10.3.2 Portabilidad a otros sistemas operativos 238

10.4 Variables de entorno 238

10.4.1 Variables de entorno del sistema 238

10.4.2 Variables de entorno del usuario 240

10.4.3 Cuándo usar variables de entorno 240

10.4.4 Portabilidad a otros sistemas operativos 242

10.5 Opciones de línea de comando 242

10.5.1 Opciones de línea de comando de –a a –z 243

10.5.2 Portabilidad a otros sistemas operativos 248

10.6 Cómo elegir un método 248

10.6.1 Análisis de ejemplo: fetchmail 249

10.6.2 Análisis de ejemplo: servidor XFree86 251

10.7 Sobre romper las reglas 252

Capítulo 11 Interfaz: Patrón de diseño de interfaz de usuario en entorno Unix 253

11.1 Aplicación del principio de innovación mínima 254

11.2 Historia del diseño de interfaz Unix 256

11.3 Evaluación del diseño de interfaz 257

11.4 Compensaciones entre CLI e interfaces visuales 259

11.4.1 Análisis de ejemplo: dos formas de escribir programas de calculadora 262

11.5 Transparencia, expresividad y configurabilidad 264

11.6 Patrones de diseño de interfaz Unix 266

11.6.1 Patrón de filtro 266

11.6.2 Modo Cantrip 268

11.6.3 Modo fuente 268

11.6.4 Modo receptor 269

11.6.5 Modo compilador 269

11.6.6 Modo ed 270

11.6 .7 Modo Roguelike 270

11.6.8 Modo "Separación de motor e interfaz" 273

11.6.9 Modo servidor CLI 278

11.6.10 Basado en lenguaje modo de interfaz 279

11.7 Aplicación del patrón de diseño de interfaz Unix 280

11.7.1

11.8 Navegador web como interfaz universal 281

11.9 El silencio es oro 284

Capítulo 12 Optimización 287

12.1 No hagas nada, simplemente quédate ahí parado 287

12.2 Estima primero, luego optimiza 288

12.3 El daño de la no localidad 290

12.4 Rendimiento y retraso 291

12.4.1 Operación por lotes 292

12.4.2 Operación superpuesta 293

12.4.3 Resultados de la operación de almacenamiento en caché 293

Capítulo 13 Complejidad: tanto como sea posible Puede que sea simple, pero no lo simplifique demasiado295

13.1 Hablar sobre la complejidad296

13.1.1 Tres fuentes de complejidad296

13.1.2 Compensación entre complejidad de interfaz y complejidad de implementación 298

13.1.3 Complejidad necesaria, posible y accidental 299

13.1.4 Complejidad del mapeo 300

13.1.5 Cuando la simplicidad falla302

13.2 La historia de cinco editores302

13.2.1 edición 304

13

.2.2 vi 305

13.2.3 Sam 306

13.2.4 Emacs 307

13.2.5 Wily 308

13.3 Editor El tamaño apropiado de 314

13.4 Dimensionamiento moderado del software 316

Parte III 319

Capítulo 14 Idioma: C o no C 321

14.1 Unix La fertilidad del lenguaje 321

14.2 Por qué no C 323

14.3 Lenguajes interpretados y estrategias de mezcla 325

14.4 Evaluación del lenguaje 325

14.4.1 C 326

14.4.2 C++ 327

14.4.3 Shell 330

14.4.4 Perl 332

14.4.5 Tcl 334

14.4.6 Python 336

14.4.7 Java 339

14.4.8 Emacs Lisp 342

14.5 Tendencias futuras 344

14.6 Seleccionar el p>15.2 Elección del editor 350

15.2.1 Comprender vi 351

15.2.2 Comprender Emacs 351

15.2.3 La elección no religiosa: ambos Uso combinado 352

15.3 Generador de códigos especiales 352

15.3.1 yacc y lex 353

15.3 .2 Análisis de ejemplo: sintaxis fetchmailrc 356

15.3.3 Análisis de ejemplo: Glade 356

15.4 make: compilación automatizada 357

15.4.1 Teoría básica de make 357

15.4.2 Desarrollo sin marca en C/C++ 359

15.4.3 Objetivo de generación universal 359

15.4.4 Generar Makefile 362

15.5 Sistema de control de versiones 364

15.5.1 Por qué es necesario el control de versiones364

15.5.2 Control de versiones manual365

15.5.3 Control de versiones automatizado366

15.5.4 Herramientas de control de versiones de Unix 367

15.6 Depuración en tiempo de ejecución 369

15.7 Análisis de rendimiento 370

15.8 Uso de herramientas de integración de Emacs 370

15.8.1 Emacs y make 371

15.8.2 Emacs y depuración en tiempo de ejecución 371

15.8.3 Emacs y control de versiones 371

15.8.4 Emacs y creación de perfiles 372

15.8.5 Como IDE, pero más potente 373

Capítulo 16 Reutilización: sobre no reinventar la rueda 375

16.1 La historia de Pig Soldier 376

16.2 La transparencia es la clave para la reutilización 379

16.3 De la reutilización al código abierto 380

16.4 Lo mejor en la vida es la "apertura" 381

16.5 Dónde encontrarlo 384

16.6 Problemas con el uso de software de código abierto 385

16.7 Problemas de licencia 386

>

16.7.1 Cualificaciones de código abierto386

16.7.2 Licencias estándar de código abierto388

16.7.3 Cuándo necesita un abogado390

Parte IV 391

Capítulo 17 Portabilidad: Portabilidad del software y cumplimiento de estándares 393

17.1 La evolución del lenguaje C 394

17.1.1 Lenguaje C temprano 395

17.1.2 Estándar del lenguaje C 396

17.2 Estándar Unix 398

17.2.1 La batalla entre los estándares y Unix 398

17.2.2 El fantasma en la fiesta de celebración 401

17.2.3 Estándares Unix en el mundo del código abierto 402

17.3 Proceso de estandarización IETF y RFC 403

17.4 Especificación ADN, Código ARN 405

17.5 Programación de portabilidad 408

17.5.1 Portabilidad y selección del lenguaje de programación 409

17.5.2 Evitar dependencias del sistema 412

17.5. 3 Herramientas de migración 413

17.6 Internacionalización 413

17.7 Portabilidad, estándares abiertos y código abierto 414

Capítulo Capítulo 18 Documentación: Explicando el código al mundo en línea 417

18.1 Concepto de documento 418

18.2 Estilo Unix 420

18.2.1 Preferencia por documentos grandes 420

18.2.2 Estilo cultural 421

18.3 Varios formatos de documentos Unix 422

18.3.1 troff y Documenter's Workbench Tools 422

18.3.2 TEX 424

18.3.3 Texinfo 425

18.3.4 POD 425

18.3.5 HTML 426

18.3.6 DocBook 426

18.4 Caos actual y posibles soluciones 426

18.5 DocBook 427

18.5.1 Definición del tipo de documento 427

18.5.2 Otros DTD 428

18.5.3 DocBook cadena de herramientas 429

18.5.4 Herramienta de migración 431

18.5.5 Herramienta de edición 432

18.5 .6 Normas y prácticas relacionadas 433

18.5.7 SGML 433

18.5.8 Libros de referencia de XML-DocBook 433

18.6 Mejores prácticas para escribir documentos Unix 434

Capítulo 19 Código abierto: programación en la nueva comunidad Unix 437

19.1 Unix y código abierto 438

19.2 Mejores consejos para trabajar con desarrolladores de código abierto Mejores prácticas 440

19.2.1 Buenos parches prácticas 440

19.2.2 Buenas prácticas de denominación de archivos de archivos y proyectos 444

19.2.3 Buenas prácticas de desarrollo 447

19.2.4 Buenas prácticas de distribución y producción 450

19.2.5 Buenas prácticas de comunicación 454

19.3 La lógica de las licencias: cómo elegir 456

19.4 Por qué deberías utilizar una licencia estándar457

19.5 Varias licencias de código abierto457

19.5.1 Licencia MIT o X Consortium457

19.5.2 Licencia BSD clásica 457

19.5.3 Licencia artística 458

19.5.4 Público en General*

**Licencia 458

19.5.5 Mozilla Pública*** Licencia 459

Capítulo 20 El Futuro: Crisis y Oportunidad 461

20.1 Unix Tradición Necesidad y oportunidad 461

20.2 Plan 9: El camino hacia el futuro 464

20.3 Problemas en el diseño de Unix 466

20.3.1 Los archivos de Unix son solo una gran bolsa de palabras Sección 466

20.3.2 Unix tiene soporte GUI débil 467

20.3.3 La eliminación de archivos es irreversible 468

20.3.4 Unix asume que el sistema de archivos es estático 469

20.3.5 Control de trabajos mal diseñado 469

20.3.6 La API de Unix no utiliza excepciones 470

20.3.7 ioctl(2) y fcntl ( 2) Es una vergüenza471

20.3.8 El modelo de seguridad de Unix puede ser demasiado primitivo471

20.3.9 Hay demasiados tipos de nombres Unix472

20.3 .10 Teoría de archivos de que el sistema puede ser dañino 472

20.3.11 Hacia el espacio global de direcciones de Internet 472

20.4 Cuestiones ambientales de Unix 473

20.5 Cuestiones en la cultura Unix 475

p>

20.6 Razones para confiar 477

Apéndice A Lista de abreviaturas 479

Apéndice B Referencias 483

Apéndice Colaboradores de C 495

Apéndice D Rootless Roots: La biografía del corazón del maestro desconocido de Unix 499

Colofón 510

Índice 511