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 manunkind

data as capta

commodified through code, a codemodified me lies (too many, too often) into my own devices: adrift in this digitally inflicted writing

brainpress CTRL+ALT+DEL if reboot = false: try(again) (again) (again) no else: burn(out)

 
Lire la suite...

from تنها

خاطره‌ای از یک روز زیبای زمستانی کنار ساحل شهر بوشهر. من و روزبه در کنار هم از آن لذت بردیم و قطعه‌ای از آن را در این ویدیو ثبت کردیم.

#بوشهر #ساحل #دریا #هیرون #جنوب #غروب #خاطره #bushehr #iran #sea #sunset #nature #memory

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

from 非普遍理性

#G

情人节小段子。

达达利亚也会好奇:约会前等待他的钟离在做什么?

达达利亚约会迟到了。

达达利亚是有意迟到的。他从深渊和现实的罅隙窥视提瓦特;这是七神也难以感知的地方,而他窥视的对象正是曾经的七神之一。

钟离在德波大饭店门口等他。他们挑了外乡的情人节于异邦相聚,因为年轻的执行官虽不介意公开,也颇乐于应对可能随之而来的各种麻烦,却更享受这种偷情一般的刺激。他没有特地向钟离说明这一点,但他的神明男友大约拥有洞悉人心的能力,人前向来落落大方,即使怀疑他们的关系会因为他的态度打消所有不够光风霁月的想法。

是以此时他很好奇,自己久久不至时对方会有怎样的反应。他能看到前任岩君坐立不安的样子吗?那场面不好想象,并且确实没有出现:钟离怡然自得地立在枫丹二月不够热烈的太阳底下,仿佛发出较之更为明亮的光,来往行人无不侧目。有位遛娃的母亲没拉住自己的孩子,塞了刚剥好的泡泡橘给他。钟离笑纳,从兜里变魔术般摸出条不知材质的金色小鱼,哄得小孩眉开眼笑。去皮水果不好安置,母女俩走后,他分几口用完,仪态高贵仿佛手中是某种绝世珍馐,衬得身后餐厅都奢华了几分。

纵使达达利亚见识过足够多类似景象,这会儿也不禁同旁人一道沉醉在客卿的光彩之中。待他回过神来,已有三个美露莘蹦蹦跳跳地跑来询问璃月人是否需要帮助,他解释后又想替他寻人。他手中甚至多了一杯奶茶,不过看起来一口未动——德波的侍者说担心南边来的外国人受冻,请他暖暖手,他便捧在手中暖着。

这饮料执行官熟悉得很,钟离曾对他娓娓道来茶叶如何起源璃月,传至须弥蒙德后当地加糖加奶的做法又在本国得到改良,再度流行开来。于他而言,枫丹的做法恐怕太甜了。

附近的咖啡厅为钟离送来巧克力时,他终于忍不住趁四下人少钻了出来,从身后搂住自己太受欢迎的恋人。

“叫先生久等了。”达达利亚将那巧克力换成自己带来的。

钟离不必回头,直接抬手,将奶茶吸管送到他嘴边。“公子来尝尝?这儿的奶茶恐怕更符合你的口味。”他自然道,没有为对方的突然出现表露出一丝惊讶。

达达利亚低头吸一大口,在他手上嗅到芸香科浓郁的香气,然后被甜得咪起眼睛。

 

END

 
阅读更多

from Amassando ideas

Introducción

Creo que una de las formas más importantes de mejorar el mundo es aumentando el conocimiento de las verdades que gobiernan nuestra existencia. Entendiendo cómo funciona nuestro mundo (y nuestro universo) tendremos las herramientas para solucionar los problemas que lo aquejan y encontrar oportunidades para hacer de este un lugar mejor. También creo que saber la verdad, es decir, coincidir nuestras creencias con la realidad, es en sí un bien a alcanzar. Por todo eso es que en este artículo busco trazar un camino sobre el cual poder acercarnos lo más posible a la verdad.

Primero modelemos

Como soy computín, he pensado en concebir cada ser como un objeto. No me refiero a deshumanizar a la gente, sino a usar los principios de la Programación Orientada a Objetos. Cada objeto tiene un conjunto de atributos y valores asociados a esos atributos. Por ejemplo, agarremos una persona adulta ordinaria de nuestro tiempo y país. Esta persona:

  • Nombre: Juan Gutiérrez
  • Edad: 38
  • País: Chile
  • Previsión de salud: Fonasa
  • etc
  • etc
  • etc

En este caso Nombre sería un atributo, y Juan Gutiérrez sería el valor asociado a dicho atributo.

También podemos usar un modelo inspirado en el realismo aristotélico, en el que cada ser es una substancia con esencia y accidentes. Cada atributo sería ya sea parte de la esencia o de los accidentes, pero no en ambos.

Personalmente pienso que debemos tener una consideración por todos los seres conscientes, es decir, aquellos que pueden pensar sobre si mismos, reflexionar sobre su propia existencia. No tienen que ser humanos necesariamente. El ideal es que todos ellos encuentran las respuestas a todas las preguntas universales. Veamos a qué me refiero con ésto.

