Qua

Reader

A list of all postings of all blogs on Qua where the author has configured the blog to publish on this page.

from c10

“La matière n'existe pas”, disent certains mystiques d'un ton catégorique, et sans plus d'explication ils clôturent en disant que “Ce n'est qu'une #illusion !”. Il y a une vérité profonde en cet énoncé, oui, mais les mots qui ont été choisis pour exprimer l'idée peuvent porter à confusion, surtout chez ceux qui l'entendent pour la première fois. Au premier abord, celui qui entend une telle chose pense : “Comment se fait-il que je puisse percevoir cette petite pierre rouler entre mes doigts, alors qu'elle est censée ne pas avoir d'#existence ?”

Au lieu de dire de façon si abrupte que la matière n'existe pas, il serait moins troublant et plus efficace pour l'entendement des néophytes, de leur expliquer simplement que :

“Ce qu'on perçoit par les sens n'existe sous cette configuration spécifique qu'en tant que perception — & qu'en dehors de nos sens cela existe encore, oui, mais possède une nature tellement différente qu'il n'y a aucun sens à le garder dans la même catégorie, ni à le nommer de la même manière. Il s'agit belle et bien de quelque chose d'autre, mais qui n'est pas pourtant séparé de ce que l'on perçoit, puisqu'en vérité il en est à l'origine même de nos perceptions. C'est en cela qu'il n'y a pas de #matière objectivement parlant dans l’immensité de l'espace-temps. Ce n'est qu'une petite et très éphémère expérience sensorielle des êtres pensants & sentants, qu'on peut réduire au rang d'illusion par la grandeur de ce qu'elle cache derrière si par inadvertance on lui offre toute l'attention.”

 
En savoir plus...

from c10

Quand on pense à la tromperie pure et dure ; MENSONGE c'est le premier mot qui vient à l'esprit, mais il y a plus d'une façon de tromper une personne, voire une population toute entière, et avec bien plus de subtilité et des ressources à l'appuie qu'on ne pourrait le croire. C'était déjà une “#science” assez élaborée avant l'arrivée des Technologies de l'Information et les dernières découvertes en Neurosciences, mais toutes ces nouvelles #connaissances, dans les mains inappropriées, n'ont fait que raffiner l'art et la manière de faire passer l'#illusion à la place de la vérité.

Je ne vais pas parler ici des motivations qui pourraient conduire à certaine personnes en ce monde à vouloir tromper toutes les autres, ni du fait qu'effectivement elles le font avec une remarquable détermination, & cela en se servant de tout moyen disponible sans aucune forme de retenue... quoique..., en y réfléchissant un peu, peut être bien qu'il le faudrait.

Peut être bien que si on se donnait la peine d'étudier ces motivations d'une part, et la logistique qui les rendent possible d'une autre, ces trompeurs experts n'auraient pas autant de succès. Plus d'une fois j'ai entendu dire : “Un #complot mondial ? Mais comment est-ce possible et pourquoi faire surtout !?” Si même dans nos mœurs on est venu à considérer admissible qu'on peut nier un fait parce qu'on n'arrive pas à imaginer le comment & le pourquoi de la chose, je pense que cela en dit long sur la #perspicacité de ceux à qui nous avons affaire : des véritables #maîtres illusionnistes.

 
En savoir plus...

from c10

Il y a peu de temps, lorsque j'entendais parler d'#éveil c'était presque exclusivement dans le contexte religieux / spirituel. Après l'épisode #QAnon et le Mouvement Patriote qui a suivie, on utilise ce mot-là pour designer plutôt l'idée de savoir qu'en ce bas monde la vérité demeure cachée, par un certain groupe qui contrôle les choses, et que ce qu'on nous montre n'est que mensonge et manipulation, et cela tout aussi bien en religion qu'en politique, en économie & en histoire etc.

