The Evolution of the Card Catalog System – Raymond Geddes<br /> accessed on 2026-05-13T21:39:37
- Last 7 days
-
cruxevals.com cruxevals.com
-
Wilson Lin at Cursor coordinated hundreds of GPT-5.2 agents to build a web browser from scratch, running uninterrupted for one week. Over a million lines of Rust.
这个案例展示了AI系统的惊人规模和产出能力,协调数百个AI agent,一周内生成超过一百万行代码。然而,'远未达到生产质量'的评估也揭示了当前AI系统在复杂项目中的局限性,特别是在代码质量和系统架构方面。
Tags
Annotators
URL
-
- May 2026
-
-
Six months ago, while working on an internal productivity tool, our team made a controversial (at the time) decision: we'd build our repo with no human-written code. Every line in our project repository had to be generated by Codex.
大多数人认为软件开发必须由人类编写核心代码,但作者认为完全由AI生成代码是可行的,因为他们成功地构建了一个没有任何人工代码的仓库。这个观点挑战了软件开发的传统认知,暗示AI可能已经发展到能够独立完成整个项目的程度。
-
-
developer.chrome.com developer.chrome.com
-
Add context with initial prompts
通过提供初始提示,开发者可以为模型提供上下文,这对于构建交互式应用至关重要。
-
The `create()` function's optional options object also takes a `signal` field
使用
signal字段可以优雅地取消正在进行的API调用,这是编写健壮代码的一个重要实践。
-
-
blog.cloudflare.com blog.cloudflare.com
-
When your user needs a [domain](https://domains.cloudflare.com/), a [storage bucket](https://developers.cloudflare.com/r2/), a [sandbox](https://blog.cloudflare.com/dynamic-workers/) to give their agent, or [anything else](https://workers.cloudflare.com/), you make one API call to Cloudflare to provision a new Cloudflare account to them, and get back a token to make authenticated requests on their behalf.
值得注意的代码示例:平台通过单次API调用即可为用户提供云flare账户,实现无缝集成。
-
Stripe then sets a default limit of $100.00 USD/month as the maximum the agent can spend on any one provider.
值得注意的代码示例:设置代理每月支出的默认限制为100美元,这有助于防止意外开销。
-
When the agent chooses a service and provisions it (ex: `stripe projects add cloudflare/registrar:domain`), it provisions the resource within a Cloudflare account.
值得注意的代码示例:示例代码展示了如何使用Stripe Projects CLI添加Cloudflare注册服务。
-
-
-
A search through GPT‑5.5’s SFT data found many datapoints containing “goblin” and “gremlin.”
值得注意的代码示例:SFT(监督微调)数据中的异常数据点可能揭示了模型行为的问题。
-
-
www.latent.space www.latent.space
-
Dex Horthy, coiner of Context Engineering and “the Dumb Zone”, publicly retracted his extremely vibe-coding-pilled call 6 months ago and encouraged people to **please read the code**
Dex Horthy公开撤回了他的极端观点,并鼓励人们“请阅读代码”,这反映了技术社区对代码质量的重视。
-
Dex Horthy, coiner of Context Engineering and 'the Dumb Zone', [publicly retracted](https://www.youtube.com/live/6IxSbMhT7v4?si=tMzmqM103KDbPyE6&t=3424)his extremely vibe-coding-pilled call 6 months ago and encouraged people to **please read the code**, citing [Alex Volkov](https://open.substack.com/users/152216110-alex-volkov?utm_source=mentions)'s [Z/L continuum from AIE Europe](https://x.com/altryne/status/2046246775414276142)**:
Dex Horthy's retraction of his previous stance and emphasis on code reading suggest a shift towards a more cautious approach in AI development.
-
-
-
With these improvements, we saw close to a 45% improvement in time to first token (TTFT)—which reflects how responsive the API feels—but these improvements were still not fast enough for GPT‑5.3‑Codex‑Spark.
值得注意的代码示例:通过改进TTFT(首次出字时间)来提升API响应速度。
-
- Apr 2026
-
www.claudecodecamp.com www.claudecodecamp.com
-
Code is hit harder than unique prose (1.29–1.39x vs 1.20x). Code has more repeated high-frequency strings — keywords, imports, identifiers — exactly the patterns a Byte-Pair Encoding trained on code would collapse into long merges.
这一发现挑战了我们对代码token化的常识认知。通常我们认为代码有更多重复模式应该更高效token化,但事实相反。这表明代码的语义复杂性超越了简单的重复模式,需要更细粒度的处理。这一反直觉结论对代码生成和代码理解模型的优化方向提出了新思考。
-
-
blog.vidocsecurity.com blog.vidocsecurity.com
-
Discovery should focus on trust boundaries, authentication flows, parsers, shared services, and legacy code that still sits on critical paths.
这一建议挑战了传统安全扫描的广度优先方法,转而强调深度优先的特定领域。这表明AI安全研究应该更关注那些传统方法难以发现的复杂逻辑问题,而不是简单地扫描所有代码。这种转变可能带来更有效的安全投资回报。
-
-
www.anthropic.com www.anthropic.com
-
Including design intent in Claude Code handoffs has made the jump from prototype to production seamless.
这一断言称设计意图可以无缝传递到生产代码中,挑战了设计实现过程中常见的意图丢失问题。这种理想化的工作流程重新定义了原型到生产的转换,需要验证其在复杂项目中的实际表现。
-
-
devblogs.microsoft.com devblogs.microsoft.com
-
The new Go codebase was methodically ported from our existing implementation rather than rewritten from scratch.
通常情况下,升级到一个新版本时,人们会预期代码会被重写,但作者表明 TypeScript 7.0 的 Go 代码库是从现有实现逐步迁移过来的,而不是从头开始。
-
-
nrehiew.github.io nrehiew.github.io
-
While the output passes the tests and is functionally correct, the diff is enormous, and none of those additions were asked for or even necessary.
大多数人认为代码修改应该越多越好,但作者认为过度修改(over-editing)虽然功能正确,但引入了不必要的改动。
-
A common piece of advice for working with AI coding tools is to simply write more tests because if the tests pass, the code is fine.
大多数人认为只要测试通过,代码就是好的,但作者指出过度编辑问题使得测试难以全面评估代码质量。
-
-
www.metricprovenance.com www.metricprovenance.com
-
Metric provenance, thinktank wrt legislation into code.
-
-
github.com github.com
-
Infrastructure Provisioning cd deploy/terraform/aliyun terraform init terraform plan terraform apply Helm Deployment cd deploy/helm helm install aegis-core ./aegis-core \ --namespace aegis \ --create-namespace \ --set image.repository=<acr-registry>/aegis-core \ --set image.tag=lat
使用Terraform和Helm进行云基础设施部署体现了现代DevOps实践在AI安全平台中的应用。这种基础设施即代码(IaC)方法确保了部署的可重复性和一致性,同时支持阿里云等特定云平台,显示了平台对生产环境的适应性。
-
-
www.anthropic.com www.anthropic.com
-
Claude Opus 4.7 feels like a real step up in intelligence. Code quality is noticeably improved, it's cutting out the meaningless wrapper functions and fallback scaffolding that used to pile up, and fixes its own code as it goes.
AI在代码质量和自主修复能力上的进步令人印象深刻,特别是能够消除无意义的包装函数和备用脚手架,这表明AI正在从代码生成向真正的软件开发实践转变。
-
-
www.producthunt.com www.producthunt.com
-
Heavy users of Claude Code, Codex, Cursor, and Copilot will feel this immediately.
这一洞见暗示了Figma for Agents与现有AI编程工具的协同效应,表明设计系统与代码生成工具的整合将显著提升开发流程的连贯性。这反映了AI在设计和开发领域融合的更大趋势,以及打破设计与代码之间壁垒的重要性。
-
-
www.producthunt.com www.producthunt.com
-
In Messi Legacy repos, low confidence should be flagged early. Better to be transparent than open a bad pull request.
这一声明展示了Ovren在面对复杂遗留代码时的谨慎态度。在AI编码领域,这是一个令人惊讶的诚实立场——承认AI在处理未记录的遗留代码时可能存在局限性,并优先保证代码质量而非盲目提交,这反映了产品团队对技术负责的成熟思考。
-
Ovren puts AI frontend and backend engineers on it - they work inside your real codebase, execute scoped tasks, and deliver reviewable code updates.
这代表了一个令人惊讶的AI工程能力跃迁——从代码建议者转变为实际执行者。这种转变意味着AI不再仅仅是辅助工具,而是可以直接在真实代码库中执行任务并产出可审查的代码更新,这可能是AI在软件开发领域最具颠覆性的应用方向。
-
-
www.latent.space www.latent.space
-
building and shipping an internal beta product with zero manually written code
这个惊人的实验表明,OpenAI已经能够完全自动化软件开发过程,从代码编写到产品发布,这挑战了传统软件工程的基本假设,暗示了人类程序员可能正在被边缘化。
-
Over the past five months, they ran an extreme experiment: building and shipping an internal beta product with zero manually written code.
令人惊讶的是:OpenAI的一个团队竟然在五个月内完全依靠AI生成了超过一百万行代码,没有任何人工编写或审查的代码,这种极端的实验展示了AI在软件开发中的惊人能力,彻底颠覆了传统的软件工程模式。
-
-
cssstudio.ai cssstudio.ai
-
Your AI agent writes every change into source code.
这一功能暗示了一种全新的开发范式,设计师的视觉编辑可以直接转化为生产级代码。这可能会显著减少前端开发中的手动编码工作,但也引发了关于AI生成代码质量和可维护性的重要问题。
-
Your AI agent writes every change into source code.
令人惊讶的是:这个工具将设计工作与代码生成完全分离,设计师可以直接在浏览器中进行视觉编辑,而AI代理会自动生成对应的CSS代码,这大大降低了前端开发的门槛,模糊了设计与开发之间的界限。
-
-
blog.skypilot.co blog.skypilot.co
-
Without experience with compiler behavior, the agent couldn't have predicted which 'optimizations' the compiler would already handle.
这一观察揭示了AI代理在编译优化方面的局限性:代理无法准确预测编译器已经自动处理的优化。这表明AI代理需要更深入理解编译器行为和现代编译技术,以避免徒劳的优化尝试。这一发现对AI辅助编程系统的发展具有重要启示,强调了领域知识整合的重要性。
-
Studying forks and other backends was more productive than searching arxiv. ik_llama.cpp and the CUDA backend directly informed two of the five final optimizations.
这是一个令人惊讶的发现,表明实践中的代码实现比学术论文更能直接指导优化工作。代理通过研究实际项目分支和不同后端实现获得了更有价值的见解,而不是依赖理论研究。这强调了在AI代理开发中,实践经验和现有实现的重要性可能超过理论文献。
-
-
-
In many ways, coding represents the ideal use case for AI, both in terms of what the technology can do and how readily the enterprise market will embrace it. Code is data dense, meaning there is a massive amount of high-quality code available online for the models to train on.
编程被视为AI的理想应用场景,这揭示了AI成功应用的关键要素:高质量训练数据可用性、任务结构化程度、输出可验证性。这一洞见不仅解释了为什么编程辅助工具率先取得突破,也为其他领域的AI应用提供了成功模式参考,暗示未来AI在其他数据丰富、结构化程度高的领域可能取得类似成功。
-
Code is upstream of all other applications because it's the core building block for any piece of software, so AI's accelerating impact on code should accelerate every other domain.
「代码是所有其他应用的上游」——这是整篇报告最具战略眼光的一句话。AI 对编程的渗透不只是一个行业的故事,而是所有行业 AI 化的基础设施升级。当构建软件的成本下降 10 倍时,所有依赖软件的垂直行业的 AI 工具建设成本也随之下降。这解释了为什么编程 AI 的爆发不只是「一个热门赛道」,而是整个 AI 产业链的放大器。对智谱 AI 的启示:代码能力的提升是所有企业 Agent 场景的先决条件。
-
-
-
Unsloth Studio:可视化界面,零代码完成全流程
令人惊讶的是:复杂的AI模型训练流程现在可以通过零代码的可视化界面完成,这标志着AI技术正在从专业领域向普通用户开放,可能加速AI在各行业的应用创新。
-
-
-
Add contacts, live search, full pipeline dashboard – all unit tests passed.
令人惊讶的是:AI生成的代码不仅功能完整,包括联系人管理、实时搜索和完整的管道仪表板,而且所有单元测试都通过了,表明AI不仅能快速编码,还能保证代码质量。
-
-
-
It works with Claude Code, Codex, OpenClaw and OpenCode.
令人惊讶的是:这个开源替代品支持多种代码相关工具,包括Claude Code和Codex等,这表明AI代码助手领域已经形成了多样化的工具生态系统,用户可以在不同平台间切换而保持功能一致性。
-
-
www.anthropic.com www.anthropic.com
-
It also discovered a 16-year-old vulnerability in FFmpeg—which is used by innumerable pieces of software to encode and decode video—in a line of code that automated testing tools had hit five million times without ever catching the problem.
令人惊讶的是:Claude Mythos Preview在FFmpeg中发现了一个存在16年的漏洞,而这个漏洞在被自动化测试工具执行了500万次后仍未被发现。这揭示了AI在代码分析方面具有传统自动化工具无法比拟的独特洞察力。
Tags
Annotators
URL
-
-
mistral.ai mistral.ai
-
The boundary between AI judgment and human judgment is explicit and written in code.
令人惊讶的是:Mistral的连接器允许开发者在代码中明确设置AI判断和人类判断之间的界限。通过requires_confirmation参数,开发者可以确保某些工具执行前需要人工批准,这种设计既保持了AI的灵活性,又确保了关键操作的安全性。
-
Because of this, teams keep rebuilding the same integration layer. Even within the same company, similar integrations are often implemented multiple times in arbitrary code, leading to security risks, lack of traffic observability, and duplication of work.
令人惊讶的是:即使在同一公司内部,类似的集成也经常被多次实现,导致安全风险、流量可见性不足和工作重复。这种重复建设企业AI集成层的问题比人们想象的更为普遍,而Mistral的连接器旨在通过封装集成到单一可重用实体来解决这一问题。
-
-
www.yanist.com www.yanist.com
-
an agent does not care about the structure, unless you specifically ask it to. But even in this case you have to review the changes.
【启发】「AI 天然不在意结构,除非你明确要求」——这个发现定义了人类工程师在 AI 时代最不可替代的职责:做代码结构的「守门人」。这与 Every 文章里「每个人都是管理者」的洞见形成呼应:人类的工作从「执行代码」转变为「审查代码质量并为 AI 设定标准」。对工程团队文化的启发:代码 Review 的重要性不是在下降,而是在上升——因为现在需要 Review 的代码量是以前的 10 倍。
-
their productivity is affected by the state of the codebase.
【启发】这句话的深远意义在于:它把 AI Coding Agent 与人类开发者置于同一评价维度。这不是「AI 是否能替代人」的问题,而是「AI 受代码质量影响的方式是否与人类相同」。答案是肯定的——这意味着几十年来软件工程师积累的代码质量实践,不是因为 AI 的到来而失效,而恰恰因为 AI 的到来而变得更加重要。技术债从「慢慢影响人」变成了「立刻影响 AI 的 token 消耗」。
-
-
cursor.com cursor.com
-
We will also continue to invest in the IDE until codebases are self-driving.
令人惊讶的是:Cursor明确表示将持续投资IDE直到代码库能够自我驱动,这展示了他们对AI编程未来的大胆愿景,暗示未来可能完全不需要人工干预的软件开发流程。
Tags
Annotators
URL
-
- Jan 2026
-
www.darioamodei.com www.darioamodei.com
-
AI is now writing much of the code at Anthropic
for - AI - status - writing most of the code at Anthropic
-
-
www.templeton.org www.templeton.org
-
morphic genetic codes
for - Michael Levin - morphic genetic code
-
-
log.schemescape.com log.schemescape.com
-
It's 450 KB (static binary, including templates for this site, gzip compressed) It builds my ~140 page site in 300 ms (wall clock time, on an 11-year-old old laptop) It performs acceptably on a 28-year-old laptop, running NetBSD (Pentium 166 MHz) It's trivial to compile, requiring only a C compiler, GNU Make, sed, and sh
For comparison, ANPD—describing a static site generator as an LP doc that I published in response to Jared's Show HN thread for md2blog, is 126KB. It requires no compiler, because it uses the browser's JS runtime to execute (unlike md2blog, which requires you to download Deno or a binary with Deno embedded to run it).
Note also that the numbers here also differ from the ones Jared had at the time of publication, where he had originally written:
- It's ~270 KB (static binary + templates for this site, gzip compressed)
- It builds my ~140 page site in ~150 ms (wall clock time, on an 11-year-old old laptop)
- It performs acceptably on a 28-year-old laptop, running NetBSD (Pentium 166 MHz)
- It's trivial to compile, requiring only a C compiler, make, and sed
-
- Dec 2025
-
dadaismee.github.io dadaismee.github.io
-
сбора, обработки, хранения и развития
Похоже на этапы CODE у Тьяго Форте и этапов GTD Дэвида Аллена.
-
-
Local file Local file
-
unclear instructional materialsand complex information presentation add extraneous cognitive load.
Summary: Defines "extraneous load" as a result of "unclear presentation," supporting the argument that non-standard writing (code-meshing) unnecessarily taxes the reader. This also aligns with findings from Liu.
-
-
Local file Local file
-
when essentialinformation is presented too rapidly, it can overload thelearner’s cognitive capacity, leading to cognitive overload.When this happens, the learner cannot process essentialinformation and learning outcomes effectively.
Summary: Provides the consequence of poor structure: "cognitive overload." This supports the argument that unstructured or non-standard writing risks overloading the reader, preventing them from understanding the core message.
Indirectly, this refutes the idea that "code-meshing" is necessary for more accurate communication.
-
-
adventofcode.com adventofcode.com
-
connect together the 1000 pairs of junction boxes which are closest together
The input file contains 1000 boxes. If I connect together 1000 (or as few as 999) pairs following the procedure described above, I end up with one circuit connecting all boxes.
I should actually count the connection within components towards the total of 1000.
Tags
Annotators
URL
-
- Sep 2025
-
strangebeautiful.com strangebeautiful.com
-
In calling the structure of the chromosome fibres a code-script
from where does he draw the idea "code-script"? Is it from the developing information theory of the time? Somewhere else?
There is definitely the idea of a code running in the sense of programming, which was likely not a common conceptualization at the time.
On p. 22 he uses the phrase "law-code" which is likely the closer meaning of code he's using and not the sense of genetic code as understood much later when DNA and the underlying protein coding sequences were unraveled.
Morse code may also be a tangential underlying meaning of his sense of "code" as something unknown but potentially revealable.
-
- Aug 2025
-
siraj-samsudeen.github.io siraj-samsudeen.github.ioindex15
-
# This fails at compile time (missing required field) %User{name: "Alice"} # Error: missing required key :email
It says
%User{name: "Alice"}fails at compile time with a missing required field error, but when I tested it, it works fine and just sets the other fields tonil. There doesn't seem to be any required field validation happening here. -
↑ fields with defaults
This is pointing to the required fields instead of the fields with defaults
-
Enum.reduce(numbers, fn x, acc -> x + acc end)
The Python example uses reduce with a default value (0), but the Elixir translation uses Enum.reduce/2 without a default value. For a true equivalent, it should use Enum.reduce(numbers, 0, fn acc, x -> acc + x end) to match the Python behavior.
-
, do
This syntax is not explained. Why is the comma(,) needed before the
do, and why don't we writeend, why the colon(:) after thedo. -
|> System.system_time()
Logic error: Cannot pipe to
System.system_time()- this function doesn't accept string input.- According to Elixir docs:
System.system_time() :: integer()- takes no arguments and returns an integer System.system_time(unit)variant takes only a time unit parameter, not piped string data
- According to Elixir docs:
-
Required for zero-argument functions data |> String.trim()
String.trim() is NOT zero-argument
String.trim/1requires a string argumentString.trim/2optionally takes characters to trim
Comment "zero-argument functions" is wrong
-
.title()
The Python example uses
.title(), but the Elixir version usesString.capitalize()- these don't produce the same output. Should probably use.capitalize()in Python for a true equivalent. since Elixir doesn't have atitle()function.The outputs will also be different because of this.
-
def clean_name(raw_name) do raw_name |> String.trim() |> String.capitalize() end name = " alice johnson " result = clean_name(name) IO.puts(result) # "Alice Johnson"
The
defsyntax keeps appearing in examples, but I can't replicate it in the iex terminal. It seems like this only works in.exfiles, but there's no explanation on how to create and run those files. -
iex(67)> sentences = Enum.map(sentences, fn x -> String.split(x) end) [ ["Hello", "world"], ["Elixir", "is", "fun"], ["I", "love", "programming"], ["Code", "every", "day"] ] iex(73)> words = Enum.filter(words, fn x -> String.length(x) >= 4 end) ["Hello", "world", "Elixir", "love", "programming", "Code", "every"] iex(74)> length(words) 7
This example missed out
List.flattenpart -
# With parentheses (also valid) length([1, 2, 3]) # Also works IO.puts("hello") # Also works String.upcase("hello") # Also works
The parentheses examples could be shown first, since that's what Python devs are already familiar with, then introduce the optional syntax.
-
# def is also used to create named functions def add(x, y) do x + y end
As per the above explanation,
Everything returns a value in Elixir, isn't thedefa statement just as in Python in the above example -
case
Didn't explain what it was doing, as it seems like a new concept.
-
IO.puts({x, y} = {1, 2})
I got an undefined error

-
This works in Elixir (but fails in Python):
I got a CompileError when using the
^. ```elixir iex(7)> x = 6 6 iex(8)> 6 = x 6 iex(9)> 6 = 5 + 1 6 iex(10)> a = 5 5 iex(11)> ^x = ^a + 1 error: misplaced operator ^aThe pin operator ^ is supported only inside matches or inside custom macros. Make sure you are inside a match or all necessary macros have been required └─ iex:11
** (CompileError) cannot compile code (errors have been logged) ```
-
a + 1 = x
I tried the example, but
a + 1 = xthrows a compile error. The book says this should work 'both directions like algebra', but Elixir won't let me put an expression on the left side of the match. Am I missing something, or is this example incorrect?
Tags
Annotators
URL
-
-
dprint.dev dprint.dev
Tags
Annotators
URL
- Jun 2025
-
code.visualstudio.com code.visualstudio.com
-
www.youtube.com www.youtube.com
-
Briefing : Révolutionner la productivité des associations grâce au No-Code et à l'IA
Introduction
Ce briefing récapitule les points clés abordés lors du webinaire organisé par Solidatech, en partenariat avec Contournement et Nocode Forgood.
L'objectif principal de cette session était de démontrer comment les outils "no-code" et l'intelligence artificielle (IA) peuvent permettre aux associations de "gagner des dizaines d’heures par mois" et de renforcer leur impact numérique.
1. Solidatech : Renforcer l'impact numérique des associations
- Solidatech est une organisation française fondée en 2008, dédiée à l'accompagnement des associations dans leur transformation numérique.
Composée d'une douzaine de personnes, elle opère depuis Paris et les Deux-Sèvres, où se situe sa coopérative d'insertion, les Ateliers du Bocage (mouvement Emmaüs), spécialisée dans le réemploi de matériel bureautique. Solidatech est également le satellite français du réseau international TechSoup.
Public cible :
Plus de 42 000 associations inscrites gratuitement. Divers statuts juridiques : associations (locales ou plus grandes), fondations, fonds de dotation, bibliothèques publiques. Toutes tailles d'organisations, avec ou sans employés (y compris celles composées uniquement de bénévoles).
Piliers d'accompagnement :
- Accès à des outils et matériels à tarifs réduits : Offre de logiciels et matériels reconditionnés (ordinateurs, écrans, smartphones, etc.) avec des remises allant de -30% à -90%, voire des gratuités. Exemples de partenaires : Cisco, Dell.
- Développement des usages numériques :Centre de ressources gratuit.
- Équipe support basée dans les Deux-Sèvres pour le conseil et le choix des licences.
- Outil de diagnostic numérique pour évaluer la maturité numérique.
- Étude nationale annuelle sur la place du numérique dans le milieu associatif.
- Accompagnement et formation :Newsletters régulières.
- Partenariat Prestatek (annuaire de prestataires de services).
- Webinaires thématiques variés.
- Formations certifiées Qualiopi sur des sujets comme la conformité RGPD, la communication digitale, la recherche de financement, la gestion de dons, et l'utilisation d'outils (Microsoft 365, Canva).
- Impact : Solidatech aide les associations à réaliser des "économies monétaires [et] en temps", à gagner en maturité numérique et à se professionnaliser.
2. Le No-Code et l'IA : Définitions et promesses
Erwan Kezzard, cofondateur de Contournement, a introduit les concepts de no-code et d'IA générative comme des leviers majeurs pour optimiser le temps. Il souligne que "le temps... c'est une ressource extrêmement importante, notamment quand on travaille soit aux sources contraintes".
Définition du No-Code :
-
"Le nocode comme son anxie son son les les l'exprime et l'exige ce sont des outils qui permettent de réaliser visuellement intuitivement des projets numériques sans forcément avoir de compétences informatiques en code."
-
Permet de créer des sites web, des petites applications, d'automatiser des tâches, de créer des solutions internes, etc., de manière visuelle et intuitive.
-
Exemple : Excel n'est pas du no-code ; le no-code permet de "créer ses propres outils".
Définition de l'IA Générative :
Il s'agit des IA accessibles comme "les Chat GPT, Mistral et autres qui sont euh bah des technologies auxquelles on peut assez rapidement demander des choses demander de retraiter du contenu demander de faire des recherches et elle nous répond".
Potentiel et Bénéfices :
- L'objectif est de "gagner des dizaines d'heures par mois" en évitant les "manipulations répétitives, des tâches non informatisées ou des tâches informatisées mal optimisées".
- Principal usage : l'optimisation de la productivité, c'est-à-dire "travailler mieux pour faire autant ou faire moins". Cela concerne l'optimisation des "ops" (opérations quotidiennes) en administratif, RH, gestion de projet, etc.
- Exemple de gain de temps : "si cinq fois par jour je passe 5 minutes à faire une tâche à la fin de l'année j'aurais passé 6 jours plein 6 jours de travail à ne faire que ça".
3. Les Trois Briques Fondamentales du No-Code Erwan Kezzard a illustré les capacités du no-code à travers trois piliers principaux, souvent combinés :
Bases de données visuelles :
Outil clé : Airtable (alternative française : TimeTonic).
- Fonctionnalité : Ressemble à Excel mais est une "base de données", où chaque ligne est une fiche. Les colonnes ont des types de données spécifiques (liens, sélecteurs, pièces jointes, dates).
- Avantages : Création rapide de vues filtrées et segmentées ("vues" pour stagiaires, commerciaux, DG), gestion des accès, formulaires d'entrée de données (créé en "moins de 25 secondes").
- Concept de "relations" : Possibilité de lier des entrées entre différentes tables (ex: lier des prospects à des entreprises), ce qui résout de nombreux problèmes de ressaisie et de cohérence des données. Permet de naviguer entre les données comme sur une application.
- Permet de construire des "CRM que je me fais moi-même" et des "intranets".
Automatisation et interconnexion :
- Outil clé : Zapier (alternatives : Make, N8N - open source mais plus technique).
- Fonctionnalité : Connecte différents outils pour automatiser des processus.
- Exemple : "à chaque fois que dans Airtable il y a une nouvelle entrée dans la table entreprise alors automatiquement va dans le chat GPT demande-lui 'Tu es un expert en politique RSE...' puis prends cette convers enfin trouve la ligne dans Air Table et mets à jour cette ligne avec l'info directement ici".
- Permet d'automatiser des notifications (Teams, Slack), des envois de mails personnalisés, la création de documents (PDF), etc.
- L'IA "fait qu'un seul boulot" (poser la question), le no-code "fait le boulot" des tuyaux d'interconnexion.
Interfaces (Sites web, applications mobiles/web) :
- Outil clé : Glide (pour applications mobiles), Software (pour applications web / intranets).
- Fonctionnalité : Permet de créer des applications mobiles ou web à partir d'une base de données existante (ex: Airtable).
- Avantages : Ne nécessite aucune installation ni hébergement, permet de modifier l'apparence et les fonctionnalités intuitivement. "je peux modifier cette application mobile changer l'apparence changer l'info qui apparaît où et cetera".
4. Philosophie et Positionnement de Contournement & Nocode Forgood
Contournement :
- Métier : "former les équipes et les individus au nos code et Alia pour leur permettre de travailler plus efficacement".
- Ne vise pas à lancer la "prochaine start-up à la mode" mais à "gagner du temps", "digitaliser" et "fluidifier ses processus".
- Offre de formations en présentiel, téléprésentiel, et e-learning (plateforme avec abonnement à coût accessible, réductions prochainement à 50-100€/mois).
Accompagne aussi des publics éloignés de l'emploi.
- Vision du no-code : une "compétence complémentaire" valorisable sur le marché de l'emploi ("je suis chargé de communication... je me forme quelques jours au nocode je sais digitaliser automatiser dans mon métier et ça m'apporte quelque chose").
- Met en garde contre le "miroir aux alouettes" et le "charlatanisme" liés au no-code comme "nouveau métier".
Nocode France :
- "La communauté la plus active au monde dans le Nocode qui est française".
- Composée de 15 000 personnes qui "s'entraident bénévolement", offrant conseils et orientations.
Nocode Forgood :
- Mission : "donner accès aux outils no code les plus démocratiques du numérique pour rendre la vie plus simple aux assos et leur permettre de démultiplier leur impact".
- Fait découvrir le no-code (masterclass) et surtout met en relation des associations avec des "nocodeurs et des nocodeuses engagés".
- Approche "MVP" (Minimum Viable Product) : "commencer petit", "réaliser le plus vite possible un morceau qui fonctionne et après de l'adapter". L'objectif est d'aider les associations à "faire leur skateboard" (amorce), puis de les accompagner.
- Projets : les nocodeurs peuvent travailler bénévolement (avec contrepartie de formations Contournement) ou à "tarif solidaire".
5. Exemples concrets de succès
- Les Francofolies : "15 personnes un seul informaticien". En deux jours de formation Airtable, ils ont gagné "plusieurs dizaines d'heures par semaine" notamment sur le reporting carbone.
Ils ont aussi fait appel à une experte Ania pour des projets plus complexes, mais ont aussi décidé de ne pas "nocoder" certains processus peu chronophages.
- La MedNum : Coopérative qui gère son sociétariat, ses projets et son organisme de formation avec Airtable (base de données) et Make (automatisation).
Gagne "énormément de temps". Utilise aussi Notion pour la documentation interne et les ressources textuelles.
- Wildlife Impact Network (via Nocode Forgood) : Création d'un site avec Softer et d'une galerie de projets finançables avec Airtable en deux jours.
- Naestan (via Nocode Forgood) : Création d'un outil de pilotage et de reporting interne pour une association d'aide aux jeunes Afghans, réalisé avec CODA.
- Nocode Forgood (interne) : Automatisation de la génération de brouillons de posts LinkedIn à partir de retours d'expérience d'associations, via Make et l'IA.
6. Bonnes pratiques et avertissements
- Cartographier avant de se lancer : "Une bonne pratique c'est de cartographier avant de se lancer".
- Ne pas tout no-coder à outrance : "pas besoin de tout nous coder les meilleurs outils ça peut être de trouver des outils spécialisés". Si un processus fonctionne bien, ne pas le modifier.
- Outils modernes et interconnectables : Privilégier les outils qui peuvent se connecter entre eux (vérifier la compatibilité Zapier ou Make). Exemple : Assoconnect est intégrable avec Zapier et Make.
- Collaboration avec l'IT et les juristes : "appuyez-vous toujours sur l'IT sur le juridique sur les décisionnaires ne faites pas du shadow IT dans votre coin sur le nocode s'il y a des gens qui doivent être décisionnaires avec vous ça peut exposer à des risques de données mal géré et cetera de sécurité".
- Formation : Même si le no-code est accessible, un minimum de formation est nécessaire. "Au bout d'une journée ou de 2 à 5 jours de formation les gens peuvent commencer à faire des choses".
- Appui sur des experts externes : Recommandé pour éviter les erreurs (ex: données publiques par erreur) et structurer des projets plus complexes.
- Coût : "Un outil no code qui se respecte est payant déjà un dans un outil de code qui se respecte est fremium". Les tarifs commencent souvent entre 15 et 30€/mois. Il faut prévoir "entre 50 et 100 € de budget mensuel" pour faire beaucoup de choses. C'est un investissement rapidement amorti.
- RGPD et stockage des données :L'hébergement aux États-Unis n'est pas intrinsèquement non-RGPD. De nombreux outils américains sont "RGPD compliant".
- Il est crucial de consulter un juriste pour les données sensibles.
- "Le RGPD rappelons que c'est un process où vous vous devez faire toute une démarche de nous par exemple contournement on a tout un registre où on dit où sont stocké quelle donné et on fait gaffe régulièrement à supprimer les données qui ont plus de 3 ans".
- Les outils no-code payants ne "vendent" généralement pas vos données, leur modèle économique étant basé sur l'abonnement. Le risque principal est lié aux exigences gouvernementales (Cloud Act, Patriot Act).
- Migration de bases de données : Simple via l'import CSV dans Airtable (ou TimeTonic, Notion). Possibilité de synchroniser des bases existantes (ex: Excel) avec Airtable via Zapier/Make.
- Différence Notion vs. Airtable : Notion est "plus orienté je prends des notes", gestion de "contenu riche", "espace collaboratif tout en un" (wiki, documentation interne). Airtable est centré sur la "donnée" et sa structuration.
7. Outils de productivité IA complémentaires
Whisper Flow : Outil de dictée vocale permettant de "dicter et ne plus taper quasiment au clavier". Reconnaissance précise de la syntaxe et de la ponctuation. Dict AI : Application mobile française et souveraine pour "prendre en note les réunions automatiquement" et générer des comptes-rendus.
Conclusion
Le no-code et l'IA représentent une opportunité significative pour les associations de toutes tailles d'améliorer leur efficacité opérationnelle et de se professionnaliser.
Des organisations comme Solidatech, Contournement et Nocode Forgood jouent un rôle essentiel dans la démocratisation de ces technologies, en offrant des ressources, des formations et un accompagnement adapté, tout en soulignant l'importance de l'éthique, de la sécurité des données et d'une approche pragmatique dans leur adoption.
Tags
Annotators
URL
-
-
-
‘The essential point for us is that no such complete ethical code exists.
If it could what would it's mathematical structure look like? Certainly not linear.
-
We are not concerned here with the question whether it would be desirableto have such a complete ethical code.
The old Republican party that brought Hayek to the fore must be spinning in their graves that the current version not only doesn't have a complete ethical code, but that it seems either wholly inconsistent or altogether absent.
-
-
-
For our push notification system to be fast, we even had to develop a custom C-based service.
-
- Apr 2025
-
elixir.bootlin.com elixir.bootlin.com
-
#if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) /* Build perf. domains: */ for (i = 0; i < ndoms_new; i++) { for (j = 0; j < n && !sched_energy_update; j++) { if (cpumask_equal(doms_new[i], doms_cur[j]) && cpu_rq(cpumask_first(doms_cur[j]))->rd->pd) { has_eas = true; goto match3; } } /* No match - add perf. domains for a new rd */ has_eas |= build_perf_domains(doms_new[i]);
Policy that creates performance domains if EAS is enabled. This means that the groups of CPUs inside each domain is governed by schedutil + EAS. Schedutil is the only CPU governor that fits EAS.
-
-
www.binpress.com www.binpress.com
-
A lot of it feels like someone who doesn’t like the old code and wants to do it “right.” I can agree that the old code is ugly. But it will take an awful lot of effort to make a new implementation. It’s a lot like what happened to Elvis: A rewrite was going to make it much better, but it took so long, during which Vim added more features, that eventually there are not so many Elvis users. And the rewritten Elvis may have nice code, but users don’t notice that.
-
-
-
Why not a library? We've found it extremely hard to develop a library that: Supports the many database libraries, ORMs, frameworks, runtimes, and deployment options available in the ecosystem. Provides enough flexibility for the majority of use cases. Does not add significant complexity to projects.
-
Lucia is now a learning resource on implementing auth from scratch.
-
-
github.com github.com
-
Lucia, the authentication library that we are using, is deprecated (Q1/2025). However, the author of Lucia decided to make it a learning resource, because Lucia is just a thin wrapper around cryptographic libraries like Oslo. So we are following the migration path on their website and will also use Oslo instead of Lucia.
-
-
editorconfig.org editorconfig.org
-
EditorConfig helps maintain consistent coding styles for multiple developers working on the same project across various editors and IDEs.
Tags
Annotators
URL
-
-
prettier.io prettier.io
-
Prettier intentionally doesn’t support any kind of global configuration. This is to make sure that when a project is copied to another computer, Prettier’s behavior stays the same. Otherwise, Prettier wouldn’t be able to guarantee that everybody in a team gets the same consistent results.
-
-
alexandersandberg.com alexandersandberg.com
- Mar 2025
-
-
he Web, sadly, defaults to 8 spaces which is an abomination for every snippet of code that would ike to be instantly readable on Mobile Phones too browsers don't provide a tab size setting anywhere (last time I've checked) to override that horrifying 8 spaces legacy nobody wants or need since tabs were invented
a later comment shows this is incorrect; we have CSS tab-size
-
I was pretty anti-tabs for the longest time, until I heard the best argument for them, accessibility. Tabs exist for indentation customization, and this is exactly what is needed for people with impaired sight. IMO, this is a pretty good argument for moving towards tabs.
-
-
developer.mozilla.org developer.mozilla.org
-
github.com github.com
-
The goal of Lucia v3 was to be the easiest and cleanest way to implement database-backed sessions in your projects. It didn't have to be a library. I just assumed that a library will be the answer. But I ultimately came to conclusion that my assumption was wrong. I don't see this change as me abandoning the project. In fact, I think it's a step forward. If implementing sessions wasn't easy, I wouldn't be deprecating the package. But why wouldn't a library be the answer? It seems like a such an obvious answer. One word - database. I talked about how database adapters were a significant complexity tax to the library. I think a lot of people interpreted that as maintenance burden on myself. That's not wrong, but the bigger issue is how the adapters limit the API. Adapters always felt like a black box to me as both an end user and a maintainer. It's very hard to design something clean around it and makes everything clunky and fragile, especially when you need to deal with TypeScript shenanigans.
Tags
- too easy/simple/trivial for end-developers to write from scratch to expect (don't need library to do it for them; don't need to provide feature)
- when not to create a library
- when not to create a library: too hard to support/maintain the many ways it would need to be flexible
- creating/using library vs. copying code
Annotators
URL
-
- Feb 2025
-
martinfowler.com martinfowler.com
-
The mainline is an active branch, with regular drops of new and modified code. Keeping it healthy is important so that when people start new work, they are starting off a stable base. If it's healthy enough, you can also release code directly from mainline into production.
-
-
srsergiorodriguez.github.io srsergiorodriguez.github.io
-
Culturally engaged digital humanities— de la Michigan State University en Estados Unidos, es decir, un tipo de humanidades digitales conectadas con el trabajo comunitario, y la puesta en práctica de valores humanistas por medio de tecnologías y métodos digitales.
-
-
webuild.envato.com webuild.envato.com
-
Another problem is that now your business logic is obfuscated inside the ORM layer. If you look at the structure of the source code of a typical Rails application, all you see are these nice MVC buckets. They may reveal the domain models of the application, but you can’t see the Use Cases of the system, what it’s actually meant to do.
-
-
www.biorxiv.org www.biorxiv.org
-
Uncovering secrets of the proteome: Alternate RNA decoding & Protein asymmetry shaping cell fate
This presentation "Uncovering the secrets of the human proteome" was given in May 2024 at the 50th anniversary celebration of the Barnett Institute. It focused on progress in proteomics and two new discoveries: 1. Alternate RNA decoding results in stable and abundant proteins in mammals 2. Proteome asymmetry in mouse and human embryos before fate specification
The vastness and complexity of the human proteome have hampered its exploration. New mass spectrometry technologies are transcending those limitations and allowing for large gains in sensitivity, sequence coverage, spatial and temporal resolution. I will discuss the conceptual drivers of this progress and provide examples of how it will advance our understanding of the human proteome and enable better therapeutics.
-
- Jan 2025
-
www.legifrance.gouv.fr www.legifrance.gouv.fr
-
Il veille également à la mixité sociale des publics scolarisés au sein des établissements d'enseignement
-
-
murphyqm.github.io murphyqm.github.io
-
This is an example comment that can be left on the page. You can leave notes, updates, comments or requests for clarification here using Hypothesis.
-
- Dec 2024
-
www.barcode-generator.org www.barcode-generator.org
Tags
Annotators
URL
-
-
oztypewriter.blogspot.com oztypewriter.blogspot.com
- Nov 2024
-
www.youtube.com www.youtube.com
-
think about how many of those applications were built by people that you know didn't have the capabilities to just build this massive infrastructure they just wrote some code and deployed it to you and now you have it and now you have a superpower uh this is a a remarkable uh kind of Technology
for - Internet Protocol - superpower - code it and make capability available
-
-
www.navy-radio.com www.navy-radio.com
-
A "mill" is distinguished from normal typewriters by having all caps (9 point, sans serif) and having numbers "1" and "slashed 0" on the top row. Note: Portable models were typically used elsewhere than in the radio room, but still have the same key/type layout.
Tags
Annotators
URL
-
-
elixir.bootlin.com elixir.bootlin.com
-
#if defined(CONFIG_ARCH_HAS_PTE_DEVMAP) && defined(CONFIG_TRANSPARENT_HUGEPAGE) static int __gup_device_huge(unsigned long pfn, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { int nr_start = *nr; struct dev_pagemap *pgmap = NULL; do { struct page *page = pfn_to_page(pfn); pgmap = get_dev_pagemap(pfn, pgmap); if (unlikely(!pgmap)) { undo_dev_pagemap(nr, nr_start, flags, pages); break; } if (!(flags & FOLL_PCI_P2PDMA) && is_pci_p2pdma_page(page)) { undo_dev_pagemap(nr, nr_start, flags, pages); break; } SetPageReferenced(page); pages[*nr] = page; if (unlikely(try_grab_page(page, flags))) { undo_dev_pagemap(nr, nr_start, flags, pages); break; } (*nr)++; pfn++; } while (addr += PAGE_SIZE, addr != end); put_dev_pagemap(pgmap); return addr == end; } static int __gup_device_huge_pmd(pmd_t orig, pmd_t *pmdp, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { unsigned long fault_pfn; int nr_start = *nr; fault_pfn = pmd_pfn(orig) + ((addr & ~PMD_MASK) >> PAGE_SHIFT); if (!__gup_device_huge(fault_pfn, addr, end, flags, pages, nr)) return 0; if (unlikely(pmd_val(orig) != pmd_val(*pmdp))) { undo_dev_pagemap(nr, nr_start, flags, pages); return 0; } return 1; } static int __gup_device_huge_pud(pud_t orig, pud_t *pudp, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { unsigned long fault_pfn; int nr_start = *nr; fault_pfn = pud_pfn(orig) + ((addr & ~PUD_MASK) >> PAGE_SHIFT); if (!__gup_device_huge(fault_pfn, addr, end, flags, pages, nr)) return 0; if (unlikely(pud_val(orig) != pud_val(*pudp))) { undo_dev_pagemap(nr, nr_start, flags, pages); return 0; } return 1; } #else static int __gup_device_huge_pmd(pmd_t orig, pmd_t *pmdp, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { BUILD_BUG(); return 0; } static int __gup_device_huge_pud(pud_t pud, pud_t *pudp, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { BUILD_BUG(); return 0; } #endif
seems like a check to see if pages can be grabbed. A quick skim maybe hints possible checks if huge pages can be grabbed?
-
#ifdef CONFIG_ARCH_HAS_HUGEPD static unsigned long hugepte_addr_end(unsigned long addr, unsigned long end, unsigned long sz) { unsigned long __boundary = (addr + sz) & ~(sz-1); return (__boundary - 1 < end - 1) ? __boundary : end; } static int gup_hugepte(pte_t *ptep, unsigned long sz, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { unsigned long pte_end; struct page *page; struct folio *folio; pte_t pte; int refs; pte_end = (addr + sz) & ~(sz-1); if (pte_end < end) end = pte_end; pte = huge_ptep_get(ptep); if (!pte_access_permitted(pte, flags & FOLL_WRITE)) return 0; /* hugepages are never "special" */ VM_BUG_ON(!pfn_valid(pte_pfn(pte))); page = nth_page(pte_page(pte), (addr & (sz - 1)) >> PAGE_SHIFT); refs = record_subpages(page, addr, end, pages + *nr); folio = try_grab_folio(page, refs, flags); if (!folio) return 0; if (unlikely(pte_val(pte) != pte_val(ptep_get(ptep)))) { gup_put_folio(folio, refs, flags); return 0; } if (!folio_fast_pin_allowed(folio, flags)) { gup_put_folio(folio, refs, flags); return 0; } if (!pte_write(pte) && gup_must_unshare(NULL, flags, &folio->page)) { gup_put_folio(folio, refs, flags); return 0; } *nr += refs; folio_set_referenced(folio); return 1; } static int gup_huge_pd(hugepd_t hugepd, unsigned long addr, unsigned int pdshift, unsigned long end, unsigned int flags, struct page **pages, int *nr) { pte_t *ptep; unsigned long sz = 1UL << hugepd_shift(hugepd); unsigned long next; ptep = hugepte_offset(hugepd, addr, pdshift); do { next = hugepte_addr_end(addr, end, sz); if (!gup_hugepte(ptep, sz, addr, end, flags, pages, nr)) return 0; } while (ptep++, addr = next, addr != end); return 1; } #else static inline int gup_huge_pd(hugepd_t hugepd, unsigned long addr, unsigned int pdshift, unsigned long end, unsigned int flags, struct page **pages, int *nr) { return 0; } #endif /* CONFIG_ARCH_HAS_HUGEPD */ static int gup_huge_pmd(pmd_t orig, pmd_t *pmdp, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { struct page *page; struct folio *folio; int refs; if (!pmd_access_permitted(orig, flags & FOLL_WRITE)) return 0; if (pmd_devmap(orig)) { if (unlikely(flags & FOLL_LONGTERM)) return 0; return __gup_device_huge_pmd(orig, pmdp, addr, end, flags, pages, nr); } page = nth_page(pmd_page(orig), (addr & ~PMD_MASK) >> PAGE_SHIFT); refs = record_subpages(page, addr, end, pages + *nr); folio = try_grab_folio(page, refs, flags); if (!folio) return 0; if (unlikely(pmd_val(orig) != pmd_val(*pmdp))) { gup_put_folio(folio, refs, flags); return 0; } if (!folio_fast_pin_allowed(folio, flags)) { gup_put_folio(folio, refs, flags); return 0; } if (!pmd_write(orig) && gup_must_unshare(NULL, flags, &folio->page)) { gup_put_folio(folio, refs, flags); return 0; } *nr += refs; folio_set_referenced(folio); return 1; } static int gup_huge_pud(pud_t orig, pud_t *pudp, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { struct page *page; struct folio *folio; int refs; if (!pud_access_permitted(orig, flags & FOLL_WRITE)) return 0; if (pud_devmap(orig)) { if (unlikely(flags & FOLL_LONGTERM)) return 0; return __gup_device_huge_pud(orig, pudp, addr, end, flags, pages, nr); } page = nth_page(pud_page(orig), (addr & ~PUD_MASK) >> PAGE_SHIFT); refs = record_subpages(page, addr, end, pages + *nr); folio = try_grab_folio(page, refs, flags); if (!folio) return 0; if (unlikely(pud_val(orig) != pud_val(*pudp))) { gup_put_folio(folio, refs, flags); return 0; } if (!folio_fast_pin_allowed(folio, flags)) { gup_put_folio(folio, refs, flags); return 0; } if (!pud_write(orig) && gup_must_unshare(NULL, flags, &folio->page)) { gup_put_folio(folio, refs, flags); return 0; } *nr += refs; folio_set_referenced(folio); return 1; } static int gup_huge_pgd(pgd_t orig, pgd_t *pgdp, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { int refs; struct page *page; struct folio *folio; if (!pgd_access_permitted(orig, flags & FOLL_WRITE)) return 0; BUILD_BUG_ON(pgd_devmap(orig)); page = nth_page(pgd_page(orig), (addr & ~PGDIR_MASK) >> PAGE_SHIFT); refs = record_subpages(page, addr, end, pages + *nr); folio = try_grab_folio(page, refs, flags); if (!folio) return 0; if (unlikely(pgd_val(orig) != pgd_val(*pgdp))) { gup_put_folio(folio, refs, flags); return 0; } if (!pgd_write(orig) && gup_must_unshare(NULL, flags, &folio->page)) { gup_put_folio(folio, refs, flags); return 0; } if (!folio_fast_pin_allowed(folio, flags)) { gup_put_folio(folio, refs, flags); return 0; } *nr += refs; folio_set_referenced(folio); return 1; } static int gup_pmd_range(pud_t *pudp, pud_t pud, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { unsigned long next; pmd_t *pmdp; pmdp = pmd_offset_lockless(pudp, pud, addr); do { pmd_t pmd = pmdp_get_lockless(pmdp); next = pmd_addr_end(addr, end); if (!pmd_present(pmd)) return 0; if (unlikely(pmd_trans_huge(pmd) || pmd_huge(pmd) || pmd_devmap(pmd))) { /* See gup_pte_range() */ if (pmd_protnone(pmd)) return 0; if (!gup_huge_pmd(pmd, pmdp, addr, next, flags, pages, nr)) return 0; } else if (unlikely(is_hugepd(__hugepd(pmd_val(pmd))))) { /* * architecture have different format for hugetlbfs * pmd format and THP pmd format */ if (!gup_huge_pd(__hugepd(pmd_val(pmd)), addr, PMD_SHIFT, next, flags, pages, nr)) return 0; } else if (!gup_pte_range(pmd, pmdp, addr, next, flags, pages, nr)) return 0; } while (pmdp++, addr = next, addr != end); return 1; } static int gup_pud_range(p4d_t *p4dp, p4d_t p4d, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { unsigned long next; pud_t *pudp; pudp = pud_offset_lockless(p4dp, p4d, addr); do { pud_t pud = READ_ONCE(*pudp); next = pud_addr_end(addr, end); if (unlikely(!pud_present(pud))) return 0; if (unlikely(pud_huge(pud) || pud_devmap(pud))) { if (!gup_huge_pud(pud, pudp, addr, next, flags, pages, nr)) return 0; } else if (unlikely(is_hugepd(__hugepd(pud_val(pud))))) { if (!gup_huge_pd(__hugepd(pud_val(pud)), addr, PUD_SHIFT, next, flags, pages, nr)) return 0; } else if (!gup_pmd_range(pudp, pud, addr, next, flags, pages, nr)) return 0; } while (pudp++, addr = next, addr != end); return 1; } static int gup_p4d_range(pgd_t *pgdp, pgd_t pgd, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { unsigned long next; p4d_t *p4dp; p4dp = p4d_offset_lockless(pgdp, pgd, addr); do { p4d_t p4d = READ_ONCE(*p4dp); next = p4d_addr_end(addr, end); if (p4d_none(p4d)) return 0; BUILD_BUG_ON(p4d_huge(p4d)); if (unlikely(is_hugepd(__hugepd(p4d_val(p4d))))) { if (!gup_huge_pd(__hugepd(p4d_val(p4d)), addr, P4D_SHIFT, next, flags, pages, nr)) return 0; } else if (!gup_pud_range(p4dp, p4d, addr, next, flags, pages, nr)) return 0; } while (p4dp++, addr = next, addr != end); return 1; } static void gup_pgd_range(unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { unsigned long next; pgd_t *pgdp; pgdp = pgd_offset(current->mm, addr); do { pgd_t pgd = READ_ONCE(*pgdp); next = pgd_addr_end(addr, end); if (pgd_none(pgd)) return; if (unlikely(pgd_huge(pgd))) { if (!gup_huge_pgd(pgd, pgdp, addr, next, flags, pages, nr)) return; } else if (unlikely(is_hugepd(__hugepd(pgd_val(pgd))))) { if (!gup_huge_pd(__hugepd(pgd_val(pgd)), addr, PGDIR_SHIFT, next, flags, pages, nr)) return; } else if (!gup_p4d_range(pgdp, pgd, addr, next, flags, pages, nr)) return; } while (pgdp++, addr = next, addr != end); } #else static inline void gup_pgd_range(unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { }
policy use functions for gup_huge pte policy code function above (not right above, gotta scroll probably to find it)
-
static int internal_get_user_pages_fast(unsigned long start, unsigned long nr_pages, unsigned int gup_flags, struct page **pages) { unsigned long len, end; unsigned long nr_pinned; int locked = 0; int ret; if (WARN_ON_ONCE(gup_flags & ~(FOLL_WRITE | FOLL_LONGTERM | FOLL_FORCE | FOLL_PIN | FOLL_GET | FOLL_FAST_ONLY | FOLL_NOFAULT | FOLL_PCI_P2PDMA | FOLL_HONOR_NUMA_FAULT))) return -EINVAL; if (gup_flags & FOLL_PIN) mm_set_has_pinned_flag(¤t->mm->flags); if (!(gup_flags & FOLL_FAST_ONLY)) might_lock_read(¤t->mm->mmap_lock); start = untagged_addr(start) & PAGE_MASK; len = nr_pages << PAGE_SHIFT; if (check_add_overflow(start, len, &end)) return -EOVERFLOW; if (end > TASK_SIZE_MAX) return -EFAULT; if (unlikely(!access_ok((void __user *)start, len))) return -EFAULT; nr_pinned = lockless_pages_from_mm(start, end, gup_flags, pages); if (nr_pinned == nr_pages || gup_flags & FOLL_FAST_ONLY) return nr_pinned; /* Slow path: try to get the remaining pages with get_user_pages */ start += nr_pinned << PAGE_SHIFT; pages += nr_pinned; ret = __gup_longterm_locked(current->mm, start, nr_pages - nr_pinned, pages, &locked, gup_flags | FOLL_TOUCH | FOLL_UNLOCKABLE); if (ret < 0) { /* * The caller has to unpin the pages we already pinned so * returning -errno is not an option */ if (nr_pinned) return nr_pinned; return ret; } return ret + nr_pinned; } /** * get_user_pages_fast_only() - pin user pages in memory * @start: starting user address * @nr_pages: number of pages from start to pin * @gup_flags: flags modifying pin behaviour * @pages: array that receives pointers to the pages pinned. * Should be at least nr_pages long. * * Like get_user_pages_fast() except it's IRQ-safe in that it won't fall back to * the regular GUP. * * If the architecture does not support this function, simply return with no * pages pinned. * * Careful, careful! COW breaking can go either way, so a non-write * access can get ambiguous page results. If you call this function without * 'write' set, you'd better be sure that you're ok with that ambiguity. */ int get_user_pages_fast_only(unsigned long start, int nr_pages, unsigned int gup_flags, struct page **pages) { /* * Internally (within mm/gup.c), gup fast variants must set FOLL_GET, * because gup fast is always a "pin with a +1 page refcount" request. * * FOLL_FAST_ONLY is required in order to match the API description of * this routine: no fall back to regular ("slow") GUP. */ if (!is_valid_gup_args(pages, NULL, &gup_flags, FOLL_GET | FOLL_FAST_ONLY)) return -EINVAL; return internal_get_user_pages_fast(start, nr_pages, gup_flags, pages); } EXPORT_SYMBOL_GPL(get_user_pages_fast_only); /** * get_user_pages_fast() - pin user pages in memory * @start: starting user address * @nr_pages: number of pages from start to pin * @gup_flags: flags modifying pin behaviour * @pages: array that receives pointers to the pages pinned. * Should be at least nr_pages long. * * Attempt to pin user pages in memory without taking mm->mmap_lock. * If not successful, it will fall back to taking the lock and * calling get_user_pages(). * * Returns number of pages pinned. This may be fewer than the number requested. * If nr_pages is 0 or negative, returns 0. If no pages were pinned, returns * -errno. */ int get_user_pages_fast(unsigned long start, int nr_pages, unsigned int gup_flags, struct page **pages) { /* * The caller may or may not have explicitly set FOLL_GET; either way is * OK. However, internally (within mm/gup.c), gup fast variants must set * FOLL_GET, because gup fast is always a "pin with a +1 page refcount" * request. */ if (!is_valid_gup_args(pages, NULL, &gup_flags, FOLL_GET)) return -EINVAL; return internal_get_user_pages_fast(start, nr_pages, gup_flags, pages); } EXPORT_SYMBOL_GPL(get_user_pages_fast); /** * pin_user_pages_fast() - pin user pages in memory without taking locks * * @start: starting user address * @nr_pages: number of pages from start to pin * @gup_flags: flags modifying pin behaviour * @pages: array that receives pointers to the pages pinned. * Should be at least nr_pages long. * * Nearly the same as get_user_pages_fast(), except that FOLL_PIN is set. See * get_user_pages_fast() for documentation on the function arguments, because * the arguments here are identical. * * FOLL_PIN means that the pages must be released via unpin_user_page(). Please * see Documentation/core-api/pin_user_pages.rst for further details. * * Note that if a zero_page is amongst the returned pages, it will not have * pins in it and unpin_user_page() will not remove pins from it. */ int pin_user_pages_fast(unsigned long start, int nr_pages, unsigned int gup_flags, struct page **pages) { if (!is_valid_gup_args(pages, NULL, &gup_flags, FOLL_PIN)) return -EINVAL; return internal_get_user_pages_fast(start, nr_pages, gup_flags, pages); } EXPORT_SYMBOL_GPL(pin_user_pages_fast); /** * pin_user_pages_remote() - pin pages of a remote process * * @mm: mm_struct of target mm * @start: starting user address * @nr_pages: number of pages from start to pin * @gup_flags: flags modifying lookup behaviour * @pages: array that receives pointers to the pages pinned. * Should be at least nr_pages long. * @locked: pointer to lock flag indicating whether lock is held and * subsequently whether VM_FAULT_RETRY functionality can be * utilised. Lock must initially be held. * * Nearly the same as get_user_pages_remote(), except that FOLL_PIN is set. See * get_user_pages_remote() for documentation on the function arguments, because * the arguments here are identical. * * FOLL_PIN means that the pages must be released via unpin_user_page(). Please * see Documentation/core-api/pin_user_pages.rst for details. * * Note that if a zero_page is amongst the returned pages, it will not have * pins in it and unpin_user_page*() will not remove pins from it. */ long pin_user_pages_remote(struct mm_struct *mm, unsigned long start, unsigned long nr_pages, unsigned int gup_flags, struct page **pages, int *locked) { int local_locked = 1; if (!is_valid_gup_args(pages, locked, &gup_flags, FOLL_PIN | FOLL_TOUCH | FOLL_REMOTE)) return 0; return __gup_longterm_locked(mm, start, nr_pages, pages, locked ? locked : &local_locked, gup_flags); } EXPORT_SYMBOL(pin_user_pages_remote); /** * pin_user_pages() - pin user pages in memory for use by other devices * * @start: starting user address * @nr_pages: number of pages from start to pin * @gup_flags: flags modifying lookup behaviour * @pages: array that receives pointers to the pages pinned. * Should be at least nr_pages long. * * Nearly the same as get_user_pages(), except that FOLL_TOUCH is not set, and * FOLL_PIN is set. * * FOLL_PIN means that the pages must be released via unpin_user_page(). Please * see Documentation/core-api/pin_user_pages.rst for details. * * Note that if a zero_page is amongst the returned pages, it will not have * pins in it and unpin_user_page*() will not remove pins from it. */ long pin_user_pages(unsigned long start, unsigned long nr_pages, unsigned int gup_flags, struct page **pages) { int locked = 1; if (!is_valid_gup_args(pages, NULL, &gup_flags, FOLL_PIN)) return 0; return __gup_longterm_locked(current->mm, start, nr_pages, pages, &locked, gup_flags); } EXPORT_SYMBOL(pin_user_pages); /* * pin_user_pages_unlocked() is the FOLL_PIN variant of * get_user_pages_unlocked(). Behavior is the same, except that this one sets * FOLL_PIN and rejects FOLL_GET. * * Note that if a zero_page is amongst the returned pages, it will not have * pins in it and unpin_user_page*() will not remove pins from it. */ long pin_user_pages_unlocked(unsigned long start, unsigned long nr_pages, struct page **pages, unsigned int gup_flags) { int locked = 0; if (!is_valid_gup_args(pages, NULL, &gup_flags, FOLL_PIN | FOLL_TOUCH | FOLL_UNLOCKABLE)) return 0; return __gup_longterm_locked(current->mm, start, nr_pages, pages, &locked, gup_flags); }
fast gup functions
-
if ((flags & FOLL_DUMP) && (vma_is_anonymous(vma) || !vma->vm_ops->fault)) return ERR_PTR(-EFAULT); return NULL;
explained in comments
-
#ifdef CONFIG_ARCH_HAS_PTE_SPECIAL /* * Fast-gup relies on pte change detection to avoid concurrent pgtable * operations. * * To pin the page, fast-gup needs to do below in order: * (1) pin the page (by prefetching pte), then (2) check pte not changed. * * For the rest of pgtable operations where pgtable updates can be racy * with fast-gup, we need to do (1) clear pte, then (2) check whether page * is pinned. * * Above will work for all pte-level operations, including THP split. * * For THP collapse, it's a bit more complicated because fast-gup may be * walking a pgtable page that is being freed (pte is still valid but pmd * can be cleared already). To avoid race in such condition, we need to * also check pmd here to make sure pmd doesn't change (corresponds to * pmdp_collapse_flush() in the THP collapse code path). */ static int gup_pte_range(pmd_t pmd, pmd_t *pmdp, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { struct dev_pagemap *pgmap = NULL; int nr_start = *nr, ret = 0; pte_t *ptep, *ptem; ptem = ptep = pte_offset_map(&pmd, addr); if (!ptep) return 0; do { pte_t pte = ptep_get_lockless(ptep); struct page *page; struct folio *folio; /* * Always fallback to ordinary GUP on PROT_NONE-mapped pages: * pte_access_permitted() better should reject these pages * either way: otherwise, GUP-fast might succeed in * cases where ordinary GUP would fail due to VMA access * permissions. */ if (pte_protnone(pte)) goto pte_unmap; if (!pte_access_permitted(pte, flags & FOLL_WRITE)) goto pte_unmap; if (pte_devmap(pte)) { if (unlikely(flags & FOLL_LONGTERM)) goto pte_unmap; pgmap = get_dev_pagemap(pte_pfn(pte), pgmap); if (unlikely(!pgmap)) { undo_dev_pagemap(nr, nr_start, flags, pages); goto pte_unmap; } } else if (pte_special(pte)) goto pte_unmap; VM_BUG_ON(!pfn_valid(pte_pfn(pte))); page = pte_page(pte); folio = try_grab_folio(page, 1, flags); if (!folio) goto pte_unmap; if (unlikely(folio_is_secretmem(folio))) { gup_put_folio(folio, 1, flags); goto pte_unmap; } if (unlikely(pmd_val(pmd) != pmd_val(*pmdp)) || unlikely(pte_val(pte) != pte_val(ptep_get(ptep)))) { gup_put_folio(folio, 1, flags); goto pte_unmap; } if (!folio_fast_pin_allowed(folio, flags)) { gup_put_folio(folio, 1, flags); goto pte_unmap; } if (!pte_write(pte) && gup_must_unshare(NULL, flags, page)) { gup_put_folio(folio, 1, flags); goto pte_unmap; } /* * We need to make the page accessible if and only if we are * going to access its content (the FOLL_PIN case). Please * see Documentation/core-api/pin_user_pages.rst for * details. */ if (flags & FOLL_PIN) { ret = arch_make_page_accessible(page); if (ret) { gup_put_folio(folio, 1, flags); goto pte_unmap; } } folio_set_referenced(folio); pages[*nr] = page; (*nr)++; } while (ptep++, addr += PAGE_SIZE, addr != end); ret = 1; pte_unmap: if (pgmap) put_dev_pagemap(pgmap); pte_unmap(ptem); return ret; } #else /* * If we can't determine whether or not a pte is special, then fail immediately * for ptes. Note, we can still pin HugeTLB and THP as these are guaranteed not * to be special. * * For a futex to be placed on a THP tail page, get_futex_key requires a * get_user_pages_fast_only implementation that can pin pages. Thus it's still * useful to have gup_huge_pmd even if we can't operate on ptes. */ static int gup_pte_range(pmd_t pmd, pmd_t *pmdp, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { return 0; } #endif /* CONFIG_ARCH_HAS_PTE_SPECIAL */
non concurrent fast gup approach that checks for pinned page and unmaps pte or clears it
-
#ifdef CONFIG_HAVE_FAST_GUP /* * Used in the GUP-fast path to determine whether a pin is permitted for a * specific folio. * * This call assumes the caller has pinned the folio, that the lowest page table * level still points to this folio, and that interrupts have been disabled. * * Writing to pinned file-backed dirty tracked folios is inherently problematic * (see comment describing the writable_file_mapping_allowed() function). We * therefore try to avoid the most egregious case of a long-term mapping doing * so. * * This function cannot be as thorough as that one as the VMA is not available * in the fast path, so instead we whitelist known good cases and if in doubt, * fall back to the slow path. */ static bool folio_fast_pin_allowed(struct folio *folio, unsigned int flags) { struct address_space *mapping; unsigned long mapping_flags; /* * If we aren't pinning then no problematic write can occur. A long term * pin is the most egregious case so this is the one we disallow. */ if ((flags & (FOLL_PIN | FOLL_LONGTERM | FOLL_WRITE)) != (FOLL_PIN | FOLL_LONGTERM | FOLL_WRITE)) return true; /* The folio is pinned, so we can safely access folio fields. */ if (WARN_ON_ONCE(folio_test_slab(folio))) return false; /* hugetlb mappings do not require dirty-tracking. */ if (folio_test_hugetlb(folio)) return true; /* * GUP-fast disables IRQs. When IRQS are disabled, RCU grace periods * cannot proceed, which means no actions performed under RCU can * proceed either. * * inodes and thus their mappings are freed under RCU, which means the * mapping cannot be freed beneath us and thus we can safely dereference * it. */ lockdep_assert_irqs_disabled(); /* * However, there may be operations which _alter_ the mapping, so ensure * we read it once and only once. */ mapping = READ_ONCE(folio->mapping); /* * The mapping may have been truncated, in any case we cannot determine * if this mapping is safe - fall back to slow path to determine how to * proceed. */ if (!mapping) return false; /* Anonymous folios pose no problem. */ mapping_flags = (unsigned long)mapping & PAGE_MAPPING_FLAGS; if (mapping_flags) return mapping_flags & PAGE_MAPPING_ANON; /* * At this point, we know the mapping is non-null and points to an * address_space object. The only remaining whitelisted file system is * shmem. */ return shmem_mapping(mapping); }
policy logic. avoids locks unlike get user pages unlocked/locked which seems risky so its not supposed to be used on concurrent gup logic
-
#ifdef CONFIG_MIGRATION /* * Returns the number of collected pages. Return value is always >= 0. */ static unsigned long collect_longterm_unpinnable_pages( struct list_head *movable_page_list, unsigned long nr_pages, struct page **pages) { unsigned long i, collected = 0; struct folio *prev_folio = NULL; bool drain_allow = true; for (i = 0; i < nr_pages; i++) { struct folio *folio = page_folio(pages[i]); if (folio == prev_folio) continue; prev_folio = folio; if (folio_is_longterm_pinnable(folio)) continue; collected++; if (folio_is_device_coherent(folio)) continue; if (folio_test_hugetlb(folio)) { isolate_hugetlb(folio, movable_page_list); continue; } if (!folio_test_lru(folio) && drain_allow) { lru_add_drain_all(); drain_allow = false; } if (!folio_isolate_lru(folio)) continue; list_add_tail(&folio->lru, movable_page_list); node_stat_mod_folio(folio, NR_ISOLATED_ANON + folio_is_file_lru(folio), folio_nr_pages(folio)); } return collected; }
-
#ifdef CONFIG_ELF_CORE struct page *get_dump_page(unsigned long addr) { struct page *page; int locked = 0; int ret; ret = __get_user_pages_locked(current->mm, addr, 1, &page, &locked, FOLL_FORCE | FOLL_DUMP | FOLL_GET); return (ret == 1) ? page : NULL; } #endif /* CONFIG_ELF_CORE */
part of policy use code likely
-
static __always_inline long __get_user_pages_locked(struct mm_struct *mm, unsigned long start, unsigned long nr_pages, struct page **pages, int *locked, unsigned int flags) { long ret, pages_done; bool must_unlock = false; /* * The internal caller expects GUP to manage the lock internally and the * lock must be released when this returns. */ if (!*locked) { if (mmap_read_lock_killable(mm)) return -EAGAIN; must_unlock = true; *locked = 1; } else mmap_assert_locked(mm); if (flags & FOLL_PIN) mm_set_has_pinned_flag(&mm->flags); /* * FOLL_PIN and FOLL_GET are mutually exclusive. Traditional behavior * is to set FOLL_GET if the caller wants pages[] filled in (but has * carelessly failed to specify FOLL_GET), so keep doing that, but only * for FOLL_GET, not for the newer FOLL_PIN. * * FOLL_PIN always expects pages to be non-null, but no need to assert * that here, as any failures will be obvious enough. */ if (pages && !(flags & FOLL_PIN)) flags |= FOLL_GET; pages_done = 0; for (;;) { ret = __get_user_pages(mm, start, nr_pages, flags, pages, locked); if (!(flags & FOLL_UNLOCKABLE)) { /* VM_FAULT_RETRY couldn't trigger, bypass */ pages_done = ret; break; } /* VM_FAULT_RETRY or VM_FAULT_COMPLETED cannot return errors */ if (!*locked) { BUG_ON(ret < 0); BUG_ON(ret >= nr_pages); } if (ret > 0) { nr_pages -= ret; pages_done += ret; if (!nr_pages) break; } if (*locked) { /* * VM_FAULT_RETRY didn't trigger or it was a * FOLL_NOWAIT. */ if (!pages_done) pages_done = ret; break; } /* * VM_FAULT_RETRY triggered, so seek to the faulting offset. * For the prefault case (!pages) we only update counts. */ if (likely(pages)) pages += ret; start += ret << PAGE_SHIFT; /* The lock was temporarily dropped, so we must unlock later */ must_unlock = true; retry: /* * Repeat on the address that fired VM_FAULT_RETRY * with both FAULT_FLAG_ALLOW_RETRY and * FAULT_FLAG_TRIED. Note that GUP can be interrupted * by fatal signals of even common signals, depending on * the caller's request. So we need to check it before we * start trying again otherwise it can loop forever. */ if (gup_signal_pending(flags)) { if (!pages_done) pages_done = -EINTR; break; } ret = mmap_read_lock_killable(mm); if (ret) { BUG_ON(ret > 0); if (!pages_done) pages_done = ret; break; } *locked = 1; ret = __get_user_pages(mm, start, 1, flags | FOLL_TRIED, pages, locked); if (!*locked) { /* Continue to retry until we succeeded */ BUG_ON(ret != 0); goto retry; } if (ret != 1) { BUG_ON(ret > 1); if (!pages_done) pages_done = ret; break; } nr_pages--; pages_done++; if (!nr_pages) break; if (likely(pages)) pages++; start += PAGE_SIZE; } if (must_unlock && *locked) { /* * We either temporarily dropped the lock, or the caller * requested that we both acquire and drop the lock. Either way, * we must now unlock, and notify the caller of that state. */ mmap_read_unlock(mm); *locked = 0; } return pages_done; }
same as gup but sets/unsets mmap_lock
-
/* user gate pages are read-only */ if (gup_flags & FOLL_WRITE) return -EFAULT; if (address > TASK_SIZE) pgd = pgd_offset_k(address); else pgd = pgd_offset_gate(mm, address); if (pgd_none(*pgd)) return -EFAULT; p4d = p4d_offset(pgd, address); if (p4d_none(*p4d)) return -EFAULT; pud = pud_offset(p4d, address); if (pud_none(*pud)) return -EFAULT; pmd = pmd_offset(pud, address); if (!pmd_present(*pmd)) return -EFAULT; pte = pte_offset_map(pmd, address); if (!pte) return -EFAULT; entry = ptep_get(pte); if (pte_none(entry)) goto unmap; *vma = get_gate_vma(mm); if (!page) goto out; *page = vm_normal_page(*vma, address, entry); if (!*page) { if ((gup_flags & FOLL_DUMP) || !is_zero_pfn(pte_pfn(entry))) goto unmap; *page = pte_page(entry); } ret = try_grab_page(*page, gup_flags); if (unlikely(ret)) goto unmap;
Most of these seem like sanity checks right up until line 897 i.e, 'if(!page)'* after which we seem to unmap the page.
-
static struct page *follow_page_mask(struct vm_area_struct *vma, unsigned long address, unsigned int flags, struct follow_page_context *ctx) { pgd_t *pgd; struct mm_struct *mm = vma->vm_mm; ctx->page_mask = 0; /* * Call hugetlb_follow_page_mask for hugetlb vmas as it will use * special hugetlb page table walking code. This eliminates the * need to check for hugetlb entries in the general walking code. */ if (is_vm_hugetlb_page(vma)) return hugetlb_follow_page_mask(vma, address, flags, &ctx->page_mask); pgd = pgd_offset(mm, address); if (pgd_none(*pgd) || unlikely(pgd_bad(*pgd))) return no_page_table(vma, flags); return follow_p4d_mask(vma, address, pgd, flags, ctx); }
places mask after following page into pte
-
if (likely(!pmd_trans_huge(pmdval))) return follow_page_pte(vma, address, pmd, flags, &ctx->pgmap); if (pmd_protnone(pmdval) && !gup_can_follow_protnone(vma, flags)) return no_page_table(vma, flags); ptl = pmd_lock(mm, pmd); if (unlikely(!pmd_present(*pmd))) { spin_unlock(ptl); return no_page_table(vma, flags); } if (unlikely(!pmd_trans_huge(*pmd))) { spin_unlock(ptl); return follow_page_pte(vma, address, pmd, flags, &ctx->pgmap); }
branch prediction to check if pmd is there and if it's big
-
/* FOLL_GET and FOLL_PIN are mutually exclusive. */ if (WARN_ON_ONCE((flags & (FOLL_PIN | FOLL_GET)) == (FOLL_PIN | FOLL_GET))) return ERR_PTR(-EINVAL); ptep = pte_offset_map_lock(mm, pmd, address, &ptl); if (!ptep) return no_page_table(vma, flags); pte = ptep_get(ptep); if (!pte_present(pte)) goto no_page; if (pte_protnone(pte) && !gup_can_follow_protnone(vma, flags)) goto no_page; page = vm_normal_page(vma, address, pte); /* * We only care about anon pages in can_follow_write_pte() and don't * have to worry about pte_devmap() because they are never anon. */ if ((flags & FOLL_WRITE) && !can_follow_write_pte(pte, page, vma, flags)) { page = NULL; goto out; } if (!page && pte_devmap(pte) && (flags & (FOLL_GET | FOLL_PIN))) { /* * Only return device mapping pages in the FOLL_GET or FOLL_PIN * case since they are only valid while holding the pgmap * reference. */ *pgmap = get_dev_pagemap(pte_pfn(pte), *pgmap); if (*pgmap) page = pte_page(pte); else goto no_page; } else if (unlikely(!page)) { if (flags & FOLL_DUMP) { /* Avoid special (like zero) pages in core dumps */ page = ERR_PTR(-EFAULT); goto out; } if (is_zero_pfn(pte_pfn(pte))) { page = pte_page(pte); } else { ret = follow_pfn_pte(vma, address, ptep, flags); page = ERR_PTR(ret); goto out; } } if (!pte_write(pte) && gup_must_unshare(vma, flags, page)) { page = ERR_PTR(-EMLINK); goto out; } VM_BUG_ON_PAGE((flags & FOLL_PIN) && PageAnon(page) && !PageAnonExclusive(page), page); /* try_grab_page() does nothing unless FOLL_GET or FOLL_PIN is set. */ ret = try_grab_page(page, flags); if (unlikely(ret)) { page = ERR_PTR(ret); goto out; } /* * We need to make the page accessible if and only if we are going * to access its content (the FOLL_PIN case). Please see * Documentation/core-api/pin_user_pages.rst for details. */ if (flags & FOLL_PIN) { ret = arch_make_page_accessible(page); if (ret) { unpin_user_page(page); page = ERR_PTR(ret); goto out; } } if (flags & FOLL_TOUCH) { if ((flags & FOLL_WRITE) && !pte_dirty(pte) && !PageDirty(page)) set_page_dirty(page); /* * pte_mkyoung() would be more correct here, but atomic care * is needed to avoid losing the dirty bit: it is easier to use * mark_page_accessed(). */ mark_page_accessed(page); }
finds page in pte. Judging by the complexity of the logic this is most likely policy code because we're literally getting user page
-
struct folio *folio = page_folio(page); if (WARN_ON_ONCE(folio_ref_count(folio) <= 0)) return -ENOMEM; if (unlikely(!(flags & FOLL_PCI_P2PDMA) && is_pci_p2pdma_page(page))) return -EREMOTEIO; if (flags & FOLL_GET) folio_ref_inc(folio);
checks for code that is involved in policy but is not the actual logic
-
if (unlikely((flags & FOLL_LONGTERM) && !folio_is_longterm_pinnable(folio))) { if (!put_devmap_managed_page_refs(&folio->page, refs)) folio_put_refs(folio, refs); return NULL;
checks for longterm folio pins.
-
if (WARN_ON_ONCE((flags & (FOLL_GET | FOLL_PIN)) == 0)) return NULL; if (unlikely(!(flags & FOLL_PCI_P2PDMA) && is_pci_p2pdma_page(page))) return NULL;
Time saving predictions(unlikely) and single time warning func(WARN_ON_ONCE) for flags. Not actual policy logic so low confidence.
-
if (unlikely(page_folio(page) != folio)) { if (!put_devmap_managed_page_refs(&folio->page, refs)) folio_put_refs(folio, refs); goto retry;
Uses prediction to check if a folio still points to the page. This is part of the function that tries to retrieve the folio to confirm that it is associated with a page.
-
folio = page_folio(page); if (WARN_ON_ONCE(folio_ref_count(folio) < 0)) return NULL; if (unlikely(!folio_ref_try_add(folio, refs))) return NULL;
These increment the reference count for the folio since you're returning a reference of the folio. Important function so important internal logic subsequently
-
- Oct 2024
- Sep 2024
-
www.gnu.org www.gnu.org
-
freedom to study the program's “source code,” and change it, so the program does your computing as you wish
-
-
blog.nodejitsu.com blog.nodejitsu.com
-
I don't expect everyone to read every single line of the code for a project they are trying to use, that isn't very reasonable. What I do see though, is that a lot developers have a mental barrier to actually opening up the source code for the project they are trying to use. They will read the documentation, run the tests, use the example code, but when they are faced with a problem that could be solved through a one or two line change in the source code, they shut down completely. The point is that you shouldn't be afraid to jump into the source code. Even if you don't fully understand the source code, in many cases you should be able to isolate your issue to a specific block. If you can reference this block ( or line numbers ) when opening up your support request, it will help the author better understand your problem.
-
-
stackoverflow.com stackoverflow.com
-
Rails' observers were partly inspired by aspect-oriented programming -- they're about cross-cutting concerns. If you're putting business logic in observers that is tightly coupled to the models they're observing, you're doing it wrong IMO.
-
-
github.com github.com
-
after_commit on: :create do OnboardingDripper.subscribe!(self) end
Tags
Annotators
URL
-
- Jun 2024
-
docdrop.org docdrop.org
-
Résumé de la vidéo [00:00:02][^1^][1] - [00:48:41][^2^][2]:
Cette vidéo présente le framework Observable pour créer des tableaux de bord, des rapports et des applications web de manière efficace et gratuite. Elle explique comment utiliser Observable pour documenter des fonctionnalités, introduit le concept de Data loader pour rafraîchir les données, et montre comment intégrer des réalisations Observable dans un site web statique.
Points forts: + [00:00:08][^3^][3] Introduction à Observable * Présentation du framework Observable comme générateur de site statique gratuit et open source * Utilisation de Markdown et JavaScript pour la documentation * Hébergement gratuit sur des plateformes comme GitHub Pages + [00:01:36][^4^][4] Spécialisation pour les tableaux de bord * Observable est spécialisé pour les applications nécessitant un rafraîchissement régulier des données * Introduction du concept de Data loader pour une mise à jour périodique des données * Création de sites web statiques capables de rafraîchir leurs données efficacement + [00:03:00][^5^][5] Développement JavaScript avec Observable * Observable comme environnement de développement JavaScript unique avec réactivité entre déclarations * Explication de la réactivité et de la dépendance des variables dans Observable * Utilisation de Markdown, LaTeX et JavaScript pour créer des contenus interactifs + [00:10:13][^6^][6] Utilisation de bibliothèques et gestion de versions * Observable permet d'appeler des bibliothèques externes et contient un gestionnaire de versions simplifié * Partage et publication de classeurs pour la collaboration et la réutilisation * Exemples de tutoriels et de cours disponibles sur Observable + [00:24:26][^7^][7] Démarrage avec le framework * Processus de création, d'édition et de prévisualisation d'un site avec Observable * Utilisation de GitHub Actions pour le rafraîchissement automatique des données * Intégration d'animations et de visualisations dans un site web statique + [00:40:15][^8^][8] Exemples d'applications créées avec Observable * Présentation d'applications variées, telles que l'évolution des joueurs d'échecs et un tableau de bord d'hôtel * Conversion d'une application JavaScript existante en une version améliorée avec Observable
Tags
Annotators
URL
-
-
docdrop.org docdrop.org
-
le dialogue social 00:26:44 n'occulte pas non plus les élèves les syndicats d'élèves sont plutôt des associations qui peuvent se constituer librement mais qui doivent être autorisés par le chef par le chef d'établissement et le conseil d'administration pour pouvoir exercer 00:26:57 leur activité au sein des lycées j'en revois à l'article R 511-9 du code d'éducation la liberté de réunion des élèves est prévue et encadrée aux articles 00:27:11 l511-2 et r51-10 du code d'éducation ainsi que leur liberté d'expression qui est consacrée elle à l'article R 511-8 si le chef d'établissement doit 00:27:24 permettre aux associations d'élèves de jouir de leurs droits et de leur donner quelques é là encore boîte au lettres panneau d'affichage il doit surtout savoir qu'il est garant du fait que l'objet comme l'activité de 00:27:36 l'association n'est ni politique ni religieux et doit être compatible avec les principes du service public de l'enseignement le tout dans le respect du code pénal il en va de l'ordre public 00:27:48 scolaire et par conséquent d'un dialogue social apaisé
-
le chef d'établissement est également garant d'un dialogue social constructif avec les usagers d'une part les associations de parents d'élèves participent aux différentes instances collégiales des établissements publics 00:26:06 des établissement scolair et le code deéducation leur consacre une sous-section spéciale à l'article D 111-6 et suivant le code précise que les associations parents d'élèves doivent 00:26:18 avoir pour objet la défense des intérêts moraux et matériel commun aux parents d'élèves dans le cadre de leur mission les associations bénéficient d'un certain nombre de faité matérielle elles aussi et logistique que le chef 00:26:31 d'établissement doit permettre une boîte aux lettres des tableaux d'affichage et puis l'autorisation le cas échéant de réunion ponctuell peut-être parfois de du matériel informatique
-
-
www.codium.ai www.codium.ai
Tags
Annotators
URL
-
-
akkartik.name akkartik.name
Tags
Annotators
URL
-
-
gigamonkeys.com gigamonkeys.com
Tags
Annotators
URL
-
-
www.second.dev www.second.dev
-
cursor.com cursor.comCursor1
Tags
Annotators
URL
-
- May 2024
-
-
You can use inline R code (see Section 3.1) anywhere in an Rmd document, including the YAML metadata section. This means some YAML metadata can be dynamically generated with inline R code, such as the document title
Does this apply to
.qmddocuments?
-
-
www.wheresyoured.at www.wheresyoured.at
-
2019
[[code yellow]] on search revenue [[2019-02]]
Tags
Annotators
URL
-
- Apr 2024
-
snarfed.org snarfed.org
-
Moderate people, not code.
-
- Mar 2024
-
www.legifrance.gouv.fr www.legifrance.gouv.fr
-
Les conditions permettant cette inscription et cette fréquentation sont fixées par convention entre les autorités académiques et l'établissement de santé ou médico-social.
-
l'Etat met en place les moyens financiers et humains nécessaires à la scolarisation en milieu ordinaire des enfants, adolescents ou adultes en situation de handicap.
-
le plus proche de son domicile
-
Une information sur les risques liés au harcèlement scolaire, notamment au cyberharcèlement, est délivrée chaque année aux élèves et parents d'élèves.
-
prennent les mesures appropriées visant à lutter contre le harcèlement dans le cadre scolaire
-
Aucun élève ou étudiant ne doit subir de faits de harcèlement
-
Les parents d'élèves participent, par leurs représentants aux conseils d'école, aux conseils d'administration des établissements scolaires et aux conseils de classe.
-
Leur participation à la vie scolaire et le dialogue avec les enseignants et les autres personnels sont assurés
-
Les parents d'élèves sont membres de la communauté éducative.
-
Dans chaque école, collège ou lycée, la communauté éducative rassemble les élèves et tous ceux qui, dans l'établissement scolaire ou en relation avec lui, participent à l'accomplissement de ses missions.Elle réunit les personnels des écoles et établissements, les parents d'élèves, les collectivités territoriales, les associations éducatives complémentaires de l'enseignement public ainsi que les acteurs institutionnels, économiques et sociaux, associés au service public de l'éducation.
-
Dans le cadre d'une école inclusive, elle fonde sa cohésion sur la complémentarité des expertises.
-
L'Etat garantit le respect de la personnalité de l'enfant et de l'action éducative des familles
-
La formation scolaire favorise l'épanouissement de l'enfant
-
Tout enfant a droit à une formation scolaire qui, complétant l'action de sa famille, concourt à son éducation
-
L'acquisition d'une culture générale et d'une qualification reconnue est assurée à tous les jeunes, quelle que soit leur origine sociale, culturelle ou géographique.
-
permettre de façon générale aux élèves en difficulté, quelle qu'en soit l'origine, en particulier de santé, de bénéficier d'actions de soutien individualisé.
-
Il veille également à la mixité sociale des publics scolarisés au sein des établissements d'enseignement
-
Il veille à la scolarisation inclusive de tous les enfants, sans aucune distinction
-
Article L111-1Modifié par LOI n°2021-1109 du 24 août 2021 - art. 58L'éducation est la première priorité nationale. Le service public de l'éducation est conçu et organisé en fonction des élèves et des étudiants. Il contribue à l'égalité des chances et à lutter contre les inégalités sociales et territoriales en matière de réussite scolaire et éducative. Il reconnaît que tous les enfants partagent la capacité d'apprendre et de progresser. Il veille à la scolarisation inclusive de tous les enfants, sans aucune distinction. Il veille également à la mixité sociale des publics scolarisés au sein des établissements d'enseignement. Pour garantir la réussite de tous, l'école se construit avec la participation des parents, quelle que soit leur origine sociale. Elle s'enrichit et se conforte par le dialogue et la coopération entre tous les acteurs de la communauté éducative.
-
Elle s'enrichit et se conforte par le dialogue et la coopération entre tous les acteurs de la communauté éducative.
Tags
- représentants des parents d'élèves
- coéducation
- social
- RPE
- L111-6
- L111-3
- mixité
- L111-1
- formation
- harcèlement
- L112-1
- code de l'éducation
- parents
- L111-4
- communauté éducative
- privé
- à exploiter
- handicap
- dialogue
- L111-2
- bien-être
- psychologie
- besoins particuliers
- élèves
- scolarisation
- moyens
- RESF
- inclusion
- académie
Annotators
URL
-
-
www.legifrance.gouv.fr www.legifrance.gouv.fr
-
Article L111-1Version en vigueur depuis le 26 août 2021Modifié par LOI n°2021-1109 du 24 août 2021 - art. 58L'éducation est la première priorité nationale. Le service public de l'éducation est conçu et organisé en fonction des élèves et des étudiants. Il contribue à l'égalité des chances et à lutter contre les inégalités sociales et territoriales en matière de réussite scolaire et éducative.
-
-
naturalistic-data.org naturalistic-data.org
-
masker.fit_transform
AttributeError: 'Brain_Data' object has no attribute 'fit_transform'
-
-
www.education.gouv.fr www.education.gouv.fr
-
pressbooks.online.ucf.edu pressbooks.online.ucf.edu
-
What makes Gawain so chivalrous
Gawain is known as being chivalrous because he was the proper hero, who morals matched his fight. Sir Gawain’s shield represented "the five virtues of chivalry, which were friendship, generosity, chastity, courtesy, and piety. These where the virtues people strove to live by and those they demanded of kings and knights."
Tags
Annotators
URL
-
-
www.cs.princeton.edu www.cs.princeton.edu
-
The occurrence of a do-while instead of a while should always raise a question: why isn't the loop termination condition being tested at the beginning
-
-
-
Thinking about how you will observe whether things are working correctly or not ahead of time can also have a big impact on the quality of the code you write.
YES. This feel similar to the way that TDD can also improve the code that you write, but with a broader/more comprehensive outlook.
-
- Feb 2024
-
docdrop.org docdrop.org
-
dernière question de la part de Cécile qui dit pour un scénario complexe vaut-il mieux faire une seule 01:18:16 automatisation ou décomposer en plusieurs étapes
-
Gérald qui demande lorsque le collaborateur s'en va comment fait-on pour récupérer les flux d'automatisation problématique qui paraît doit se présenter régulièrement 01:16:23 en amont ce sujet là et donc aujourd'hui l'idée c'est que ces outils là soient utilisés et là tout à l'heure clairement Erwan a dit à me connecter j'ai pas mon 01:16:37 outil de mot de passe clairement nous chez nos codes forgots on utilise un outil qui nous permet de sauvegarder les mots de passe pour que l'ensemble des membres y est axé pour se connecter aux outils qu'on a décidé d'utiliser pour 01:16:48 pour le fonctionnement de la plateforme et du reste et donc en gros si moi je suis absent ou pour X raisons la Saône n'est pas bloquée parce que les mots de passe sont dans ce coffre-fort qui est 01:16:59 qui est protégé et commun à quelques-uns d'entre nous
-
Benjamin se demande si s'il cherche des logiciels qu'ils utilisent mais qu'aucun figure sur les outils ne codes est-ce que dans 01:13:05 ce cas-là c'est possible de créer la liaison
-
qu'est-ce que ce serait des exemples un peu pour mettre la main à la pâte en sortant de ce webinaire
-
je remets la slide où il y avait des 01:08:58 exemples qui sont une dizaine d'exemples parmi des centaines possible
-
par exemple chez solidatech on se sert à la fois de 01:07:42 RTBF et de et de zappyer pour interconnecter justement nos posts sur les réseaux sociaux mais en fait ça permet de centraliser aussi bien Twitter que LinkedIn que 01:07:57 Twitter etc et ça nous permet de conserver un historique centralisé au même endroit sans avoir justement besoin au cas par cas d'aller voir ce qu'on a publié sur Twitter et en même temps sur Facebook etc et en fait tout en se 01:08:09 mettant en forme à calendrier on a les choses très clairement notre historique et donc on sait que bah oui on a déjà publié il y a trois mois sur Twitter tel sujet on va plutôt varier les plaisirs ou au contraire en parler sur Facebook pour pas oublier
-
on a une question de Gabriel qui qui est en plein dans le sujet des 01:06:08 automatisations et qui me paraissait pertinente qui demande avant d'automatiser des tâches comment savoir si les outils les applis sur lesquels on travaille sont interconnectables
-
démo de 20 secondes
-
des questions sur les tarifs de de toutes ces solutions
-
les outils no code c'est il y a une version gratuite puis 10 euros par 00:48:24 mois ou 20 euros par mois
-
Résumé de la vidéo [00:00:00][^1^][1] - [01:22:34][^2^][2]:
Cette vidéo est un webinaire organisé par Solidatech et Contournement, deux programmes de solidarité numérique qui aident les associations à renforcer leur impact grâce au numérique. Le webinaire présente les concepts et les outils du no code, c'est-à-dire la possibilité de créer des sites web, des applications, des outils internes et des automatisations sans avoir besoin de coder. Le webinaire explique les avantages du no code pour les associations, les différents types d'outils disponibles, les bonnes pratiques à adopter, et propose des démonstrations concrètes de création de projets no code.
Points clés: + [00:00:00][^3^][3] Présentation de Solidatech * Programme de solidarité numérique créé en 2008 * Facilite l'accès au numérique financièrement et accompagne aux usages * Propose des logiciels à tarif réduit, du matériel reconditionné, des ressources, des webinaires et des formations + [00:04:53][^4^][4] Présentation de Contournement * Programme de solidarité numérique créé en 2017 * Aide les associations à créer des sites, des applis et des automatisations sans coder * Propose des vidéos, des podcasts, des formations en ligne et des offres solidaires + [00:08:10][^5^][5] Introduction au no code * No code = créer des projets numériques visuellement sans écrire de code * Avantages : gain de temps, d'argent, d'autonomie, de créativité * Inconvénients : dépendance aux éditeurs, limites techniques, besoin de se former + [00:14:29][^6^][6] Panorama des outils no code * Différents types d'outils selon les besoins : site web, appli mobile, outil interne, automatisation, etc. * Différents niveaux d'accessibilité selon les compétences : débutant, confirmé, avancé * Exemples d'outils : Dorik, Webflow, Bubble, Glide, Zapier, Airtable, Notion, etc. + [00:20:10][^7^][7] Démonstration de Zapier * Zapier = outil no code qui permet d'interconnecter des outils entre eux pour automatiser des tâches * Exemple : automatiser le traitement des candidatures à une formation * Explication pas à pas de la création d'un zap (automatisation) + [00:29:00][^8^][8] Démonstration de Softr * Softr = outil no code qui permet de créer des sites web et des applis à partir de bases de données Airtable * Exemple : créer un site de recrutement pour les métiers du no code * Explication pas à pas de la création d'un site avec Softr + [00:36:38][^9^][9] Bonnes pratiques du no code * Commencer par définir son besoin et son objectif * Choisir l'outil le plus adapté à son projet * Se former et se documenter sur l'outil choisi * Tester et itérer son projet * Se faire accompagner par des experts si besoin + [00:39:34][^10^][10] Questions-Réponses * Réponses aux questions des participants sur le no code, les outils, la sécurité, le rgpd, etc. * Présentation d'un bon d'achat de 80 euros valable un mois sur les formations de Contournement * Conclusion et remerciements
-
partage les coulisses de contournement là vous voyez un tableau dans le ça alors on va juste faire un truc c'est imaginons que je veux veiller à chaque 00:33:09 fois qu'il y a le mot clé #noode sur Twitter ou alors qu'il y a hâte solidatech
-
exemple maison c'est nos codes for good
Tags
- conférence
- tuilage
- 2022
- outil
- extension
- automatisation
- accès
- solidatech
- tutoriel
- démonstration
- compétences
- zapier
- question
- utilisation
- point de vigilance
- ONG
- fonctionement
- processus
- liste
- no code
- personnalisation
- vidéo
- possibilités
- tarifs
- associations
- exemple
- webinaire
- méthodologie
Annotators
URL
-
-
-
trois dispositions nécessiteraient des modifications législatives (sur l’article L.312-16 du code de l’éducation)
-
-
-
Résumé de la vidéo [00:00:00][^1^][1] - [01:30:42][^2^][2] :
Cette vidéo est une présentation en français sur les outils numériques pour les associations, organisée par Solidatech et animée par Erwan Khezzar, cofondateur de Contournement. Elle aborde les sujets suivants :
Points forts : + [00:00:00][^3^][3] Présentation de Solidatech * Un programme de solidarité numérique créé en 2008 * Une filiale des Ateliers du Bocage, membre du mouvement Emmaüs * Plus de 32 000 associations bénéficiaires et plus de 500 000 outils numériques distribués + [00:04:12][^4^][4] Présentation de Contournement * Une entreprise qui forme à contourner les obstacles techniques du numérique * Une approche basée sur les outils no code, qui permettent de créer des sites, des applis, des outils sans écrire de code * Un exemple de projet réalisé avec Glide : H24 Urgence, une appli qui cartographie les maisons de santé + [00:15:32][^5^][5] Panorama des outils no code * Une typologie des outils selon leur fonctionnalité : création de sites, d'applis, d'outils, d'automatisation, etc. * Une présentation de plusieurs outils avec leurs avantages et leurs limites : Webflow, Bubble, Glide, Airtable, Zapier, Notion, etc. * Une démonstration de Airtable, un outil de gestion de bases de données visuelles et collaboratives + [01:11:22][^6^][6] Questions-réponses * Des réponses aux questions des participants sur les outils no code, leur utilisation, leur coût, leur sécurité, etc. * Des conseils et des ressources pour se former et se lancer dans le no code * Une offre de réduction pour la formation initiation au no code de Contournement
-
-
htmx.org htmx.org
-
without any spooky action at a distance.
Confirmed. Einstein. Physics.
Tags
Annotators
URL
-
- Jan 2024
-
yegor256.github.io yegor256.github.io
-
A system is a composition of objects thatare abstractions, which hide data andexpose behavior*
Composition Abstraction Hide data Expose behavior
-
-
code.visualstudio.com code.visualstudio.com
-
Visual Studio Code has integrated source control management (SCM) and includes Git support out-of-the-box. Many other source control providers are available through extensions on the VS Code Marketplace
This is an excellent resource for learing about Git integration with VS Code
-
-
gitlab.com gitlab.com
-
we should break down and MR into "Blocks"
-
- Dec 2023
-
www.mostlypython.com www.mostlypython.com
-
看主体代码,主流程,折叠没有用的代码,忽略注释
-
-
death.andgravity.com death.andgravity.com
-
except StopAsyncIteration if is_async else StopIteration:
Interesting: using ternary operator in
exceptclause
Tags
Annotators
URL
-
-
docdrop.org docdrop.org
-
we are certainly special I mean 00:02:57 no other animal rich the moon or know how to build atom bombs so we are definitely quite different from chimpanzees and elephants and and all the rest of the animals but we are still 00:03:09 animals you know many of our most basic emotions much of our society is still run on Stone Age code
-
for: stone age code, similar to - Ronald Wright - computer metaphor, evolutionary psychology - examples, evolutionary paradox of modernity, evolution - last mile link, major evolutionary transition - full spectrum in modern humans, example - MET - full spectrum embedded in modern humans
-
comment
-
insights
- evolutionary paradox of modernity
- modern humans , like all the living species we share the world with, are the last mile link of the evolution of life we've made it to the present, so all species of the present are, in an evolutionary sense, winners of their respective evolutionary game
- this means that all our present behaviors contain the full spectrum of the evolutionary history of 4 billion years of life
- the modern human embodies all major evolutionary transitions of the past
- so our behavior, at all levels of our being is a complex and heterogenous mixture of evolutionary adaptations from different time periods of the 4 billion years that life has taken to evolve.
- Some behaviors may have originated billions of years ago, and others hundred thousand years ago.
- evolutionary paradox of modernity
-
Examples: humans embody full spectrum of METs in our evolutionary past
- fight and flight response
- early hominids on African Savannah hundreds of thousands to millions of years ago when hominids were predated upon by wild predators
- cancer
- normative intercell communication breaks down and reverts to individual cell behavior from billions of years ago
- see Michael Levin's research on how to make metastatic cancer cells return to normative collective, cooperative behavior
- normative intercell communication breaks down and reverts to individual cell behavior from billions of years ago
- children afraid to sleep in the dark
- evolutionary adaptation against dangerous animals that might have hid in the dark - dangerous insiects, snakes, etc, which in the past may have resulted in human fatalities
- obesity
- hunter gatherer hominid attraction to rich sources of fruit. Eating as much of it as we can and maybe harvesting as much as we can and carrying that with us.
- like squirrels storing away for the winter.
- hunter gatherer hominid attraction to rich sources of fruit. Eating as much of it as we can and maybe harvesting as much as we can and carrying that with us.
- fight and flight response
-
-
-
-
Modern clients are produced by a modern code generator, combined with hand-crafted functionality for some services.
-
The libraries in this repo are simple REST clients. These clients connect to HTTP/JSON REST endpoints and are automatically generated from service discovery documents. They support most API functionality, but their class interfaces are sometimes awkward.
-
- Nov 2023
-
github.com github.com
-
github.com github.com
-
github.com github.com
-
Moves the modules in lib/ to app/models and lib/integrations to app/integrations.
-
-
-
We decide on app/lib v. lib/ once and for all
-
-
github.com github.com
-
It is also worth noting that lib/tasks typically has application-specific tasks, thus not fitting into the condition for lib. Which makes me question the criteria for lib
-
-
lib/ is intended to be for non-app specific library code that just happens to live in the app for now (usually pending extraction into open source or whatever).
-
Stuff like a generic PhoneNumberFormatter is exactly what lib/ is intended for.
-
If application code lives in app, then doesn't that imply that things in lib (such as PhoneNumberFormatter) are not application code? I think that's one of the reasons why your recommendation of app/lib felt right to me -- my classes feel like they belong in app somewhere.
-
-
carbon.now.sh carbon.now.shCarbon1
Tags
Annotators
URL
-
-
unix.stackexchange.com unix.stackexchange.com
-
@tmoschou You can find the source for Apple's pkill on opensource.apple.com/source. It's together with other utilities in the collection adv_cmds. Maybe you can spot the bug.
-
-
bayfronttechnologies.com bayfronttechnologies.com
-
This snippet removes some of the empty
aelements to make the headings anchors instead:javascript ([ ...document.querySelectorAll("a[name] +h1, a[name] +h2, a[name] +h3, a[name] +h4, h1 +a[name], h2 +a[name], h3 +a[name], h4 +a[name]") ]).map((x) => { if (x instanceof HTMLHeadingElement) { var link = x.previousElementSibling; var heading = x; } else { var link = x; var heading = x.previousElementSibling; } link.parentElement.removeChild(link); heading.setAttribute("id", link.name); }) -
The HTML encoding of this document contains several errors, some of which substantially affect the way it's read. This fixes one of those problems in Appendix II:
javascript ([ ...document.querySelectorAll("op") ]).reverse().forEach((op) => { let f = document.createDocumentFragment(); f.append(document.createTextNode("<OP>"), ...op.childNodes); op.parentElement.replaceChild(f, op); })The problem show be apparent on what is, at the time of this writing, line 4437:
html <code>IF ?w THEN ?x<OP>?y ELSE ?z<OP>?y</code>(The angle brackets around the occurrences of "OP" should be encoded as HTML entities. Because they aren't they end up getting parsed as HTML
opelements (which isn't a thing) and screwing up the document tree.)
-
-
www.legifrance.gouv.fr www.legifrance.gouv.fr
-
ou, pour l'élection des représentants des parents d'élèves, exclusivement par correspondance sur décision du chef d'établissement, après consultation du conseil d'administration. Les votes sont personnels et secrets.
-
-
www.fcpe.asso.fr www.fcpe.asso.fr
-
Les pubLications des Lycéenssont-eLLes Libres ?Elles sont libres, mais contrôlées. L’article R.511-8du code de l’éducation
-
-
www.fcpe.asso.fr www.fcpe.asso.fr
-
article L. 212-15
https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000027682709
-
article L. 216-1
https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000027682737
-
Art. D 411-1 du code del’éducation
https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000044541942
-