Con preguntas universales, me refiero a las preguntas que todo el mundo puede hacerse. Las preguntas estereotípicas como ¿Quién soy?, ¿De dónde vengo?, ¿Para dónde voy? son ejemplos clásicos de preguntas universales, pero también pueden haber preguntas menos conocidas, tal como “¿Cómo garantizo mi supervivencia el mayor tiempo posible?” Esta pregunta tan cotidiana también es universal pues todos los seres vivos buscan sobrevivir.

¿Debemos saberlo todo?

Bajo este modelo, yo me he preguntado si es que tener respuestas a todas las preguntas universales implica conocer todo lo que existe. Usemos el modelo que acabo de exponer para responder a esta interrogante.

Entendamos el universo como lo que contiene todo lo existente. Entonces cada ser existente, existe dentro del universo. Por tanto, conocer el valor del atributo “Descripción completa de todo lo existente en el universo al que pertenezco” implica saber todo lo existente. Quizá no contenga lo no existente, pero si podemos imaginar lo no existente entonces lo no existente existe en nuestra imaginación.

Si consideramos lo anterior, y como cada ser existente pertenece a este mismo universo, entonces ¿Cuál es la descripción completa de todo lo existente en el universo al que pertenezco? es una pregunta universal y responderla significa tener una respuesta para todo lo existente.

Pero saberlo todo es una tarea titánica! ¿Será posible que algún día lo sepamos todo?

En la vida hay que ser pragmátic@s, rayemos la cancha

Encontrar las respuestas a todas las preguntas universales parece una tarea imposible, pues tomaría demasiado tiempo, y hay preguntas que podrían ser imposibles de responder. Entonces, llegar lo más posible a la verdad no consiste en saberlo todo. Propongo una forma de medir el progreso en esta materia según qué tanto nos distanciamos de la verdad.

¿Cuánto cuesta llegar a la verdad?

Daré un ejemplo de lo anterior. ¿Sabes cuánto es 2+2? Asumo que sí. ¿Pero podrías memorizar el valor de a+b para cualquier par de números enteros a y b? Obvio que no porque existen infinitos números enteros. Existen infinitas proposiciones verdaderas, así que en vez de intentar de memorizar todas las sumas, que es imposible, mejor creemos un método eficaz para conocer el valor de a+b para los valores de a y b que queramos o necesitemos. Actualmente es muy fácil hacerlo con ayuda de la calculadora, pues ésta combina una implementación de un algoritmo genérico que sirve para calcular sumas de números y un inmenso poder de cómputo. Pero antiguamente no era el caso y era necesario que los humanos calculáramos la suma usando nuestro cerebro como computador, lo que era mucho más lento. Lo que hicimos como especie fue reducir el costo de acceder a la verdad. Esta reducción de costos también ocurrió con la masificación de internet, la educación pública, etc.

Materia pasada, materia olvidada!

Ya tenemos el costo de acceder a la verdad, que claramente nos distancia de ésta. Ahora la educación es mucho más accesible, ¿pero qué tan efectivo es meter en la cabeza de las personas los contenidos? Seguramente has olvidado gran parte de lo que aprendiste en el fomegio (me refiero al colegio xd) o universidad. ¿Entonces de qué te sirvió pasar tantas horas estudiando esas materias obligatorias, aparte de obtener una buena nota? Por eso, otro factor que considero de suma importancia considerar, es la retención de las verdades que aprendemos. Existen técnicas para no olvidar, como la repetición espaciada, y se ha estudiado qué es lo que se recuerda mejor a largo plazo, por tanto ya hemos tenido avances al respecto.

¿Bajo costo o alta retención?

Escribiendo sobre los dos factores anteriores, consideré la posibilidad de que una alta retención de una verdad requiera un mayor costo de adquirir dicha verdad. Por ejemplo, si aplicamos la técnica de la repetición espaciada, tendremos que repasar varias veces lo que estamos aprendiendo, lo que incrementaría el costo de conocer esa verdad si queremos conocerla por más tiempo. No obstante, el beneficio obtenido de cada repaso es mayor porque con cada repaso el cerebro retiene lo aprendido por más tiempo. Por tanto, a largo plazo sí vale la pena invertir ese tiempo.

Importancia y alcance de lo que aprendemos

Con los dos primeros puntos satisfechos, ya tendríamos una forma fácil y rápida de saber las cosas que necesitamos y recordarlas a largo plazo. ¿Pero de qué sirve memorizar una bolsa de Oreo cualquiera? ¿Qué tanto nos va a ayudar para otras cosas? ¿No sería mejor aprender algo más útil? A continuación mostraré qué verdades son, a mi juicio por supuesto, las que por lo general más valen la pena encontrar para llegar a la verdad, sin considerar las ventajas no intrínsecas de saber la verdad.

Volvamos al ejemplo de las sumas: ¿Qué es mejor? ¿Memorizar un montón de sumas, o dominar un método general para calcular cualquier suma? Claramente la segunda opción es superior, porque para cualquier suma, se reduce el costo de llegar a su resultado. ¿Notas qué es lo que hace que sea mejor? Es su generalidad. Mientras más general sea una respuesta, mejor será porque reducirá el costo de llegar a verdades particulares. Las verdades más generales de todas son las verdades universales. Por eso creo que conocer respuestas a verdades universales ayudará mucho a acercarnos a la verdad.