En même temps, avec Cobra et le mouvement de résistance, l'idée d'éveil fusionne convenablement ces deux définitions, pour eux, elle décrit tant la #croissance spirituelle des initiés que la #compréhension de l'état d'assujettissement de la population Terrestre. Parler d'éveil donc est une image, une métaphore, pour parler d'intelligence, de lucidité, de discernement, etc., en opposition à ceux qui par manque de ces attributs sont encore bien endormis / endoctrinés, et ça a du sens, mais il importe de garder toujours à l'esprit, qu'il s'agit en priorité d'un mouvement qui concerne la manifestation de la divinité en Nous, au-delà de toute contingence particulière aussi importantes ou dangereuses puissent-t-elles paraître.

 
En savoir plus...

from Noticias Trucos y Curiosidades

Foto del Día 🌇

Parque El Parque Central denominado “Ignacio Agramonte” -como homenaje al heroico Mayor General de las luchas independentistas- además de atesorar pasajes históricos muy ligados a la fundación de la antigua villa principeña, resulta una invitación permanente para el descanso por la espontánea belleza que entrega

#FotoDelDia

 
Read more...

from Noticias Trucos y Curiosidades

Albóndigas Ingredientes – 1 libra de carne (se puede hacer con carne de cerdo, pollo, res y/o ternera molida)

  • 2 huevos grandes

  • 1 taza de 90 grs aprox de migas de pan (también puedes usar harina de maíz pre-cocida)

  • ½ cebolla

  • ½ caabeza de ajo

  • ¼ de cucharadita de comino en polvo

  • ½ taza de agua

  • Sal y pimienta al gusto

Preparación de la receta de albóndigas

Paso 1. Condimentar

Pon en un recipiente grande toda la carne molida y agrega los huevos, la miga de pan, cebolla, ajo, comino en polvo, sal y pimienta al gusto y finalmente un poco de agua para que la carne tome una textura más suave y amasa hasta mezclar todos los ingredientes.

Paso 2. Armar

Para armar las bolitas de carne, puedes usar tus manos o contar con la ayuda de una cuchara de helado. Procura que todas las albóndigas te queden de tamaño parejo, esto te asegurará que su cocción sea la misma y no te queden crudas algunas.

Paso 3. Hornear

Ubica tus bolitas de carne en un recipiente apto para horno. Te recomendamos forrar este envase con papel aluminio para evitar que las albóndigas se peguen. Llévala al horno a 180°C por 20 o 25 minutos. En caso que lo necesites (si no tienes horno), puedes freírlas en una sartén con un chorrito de aceite. Retíralas, ¡y listo! Puedes agregar tus albóndigas en sopas, bañarlas en salsa de tomate o ponerlas encima de unos deliciosos spaghettis.

#NTC

 
Read more...

from c10

Corrélation et causalité sont deux concepts différents. “Pollution humaine” et “Perturbation climatique” sont deux faits qu'on peut constater de façon séparée, mais dont la relation est plus problématique à établir objectivement.

Si la perturbation climatique n'était pas la conséquence de la pollution humaine, d'autres causes envisageables seraient : La géo-ingénierie, un choix de la conscience planétaire, l'influence d'un corps céleste ou un événement astrophysique, une intervention #extraterrestre hostile etc.

La liste d'explications plausibles de tout phénomène inconnu est toujours déterminée par le paradigme de #connaissances et le système de #croyances de chacun. Ainsi, le scepticisme et l'ignorance bornent déjà l'étendue de nos perceptions, mais lorsque ces limites sont installées à dessein, certaines hypothèses sont exclues de toute considération sérieuse, et d'autres paraissent déraisonnables en comparaison de celles qui sont en conformité avec le cadre de référence voulu.

Quand ceux qui ont la motivation et la capacité de modifier intentionnellement ce cadre de référence, endossent en même temps un rôle d' #autorité au sein d'une société, dit avec des mots simple : “Il peuvent vous faire croire ce qu'il veulent en fonction de leur propres intérêts”. Ils utilisent le dangereux mélange d'une fine propagande infusée au fil du temps dans les différents domaines de connaissances, plus le martèlement idéologique et médiatique actuel qui ne laisse personne indifférente.

 
En savoir plus...

from Noticias Trucos y Curiosidades

