Mostrando entradas con la etiqueta book. Mostrar todas las entradas
Mostrando entradas con la etiqueta book. Mostrar todas las entradas

2023/12/03

Para leer Emerging Topics in Hardware Security - General

Esta nota es el resultado de la lectura atenta del libro Emerging Topics in Hardware Security, registro mis opiniones, inquietudes y hallazgos, apuntando a que sea útil para mí como memoria y para tí como disparador.

Desde hace meses sino años, tengo una pila de libros para leer, pero todos tienen alguna parte que es mejor practicar, incompatible con vacaciones, transporte público. Al ser este libro muy teórico, me basta con la lectura atenta y tomar notas... estas son las notas.

 

Empecemos con que no es un libro, es un compendio de papers.

En general, los artículos son, tal como insinúa el título, temas en la cresta de la ola y además de un nivel técnico muy alto y de temas muy específicos. Eso hace que el lector, Charly, por momentos quede un poco afuera. No es que no haya ocurrido con otros libros, pero en los otros no tuve la siguiente sensación:

Parecen escritos por personas que no dominan el idioma inglés, no lo digo porque los nombres de todos los autores parezcan ser de la India, sino porque efectivamente hay expresiones, formas de armar la frase y algunas cosas que me parecen que son errores gramaticales. También hay errores de sintaxis.

No señalaría esta superficialidad, pero como no conozco algunos de los temas, me produce una cierta desconfianza. No mucha, conozco gente del grupo de embebidos que me consta que saben un montón pero no escribir.

No sé cual es la tasa de entradas bibliográficas normal para un paper, pero con respecto a algunos libros conocidos, es mayor y en algunos capítulos muy mayor:




páginasnotasn / p
1Blockchain-Enabled Electronics Supply Chain Assurance25481.9
2Digital Twin with a Perspective from Manufacturing Industry351454.1
3Trillion Sensors Security341514.4
4Security of AI Hardware Systems16372.3
5Machine Learning in Hardware Security36852.4
6Security Assessment of High-Level Synthesis24401.7
7CAD for Side-Channel Leakage Assessment28451.6
8Post-Quantum Hardware Security301013.4
9Post-Quantum Cryptographic Hardware and Embedded Systems28531.9
10Neuromorphic Security24612.5
11Homomorphic Encryption28642.3
12Software Security with Hardware in Mind26612.3
13Firmware Protection22211.0
14Security of Emerging Memory Chips34762.2
15Security of Analog, Mixed-Signal, and RF Devices28632.3
16Analog IP Protection and Evaluation52671.3
17Application of Optical Techniques to Hardware Assurance22602.7
18Computer Vision for Hardware Security34752.2
19Asynchronous Circuits and Their Applications in Hardware Security28682.4
20Microfluidic Device Security24682.8

Total57813892.4

 


páginasnotasn / p
Artificial Intelligence - Russel/Norvig10009000.9
Object Oriented Software Construction - Meyer12003600.3
Security Engineering - Anderson89013801.6
Computer Architecture - Hennessy/Patterson6306401.0
Hardware Security - Tehranipoor/Bhunia4507481.7

 

El último es especialmente interesante pues Tehranipoor es el editor del libro en cuestión.

Las cuentas no están del todo bien hechas pues no estoy considerando al cantidad de palabras por página, OOSC en particular tiene la letra grande. No estoy seguro que estos números sean indicadores de calidad o de su falta.

¿Por qué me molesta esto de la bibliografía? Se debe a que estoy más acostumbrado a leer textos donde la mayor parte es explicación, no "tal xxx hizo tal prueba" sin dar ningún otro detalle.

Dejando de lado este aspecto superficial, pasemos a lo importante.


El contexto general de la seguridad de hardware, que es el hilo conductor de algunos artículos de modo explícito y afecta de modo implícto a todos es la protección durante la cadena de suministro del hardware (esto sale del capítulo 1):

  • IP Owner y la fábrica
  • Ensamblado del PCB
  • Integración del sistema
  • Usuario final
  • Disposición final o reciclado