Pero por otra parte, en algunos casos puede ser mejor trabajar en llegar a verdades particulares. En el ejemplo anterior sí convenía encontrar un método general porque hay infinitos números, pero si el costo de encontrar una verdad general es demasiado alto y no reduce suficientemente el costo de llegar a una verdad particular, será mejor trabajar en encontrar respuestas a varias preguntas de carácter más específico. Debido a esto es que no considero que la generalidad de las verdades sea un factor intrínseco a considerar para determinar qué tanto la población ha llegado a una verdad, sino que sirve en la medida que ayude a reducir el costo o aumentar la retención de otras verdades, pero aún así reconozco que la verdad general es una verdad en sí misma.

Cada quién es la medida de su verdad

Hay afirmaciones verdaderas para todo el mundo (¿o casi?), como que 2+2=4, pero también hay algunas que son muy relativas. Por ejemplo, para mí hace frío en Concepción pero para una familiar mía, más acostumbrada al clima, no hace frío en Concepción, sino que hace calor. Entonces, ¿la afirmación “Hace frío” es verdadera o falsa? La respuesta es depende, porque alude a una experiencia subjetiva del que emite dicha afirmación.

A pesar de que muchas verdades son subjetivas, es posible establecer un punto de partida para acercarnos a la verdad, o mejor escrito, a nuestra verdad. El objetivo entonces, es aumentar la retención y la generalidad y reducir el costo de llegar a nuestra verdad.

¿Lo sé de corazón, de cerebro, o de guata?

Me ha pasado muchísimas veces que he fracasado, ya sea en un concurso de programación o en el amor romántico, y he llegado a sentir que nunca voy a tener éxito. Claramente es falso, pues he llegado a obtener buenos resultados con práctica y perseverancia y otras personas también. El punto es que sé que es falso pero aún así se siente real, desde el estómago. Si dentro de nosotr@s hay múltiples “yo” conscientes, entonces hay que tener en cuenta todos esos “yo” existentes, tanto el consciente como el inconsciente, que al menos en los seres humanos es mucho mayor que la parte consciente. Aún no puedo afirmar mucho más al respecto porque no sabría identificar los “yo” existentes dentro mío, o al menos no todavía.

¿Y las mentiras y falsedades?

Hasta ahora he propuesto una referencia para medir qué tanto la gente se acerca a las verdades. ¿Pero qué pasa con las creencias falsas? Fácil, basta con invertir los dos factores que presenté antes: hay que aumentar la dificultad y el costo de llegar a creencias falsas y reducir la retención de dichas creencias.

Conclusión

He introducido factores a considerar para construir un punto de partida para acercarnos a la verdad. El ideal es conseguir, para la mayor cantidad de seres conscientes posible (incluso de los que no sepamos), una máxima retención y mínimo costo, y viceversa en el caso de lo que es falso.

 
Read more...

from jrab

베트남은 골프 애호가들에게 빠르게 인기를 얻고 있는 최고의 목적지로 자리 잡았습니다. 이 나라는 다양하고 매력적인 골프 경험을 제공하며, 웅장한 산맥부터 광활한 평원, 아름다운 해안가까지 베트남의 다양한 지형과 유리한 기후는 그린에 이상적인 조건을 만들어냅니다.

지난 10년 동안 베트남 골프 코스의 수가 급증하면서 전 세계의 골퍼들에게 세계 수준의 장소를 넓게 선택할 수 있게 되었습니다. 각 골프 코스의 품질과 도전 과제는 끊임없는 개선과 업그레이드를 통해 새로운 높이에 도달했습니다. 베트남의 경제가 번창함에 따라, 확장된 중산층이 골프를 받아들여, 전국적으로 그 인기가 늘어나고 있습니다.

베트남에는 현재 40개 이상의 골프 코스가 있으며, 또 다른 50개 이상의 프로젝트가 개발 중이거나 계획 중입니다. 베트남의 골프 코스 중에서는 다낭과 나짱 주변의 해안 지역이 가장 좋은 곳으로 꼽힙니다.

베트남의 골프 코스 중 가장 뛰어난 곳은 하노이의 BRG Kings Island Golf Resort, 하이퐁의 Vinpearl Golf, 다낭의 BaNa Hills Golf Club, 나짱의 Vinpearl Golf Club, 호치민시의 Vietnam Golf & Country Club 등이 있습니다. 이들 골프 코스는 각각 독특한 특징과 매력을 가지고 있어, 골프 애호가들에게 잊지 못할 경험을 선사합니다.

베트남의 골프 코스는 아시아의 골프 투어에서 '태국 다음'으로 불리며, 골프 애호가들에게 새로운 도전과 흥미로운 경험을 제공합니다. 이러한 이유로 베트남은 골프 여행지로서의 인기가 높아지고 있습니다.

 
Read more...

from 非普遍理性

#G #至冬行动

电影《莫斯科行动》paro。「山有穹音」钟离生日贺文。

旧至冬落幕、愚人众解散的两年后,“公子”终于接到一件像样的任务。

达达利亚猜了九点四十,安全局的副局长也循这个等差数列往后推了五分钟。正式行动中自然不设彩头,这场“赌局”只是为了缓解气氛。他们安静等到九点三十八,对讲机传来机动车马达声。

三人戴上夜视设备。“公子猜中了。”钟离道,“这次就交给你来指挥吧,阁下也和安全局的人磨合了小一周了。”