Eusebio

Estatua de Eusebio Leal En la noche del 15 de noviembre el presidente de la República Miguel Díaz-Canel debeló una estatua del historiador de la Habana Eusebio Leal. La confección de la estatua de bronce en tamaño natural estuvo a cargo de los escultores José Villa Soberón y Gabriel Cisneros Báez. El primero explicó a la prensa estatal que el objetivo de la obra es poderle devolver a La Habana Vieja la imagen de Eusebio andando en ella. El artista refirió que ha sido un trabajo muy complejo «porque es una persona muy querida y todo el mundo quisiera tener su propio Eusebio».

#FotoDelDia

 
Read more...

from Noticias Trucos y Curiosidades

Los Girasoles Los girasoles (en francés, Les Tournesols, en neerlandés, Zonnebloemen) es una serie de cuadros al óleo realizados por el pintor neerlandés Vincent van Gogh. De la serie hay tres cuadros similares con catorce girasoles en un jarrón, dos con doce girasoles, uno con tres y otro con cinco.

Van Gogh pintó los primeros cuatro cuadros en agosto de 1888, cuando vivía en Arlés, en el sur de Francia, y otros tres similares en enero del año siguiente. Las pinturas están todas ejecutadas en lienzos de cerca de 90 x 70 cm.

Usó un pigmento en sus girasoles, el amarillo de cromo o cromato de plomo, al cual deben su misterioso y enigmático color. La descomposición del cromato de plomo por efecto de la exposición a la luz convirtió el amarillo brillante original en un tono pardo verdoso.

#FotoDelDia

 
Read more...

from nevisak

۲۸- چاه

بیش از هر زمانی نیاز به پشتیبانی دارم. تقریبا در هر زمینه‌ای بی‌قرار و ناتوان ام. شاید به نظر برسد که زمام برخی کارها را به‌دست گرفته ام، اما همین اتفاق باعث شده است برخی اضطراب‌هایی که پیش‌تر فرصت بررسی‌شان را داشتم، به کنجی برانم. بی‌تا می‌گوید خواب‌های آشفته‌ و بسیارت از همین رو است. کار را برای یک‌ روز تعطیل کردم. البته خواب‌های پریشان چندشب متوالی رمقی برای بیداری نگذاشت. کمی خلوت کردم. حالت تهوع داشتم. امروز خود را واداشتم که کمی کار کنم. طاقت‌فرسا بود. نیازمند نوازش بودم.

دیروز میم پاره‌ی جالبی از کتابی فرستاد که فکرم را سخت مشغول کرد.

«آنی که دوستش می‌دارم ممکن است نتواند فراوانیِ خیالی‌ای را که در پی‌اش هستم به من ببخشد، اما دست‌کم می‌تواند واقعی‌ترین چیزی را که دارد، یعنی میل خود به همان فراوانی، را به من بدهد. ما میلِ خود را به یکدیگر می‌دهیم، که دقیقاً به این معناست که آن‌چه را نمی‌توانیم در دیگری برآورده کنیم به یکدیگر می‌دهیم. بنابراین گفتن این‌که «دوستت دارم» معادل آن است که بگوییم «این تو هستی که نمی‌توانی مرا ارضا کنی!» و من چه‌قدر باید ویژه و منحصربه‌فرد باشم که به تو یادآوری کنم این من نیستم که تو می‌خواهی...» (ایدئولوژی زیبایی‌شناسی، تری ایگلتون، بخش زیگموند فروید.)

البته ابتدا فهمش کمی دشوار بود اما امروز صبح سبب کشف بزرگی شد، شاید حتا کشفی کشنده. آن چیست که دیگری ندارد و میلی در من برمی‌انگیزد که ارضاشدنی نیست؟ کمی سبک سنگین کردم. نیاز نبود. پاسخ روشن بود: پشتیبانی.