Existiendo estos ataques más comunes:

  • Sobreproducción, para venta no declarada
  • Ingeniería reversa, para falsificación, copia o ahorrarse parte del diseño
  • Reutilización en lugar de disposición final
  • Falsificación, es hacer algo copiado y ponerle una marca ajena
  • Reclasificación, tipo remarcar un componente común como industrial


Mi opinión


Dejando de lado lo superficial y la calidad despareja, es un libro muy rellenador de detalles de los temas que ya conocía de antes y más aún disparador de los que ni estaba al tanto de la existencia, como:


  • Neuromorphic y sus memristores
  • Microfluidic devices
  • El nicho de los circuitos asincrónicos.


Si prestaste atención al título, "General", da a entender que puede haber otra nota. No te prometo, me llevó cuatro meses leerlo, como estoy un poco traumatizado y con más ganas de pasar al siguiente libro que de revisar este para dejar registradas mis notas.



2020/01/28

Para estudiar The Zynq MPSoC Book

La lectura de este libro ha sido resultado de una serie de afortunados errores.

Tengo algo de interés en PYNQ y en ZYNQ debido a tener un a Parallella, ví el título, no sé qué zynq, pynq, machine learning y no estaba tan caro, lo comencé a leer y mencionó que estaría bueno leer antes The Zynq Book lo estudié y volví a esto. De haber leido primero TZB sin tener ya en papel este no lo hubiese leido pues TZB no me pareció nada maravilloso y segundas partes suelen ser malas.

Ese sí hubiese sido un error, The Zynq MPSoC Book parece haber sido escrito tras asimilar las críticas al primero y aunque tiene bastante de humo marketinero, la proporción es menor y los contenidos no sé muy bien si son muy superiores y más claros o la lectura de TZB me dejó en mejores condiciones.

La parte marketing incluso es útil, aprendés cosas como que un cuadróptero tiene dos hélices girando para un lado y dos para el otro y eso le permite rotar, ja!

La diferencia entre un Zynq y un Zynq MPSoC es enorme:

  • Dos cores de 32 -> cuatro cores de 64 para aplicaciones genéricas (APU).
  • FPGA Artix-7 -> FPGA Kintex-7
    • 35k-106k -> 157k-555k Flip Flops
    • 17k-53k ->  78k-277k LUTs
    • 28k-85k -> 125k-444k Logic Cells
    • 60-140 -> 265-755 36Kb Block RAM
    • 2M-5Mb -> 9M-26Mb Block RAM
    • 80-220 -> 400-2000 DSPs
  • Dos cores RealTime (RPU).
  • Graphics Processing Unit (GPU).
  • Video Codec Unit (VCU).
  • Configuration Security Unit (CSU) (*)
  • Platform Management Unit (PMU)(*) 
Desde RPU para abajo, es terreno de MPSoC.


CSU y PMU tienen cada una tres MicroBlazes en silicio ejecutándose en modo votación.

CSU se encarga del boot seguro de los procesadores.



Las descripciones y explicaciones relacionadas a como se comunican y arrancan todos estos componentes es extremadamente educativa, me ha ayudado a avanzar en la comprensión de cómo funcionan en general las computadoras.

Se explica SDx, aparentemente en los últimos cinco años la cosa ha evolucionado. La idea es que vos escribís tu programa en C/C++ y SDx analiza el código y busca oportunidades de pasar secciones a la FPGA y su interfaz.

Lo que me había quedado de TZB es que este proceso estaba a cargo tuyo.


Con respecto a la GPU y VCU se menciona que existen, pero luego nada, no recuerdo ninguna mención, lo cual es una pena pues son un tercio de la diferencia con Zynq pelado. Igual podríamos decir que como es algo común, no especial como CSU y PMU, a los cuales se los explica muy bien.