副局长没有表示异议,两人显然已经事先商议过。前特工来不及对此产生什么想法,只答了“收到”接过对讲机,第一架摩托便从窗口跃入车库。他深吸一口气,默数鱼贯出现的敌人。第二架摩托落地,车手仍未立即理解自己的处境,举起喇叭用蹩脚的璃月语声嘶力竭地喊:“释放犯人,否则——”

车队终于进来了三分之二,达达利亚没等他说完,直接对话筒道:“关门关灯关音响,打开夜视镜。”

正如钟离所说,这周他已和现场的安全局队员反复修订行动方案,进行过十次以上演练。厂房大门落下,照明和扩音器应声关闭,达达利亚接着报出指令:“一二队射击载具,射击后控制目标,必要时自由交火!”

两队分别负责车库内外,前者少量藏身高处,大部分位于列车内,以铁制厢壁为掩体展开攻击。他也候在窗侧观察 ,左手握着对讲机,单手从身后拔枪,拨开保险,以防任何意外发生。

当然没有什么意外。对方被安全局的精心布置打得措手不及,有的没能成功开火,有的开了火却打中己方成员,为数不多能造成威胁的也会在几十秒内被集火点掉。

二十分钟后,达达利亚核对报上来的俘获人数,示意恢复照明,打扫战场。他把夜视镜拉到头顶,直接从窗口跃出,踩过几滩血泊前去收尾,留下又一行暗红色的脚印。后备小队在他的安排下打开排气扇,回收散落的武器和弹壳,用水枪将所有痕迹冲洗干净。

收官之战顺利得不可思议。他按捺高涨的情绪,确认过所有犯罪分子都被彻底解除武装、押解上车,回头便见钟离和副局长立在身后不远处。路灯将光浇在璃月人发顶,又从他的发梢淌出来。前特工走近了听他们彼此客套,耳尖地捕捉到前大使说“下月回国”,顿时满腹心事,但还得腾出一点儿精神留意那边的对话,预备在恰当的时机上前汇报。

那位副局长猝不及防向他道:“‘公子’,阿贾克斯,你的任务要结束了,算得上超额完成啊!今天有什么体会?考不考虑干脆加入安全局?”

达达利亚怔了片刻。多年以来,这个真名只有至亲唤过,此刻被外人叫出,令他格外不自在,就像先前在基金会读到的璃月神话中被道破本相的精怪。他下意识瞧了钟离一眼,那双金瞳在夜色中静静照着他,眼神中没有任何暗示。前特工稍稍整理思路,顺应本心回答:“非常感谢,不过现在我恐怕适应不了军事生活了,哈哈。”

他随即意识到,对上周在安全局见过他的副局长来说,这个托辞有些不够真诚,只好摸了摸鼻子又道:“我想再去念个书……什么的。”

对方再次邀请后钟离开口:“如此大事,公子大概需要多加考虑才好决定。”于是他们终于握手道别,目送副局长坐车离开,钟离带他穿过厂房,一同在停于侧门的汽车后排落座。硝烟和血迹都已清理完毕,室内只余湿漉漉的水汽,大巴陆续将被疏散的列车乘客和车库人员送回这里。他们不会知道先前此地发生了什么,只是打着哈欠小声抱怨,登车或是开始工作。

钟离没有露面,只在车里看着。一位浅蓝头发的璃月女子负责协调,她行事利落、言语温和,很快将所有人安抚下来,离开前冲他们的方向微微躬身致意。接着有人坐进驾驶席,报出目的地,发动汽车。那是边境附近最大的城市,行程大约一小时。

达达利亚抬腕看表。零时已过;以钟离的风格,他大约已经安排好了今天或是明天返回至冬宫的航班。那就是此行终点了吗?璃月人下月回国,这样的私人安排自然不必知会临时搭档,可经过所有那些冒险之后,达达利亚很难认同他们止于这样的关系;又或者对方早知自己即将离开,所以总是将自己推出足够亲密的一臂之外……他几乎想当着司机的面直接问个明白,扭头却见钟离闭目倚着靠背,似乎睡了。

车打了个弯,离心力将人甩了过来,达达利亚忙托住他的头,慢慢放在自己肩上。新的行驶方向让月光落进车窗,照亮了璃月人的半张脸,皎然月色似乎洗去了他曾在上面见到的一切思虑。对方平稳而绵长的呼吸拂动他的领子,年轻人忽然一个字也说不出来了。

如果钟离真的要走,他也已经安排好了远超临时搭档该做的一切。达达利亚对名义上“继承”愚人众的至冬安全局抱有难以厘清的复杂情绪,这在对方看来想必一目了然,特地为自己准备展示舞台,替两方牵线。他曾因被扫地出门难以释怀,又不满于后来局中无能,不过经此一役,种种纠结都得以放下。副局长的工作邀约如果来得再早几年,他会为此欣喜若狂;若是没有最近一个月的经历,那儿也不失为一个好去处。但他结识了钟离,于是一切都不一样了——达达利亚也没有料到,自己的价值体系都会据此发生变化。现在的安全局颇有稳步向好的势头,不需要他多少有些一厢情愿的热情,他不想从事一份显然难以出国、更别说不宜与异国政治人物保持私人关系的工作了。

自觉已经像钟离圆场时说的那样“多加考虑”完毕,达达利亚放任困倦在这几小时的大起大落后袭来。半睡半醒间,霓裳花的异香又萦绕在鼻端。