البته تداعی‌های اصلی از همین‌جا شروع شد. متوجه شدم من بیش از هر زمانی در حال مراقبت کردن هستم. اینکه این کار را با چه کیفیتی انجام می‌دهم موضوعیتی ندارد. نکته این است که من خودم را در چنین جایگاهی می‌یابم. من نمی‌توانم از این وظیفه‌ای که گویی سالیان سال به من فروخورانده اند دست بکشم. بی‌تا می‌گوید این چیزها لباس نیستند که یک‌شبه آنها را از تن‌ت خارج کنی، تازه از آن بالاتر لخت و برهنه راست راست بروی زندگی کنی. راست می‌گوید. این عادت، یا حتا می‌توانم رسالت خطابش کنم، روان‌م را خوراک می‌دهد. تنها زمانی می‌توانم از خوردنش دست بکشم که چیز دیگری بپزم. چرا مراقبت می‌کنم؟ زیرا این تنها کاری است که از کودکی شناخته ام. اساسا نمی‌توانم خود را جور دیگری تصور کنم. هرکس دیگری هم که سالها تنها با مادری بیمار زندگی کند، می‌پندارد روال دنیا همین است. می‌آیی، بیمار تیمار می‌کنی، بیمار می‌شوی، تیمار می‌شوی، بیمار می‌کنی و می‌روی. همه‌چیز از پیش مشخص است. نمی‌دانم از بخت خوب است یا بد که در میانه‌ی راه بیمار از دست برود. و تو پیش از ان که وظیفه‌ات را به سرانجام برسانی، آزاد شوی. بی‌تا می‌گوید آزادی اضطراب دارد. راست می‌گوید. هرگاه بی‌هیچ مقدمه مرزهای نامرئی جهان کوچک، برداشته شود، انتخاب‌های بسیار ادم را هراسان و خشمگین می‌کند. مدام می‌پرسم: پس چه کنم؟

خب لابد نوبت من است که حمایت شوم. کسی را نمیابم. پس رسالت خود را بر دیگری تحمیل می‌کنم. کسانی را جایگزین مادرم می‌کنم. از سر این وضعیت تناقض‌آمیز می‌شکنم.

به مادرم می‌اندیشیدم. کسی که لحظه‌ای از نقش قربانی خارج نشد. و تنها خدا می‌داند اکنون تا چه حد احساس می‌کنم شبیه به او هستم.

هم‌هنگام عمیقا به پشتیبانی نیازمند ام، با تمام رگ و پی‌‌ام می‌خواهم کسی مرا تروخشک کند. کمی طول کشید تا با این نیازم کنار بیایم. برای زنی به سن و سال من کمی عجیب است.

در همین لحظه خود را درون چاهی می‌یابم که حتا نمی‌دانم چگونه به درونش رفتم. البته اندکی بعد دریافتم که من درون آن بودم، فقط هنوز مرز آن را نیافته بودم.

می‌خواهم از چاه خارج شوم.

 
بیشتر بخوانید...

from c10

Il y a la théorie, philosophie de la science, sur la manière idéalisée selon laquelle le travail scientifique se développe ou devrait se développer, et on pourrait en discuter longuement sur cela aussi. Mais dans la pratique ça se passe autrement parce que d'un point de vu extérieur, ce travail est sous l'influence de plusieurs CHAMPS DE FORCE qui ont des objectifs bien différents que celui d'approcher la vérité pour nous libérer de l'ignorance et améliorer nos vies.

Par exemple le travail de Jacques Benveniste en France -sur la mémoire de l'eau- n'as pas pu arriver à sa fin à cause des intérêts économiques des groupes pharmaceutiques. etc etc. Vous connaissez certainement beaucoup d'autres cas comme celui-ci, où des scientifiques reconnus et honorables ont été violemment écartés du jour au lendemain parce qu'ils dérangeaient.

Du point de vu Intérieur cette fois-ci, dans l'esprit de chacun, ces personnes qui travaillent dans les laboratoires, même avec leur meilleur volonté, ont des idée reçues on va dire, qu'ils ont du mal à METTRE EN CAUSE objectivement tellement elles sont intégrées dans leurs manière de penser.

