Hace tiempo comentabas que tenías como rutina hacer ejercicios de lógica. ¿De cuál páginas, libros o app los sacas?
Tengo una amplia colección de libros de Martin Gardner, Raymond Smullyan y Yakov Perelman, que incluyen problemas de razonamiento lógico y matemático. Recientemente, encontré algunos libros de Lewis Carroll y de Adrián Paenza, con algunos acertijos interesantes. Me refiero a libros de papel.Ahora bien, entre los múltiples tipos de acertijos, hay algunos que son «automatizables» con Prolog. Esos no me interesan, porque ya sé cómo hacer que la computadora los resuelva por mi. Prefiero los que requieren inteligencia y experiencia, de esa que es imposible aproximar con computadora.Supongo que debe haber versiones electrónicas de los mismos, además de variaciones y «problemas robados» que «se parecen igualito» pero no citan al autor original, porque las redes sociales han llevado la cobardía intelectual a nuevos niveles de masificación.Los acertijos de Mensa también son divertidos, aunque muchos de ellos se pueden resolver por «fuerza bruta» usando una computadora y, meh.
No programé para ninguna de las dos, así que los API en C y C++, respectivamete, son desconocidos para mi, y no tengo el más mínimo interés en aprenderlos.Como Gtk tiene bindings muy fáciles de usar desde Perl y Haskell, gracias a `glade`, fue que decidí explorar en algún momento para hacer algunas cosas.La apariencia de Gtk me parece mejor que la de Qt, pero eso es algo totalmente subjetivo.
Matemático acá, con interés en shaders. Ud hizo un RT decía algo como: 'Lee un solo libro de compiladores y otro de ____ (creo que decía traductores) y te aseguro que nunca tendrás que leer manuales de programación.' ¿Recuerda el tuit? ¿Podría recomendar un libro de ambos temas? Gracias.
No recuerdo el tuit. Por el fragmento, supongo que recomendé un libro sobre compiladores (seguramente el «Compilers» de Ahot et. al. a.k.a. «El Dragón») y un libro sobre diseño de lenguajes de programación (seguramente le «Programming Language Pragmatics» de Scott). Sin embargo, lo que esta preparación te trae es que no necesites leer manuales sobre *lenguajes* de programación, porque «sabes qué esperar» de cualquier lenguaje, de modo que comenzar a usar un lenguaje nuevo es mucho más fácil (si es que no lo descartas de entrada sólo con ver ejemplos típicos).
Qué piensa sobre cómo se imparte la cadena de Redes en la USB?
No tengo ninguna opinión en particular porque no estoy involucrado. Esa cadena no existía cuando yo estudié, sólo existía la materia obligatoria. Nunca me fijé en el plan de estudios particular, aunque noté que se sigue usando el mismo libro que siempre me pareció dogmático en lugar de didáctico.La última vez que supe alguna cosa fue cuando las clases de Lenguajes de Programación 3 eran justo después de las clases de alguna materia de la cadena de redes, y en la pizarra quedaban «cosas» que me resultaba inevitable leer mientras borraba. Además, algunos estudiantes comunes a ambas materias, o a otras materias que me correspondían, me hacían preguntas sobre las cosas que les enseñaban y me pareció «fascinante» (como dice Spock).Por supuesto que eso no es suficiente para construir una opinión, pues podría ser simplemente el efecto de la confusión generalizada por los tópicos discutidos.
al conectar la pc al modem de cantv tengo internet, pero al conectar el módem al router, no tengo internet por wifi, entro al panel de control de tplink, en status wan, dice: ip addr 0.0.0.0, subnet mask:0.0.0.0, default gateway:0.0.0.0 . ¿cuáles serian las posibles causas de este problema?
Si ese comportamiento ocurre después de haber reiniciado el AP, puede ser daño de hardware o firmware corrupto. Si tienes acceso a otra ubicación en la cual probar el AP con otro cable y otro modem ADSL, sería una buena prueba de control.SI usaste el mismo cable, puede ser que el puerto WAN del AP esté dañado.Intenta reiniciar el AP a los «factory defaults» y luego completa todas las actualizaciones de firmware que estén pendientes.
Do you use netrw, nerdtree, or just no vim file viewer?
NERDTree
Hay alguna manera de reducir el riesgo de 'hackeado' por banca electrónica?
No uses cualquier computadora para conectarte. No uses Windows para conectarte (no interpretes esto como «usa Mac para conectarte» -- sólo uso Linux o FreeBSD porque cualquier otra cosa es un riesgo). No uses un teléfono/tableta prestada para conectarte (personalmente nunca uso el teléfono para interactuar con bancos). Verifica el certificado SSL antes de hacer lo que sea y no seas uno de esos «dale ok para quitar ese mensaje que no entiendo sobre seguridad porque qué puede pasar». Usa un password manager para almacenar las claves y cambiarlas a cada rato. No uses cualquier red inalámbrica para conectarte. No uses las aplicaciones en equipos en los cuales hay aplicaciones de mensajería instantánea activas, mucho menos mientras estás chateando. No pongas todos los huevos en la misma canasta.No faltará quien piense que soy paranoico. La gente quiere pensar que «domina» la computación porque puede usar una computadora todos los días para comunicarse con el mundo. La cantidad de cosas que pasan, o dejan de pasar, por detrás de los botoncitos, emojis y orejas de burro, son aterradoras. Ocurren a veces por malicia, pero usualmente por ignorancia; y al final el que pierde es el que cree que sabe lo que está pasando. Y en cuanto a los sistemas bancarios propiamente dichos, conozco las bestias bancarias por dentro, y en Venezuela cada vez están peor.En otros países las cosas son algo distintas, y tienes muchas maneras de defenderte. De hecho los bancos te asisten con mucha celeridad, básicamente porque hay competencia y saben que te puedes llevar tu dinero a otra parte. El riesgo más grande en Venezuela es que eres tan valioso como el siguiente cliente, porque no haces diferencia.
Para comprender Programación Funcional por completo, necesitas practicarla tanto en lenguajes dinámicos y en estáticos, así como en lenguajes de evaluación ambiciosa (eager or applicative evaluation) y de evaluación perezosa (lazy or normal evaluation).Para los primeros, tienes que aprender la forma más reciente y evolucionada de LISP, que es Racket. En ese caso, el libro que te conviene es el famoso «Structure and Interpretation of Computer Programs».Para los segundos, tienes que aprender Haskell. En ese caso, el libro gratuito más práctico es «Learn You a Haskell for Great Good». Si puedes comprar un libro, La *segunda* edición de «Programming in Haskell» de Graham Hutton, o «Thinking Functionally» de Richard Bird, son muchísimo más valiosos porque te hacen comprender cómo no basta tener funciones de orden superior y como valores de primera clase, si el lenguaje no te permite razonar de manera lógica sobre tu código, y el compilador no lo aprovecha para generar mejor código ejecutable.Para un punto intermedio, puedes aprender OCaML, que es un lenguaje compilado con evaluación aplicativa. No puedo recomendar ningún libro gratuito para este lenguaje -- hace muchos años que no me interesa ni académica, ni profesionalmente.Los conceptos que vas a aprender, te van a permitir mejorar tus habilidades como programador, y son aplicacbles a las partes de estilo funcional que muchos lenguajes imperativos están ofreciendo ahora como una alternativa.
What are some cool description or programming languages you've used or know about, that compile to things other than programs, or which syntax is clever to describe stuff as-it-is? For example, grammarkdown seems cool for describing grammars, dot is used to render graphics, argdown for argumentation
POVRay for static and dynamic ray tracing. Euterpea for expressing music as a Haskell type, and then rendering MIDI. LaTeX and its libraries to create documents, presentations, diagrams and whatnot. Ecasound for flow-based and scriptable sound capture, transformation, and playback.
Si colocas toda la lógica de la aplicación en la BD, que usas para publicar los servicios necesarios para hacer el CRUD hacia esta?
Si toda la lógica está en la base de datos, necesariamente las únicas cosas que puedes hacer sobre la base de datos son conectarte, y hacer SELECT, INSERT, UPDATE o DELETE, manejando las excepciones que generará la base de datos.Puedes escribir un programa increíblemente simple en el lenguaje favorito del mes que sólo tenga que hacer eso. Cuando cambias de mes, cambias el lenguaje favorito. Pero la base de datos sigue están all, con todas sus reglas, importándole muy poco cual es el lenguaje de moda del mes, porque es independiente y el centro de atención de la lógica del negocio.Si estás usando PostgreSQL, adicionalmente tienes la posibilidad de generar eventos asíncronos, i.e. pedir que se ejecute una consulta y que la base de datos te avise cuando esté listo. El lenguaje de moda del mes seguramente es capaz de hacer eso.Si no estás usando PostgreSQL, probablemente estás escribiendo demasiadas cosas en el lenguaje del mes, y eso dificulta mucho garantizar la integridad de los datos cuando la aplicación comience a hacer agua.Si le echas un vistazo a PostgreSQL verás que incluso el CRUD se puede generar automáticamente gracias a PostgREST. Es decir, ni siquiera hace falta un programador para escribir la pasarela GET por SELECT, POST por INSERT, etc. porque PostgREST analiza el esquema y genera el API. Entonces, sólo lo que necesitas es el reemplazable front-end que cada vez tiene que hacer menos cosas de manipulación de datos, sino simple presentación.Esta es la dura vida de los que escriben programas que generan programas. Mi gente de Lenguajes :-D
Is syntax highlighting useful or a must-have for you?
I don't depend on it, but try to have it available, since it allows me to save brain CPU power on parsing whatever language or meta-language is being manipulated inside the editor.Bear in mind that «syntax highlighting» is a little to ambitious. None of the current editors that do it actually content-free parse their contents; they perform a regular-expression best guess that's usually enough except when it isn't -- and it happens to me every now and then.
How can I define a syntax for highlighting in vim? Have you done so for specific purposes? For example, specific logfiles or so on?
Read:help syntaxThere are syntax files for all the filetypes I use.I don't look at logfiles with vim. I cannot find a single logical reason to do it.Experience has made me very particular about the logging configuration for each kind of host I deploy, therefore I have custom syslog configurations to split things just the way I like it on each scenario, with matching logrotate housekeeping. Therefore egrep'ping pipe less over a specific files is my 99% of the time goto tool since I kind of know my way around regular expressions, and can Perl my way with irregular expressions.When a project requires a single syslog file to hold everything because of other people's preferences, egrep'ping pipe less is still my usual tool.If I want to have a Matrix-looking screen with logging flood, I use something like colorized-logs. And if I'm «looking for something to happen that I know it's going to happen» it makes sense to setup logwatch and let the computer do the grunt searching.
En la máquina virtual Chip-8, el stack solo se usa para guardar los stack pointers. ¿Por qué no es necesario guardar los valores de los registros de uso general?
No es asunto de «necesario» sino de «conveniente». Hay muchos factores que lo aclaran, pero no son evidentes.El Chip-8 sólo tiene 4k de memoria. Eso te obliga a economizar, porque no puedes intercambiar espacio por tiempo. Una de las razones por las cuales se acostumbra guardar registros y variables locales en la pila es para ahorrar tiempo consumiendo espacio. Tendrías que tener una razón muy buena para querer hacer eso -- digamos que tu razón muy buena es que se te ocurrió una rutina recursiva cuya profundidad no puedes anticipar, y por eso quieres guardar registros.El espacio de memoria se recorre en direcciones de 16 bits. Los registros son de 8-bits, de modo que guardar registros en la pila implicaría desperdiciar 8 bits en cada almacenaje, o tener que escribir un fragmento de ensamblador para empaquetar dos registros por posición, y luego desempaquetarlos. Es decir, necesitas escribir instrucciones adicionales antes de llamar, dentro de la llamada, y al regresar, para hacer manipulaciones que no son de tu programa, sino para que tu programa aproveche la pila. Te estás gastando los 4k y todavía no has escrito tu programa.Si continúas leyendo el manual notarás que no hay manera de acceder directamente al registro que controla la pila. Eso quiere decir que no puedes manipular la pila por tu cuenta para hacer o recuperar espacio, y tampoco puedes simular un apuntador a registros de activación. Y además de ser manejada implícitamente, la pila tiene un límite de espacio, que si te pones a guardar registros sólo te alcanza para dos o tres llamadas. Cada procesador tiene su idiosincracia, y la de este es no guardar cosas en la pila.El manejo de la pila en el Chip-8 existe como una conveniencia para que puedas saltar a una rutina y regresar sin tener que manipular el PC manualmente. El estilo de programación requiere que diseñes subrutinas que reciban argumentos implícitamente en registros particulares, y produzcan resultados como efectos de borde o bien en otros registros.Coordinar el flujo de control es delicado, y además debe hacerse con muy poca memoria disponible. Era un procesador para hacer juegos simples, no para propósito general.
When was the most inappropriate time you bursted out in laughter?
At a business meeting where a manager (supposedly of technical background) submitted a preposterous theory to shift blame from a third manager onto my team. I couldn't believe how idiotic his idea was, immediately seconded by the actual problem's culprit, supported by our common boss shortly thereafter. Buffoons.So I went «all in». I said I wouldn't do it unless the acting VP knew about it. They requested we all meet with the acting VP. They presented their idea and expect outcome, and the VP asked my opinion afterwards. I presented a detailed timeline of what would happen if their plan was to be put in motion, and the catastrophic results it would have. They answered with the idiotic «we respect your opinion, but we don't share it», except for the VP that shunned them and asked me for my final thoughts. I said, «I'll set this up only if YOU (the VP) request it, and then I request that THEY take it all the way and be made fully responsible of the consequences». The VP smiled and agreed. It went as badly as I predicted, and they had the worst day of their lives, while me and my team sat peacefully looking at them. One of the managers resigned by the end of the week (when it became obvious it was his fault) and the other was fired a few months later.I resigned after going on a two month vacation, where my team kept operating everything in the smoothest fashion, backed by the VP. I wasn't useful anymore.On hindsight, I would laugh again, adding a Dr. House kind of remark along the way. I regret nothing.
Te gusta la interfaz de macOS o la de Windows 10? Por qué? (No hablo de cuestiones éticas o de principios, sino gráficos y usabilidad)
No puedo escoger ninguna de las dos. Usar el ratón me hace perder tiempo; por eso prefiero las Thinkpad porque tengo destreza con el índice para mover el TrackPoint (suficiente para jugar Quake o FlightGear). Los problemas que tengo que resolver se expresan mucho mejor por escrito.En mi trabajo habitual, la interfaz gráfica sirve para abrir terminales, VIM, dos navegadores, el cliente de correo, el cliente XMPP, y el cliente IRC. Uso el explorador de archivos algo así como una vez al mes, quizás menos. Puedo configurar y usar una impresora enteramente desde la línea de comandos. Me tienen sin cuidado los íconos, y los wizards, y el bling-bling.Y de las interfaces gráficas para Linux, prefiero usar XFCE porque es la que menos se parece a Windows o MacOSX.
Eso sería un proyecto terrible para Traductores e Interpretadores.La amplia mayoría de los estudiantes que llegan a esa materia no han escuchado hablar de Constraint-Based Programming. Si alguno vió Lenguajes I antes, quizás haya escuchado el término, pero de seguro jamás ha visto un ejemplo de cómo funciona el paradigma.En Traductores es necesario que el estudiante desarrolle habilidades para escribir reconocedores asistidos para lenguajes regulares y lenguajes libres de contexto, y complete un análisis de contexto básico. Para poder analizar contexto, tienes que tener experiencia en el estilo expresivo cuyo contexto quieres analizar. Para los estudiantes de Traductores eso implica el estilo imperativo de programación, porque el estilo orientado a objetos es muy complejo de implantar (incluso en los seis meses que dura la cadena de lenguajes).Un proyecto que parece muy entretenido de programar, puede ser totalmente inconveniente desde el punto de vista didáctico, y profundamente contraproducente en la formación del profesional.Es por eso que en Traductores siempre verás que se intenta implantar un lenguaje imperativo que tiene efectos (genera imágenes, genera gráficos) o que sirve para un dominio específico (vectores, conjuntos, matrices).