之后他们在一家达达利亚看来略显奢侈的酒店分享了一个套间。第二天,年轻人收拾完自己时,钟离已经在开放式书房阅读文件。见人出来,他指向一个档案袋。

“本想回去之后正式提出,没想到至冬人比我习惯的直接得多,险些被截了胡。”钟离微笑道。

前特工先归还了剩余的任务资金和其它临时交予他的设备与武器,等待对方清点核验,这才带着几分好奇打开袋子。

一封来自古闻基金会的录用通知。

达达利亚忍不住抬头看了一眼自己唯一直接接触过的基金会成员,顾不上留意工作内容和薪水,直接跳到最后寻找署名。摩拉克斯,字迹和他曾有幸见过的完全一致。他屏息把纸翻过来盖在桌上,以免屈服于这份巨大的诱惑,无法坚持自己昨晚打定的主意。

“钟离先生,非常感谢您为我所做的一切。但也因为您,我必须拒绝。”他说。

他第一次见到钟离露出接近困惑的神色,这叫他忍不住微笑一下,继续说明自己的想法:“经过考虑,我准备去璃月。”

“去璃月?做什么?”

“具体还没想好,不过眼下各种机会都不少吧?先前和那些列车劫案受害人接触的时候我就感觉,现在至冬璃月跨国贸易大有可为。”想到对方刚才提到的“习惯”与“直接”,达达利亚深深吸一口气,盯着那双金色的眼睛,“我想离你更近一些,钟离先生。”

他希望这句话对璃月人来说足够含蓄,也足够明白。就算对方确实打算当两人之间到此为止,冷处理他们的关系,他也要传达清楚自己的心意。

钟离沉默片刻,轻轻舒了口气,向后靠进座位里。“公子有这样的打算,是因为我昨夜提到回国?”

他点头,听对方续道:“下月二十五日,我的一位故人之女即将成年。我会陪她度过十八岁生日,然后返回至冬,我为自己在这里安排的任务还没有结束。长期而言,我确实计划回国,不过这个计划随时可以调整。”

达达利亚愣了一下,姑且没有被解除误会和得到承诺的狂喜冲昏头脑。“‘为自己’?”他喃喃着重复了一遍这个不太自然的表述。

“我是摩拉克斯。”钟离说。

他坐在办公椅上,明丽的日光从背后的落地窗扑入房间,掩去几分面容上的细节,又为他的身躯镀上一层金边。这个形象确实与达达利亚脑中的摩拉克斯重合了——他仿佛高卧于某个王座,等待整个世界向他竞相俯首。

然后这位至冬宫的地下帝君举起他刚才还来的相机,对他咔嚓一下。

“公子阁下现在的表情值得留念。“他含笑解释。

而达达利亚忙于回顾自己曾经发现却没有深入挖掘的所有蛛丝马迹。钟离是唯一在摩拉克斯的基金会现身过的人,创立伊始即参与其中,还有权调动大量资源——两重身份互为表里,这是最简单也最合理的解释;只能说自己被对“他们”的好感蒙蔽了心智,以至于错过宝贵真相。他随即意识到这是一条价值万金的情报。“先生不该告诉我的。”他脱口而出。

“谁知道你会拒绝‘摩拉克斯’的工作呢。”钟离道,“水宫一夜,我以为公子多少猜到了,才会讲述自己的故事……向你道谢也非只为那口氧气,而是感谢公子让我知道,曾经做过的事终究带来了积极的变化。”

达达利亚已经想起那晚他如何给出提示,自己却听而不闻——不过这一切都已经无伤大雅了,他急于收回意见。“没有拒绝!合同呢?我现在就签。”

钟离轻笑一声。“听闻公子有意继续学业,我十分赞同。至冬宫大学允许烈士后人免试入学,并提供可观的助学金,公子恰好符合要求。照此安排,合同需要稍加修改,配合你未来的假期。”

年轻人一时词穷了。钟离确实为他考虑了一切,即使那句“念书”无论如何听来只是他随意寻到的借口。“……先生对我太好了。”他最后道。

“还能更好些。之前公子邀我上天兜风,不知是否仍然作数?”

“当然!”

“我已提交空域许可申请;上回流程和操作都合法合规,这次想必无需等待太久。刚好我没有来过这个城市,公子不妨陪我盘桓几日,再一起回至冬宫。”

套间的办公桌很长;虽然再长绕过去也花不了几秒,但达达利亚小心推开桌上文件,觉得直接翻越更能表达自己此刻的心情。“……说实话,自从开过战斗机,我一直在想什么时候能再用上从愚人众那儿学到的东西。终于让我等到了。”他说。

“是什么?”钟离配合地问。

“接吻。可以吗?”

“摩拉克斯一言九鼎,全毁在你这小乌鸦身上了。”他佯作无奈。

达达利亚知道他说的是初次见面时承诺用不上乌鸦技能的事。“胡说,这又不是任务。”那声“小乌鸦”喊得他心口直跳。

钟离已经阖上双目,微微仰脸。年轻人见他的睫毛压住红痕,实在忍不住低头亲在眼皮上,然后将自己的热情一路烙到太阳穴,又往下轻啄。他在面颊上徘徊许久,直到钟离先侧过头,被他顺势衔住嘴唇。