Le docteur Sheldrake décrit 10 de ces idées reçues que dans le milieu scientifique, et ailleurs tout aussi bien, on tient pour des vérités a priori établies et incontestables, et que dans l'ensemble conforment une version fonctionnel de l'univers à échelle réduite, ce qui finit pour restreindre dramatiquement les domaines de recherche à une petite et assez faussée parcelle du réel.

Ces 10 idées reçues sont : Tout dans la nature est mécanique, la matière n'a pas de conscience, les lois de la nature sont fixes, la quantité de matière et d'énergie dans l'Univers est toujours la même, la nature est dénuée de but, l’hérédité biologique est matérielle, les souvenirs sont stockés dans le cerveau, le mental est à l’intérieur de la tête, les phénomènes psychiques comme la télépathie sont impossibles, la médecine mécanique est la seul qui marche vraiment.

Chacune des ces idées peut être convenablement réfutée, si on les analysait rigoureusement à la lumière de la méthode scientifique, mais au lieu de cela on les accepte allégrement comme étant de vérités définitives, sans aucune preuve concluante à l'appuie. Cette réflexion n'est pas pour discréditer la démarche scientifique, mais au contraire, pour lui offrir les possibilités d’expansion dont elle a tant besoin.

 
En savoir plus...

from Movimiento Juvenil Martiano Maso

Acciones de solidaridad en más de 80 ciudades respaldan voluntad del pueblo cubano de construir su propio futuro

MJM

Cuba abre sus fronteras este 15 de noviembre después de casi dos años de pandemia y un recrudecimiento del bloqueo de Estados Unidos. Más de dos millones de estudiantes regresan a las escuelas y decenas de vuelos semanales llegarán al país. Más de 100 actos y declaraciones de solidaridad en más de 80 países y ciudades respaldan la voluntad del pueblo cubano de construir su propio futuro, subraya la cancillería cubana. Algunas de las acciones de solidaridad: Caravana de pastores por la paz: El 15 de noviembre llegarán a Cuba con ayuda humanitaria para celebrar la vuelta a la normalidad en la isla y la apertura de fronteras, portando su mensaje de paz, así como demandarán el fin del bloqueo y el cese del acoso Estados Unidos al país. Siria: Este sábado se reunieron hijos de sirios amigos de Cuba para celebrar, mediante actividades culturales, los logros alcanzados por el pueblo cubano en el combate a la covid-19, el regreso de los estudiantes a las aulas y demostrar su amor por la Isla. En la actividad, que se enmarca en la Jornada de Solidaridad con Cuba y Contra el Bloqueo, inaugurada el pasado día 9 de noviembre, los infantes recitaron versos traducidos al árabe de algunos poemas del Héroe Nacional de Cuba, José Martí, como muestra de sus conocimientos sobre cultura cubana. Luego de varias actividades culturales y recreativas, el encuentro culminó con la  denuncia de todos los presentes al bloqueo impuesto por EEUU y la campaña de descrédito imperialista contra la isla. Turquía: Un grupo de cubanos radicados en Turquía integrantes de la asociación “Raíces” y la Embajada de Cuba en el país euroasiático efectuaron este viernes un  encuentro virtual sobre la reapertura turística y las oportunidades de negocios en Cuba. La encargada de los temas económicos y comerciales de la misión diplomática, la embajadora Ileana Núñez Mordoche, realizó una presentación en la que ahondó sobre la apertura de Cuba al turismo internacional y la reanudación de todas las actividades económicas y sociales del país el próximo 15 de noviembre, así como las transformaciones en el entramado económico de Cuba desarrolladas en el último año. La diplomática comentó sobre las enormes afectaciones del recrudecido bloqueo estadounidense para la economía, el pueblo y las familias cubanas, incluidos los residentes en el exterior, pero significó el aporte que podrían hacer estos ciudadanos en los esfuerzos que se realizan en Cuba para el desarrollo del país y las  oportunidades que se abrían para que ellos contribuyan en este proceso. El encuentro generó un animado intercambio que demostró el interés de los participantes en vincularse al desarrollo económico y social de Cuba y en el apoyo a la reanudación del turismo internacional y otras actividades económicas de la Isla. Guinea Bissau: En la mañana de este sábado en la plaza “Che Guevara” de Bissau, los grupos de solidaridad con Cuba protagonizaron un acto de condena al criminal e injusto bloqueo que impone el gobierno de Estados Unidos a Cuba y celebraron el regreso de la Isla a la nueva normalidad después de varios meses de pandemia. Estuvieron presentes, el embajador de Cuba, el embajador de Venezuela en Guinea Bissau, miembros de grupos de solidaridad con Cuba, organizaciones estudiantiles y de jóvenes guineenses, una representación de la Brigada Médica Cubana, de la Asociación de Ex estudiantes y amigos de Cuba y de la comunidad de cubanos residentes en el país. Imani Umoa, coordinador de los grupos de solidaridad con Cuba en Guinea Bissau, reconoció y agradeció a Cuba su solidaridad con el mundo y con este país africano, y a la brigada médica cubana que contribuye a salvar vidas y a mejorar el sistema de salud de este pueblo; por otra parte reclamó al gobierno de Biden el levantamiento de las sanciones impuestas al pueblo cubano injusta y arbitrariamente y destacó que si existiera una lista de países solidarios y humanitarios, Cuba debería estar en el primer lugar. El estudiante Braima Camará en representación de la Asociación de Estudiantes Universitarios de Guinea Bissau, en su intervención manifestó que se oponen a la injusta política de agresión a Cuba, representada por leyes y decretos aprobados por el Congreso de los Estados Unidos para dañar la economía cubana y hacer sufrir a su pueblo; esto constituye una afrenta y viola todas las normas del derecho internacional. Alemania: La celebración de la Asamblea semestral de la organización alemana KarEn e. V. tuvo lugar en la noche de este viernes, ocasión en la que los amigos solidarios alemanes ratificaron su apoyo al pueblo y la revolución cubana. A la actividad asistió el embajador cubano Ramón Ripoll, quien sostuvo un amplio conversatorio con los asistentes sobre la actualidad cubana.

 
Read more...