Con respecto a ML, no respeta la proporción del título, es muy superficial, se citan ejemplos externos.

A diferencia de TZB no hay una práctica propuesta, pero uno estos días veré de instanciar los ejemplos de PYNQ-Z1 a PYNQ-Z2.




Se baja gratis de https://www.zynq-mpsoc-book.com/


Conclusiones


Vale la pena leerlo y si tenés tiempo antes leer y practicar TZB.

2019/12/29

Para estudiar The Zynq Book


Es un libro muy atado al producto... claro, se llama The Zynq Book, alguien en los comentarios de algún sitio que reclama por ello, pero ¿qué esperabas? Dice "con la colaboración de Xilinx" en la tapa.

Se puede obtener gratis, probablemente en http://www.zynqbook.com/download-book.php.



Tiene el problema de un fuerte sabor a marketing, muchas veces dice lo flexible, óptimo y adaptable que es Zynq. Luego hay un montón de información que es de algún modo genérica. Si tuviera la mitad de lo genérico y el cuádruple de lo de Zynq como para mantener la cantidad de páginas, hubiese sido excelente. La realidad es que a mi no me quedaron claras cosas como si el componente ethernet se puede acceder directamente desde la PL.

Lo bueno es que no explica nada de VHDL/Verilog/C/Assembly, supone que ya sabés.

Lo malo es que hay varios lugares donde se dan explicaciones de conceptos donde hubiese estado bueno un ejemplito en VHDL/Verilog.

Intel tiene algo parecido, con nombres como Arria, Stratix y Cyclone.

En apariencia, este tipo de SoC facilita esta evolución: de programar una CPU y diseñar hardware por separado a diseñar un sistema y con la ayuda de la herramienta implementar algunas partes en hardware y otras en software.

La idea es que lo simple y paralelizable va al hardware, lo complicado se queda en la CPU.


La verdad es que sea usando este tipo de SoC o los componentes separados no hace diferencia desde el punto de vista de la programación, incluso estoy seguro que el libro dice que lo que hagas en C/C++/SystemC sólo se va a ejecutar en un softcore, no es que generás código y la herramienta elige si ponerlo en los cores ARM. O al menos así era en 2014, tengo el "libro siguiente", motivo por el cual leí este pese a la mala crítica, quizás haya cambiado.

Me quedo con la idea de que el objetivo es hacer aceleradores para ser utilizados desde las CPU ARM, pero simplificando el diseño en la PL.


Zynq te permite desarrollar cosas que yo al menos no podría pues no tengo el conocimiento para interconectar una fpga con una cpu. Algo parecido a pasar de un micro + memoria(ram/rom) + uart a un microcontrolador que ya tiene todo adentro y sólo hay que configurar o ni eso.

De todos modos yo no puedo hacer nada con un zynq, necesito una Parallella, PYNQ o equivalente donde todo el hardware ya esté resuelto.

Los "ok" son relativos, para alguien que tiene experiencia de cada tema quizás estén de sobra, pero para mi siempre es un buen repaso.

  • 1 Intro ok
  • 2 Detalles hardware ok
  • 3 Detalles software, aplica a cualquier otro FPGA, ok
  • 4 Criterios de elección, ok
  • 5 Humo, completamente en vano
  • 6 Zedboard, ok para quien la tiene
  • 7 En vano
  • 8 Ejercicio
  • 9 Arquitectura de harware, modo superficial y adaptados a la arquitectura, ok
  • 10 Más detalles hardware, lo anterior aplicado a zynq, ok
  • 11 Más detalles software, aplica a cualquier otro FPGA, ok
  • 12 Ejercicio
  • 13 - 15 HLS, aplicable a cualquier FPGA, ok
  • 16 Ejercicio
  • 17 Ejercicio
  • 18 IP ok
  • 19 AXI ok
  • 20 Ejercicio
  • 21 Sistemas operativos ok
  • 22 - 24 Linux ok