前特工模模糊糊地意识到自己也说了大话。曾经接受的理论训练早被满腔炽诚蒸发殆尽,他完全循着本能舔舐吮咬,勉强记得如何呼吸。钟离在他唇下发出他想象里摩拉克斯绝对不会发出的声音,又被他如啜甘霖般饮下。最后璃月人将他推开一些,却用同一只手环住他的脖子。

“抱歉啦,先生。许久不练,技艺生疏了。”他以退为进地说。

另一只手抚上他的脸。“公子切勿妄自菲薄。”钟离噙着一丝笑音回答,“至冬安全局不会明白自己错过了什么。”

达达利亚不知如何回应这出于偏爱的得意,只好再次吻了上去。

 

END

 
阅读更多

from Licht ist leicht

Blau ist die weibliche Farbe. Sie steht für das Element Wasser, den Mond, ist fließend und kühlend

Rot ist die männliche Farbe. Sie steht für Feuer, die Sonne, Stärke und wirkt wärmend. Bei Naturvölkern ist es noch so.

Zur besseren Übersicht:

männlich weiblich
Klinge Dreieck d. M. Kelch Dreieck d. W.
rot blau
Sonne Mond
Mars Venus
Feuer Wasser
wärmend kühlend
stark/statisch fließend
fest weich
intellektuell intuitiv
logisch kreativ
analytisch ganzheitlich
wissenschaftlich fühlend

Die weibliche Energie wirkt kühlend und beruhigend auf das erhitzte Gemüt der Männer, welche in alten Erzählungen nach einem langen Tag der Stärkedemonstration und Jagd nach Hause kamen und sich an der Schulter ihrer Frau ausruhten.

Im Pentagramm mit den Elementen ist die Symbolik leicht erkennbar:

Pentagramm

Die Kirche / Satanisten haben die Farben vertauscht (Pentagramm gedreht) um die Energie zu schwächen. Rot ist die niedrigst schwingende Farbe und steht für Sexualität und Satanismus. Sie wird heute falsch als die Farbe der Liebe interpretiert. Valentin sei Dank.

Grün ist die Farbe der Herzensliebe. Das Herzsymbol leitet sich von alten Abbildungen mit Efeuranken ab. Grün ist die mittlere Farbe des Regenbogens und die Farbe des Herzchakras (Anahata Anahata), welches ebenso der energetischen Mitte des Menschen entspricht. Es ist außerdem die wichtigste Farbe für die menschlichen Augen.

Hier ist auch das Zusammenspiel der Farben blau für das weibliche, rot für das Männliche und grün für die verbindende Herzensliebe ersichtlich: Human Brain Farben

 
Weiterlesen...

from Lo spazio intermedio

