Automatically syncing your blog to atproto and standard.site (Elixir)
submitted by /u/joladev [link] [留言]
submitted by /u/joladev [link] [留言]
You know what you want from a JSON document. You just don't want to memorize whether it's $[?(@.age > 18)] or $..users[?(@.active)] . Plain English in. JSONPath out. JSONPath Assistant on FormatList lets you paste JSON, describe what you need in natural language, and get a validated JSONPath expression plus the actual results — all in your browser. No account, no API key, no data sent to a server. How it works Paste your JSON — an API response, config file, or test fixture. Describe what you need — e.g. "get all user names" or "find products with tag tech". Generate — the assistant reads your JSON structure and maps your query to JSONPath. Validate & copy — the expression runs against your data immediately. Copy the path or the matched values in one click. If the first attempt returns no matches, the tool retries with a simpler variation automatically. Example queries You type Generated JSONPath Get all user names $.users[*].name Find users older than 18 $.users[?(@.age > 18)] Get names of active users $.users[?(@.active == true)].name Find products with tag tech $.products[?(@.tags.indexOf('tech') >= 0)] Get all order prices $.orders[*].price Get the first user's email $.users[0].email Get all pod names {.items[*].metadata.name} Get all pod IP addresses {.items[*].status.podIP} The tool ships with one-click examples for each of these — load one, hit Generate, and see how it works before trying your own JSON. What kinds of queries it understands Property access — "get all names", "list order prices" Numeric filters — "older than 18", "price under $10", "greater than 100" Boolean filters — "active users", "enabled devices" Tag / category searches — "with tag tech", "beauty category" Multi-condition — "both tech and mobile tags" Quantifiers — "the first user", "the last item" Kubernetes — "get all pod names", "pod IP addresses" It analyzes field names in your JSON — so users , products , orders , or whatever keys you actually have — and builds paths that match your sc
The design doc is fourteen pages. Clean service boundaries, thoughtful API contracts, a deployment story that handles rollback without incident. Six months of work. The team is proud of it, and the work is genuinely good. Three questions will tell more about this system than all fourteen pages. Not questions about implementation details or technology choices. Questions about how the system was designed to age, to fail, and to be understood by someone who didn’t build it. Most architecture conversations never reach these questions, which is part of why the gap between a good system and a great one is often invisible until it is suddenly very visible. What does this make hard? Good architecture conversations focus on what a design enables: faster deployments, independent scaling, and clearer ownership. The question that separates architectural thinking from implementation thinking is the inverse . What does this make hard? Every decision forecloses options. The service boundary that gives teams autonomy makes cross-service transactions expensive. The data model that reads cleanly under expected load makes certain write patterns awkward. The abstraction that simplifies onboarding makes some categories of refactoring nearly invisible as possibilities. These are not arguments against the decisions. They are the other side of every decision, and that other side exists whether or not anyone names it. The design doc that holds up over time is not the one where nothing is difficult. It is the one where the difficult things are named. “This approach makes distributed transactions impossible, and here is why we have decided to accept that constraint.” That sentence, or something close to it, belongs in every significant architecture document. Its absence is not a sign that the constraint wasn’t considered. Often it was. But without the name, the constraint becomes invisible to everyone who wasn’t in the room, which eventually includes the original team. When joining a system s
submitted by /u/Successful_Bowl2564 [link] [留言]
You export a CSV from a UK system and double-click it in US Excel — 28/05/2026 suddenly looks like May 28, or something even stranger. The file isn't corrupt. Excel is guessing your date format based on your computer's locale. This short guide covers why that happens, how to import CSV correctly, and how to batch-fix dates that are already wrong. For the full walkthrough with examples, see the official guide: How to Fix Excel CSV Date Import Problems . Why Excel breaks CSV dates A CSV is plain text. It does not store whether a value is a date or a string. When you double-click to open, Excel parses using your regional settings: US Excel: MM/DD/YYYY UK / Europe: DD/MM/YYYY Dates like 03/04/2025 are the most dangerous — both parts are ≤ 12. US Excel may read April 3; UK Excel reads March 4. Excel won't warn you. Other common traps: Dates exported as serial numbers (e.g. 44927 ) Two-digit years triggering century guesses Re-saving as CSV destroys formats a second time The right way: don't double-click the CSV Open Excel first — don't double-click the .csv file Data → Get Data from Text/CSV (older Excel: Data → From Text) Set date columns to Text if you need to preserve the original string Confirm the source region (US / UK), then convert to a single format For team data exchange, agree on ISO 8601: YYYY-MM-DD in your schema — unambiguous, sorts correctly as text, and works in JSON APIs and databases. Ambiguous value US reads as UK reads as Safe format (ISO) 03/04/2025 2025-04-03 2025-03-04 Confirm source region 28/05/2026 — 2026-05-28 2026-05-28 05/28/2026 2026-05-28 — 2026-05-28 Already broken? Fix dates in the browser (no server upload) I built a free tool cluster on FormatList — everything runs locally in your browser : 1. Date Format Fixer — bulk repair Paste a date column or upload .csv / .txt Ambiguous rows highlighted; optional US / UK preference Export ISO / US / UK or download a fixed CSV Best for: normalizing a whole column to ISO before a database or API imp
Contact Form 7 runs on millions of sites for a good reason: it's free, light, and gets out of your way. I shipped it on client sites for years. The problem isn't that CF7 is bad — it's that it answers exactly one question ("did the form submit?") and stays completely silent on the one that actually matters in production: did the notification arrive? Here's the call every developer who maintains WP sites has taken at least once: "I filled in your contact form last week and never heard back." You check. The form is fine. JavaScript fires, the success message shows, no console errors. CF7 did its job — it handed the message to wp_mail() and forgot it ever existed. There's no record the submission happened, and no log of whether the email was delivered, bounced, or quietly dropped by the host's unauthenticated sendmail. The lead is just gone, and you have nothing to debug with. The three gaps that bite in production No submissions database. CF7 sends an email and discards the data. If the email fails or lands in spam, the submission never existed. (Flamingo helps, but it's a bolt-on — separate screen, no filtering or export out of the box, not tied to your form config.) No delivery log. You can't tell whether mail was sent, rejected, or bounced. "I never got it" has no audit trail to check against. No native block. CF7 is still a shortcode — [contact-form-7 id="123"] . You can't drop it into a block template, control its layout with block spacing, or edit it inline in Gutenberg. You paste a shortcode and hope. None of these are dealbreakers for a throwaway contact form. All three are dealbreakers when a missed submission is a missed sale. Migrating without rebuilding by hand The reason most people put off switching isn't the feature gap — it's the thought of rebuilding every form field by field. That's the part I wanted to skip. The migration path I use reads CF7's stored form definitions directly and recreates them as native forms. What comes across automatically: All
An accessibility audit is not only a compliance activity. For engineering teams, it is also a quality review of how real users interact with the product. If you are preparing for a WCAG 2.2 AA audit, the biggest mistake is waiting for the auditor to tell you what information is missing. You can make the process much smoother by preparing the right workflows, accounts, test data, and remediation owners upfront. Scope the product by user flow Do not start with only a list of URLs. URLs matter, but accessibility bugs often appear inside stateful interactions: Form validation Custom dropdowns Modal dialogs Keyboard focus management Error recovery Dynamic tables Authenticated dashboards Document downloads Instead of asking, "Which pages should we test?" ask: What tasks must users be able to complete? That usually gives you a better audit scope. Prepare accounts and stable data If a workflow requires authentication, roles, or sample records, prepare them before the audit starts. Useful prep includes: Admin, standard user, and limited-role accounts Stable sample records Forms with prefilled data where needed Test payment or transaction flows if applicable Known feature flags Environment notes This avoids spending audit time debugging access problems. Confirm the standards WCAG 2.2 AA may be the target, but the report may also need to reference WCAG 2.1 AA, Section 508, EN 301 549, GIGW, or IS 17802. Engineering teams should know this early because it affects reporting language and remediation priority. Make evidence developer-friendly A useful issue should be reproducible. Good audit findings usually include: Affected URL or screen Component or selector Steps to reproduce User impact WCAG success criterion Expected behavior Screenshot or notes This helps teams move from report to ticket without guessing. Plan remediation ownership Accessibility issues do not always map cleanly to one discipline. Examples: Missing form label: engineering Confusing error copy: content and pr
Every Node.js developer has been burned by this at least once: const port = parseInt ( process . env . PORT ); // NaN if PORT is missing const db = process . env . DATABASE_URL ; // string | undefined — not safe! Your app starts fine locally, then crashes in production because someone forgot to set an env var. The error shows up 3 hours later, not at startup. The solution I built @harmand66/typesafe-env — a tiny, zero-dependency library that validates and types your environment variables at boot time. import { createEnv } from ' @harmand66/typesafe-env ' ; const env = createEnv ({ PORT : { type : ' number ' , default : 3000 }, DATABASE_URL : { type : ' string ' , required : true }, DEBUG : { type : ' boolean ' , default : false }, }); // ✅ TypeScript knows PORT is a number env . PORT + 1 // 3001 — not "30001" env . DATABASE_URL // string — guaranteed, never undefined If anything is missing or wrong, your app fails immediately at startup with a clear message: All errors at once — no more fixing them one by one. Why not Zod? Zod is great but it's 57kb and requires a lot of boilerplate for this specific use case. @harmand66/typesafe-env is zero dependencies and does one thing well. Try it npm install @harmand66/typesafe-env GitHub: https://github.com/giannielloemmanuele-lgtm/typesafe-env npm: https://www.npmjs.com/package/@harmand66/typesafe-env Would love any feedback or contributions! 🙏
The idea came from an extremely serious game of hide and seek with my cousins. We were adults, which made it ridiculous, but also strangely perfect. Someone was hiding behind a couch in plain sight, surviving only because the seeker did not look carefully enough. That made me wonder: what if looking carefully was not enough? What if the seeker could not freely look around the room? What if they could only see the world through their phone screen, while virtual obstacles blocked parts of their view? That became the core idea behind AR Hide and Seek: a local multiplayer hide and seek game where 2-5 players use the space they are already in. The hiders physically hide somewhere in the room, while the seeker views the environment through an iPhone. The phone fills the space with digital clutter, making familiar rooms harder to read. One phone. One seeker. Real hiding places. Virtual obstacles. Why LiDAR? LiDAR on iPhone Pro models gives the phone a real-time depth map of the environment, with centimeter-level understanding of the space around it. That means virtual objects can be placed in ways that respect real-world geometry: a crate can sit on the floor, a wall can align with an actual wall, and obstacles can feel like they belong in the room rather than floating on top of it. For a game where the virtual environment needs to feel like it genuinely fills the space, that difference matters immediately. Without reliable depth information, objects can drift, clip, or hover in ways that break the illusion. The tradeoff is device requirement. LiDAR is only available on iPhone Pro models, which narrows the audience. But for this game, the better AR experience was worth it. The seeker sees a version of the room cluttered with virtual obstacles. The hiders are still physically hiding behind real furniture; the phone does not make them disappear. It simply makes finding them harder. Designing the Core Loop The mechanic is simple on paper, but it took a surprising amount of tu
Industry 4.0 data collection sounds simple until you look closely at the factory floor. In theory, the flow is clean: machine → gateway → cloud → dashboard In practice, it is usually less tidy. Factories may have PLCs, CNC machines, sensors, meters, inspection systems, production lines, and older equipment all working together. Some devices use Ethernet. Some still rely on serial interfaces. Some data is useful every second. Some data only matters when a machine changes state, crosses a threshold, or triggers an alarm. This is where an industrial edge gateway becomes useful. A gateway such as Robustel EG5120 can sit between factory equipment and upper-layer systems, helping collect selected machine or PLC data, handle it locally where needed, and forward useful information toward cloud or enterprise platforms. That does not mean the gateway replaces PLCs, SCADA, MES, or the cloud. It simply means factory data often needs a practical middle layer before it becomes useful somewhere else. Factory data is not one clean data stream One thing that gets underestimated in Industry 4.0 projects is how mixed the data sources can be. A PLC may provide equipment status, alarms, and process values. A CNC machine may expose cycle information or maintenance indicators. Sensors and meters may generate temperature, vibration, energy, or environmental data. Inspection systems may produce quality-related events or selected result data. A production line may generate throughput signals, downtime events, or operating states. These are all “factory data,” but they do not behave the same way. A machine fault may need quick attention. An energy reading may only need periodic reporting. A repeated sensor value may not need to be sent upstream every time. A quality inspection output may be useful as metadata, but not every raw file is practical to upload continuously.So the first question is not only: Can we connect this machine? A better question is: What data do we actually need, where sho
I used to think AI search readiness was just SEO with a new name. It's not. The more time I spend on this, the clearer the distinction becomes. The core difference Traditional SEO optimizes for ranking in a list of links. You want to be the #1 blue link on Google for "best project management software." The user clicks through to your page, you get the traffic, you monetize. AI search optimizes for being the source of an answer. When someone asks Perplexity or ChatGPT "what's the best project management software?", the AI reads multiple sources, synthesizes an answer, and cites the ones it used. The user may never click through. The fundamental units are different: SEO operates on pages and rankings AI search operates on facts, claims, and citations You can be #1 on Google for a keyword and never appear in a single AI-generated answer. And you can be cited in AI answers without ranking in the top 10 for anything. What still matters Some things carry over from SEO: Technical quality — Fast pages, HTTPS, crawlable content. AI crawlers care about this just like Googlebot. Clear content structure — Headings, lists, tables. Well-structured content is easier for AI models to parse. Internal linking — AI crawlers follow links like any other crawler. Good information architecture matters. Backlinks from authoritative sources — Being cited by Wikipedia, academic papers, and major publications signals trust to AI models just like it does to search engines. What matters for AI search that barely matters for SEO A few things that are critical for AI search but don't move the needle much for traditional rankings: LLMs.txt / LLMs-full.txt — These files don't affect your Google ranking at all. But they give AI models a clean, structured map of your site. I've seen sites with great LLMs.txt files get cited more consistently than sites with better backlink profiles but no AI-readable summary. Structured data for disambiguation — In SEO, schema markup helps with rich snippets. In AI s
AI crawlers now appear in many server logs alongside traditional search bots. Some are used for search retrieval, some for training, and some for broader web indexing. If you care about AI search visibility, you need to know which ones can access your public pages. The most common accidental blocker is simple: a robots.txt rule or CDN bot setting that prevents AI crawlers from reaching the content you want discovered. The major AI crawler tokens to check Here are crawler tokens you may see in logs or robots.txt rules: Crawler token Company Notes GPTBot OpenAI Documented OpenAI crawler token OAI-SearchBot OpenAI Documented OpenAI search-related crawler token ChatGPT-User OpenAI Documented OpenAI user-triggered agent token ClaudeBot Anthropic Documented Anthropic crawler token Claude-SearchBot Anthropic Documented Anthropic search-related crawler token Google-Extended Google Google control token for Gemini Apps and Vertex AI use CCBot Common Crawl Web corpus crawler used by many downstream systems PerplexityBot Perplexity Commonly referenced Perplexity crawler token Crawler names and purposes change. Always confirm against official platform documentation before making sitewide access decisions. First, check what is actually happening Before you change anything, find out who is already crawling. If you have server logs: grep -E "GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-SearchBot|Google-Extended|CCBot|PerplexityBot" access.log If you use Cloudflare, check bot and security events and filter by user agent. Three quick diagnostic steps: Open https://yourdomain.com/robots.txt and look for broad Disallow: / rules. Confirm the sitemap is listed in robots.txt or discoverable at /sitemap.xml . Use our AEO Checker to validate robots.txt and flag restrictive AI crawler rules. The most common mistake The blunt rule that makes sites invisible to many crawlers: User-agent: * Disallow: / This blocks every well-behaved crawler that follows the wildcard rule. If you see it on
Today, we’re excited to launch UIAble v1.0, an open-source component library built for developers, by developers. We explored a lot of UI libraries built on Shadcn. Most of them feel nearly identical — same structure, same aesthetic, same tradeoffs. That’s what pushed us to build something different. Not another library that looks like Shadcn with a coat of paint, but a design system with its own identity and a clearer sense of what it’s actually for. Why UIAble exists After enough frontend projects, one thing becomes obvious: the same UI patterns get rebuilt again and again. Inputs. Dialogs. Tables. Alerts. Dropdowns. OTP fields. Form validation states. Not because they’re hard to build, but because most existing libraries never quite fit real project requirements. Some are too opinionated. Some pile on unnecessary abstraction. Some become rigid after initial setup. And some make simple UI unnecessarily complicated. That friction is what led to UIAble. Not to launch another oversized library, just to build a cleaner, more practical foundation for modern frontend development. What UIAble actually is UIAble is a free, open-source UI component library built with Tailwind CSS , Shadcn-style architecture , and Base UI principles . The idea is straightforward: reusable components should stay flexible, readable, and easy to maintain. Instead of pulling projects into a rigid ecosystem, UIAble gives you components you can copy directly into your codebase, edit freely, and scale without fighting the library. No lock-in. No unnecessary abstraction. No dependency trap. What makes it different in practice A few things actually matter here. You get the code. UIAble doesn’t hide logic behind layers of packaging. You see the component. You edit it. You ship it. That alone changes how teams work with UI. It’s built for real product UI, not showcase pages. A lot of UI kits look great in demos and fall apart in production. UIAble focuses on the unglamorous stuff, forms that don’t bre
OpenAI is investigating issues with Codex usage limits Tibo wrote that the Codex team spent Sunday in a war room, digging through logs and looking for anything that could have caused faster usage drain for some users. As the investigation continues, OpenAI has issued a full reset of Codex usage limits for everyone. The funny part: this week at OpenAI is called RESET week. In US corporate culture, that usually means a lighter week to slow down, clear the calendar a bit, and recharge.
Hello Devs 👋 When teams talk about engineering metrics, the conversation usually moves toward speed....
Nine major suspected cargo thefts happened at Tesla’s Nevada battery factory in January alone, according to sheriff’s records obtained by WIRED.