Se complementa con unos tutoriales que están en http://www.zynqbook.com/download-tuts.html

Lo que me he propuesto es adaptar a mis placas PYNQ-Z2 ahora y algún día Parallella la experiencia desarrollada en los ejemplos prácticos.

Ejercicios

 

Te recomiendo que saltées esta parte y vayas directo a las conclusiones, a menos que estés siguiendo los tutoriales y te trabes, quizás algo te ayude.

Tambien si tenés una Zed o Zybo. En caso de otras placas, quizás quizás te sirva mirar por arriba lo que hice.


Estos son los pasos tomados de The_Zynq_Book_Tutorials_Aug_15.pdf, utilizando primero Vivado 2015.4, luego pasé a 2018.2 debido a que no vé la placa PYNQ.

Los dos primeros ejercicios consisten en pegarle unos IPs al Zynq y ejecutar un programa baremetal para prender los leds, luego leer los push buttons generando interrupciones y finalmente incorporar un timer, todo esto con AXI.

El tercero es de optimización, es un tanto avanzado para los básicos como yo, lo entiendo pero me dificultaría aplicarlo, pese a haber transitado el uso de PIPELINE en Forzando Brutalmente MD5.

El cuarto es crear tus propios IP, para usarlos en el quinto.


Todo versionado en github pero mal versionado pues está sin el .gitingore y además moví los ejercicios uno a tres así que no deben andar ni a palos, es más por backup que por proceso de desarrollo.



Exercise 1, First Designs on Zynq


Exercise 1A Creating a First IP Integrator Design


Registro los pasos tipo machete para futura referencia, te conviene seguir el tutorial, va todo igual salvo que hay que elegir la placa PYNQ.



Agregar la PYNQ a Vivado, con ayuda de https://pynq.readthedocs.io/en/v2.5/overlay_design_methodology/board_settings.html

dice que

<Xilinx installation directory>\Vivado\<version>\data\boards

y ahi hay dos carpetas, va en boards_files

Acá está la descripción para Vivado y acá el XDC


  • Create New Project
  • Elegir el board

Exercise 1B Creating a Zynq System in Vivado (2018.2)


  • Create Block Design (IP INTEGRATOR -> ...)
  • Add IP -> ZYNQ7 Processing System (Diagram -> ...)
  • Run Block Automation -> Apply Board Preset
  • Add IP -> GPIO (Diagram -> Add IP -> AXI GPIO)
  • Run Connection Automation -> S_AXI
  • Run Connection Automation - leds_4bits
  • File -> Save Block Design
  • Toos -> Validate Design
  • Windows -> sources
  • botón derecho -> Create HDL Wrapper
  • Generate Bitstream
  • Open Implemented Design
  • File -> Export -> Export Hardware -> include bitstream
  • File -> Launch SDK

Exercise 1C Creating a Software Application in the SDK

en particular en Import se usa lo de

The_Zynq_Book_Tutorial_Sources_Aug_15.zip,

la diferencia entre zybo y zed es el ancho de los leds, como PYNQ es 4 igual que Zybo, usé Zybo


kdiff3  zybo/first_zynq_design/LED_test_tut_1C.c zedboard/first_zynq_design/LED_test_tut_1C.c siempre ayuda para estos casos.

  • File -> New -> Application Project
  • Next -> Empty Application
  • Project Explorer -> el proyecto -> src -> Import -> ....
  • Xilinx Tools -> Program FPGA
  • Project Explorer -> el proyecto -> Run As -> Launch on Hardware

¡Anda!, ¡¡¡no lo puedo creer!!!




Exercise 2, Next Steps in Zynq SoC Design

2A-C Expanding the Basic IP Integrator Design

Podría continuar sobre el ejercicio 1 o empezar de cero, mejor para fijar los conocimientos. Las instrucciones ya están adaptadas a Vivado 2018.2


Es todo igual pero hay que agregar un AXI-GPIO extra y conectarle los botones.

