Little secret. Do not tell anybody. Do you want a high-quality, single-binary, cross-platform GUI app with a small memory footprint, low CPU consumption, and small (at least by today's standards) binary file size?
- The LispWorks license costs less than your slop-generating AI tokens. Maybe, much less over the long term. The result would be much more stable and much easier to maintain. Build delivery is easy-peasy, one click. "It just works".
Так тоже делаю, в другом проекте :) Только не этот конкретный, а webvew.h, напрямую отсылая в него js через вэбсокеты (в вашей ссылке он тоже под капотом). Он использует сырой webkit и одна из проблем, например, в том, что он всегда отстает в реализации CSS от мейнстримных браузеров. Т.е. будут неаккуратности. Если пишешь приложение конкретно под него, это не проблема. Но если пытаться собрать из этого браузер общего назначения - боюсь, многие вещи будут отображдаться криво либо вообще не работать как нужно в случае тяжелых SPA. Ну и будет куча другой ненужной бесконечной возни.
Т.е. в итоге - чтобы собрать собственный кастомный браузер общего назначения, без лишней возни и не превращая это в бесконечный maintanance / bug gix loop, единственное надежное решение - электрон, т.к. там полноценный chromium. Неудачный многолетний опыт браузера Nyxt тоже об этом говорит.
@koron3492721 Многие западные рок-группы (да почти все, чего уж там) плагиатили Юрия Лозу. Вытаскивали ноты из "Плота". Кто Си, кто Си-бемоль. А кое-кто даже Ре не постеснялся утащить.
"As long as they stay put, true opinions are fine things and do us much good. Only, they tend not to stay put for long. They're always scampering away from a person's soul. So they're not very valuable until you shackle them by figuring out what makes them true".
Meno by Plato, 380 B.C.E.
Позиция обиженного, толки про геноцид и деколонизацию - это позиция слабого. Деструктивная позиция. Я вот не обиженный и сам кого хочешь загеноцидю.
Я к своему неудовольствию замечал, что за пределами Татарстана (что внутри него - не знаю) некоторые активисты навязывают ислам, смешивают нашу идентичность с ним. Но ислам наоборот, все уравнивает и покрывает буркой. Может во времена Улу Мухаммеда это и было удачной скрепой для создания государства, но сейчас как бы 21 век. К тому же сегодня у мировой уммы в тренде гребаный фундаментализм и захват мира.
Рад что в 21 веке это буквально самый успешный регион внутри империи, причем не благодаря, а вопреки. Вот пусть так и идет, а империя менялась и будет меняться, это неизбежно.
Maybe one of the issues with graph visualizations (GV) is that each edge type is an extra dimension. At the same time, we are not that good at multidimensional recognition. My business partner sometimes suggests creating additional GVs for our complex workflows and relationships between our clients within the system. Whilst I am usually resistant, I propose simple list presentations and context-bound panel presentations.
When you think you want a GV, you really think about "seeing the things in a large picture" from the top. But when you finally see it, it's hard to comprehend. You're looking for better context, but instead, you lose the context. Because it is large. Or, if it is not that large, you don't need it anyway.
A somewhat useful GV may lie in the interactivity of such a UI in a way that, when you, let's say, click on a node, it transforms into a useful flatter structure or one-directional sub-graph or tree to help with understanding (1) configuration-time structures and (2) run-time events/operations. This transformation should happen immediately; otherwise, these small operations would drain your brain instead of helping.
Two mutually convertible, computationally equivalent formalisms - combinatory logic and lambda calculus - have only one operator: “apply”. We can find a minimal set of primitive combinators to achieve Turing completeness in applicative environment, such as I,K,S-basis or I,B,C,S-basis. On top of them, people invent different abstract machines with interesting characteristics to experiment with and to study their behavior.
Similarly, we may define another system: a graph with only one operator - “Infer”. This operator mutates the graph based on predefined rules. It is possible to define a minimal set of primitive rules to achieve Turing completeness on a graph. Math formalism: rule is a span of morphisms in the category of graphs, then approaches like double-pushout (DPO) and single-pushout (SPO). Practical (and widely implemented): RDF graphs and SPARQL CONSTRUCT (and we insert the resulting triples back into the graph) or simply implementation-dependent rule engines.
Since graphs are convertible into matrices and back (analogy to the relationship between combinatory logic and lambda calculus), we may define these rules in matrices. Framework: Matrix Graph Grammars (MGG).
Moving to practical implementation.
The entire system consists of 2 main functions: Infer and I/O.
Infer only gets the graph and updates it. No side effects. Therefore, regardless of how it works, it is a pure function. Internally, it applies all defined rules recursively, again and again, until there are no new changes in the graph.
Then pass the graph to I/O. It outputs based on the graph content and writes into it based on input. Atomically, of course.
Then back to Infer, repeat.
2 main problems.
Infer: excessive computational complexity.
I/O: obvious desire to make it reactive-style, which (1) greatly increases the general complexity of the program: reactive is generally bad for I/O; (2) need to pass the graph back to Infer on every, let's say, click, but Infer is expensive.
Some (partial) solutions.
Infer: define more "rich" rules. The richer the rules are (instead of the minimum primitives), the faster it would be, because of fewer iterations within a single Infer pass. Add optimization rules when they are needed.
I/O: avoid reactive style, i.e., a component itself is responsible for keeping its local state synchronized with the main state (the graph) bidirectionally. Fck... there is just no easy way for the I/O part.
But the idea is, of course, that you can build abstract machines, on paper, like combinatory logic and lambda calculus, using graphs or matrices + rules. Not the real ones.
1. SLIME/Swank maintainers changed defstruct 'compilation-result (added return-type slot).
2. I've updated SLIME from MELPA.
3. One of the libs I use requires Swank in its ASDF definition. So when I load that system, it compiles and loads swank from the Quicklisp distribution.
4. Now struct is built from the definition from Quicklisp, but 'compilation-result function was loaded before (if I understand correctly), from MELPA's swank, signaling the error on loading that system. (It doesn't prevent the system from working; it only affects reporting in Emacs.)
5. Hmm... since I'm lazy, I've miserably put a link to MELPA's one into the quicklisp/local-projects.🤡
6. As a result, I would need to update this link on each update of the Emacs package. Of course, the right way is the other way around, loading stable SLIME into Emacs from the Quicklisp distribution. But... next time.
Считается, что Путин военных и военное дело не любит (раньше, по крайней мере - сейчас может и втянулся). А вот что он уважает и умеет - это агентурная и оперативная работа. Он за это шарит, он это понимает.
Пол-Украины было в агентах. От администраций городов до почти-что-верхушки СБУ. И вот ему, Путину, приносят папочки с результатами оперативной работы. Смотрит он на них и понимает: "Так Украина уже моя." Бесконечные списки агентов. Тысячи, во всех важных местах.
Так и получилось то, что получилось.