from veer66

Download and unarchive

Download Python-3.10.0.tar.xz; tar xJvf Python-3.10.0.tar.xz; cd Python-3.10.0

Configure

I got this error message by running ./configure

./configure: line 10530: PKG_PROG_PKG_CONFIG: command not found

So I ran this:

docker run --rm --pull=always -v $(pwd):/src quay.io/tiran/cpython_autoconf:latest

Still configure cannot find g++, so I added CXX=c++ in front of configure.

So this was how I used configure:

CXX=c++ ./configure --enable-optimizations --prefix=/opt 2> elog > log

make

This step has no problem.

make -j8
sudo make install

Running python

pip3.10 and python3.10 cannot run since it can't find readline.

So I ran this.

ln -s /opt/lib64/python3.10/lib-dynload /opt/lib/python3.10/lib-dynload

Then python3.10 works now.

P.S. Thank every one who provide answers on issue trackers and forums. I should have kept URLs to those. Sorry that I didn't.

 
Read more...

from veer66

Actix has a supervisor that helps to restart an actor under its supervision. However, sometimes it doesn't. 😹

AFAIK something has to send a Die (message) to an actor when something went wrong. The actor has to implement a Die message handler. In the handler, it calls ctx.stop (context stop). When “Actor::stopping(...) == Running::Stop”, its poll function will return Poll::Ready. Then its supervisor can perform restarting.

In my case, all of these didn't work because of two reasons.

  1. Actor didn't stop properly. It stopped without calling the stopped function. So I suppose it has no chance to handle the Die message.

  2. Actor kept using the CPU when it went wrong. So the poll function was blocked. Then the actor cannot handle the Die message.

I fixed the first case by calling tokio::time::sleep, and the second case by breaking for the loop.

PS I'm not sure about what I wrote. Please tell me if I missed or misunderstood some things or even everything.

 
Read more...

from veer66