Luego

  • Doble click axi_gpio_0 -> IP Configuration -> enable interrupt
  • Doble click processing_system_7 -> Page Navigator -> Interrupts -> 
    • Check Fabric Interrupts
    • Check Pl-PS Interrupt Ports -> IRQ_F2P[15:0]
  • Block Design -> Diagram -> connect
    • axi_gpio_0/ip2intc_irpt
    • processing_system_7/IRQ_F2P[0:0]
  • File -> Save Block Design
  • Tools -> Validate Block Design
y volvemos al caminito normal

  • Project Manager -> Sources -> right click on design -> Create HDL wrapper
  • Generate bitstream
  • (paciencia)
  • Open Implemented Design
  • File -> Export Hardware -> include bitstream
  • File -> Launch SDK
  • File -> New -> Application Project -> empty application
  • import...
  • Program FPGA
  • Y vuelve a andar, increible


Exercise2D Adding a Further Interrupt Source


Nada nuevo, sólo agregar un axi timer con la novedad de que hay que conectarlo a mano usando el IP concat, al pasar al SDK eliminar el proyecto e importar lo nuevo, interrupt_counter_tut_2D.c. Como me olvidé de versionar y taggear hasta el paso anterior, en mi código quedó con esta última versión.


Exercise 3 Designing With Vivado HLS


Exercise 3A Creating Projects in Vivado HLS

Van los pasos macheteados

  • Copiar sources/hls a tu workspace
  • Create New Project, con Project Location -> lo anterior
  • Add Files (Design Files) -> matrix_mult.cpp, matrix_mult.h
    • Top Function -> matrix_mult
  • Add Files (Testbench Files) -> matrix_mult_test.cpp
  • Solution Configuration
    • Clock Period -> 5
    • Boards -> elegí board
  • Close HLS
  • Open HLS Command Prompt
  • cd hasta tut3A
  • Otra vez kdiff3 al rescate, pues dice que ejecutes run_hls_zed.tcl o run_hls_zybo.tcl. La diferencia es part. De algún modo te enteras que es xc7z020clg400-1, con lo cual creás un run_hls_pynq.tcl 
  • vivado_hls -f run_hls_pynq.tcl
  • vivado_hls -p matrix_multlplier

Exercise 3B Design Optimisation in Vivado HLS

Lo que se hace es probar distintas soluciones de optimización hasta que alguna sea factible por timing.

  • Run C Simulation
  • C Synthesis
  • C/RTL Co-simulation -> VHDL
  • Project -> New Solution
    • Acá hay un problema con Part, no ve los boards, tuve que ponerle vía Part el correcto, xc7z020clg400-1
  • Select matrix_mult.cpp
  • Directives -> punto de inserción -> Insert Directive -> PIPELINE / ARRAY RESHAPE
  • C Synthesis 
    • Va a ir fallando según "punto de inserción" y la directiva que se use
  • Project -> Compare Reports -> Seleccionar los últimos y comparar...

Exercise 3C Interface Synthesis

  • cd tut3C
  • copiar run_hls_pynq.tcl de tut3A
  • vivado_hls -f run_hls_pynq.tcl
  • vivado_hls -p matrix_mult_prj
  • mirar el summary de la interface

Exercise 4 IP Creation

Exercise 4A Creating IP in HDL

  • Create New Project
    • no olvides poner VHDL como lenguaje que yo siempre me olvidé, esta vez sí hace diferencia
  • Tools -> Create and Package New IP
    • Create a new AXI4 peripheral 
    • Create Peripheral -> Edit IP
    •  se abrirá otra instancia
  •  Open led_controller_v1_0_S00_AXI.vhd
    • Agregar los ports de Zybo por el ancho de 4 bits
    • File -> Save
  • Open led_controller_v1_0.vhd
    • algo parecido

  • Package IP - led_controller
    • Customization Parameters
      • Merge changes from Customization Parameters Wizard
    • Ports and Interfaces -> check está ok
    • Review and Package -> edit packaging settings
    • Automatic behaviour, enable all (but Include source project archive in 2018.2)
    • Re-Package IP

  • Volver al proyecto original 
  • IP Integrator -> Create Block Design
    • Diagram -> Add IP -> led_controller
    • LEDs_out -> Right click -> Make external (ahi pone out_0)