(articolo pubblicato quasi contemporaneamente su L'isola di Ula-Ula.)

Medium è morto. Almeno per tutti quelli che non scrivono in inglese. La piattaforma a un certo punto ha iniziato a chiedere soldi. Non per la manutenzione della piattaforma stessa, ma per pagare chi realizzava i contenuti. In inglese, ovviamente. E neanche tutti, ma con criteri che non sono mai stati chiariti, almeno fino a che sono stato dietro alle e-mail che venivano dalla piattaforma. Certo, quello che scrivevo in questo attacco era vero nel 2020, e fondamentalmente mi pare che continua a essere vero ancora oggi. E per scrivere questo post, che è di fatto quello inaugurale sul mio arrivo qui su noblogo, sono andato a curiosare un po' proprio su Medium, scoprendo che dei blogger italiani, uno degli ultimi ancora presenti lì è l'amico Peppe Liberti con un post di ormai giugno. Onestamente, per come avevo intenzione di utilizzare Medium, abbandonare quel luogo internettiano non è di per sé un dramma, per cui ora che da Lo spazio intermedio mi sono spostato qui, su questa Isola di Ula-Ula, penso di proseguire con il programma che mi ero prefisso: recuperare, con le opportune modifiche, i post pubblicati su Medium e riempire l'isola di altri contenuti, cose di facile scrittura come per esempio i recuperi di vecchi post che la facevano da padrone sul mio account di Medium. Tra l'altro ho potuto importare non solo quanto pubblicato, ma anche quanto scritto in bozza nel precedente spazio, per cui potrei riempire questo noblogo con maggiore costanza rispetto a qua.name.

Per cui... Medium è morto. Lunga vita a WriteFreely.

#scrittura #fediverso #medium #writefreely

 
Read more...

from نویساک

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

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

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

شاید چیزی که نیاز دارم خویشتن‌داری است. خویشتن‌داری در جهان ما چیست؟ برای شروع، یک مکث و درنگ. در جهان پرسرعت ما، کمی مکث برای درنگ، ممکن است اجازه دهد که به این پرسش بیاندیشم. خویشتن‌داری برای من چیست؟

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

from veer66

Compile-time type checking is a great way to catch errors early, but it is not a guarantee of correctness. Even simple subroutines can be incorrect. For example, is_old_enough is a subroutine for checking whether a person is at least 21 years old.

fn is_old_enough(a_person: &Person) -> bool {
    a_person.age > 20
}

Here is an example of how the is_old_enough subroutine could be incorrectly implemented:

fn is_old_enough(a_person: &Person) -> bool {
    a_person.age >= 20
}

Adding an equals sign (=) to the code changes the behavior of the subroutine, even though the code is still type-safe. The similar bug is found in Servo, but the type was integer.

Testing the entire program manually or programmatically is essential, but it can be difficult to catch all errors, especially those hidden in the details. Testing subroutines is important because it allows testers to focus on small, well-defined units of code. This makes it easier to identify and fix errors. Here are three prerequisites for testing subroutines:

  1. Defining subroutines
  2. An input environment for testing
  3. Result validation

Defining subroutines

Some programming languages encourage programmers to define subroutines more than others. This is because some languages have features that make it easier and more natural to define and use subroutines.

Defining subroutines in BASIC programming language

In the 1970s, to define a subroutine in BASIC, you would assign it a line number and use the RETURN statement.

1000 PRINT "SUBROUTINE"
1100 RETURN 

We can call a subroutine in a program using the GOSUB command, followed by the line number of the subroutine.

GOSUB 1000 

Defining a subroutine in BASIC is as simple as using the GOTO statement, but with the added convenience of being able to return to the calling code.

Defining subroutines in Common Lisp

In Common Lisp, a function is a subroutine that always returns a value when it is called with a specific set of inputs. This Common Lisp code processes a-person, which is a member of the list people one-by-one using the DOLIST command. If a-person is at least 21 years old, the program will print it out.

(dolist (a-person people)
   (when (> (person-age a-person) 20) 
        (print a-person)))

We can create a new function from the part (> (person-age a-person) 20) by using the DEFUN command, with a function name – old-enough?, and an input variable, which is a-person.

(defun old-enough? (a-person) 
    (> (person-age a-person) 20))

Then, in the main program, we substitute the code part (> (person-age a-person) 20) with a function call (old-enough? a-person).

(dolist (a-person people)
   (when (old-enough? a-person)
        (print a-person)))

Common Lisp encourages programmers to create subroutines by making it easy to copy and paste parts of code, which are also known as expressions, or forms.

Defining subroutines in Java

Here is a Java version of a print-a-person-if-at-least-21 program. Java uses the for loop instead of the Common Lisp DOLIST command.

for (var a_person: people) {
   if (a_person.age > 20) {
      System.out.println(a_person);
   }
}

We can create a function from the expression (a_person.age > 20) using this syntax.

private static boolean isOldEnough(Person a_person) {
    return a_person.age > 20;
}

In addition to Common Lisp, Java requires type annotations for functions. The function is_old_enough was annotated as a function that takes a Person as input and returns a boolean. Moreover, In Java, programmers must decide whether a function belongs to a class or an object by using the static keyword. In Java, programmers also use the private and public keywords to control access to functions. Java functions always require a return statement, similar to BASIC subroutines, except for functions that do not return any value.

Java encourages programmers to create subroutines, but with more annotations, it is not as encouraging as Common Lisp.

Defining subroutines in Crystal: Static typing doesn't mean more annotations.

My explanation of Java, a statically typed programming language, may have led to the misconception that statically typed languages require more annotations. Crystal – another statically typed programming language is the counter example. Here is a Crystal version of a print-a-person-if-at-least-21 program. Instead of the DOLIST command, Crystal uses the EACH command.

people.each {|a_person| puts person if a_person.age > 20}

To create a function, we can copy the expression a_person.age > 20, and paste it into DEF ... END block, without any type annotations or any RETURN statement.

def old_enough?(a_person)
  a_person.age > 20
end

We can substitute the expression a_person.age > 20 with a function call oldenough?(aperson).

people.each {|a_person| puts a_person if old_enough?(a_person)}

So, the ease of defining a function in Crystal is on par with Common Lisp.

Defining subroutines in Rust

Here is a Rust version of a print-a-person-if-at-least-21 program, which look almost identical to Java version.

for a_person in people {
  if a_person.age > 20 {
     println!("{:?}", a_person)
  }
}

Surprisingly, the Rust version of is_old_enough looks similar to the Crystal version, but with type annotations. Type annotation in Rust is more complicated than in Java because Rust has references and programmers need to think about the lifetime of variables. Type annotations and lifetimes could make it more difficult for programmers to write subroutines in Rust.

fn is_old_enough(a_person: &Person) -> bool {
    a_person.age > 20
}

Type annotations make definitions precise and easier to read, but they require more work, can be distracting, and do not help encouraging a programming to create a subroutine.

Preparing an environment for calling a subroutine

Some programming language features and software design can make preparing the environment for calling a subroutine difficult. Moreover, maintaining the code used for preparing the environment could require unnecessary work if the code is too coupled with data structures, which are usually changed.

Preparing an environment in Common Lisp and JavaScript

The variable a-person is an environment for calling the function old-enough?. We create a data structure from a struct in Common Lisp by calling a function make-*. In this example, we call a function make-person.

(make-person :name "A" :age 30)

Moreover, we can make a data structure from a struct using #S syntax, which is in the same form as it is printed.

#S(PERSON :NAME "A" :AGE 30)

This #S syntax is very useful when we have existing data structures, because it allows us to use printed data structures to prepare the environment later. This is especially helpful when we want to build long or complex data structures, such as a list of 1,000 people.

In JavaScript, we can prepare data structures in a similar way to Common Lisp, but without specifying the types of the data.

{"name": "A", "age": 30}

Like Common Lisp, JavaScript can dump data structures to JSON format using the JSON.stringify() command.

It is easy to prepare a data structure as an environment for calling Common Lisp and JavaScript functions, especially because we can reuse the format that a data structure was dumped from memory.

Preparing an environment in Java and Rust

In Java, we create a data structure by instantiating a class using the new keyword. The arguments, which are the input values for creating an object, are sent in a strict order without any keywords, such as :name and :age seen in the Common Lisp example. This style should be fine when the number of arguments does not exceed three.

var a_person = new Person("A", 30);

We can call the function is_old_enough, which in Java is a class method.

is_old_enough(a_person)

Alternatively, we can define the function is_old_enough as an object method, and then call it with this syntax.

a.is_old_enough()

Still, the method for preparing the person data structure remains the same. So class methods are not necessarily easier to test than object methods.

In Rust, we create a data structure with the similar syntax to Rust. However, Rust has a more step, which is converting &str to String using the function to_string.

Person {name: "A".to_string(), age: 30}

Although both Java and Rust cannot use printed format for creating data structure directly. We can use JSON library to dump and load data.

So, preparing an environment in Java and Rust is not as convenient as Common Lisp or JavaScript, since we cannot copy printed data structure, and directly use it in the program without a help of an additional library.

The difficulty in preparing the environment is caused by the software design.

Sometimes preparing the environment is difficult because of the software design. To create a Person object in this example, we must pass in the person's name and a service that can return their age.

Person(String name, Service service) {
    this.name = name;
    age = service.getAge(name) ;
}

// ...

var a_person = new Person("A", service);

So, we cannot prepare a person data structure with a specific age without creating a service, which is remotely related to test the function is_old_enough.

Using basic data structure

Instead of defining a class or a struct, we can use a list for representing personal data.

'(:name "A" :age 30)

Using a list removes unnecessary restrictions on creating a person, even though our design is primarily to get a person from a service. Here is an example of calling a function to obtain a person data structure from a service.

(get-person "A" service) 

In JavaScript, we can create an object, which is idiomatic for JavaScript, instead of a list.

{"name": "A", "age": 30}

In Java, we use HashMap although creating HashMap in Java does not look as concise as list in Common Lisp.

However, using a list or other basic data structure also has a downside, which will be explained later.

Modifying the data structure affects the code for preparing an environment.

Given, we added reward to the struct person.

struct Person {
  name: String,
  age: u32,
  reward: u32,
}

This code for creating a Person data structure would be broken.

Person {name: "A".to_string(), age: 10}

We have to create a data structure by passing a reward value.

Person {name: "A".to_string(), age: 10, reward: 800} 

It may seem trivial, but I've never enjoyed fixing repetitive code in tests.

Use default values for values we don't care about.

In Rust, we can create a data structure with default values, and then we assigned only a value that we care.

let mut a_person = Person::default(); 
a_person.age = 30 

Before we use the function default, we put #[derive(Default)] before the struct definition.

#[derive(Default)]
struct Person {
    name: String,
    age: u32,
}

In Common Lisp, we can put default values in the struct definition. Then we can call a function make-person by passing a value that we care about.

(defstruct person 
  (name "") 
  (age 0))

(make-person :age 30)

Using basic data structure

We can use a list instead of a specific struct, and in a list, we can put only :age with other values. Still, we can run the test.

(setq a-person '(:age 30)) 
(old-enough? a-person) 

Using basic data structures has some downsides. Lists and hash tables do not perform as well as structs, because accessing struct member is very fast. The position of each struct member in memory is calculated arithmetically. Moreover, when everything is a list, a compiler cannot help checking types since their types are the same. A programmer may have no idea how the data structure looks like by looking a function definition. Still, we alleviate solve these problems by using a runtime schema such as JSON Schema.

Preparing an environment for async function and database connection is not convenient

Some subroutines need a database connection to establish. Some subroutines need an async event loop to run before testing, for example, async functions in Rust. Preparing a fake database and connecting the everything before testing is inconvenient, especially for testing a function like is_old_enough?, which can be fixed by improving the software design. Testing async functions become easier by using a tool, such as Tokio::test.

Testing a subroutine in the production environment

Testing in the production environment is not preferable, but sometimes it is necessary, especially when we cannot reproduce the problem somewhere else. Common Lisp can run Read-Eval-Print Loop (REPL) along with the production, so we can always test subroutines. Many languages come with an REPL, but we have to make sure that libraries and frameworks play well the REPL. In Common Lisp community, libraries and frameworks are usually REPL-friendly.

Result validation

After running a subroutine, we usually want to validate the result either manually or programatically.

Programatical validation

Most data comparison functions check if the data is the same object in memory, which is not what we want in this case. The code below does not return true even if the content of the data structures is the same because the EQ function does not compare the content.

(eq 
    (get-eldest_person people) 
    (make-person :name "C" :age 120))

When testing, we usually want to compare data structures for content equality. In Common Lisp, we can use the EQUALP function to do this, instead of the EQ function.

(equalp 
    (get-eldest_person people) 
    (make-person :name "C" :age 120))

In Rust, we solve this issue by insert #[derive(PartialEq)] before the struct definition.

#[derive(PartialEq)]
struct Person {
    pub name: String,
    pub age: u32,
}

Manual validation

Manually validating a complex data structure can be difficult, so there are many tools that can display data in a structured view. In Common Lisp, we can use Emacs inspectors like slime-inspect and sly-inspect, or we can use Clouseau, which is part of McCLIM. For other programming languages, I typically convert data structures to JSON and view them in Firefox.

 
Read more...