New Rustacians usually ask why Rust has many types of strings. I don't know the original intention. Anyways, it has some advantages as follow:

  1. It minimizes the language core. Rust core has only str. String, OsString, CString are in the standard library, which is not a part of the language core.

  2. Programmer can control performance. For example, &str refers to a byte slice so it should be fast, while String is a wrapper of Vec. String should have more performance penalty from heap memory allocation.

  3. OsString and CString improve interoperability with other programming languages and operating systems. Rust can manipulate C-style strings directly without converting them to native Rust strings. OsString is also similar.

String conversation has a performance penalty. Also sometimes string conversation is not obvious. Some systems don't even use Unicode or other standards.

The alternative of having too many types is treating everything as a byte slice. However, type checking doesn't work well with too few types.

 
Read more...

from veer66

I enjoy using key-value data in dynamic languages. For example, in Python, I can create key-value data for storing the metadata of a document as shown below. I don't discuss why I don't use struct, class, named tuple in this post.

doc_metadata = {"title": "The Rust Programming Language",  
                             "type": "book", 
                             "number-of-pages": 584, 
                             "authors": ["Steve Klabnik", 
                                                "Carol Nichols", 
                                                "contributions"]}

I can code read/write a value easily, for example:

# Write
doc_metadata["type"] = "text book"

# Read
print(doc_metadata["type"])

In Perl and Ruby, we can use Hash, which is almost the same thing as Dict in Python. In JavaScript, we can use an object.

Common Lisp is different. We can use a hash table, but it is not as convenient as Dict in Python.

(let ((doc-metadata (make-hash-table)))
  (setf (gethash :title doc-metadata) "The Rust Programming Language")
  (setf (gethash :type doc-metadata) :BOOK)
  (setf (gethash :number-of-pages doc-metadata) 584)
  (setf (gethash :authors doc-metadata) '("Steve Klabnik"
                                                                      "Carol Nichols" 
                                                                      "contributions")))

Besides construction, printing a hash table is not so convenient. Maybe one can create a function or macro to make creating/printing a hash table convenient. I still felt that I abused Common Lisp.

My code is usually too buggy when I keep mutating the same variable. So I prefer using an immutable data structure to prevent me from messing things up. Moreover, my key-value data usually do not have more than five keys. So I don't strictly need to use an efficient data structure, namely, hash table or binary search tree. So I use alist (assosiation list). I can construct a list like below:

(setq doc-metadata '((:title . "The Rust Programming Language")
                     (:type . :BOOK)
                     (:number-of-pages . 542) 
                     (:authors . '("Steve Klabnik"
                                   "Carol Nichols" 
                                   "contributions"))))

IMO, it looks concise and convenient. We can retrieve key-value pair with a specific key using the assoc function, which I suppose it does linear search. Linear search can be slow. However, my alist doesn't have a lot of keys.

Instead of replacing a value with another value, I can add a new key-value pair with an existing key, for example:

(setq another-doc-metadata (acons :type :TEXT-BOOK doc-metadata))

By retrieving the value of :type using assoc, we get the new value because assoc function retrieves the first key found in alist, for example:

(cdr (assoc :type another-doc-metadata))
;; OUTPUT => :TEXT-BOOK

However, with function calls instead of number/string literal, alist doesn't look concise anymore, for example:

(list (cons :title (get-title x y z))
       (cons :type (get-type x))
       (cons :number-of-pages (get-number-of-pages a b c)) 
       (cons :authors (get-authors c d)))

plist looks much more concise, for example:

(setq doc-metadata (list :title (get-title x y z)
       :type (get-type x)
       :number-of-pages (get-number-of-pages a b c) 
       :authors (get-authors c d)))

I can retrieve a value corresponding to a key easily by getf function. For example:

(getf doc-metadata :type)

A new value can be replaced the old value by setf, example:

(setf (getf doc-mentadata :type) :TEXT-BOOK)

setf is different from acons since acons doesn't mutate the existing list, setf does. Therefore plist is not exactly what I'm looking for.

Maybe the best way is using an Alexandria function for converting plist ot alist as Michał “phoe” Herda suggested.

 
Read more...