Tip salvador para 2018.2, le pone al pin el nombre LEDs_out_0, hay que cambiarlo por LEDs_out
    • Add IP -> zynq7 processing system
    • Run Block Automation
    • Run Connection Automation
    • Tools -> Validate
  • Project Manager -> Sources -> Design Sources -> led_test_system -> Create HLD Wrapper 


  • Add Sources -> Constraints -> Create -> XDC -> pynq-z2_v1.0.xdc
  • Y acá hay que buscar en el XDC que bajamos en algún momento los nombres de los pines correspondientes a los leds:


set_property PACKAGE_PIN R14   [get_ports { LEDs_out[0] }]
set_property IOSTANDARD LVCMOS33  [get_ports { LEDs_out[0] }]

set_property PACKAGE_PIN P14   [get_ports { LEDs_out[1] }]
set_property IOSTANDARD LVCMOS33 [get_ports { LEDs_out[1] }]

set_property PACKAGE_PIN N16   [get_ports { LEDs_out[2] }]
set_property IOSTANDARD LVCMOS33 [get_ports { LEDs_out[2] }]

set_property PACKAGE_PIN M14   [get_ports { LEDs_out[3] }]
set_property IOSTANDARD LVCMOS33 [get_ports { LEDs_out[3] }]


  • Generate Bitstream
  • Open Implemented Design
  • File -> Export -> Export Hardware -> Include Bitstream
  • File -> Launch SDK

  • Luego en el SDK
  • File -> New -> Application Project
  • Empty Application
  • Xilinx Tool -> Repositories -> New
  • ip_repo -> led_controller (lo creado antes)
  • system.mss -> modify this BSP's Settings -> drivers -> led_controller
  • Project Explorer -> src -> import -> file system -> zybo -> led_controller
Aqui falla por undefined referencie to Xil_Out32, se corrige agregando a led_controller_test_tut_4A.c

#include "xil_io.h"

Sigamos
  • Xilinx -> Program FPGA
  • SDK Teminal -> Connect 
    • /dev/ttyUSB1 (o lo que haya)
  • Project Explorer -> Right Click -> Rus As -> Launch on Hardware(GDB)

Listo...

Exercise 4B Creating IP in MathWorks HDL Coder

Este implica usar MatLab, todo bien pero me aleja demasiado de mis propósitos, quizás algún día si me sobra tiempo lo haga. O eso es lo que había pensado hasta que ví que en la última parte hace falta lo generado por esta, así que a bajar el Matlab DEMO por 30 días.



  • Copiá la carpeta hdl_coder_lms a donde te guste
  • Dice que configures HDL Toolpath, no sé por qué con ISE, le puse directo Vivado:


hdlsetuptoolpath('ToolName', 'Xilinx Vivado', 'ToolPath', '/Xilinx/Vivado/2018.2/bin/vivado')

No dijo que estuviera mal, pero tampoco todo lo que el tutorial

  • Cambía al directorio de trabajo donde copiaste hdl_coder_lms
  • abrí lms.slx 
  • El mirar adentro es opcional
  • No pude hallar "HDL Code -> HDL workflow Advisor", pero si que yendo a Get Add-ons, buscar "hdl code", get trial  y un sales representative te contactará. 
Nuevamente se abre un nuevo mundo enorme y muy interesante de exploración que me alejan de mi propósito que es lograr un cierto dominio sobre Zynq y Vivado, lo siento Matlab, hasta aquí llegué.




Exercise 4C Creating IP in Vivado HLS

 

Este ejercicio al igual que el 3 me queda un poco grande
  • Abrir Vivado HLS
  • Create New Project
    • Add Files -> nco.cpp
    • Top Function ->nco
    • Add Test Files -> nco_tb.cpp
    • Part Selection -> usar part ya que no hay board
  • Ver *.cpp
  • Cambiar outfile a algo que te sirva
  • Run simulation
    • mirá el output
  • Seleccioná nco.cpp
  • Directive
    • Insertar todas las mencionadas
  • Run C Synthesis
  • Export RTL
Y en teoría esto sirve para el próximo

Exercise 5 Adventures with IP Integrator

Estos ejercicios integran lo anterior y dependen de generar un IP con Matlab que tal como relato arriba no pude lograr por motivos no técnicos.

Conclusiones


Pese a el problemita con Matlab, los ejercicios salvan al libro, si no sabés nada, tendrías que leer el libro, si sabés algo salteando los capítulos no ok y si sabés bastante quizás los ejercicios no te alcancen.

Los ejercicios en realidad son guías, si usas las versiones correctas y las placas consideradas sólo practicás recetas, quizás te cierre algún aprendizaje de la lectura del libro.



2019/11/30

Para estudiar Hardware Security


Estas son mis notas y actividades relacionadas con la atenta lectura y práctica parcial del libro Hardware Security: A Hands-on Learning Approach, que he leido en septiembre de 2019 y practico en la medida de lo posible ante cada oportunidad.




En el sitio hay un área docente y en mi calidad de autoinstruido, una condición simultánea de alumno/docente, quise acceder al material docente, recibiendo la respuesta:

Please use the student zone to access materials


Tambien pregunté cómo obtener un Ha-Ha board, que el libro dice hay proveedores pero en Internet no hay, sin respuesta.

Ya empezamos mal, a Stroustrup una vez le pregunté o señalé algo del libro Programming: Principles and Programming using C++ y si no él, al menos hubo alguien que se hizo pasar por él de modo extremadamente convincente y me contestó. Si esta gente con el libro recién editado no... bueno, como dijo Jonathan Swift:


Si una persona me mantiene a distancia, 
me consuela que también ella se mantiene.


Como este libro lo compré vía Amazon pude comentarlo, tomaré mi camino.


Crítica



Con respecto al libro, me ha resultado increiblemente bueno aunque objetivamente quizás no lo sea tanto, paso a explicar:


Cada tema generalmente se explica como si no hubieras leido los otros capítulos, lo cuál para mí está muy bueno, esa repetición genera un refuerzo y repaso. Hay una suerte de auto contención que de no estar, el libro tendría fácil la mitad de las páginas.


Tambien hay un cierta "desconexión", por ejemplo en la página XXX se menciona "como vimos en tal sección" remitiéndose a YYY, cuando era el tema de la sección anterior. Lamentablemente los valores de XXX e YYY los confié a mi memoria en el momento de leerlo, pero no funcionó.

Así que si sabés poco como yo, el libro es fantástico, si ya sabés algo, tiene mucho relleno, pero relleno útil, como que no tenés que estar buscando mucho las dependencias de un tema.



En síntesis, aunque es un muy buen libro, no cumple con "a hands-on learning approach" ya que no es posible hacer los ejercicios por falta de los enunciados.

A not so hands-on learning approach


A falta del Ha-Ha board y que no puedo acceder a los enunciados o guías de ejercicios, había considerado instructivo realizar una suerte de, más que ingeniería reversa, un acto de adivinación y me había propuesto hacer varios de los ejercicios en la medida que pudiera descubrir de qué se trata sin el enunciado.

Pero como tengo muchas otras cosas igual o más interesantes y urgentes que hacer, tuve que cambiar de enfoque y lo que he decidido es embeber en mis actividades el libro.

O sea, cada vez que haga algo que pueda relacionar con los ejercicios, lo registraré a continuación.