[{"data":1,"prerenderedAt":545},["ShallowReactive",2],{"docs-navigation":3,"doc-\u002Fdev\u002Fcsharp":229,"surround-\u002Fdev\u002Fcsharp":340,"notes-index":345},[4,88,171,182,192,203,218],{"title":5,"path":6,"stem":7,"children":8},"Dev","\u002Fdev","1.dev",[9,12,26,36,50,56,78],{"title":10,"path":6,"stem":11},"Development","1.dev\u002Findex",{"title":13,"path":14,"stem":15,"children":16},"Laravel","\u002Fdev\u002Flaravel","1.dev\u002F1.laravel\u002Findex",[17,18,22],{"title":13,"path":14,"stem":15},{"title":19,"path":20,"stem":21},"Eloquent Relationships","\u002Fdev\u002Flaravel\u002Feloquent-relationships","1.dev\u002F1.laravel\u002F1.eloquent-relationships",{"title":23,"path":24,"stem":25},"Laravel Homestead","\u002Fdev\u002Flaravel\u002Flaravel-homestead","1.dev\u002F1.laravel\u002F2.laravel-homestead",{"title":27,"path":28,"stem":29,"children":30},"Bash","\u002Fdev\u002Fbash","1.dev\u002F13.bash\u002Findex",[31,32],{"title":27,"path":28,"stem":29},{"title":33,"path":34,"stem":35},"My Bash RC","\u002Fdev\u002Fbash\u002Fbash-rc","1.dev\u002F13.bash\u002F2.bash-rc",{"title":37,"path":38,"stem":39,"children":40},"Clean Code","\u002Fdev\u002Fclean-code","1.dev\u002F15.clean-code\u002Findex",[41,42,46],{"title":37,"path":38,"stem":39},{"title":43,"path":44,"stem":45},"Naming Things","\u002Fdev\u002Fclean-code\u002Fnaming-things","1.dev\u002F15.clean-code\u002F1.naming-things",{"title":47,"path":48,"stem":49},"Services Return, Callers Present","\u002Fdev\u002Fclean-code\u002Fservices-return-callers-present","1.dev\u002F15.clean-code\u002F2.services-return-callers-present",{"title":51,"path":52,"stem":53,"children":54},"AI Prompting","\u002Fdev\u002Fai-prompting","1.dev\u002F17.ai-prompting\u002Findex",[55],{"title":51,"path":52,"stem":53},{"title":57,"path":58,"stem":59,"children":60},"C#","\u002Fdev\u002Fcsharp","1.dev\u002F2.csharp\u002Findex",[61,62,66,70,74],{"title":57,"path":58,"stem":59},{"title":63,"path":64,"stem":65},"C# Basics","\u002Fdev\u002Fcsharp\u002Fcsharp-basics","1.dev\u002F2.csharp\u002F1.csharp-basics",{"title":67,"path":68,"stem":69},"Classes & Models","\u002Fdev\u002Fcsharp\u002Fclasses-and-models","1.dev\u002F2.csharp\u002F2.classes-and-models",{"title":71,"path":72,"stem":73},"Services & Helpers","\u002Fdev\u002Fcsharp\u002Fservices-and-helpers","1.dev\u002F2.csharp\u002F3.services-and-helpers",{"title":75,"path":76,"stem":77},"Project Structure","\u002Fdev\u002Fcsharp\u002Fproject-structure","1.dev\u002F2.csharp\u002F4.project-structure",{"title":79,"path":80,"stem":81,"children":82},"Git","\u002Fdev\u002Fgit","1.dev\u002F9.git\u002Findex",[83,84],{"title":79,"path":80,"stem":81},{"title":85,"path":86,"stem":87},"Git Cheat Sheet","\u002Fdev\u002Fgit\u002Fgit-cheat-sheet","1.dev\u002F9.git\u002F1.git-cheat-sheet",{"title":89,"path":90,"stem":91,"children":92},"Teaching","\u002Fteaching","2.teaching",[93,95],{"title":89,"path":90,"stem":94},"2.teaching\u002Findex",{"title":96,"path":97,"stem":98,"children":99},"AppsDev","\u002Fteaching\u002Fapps-dev","2.teaching\u002F1.apps-dev\u002Findex",[100,101,119,137,147,161],{"title":96,"path":97,"stem":98},{"title":102,"path":103,"stem":104,"children":105},"Lesson Plans","\u002Fteaching\u002Fapps-dev\u002Flesson-plans","2.teaching\u002F1.apps-dev\u002F1.lesson-plans\u002Findex",[106,107,111,115],{"title":102,"path":103,"stem":104},{"title":108,"path":109,"stem":110},"Coding with AI","\u002Fteaching\u002Fapps-dev\u002Flesson-plans\u002Fcoding-with-ai","2.teaching\u002F1.apps-dev\u002F1.lesson-plans\u002F1.coding-with-ai",{"title":112,"path":113,"stem":114},"Coding with AI: Prompts & Reading JavaScript","\u002Fteaching\u002Fapps-dev\u002Flesson-plans\u002Fprompts-and-reading-js","2.teaching\u002F1.apps-dev\u002F1.lesson-plans\u002F2.prompts-and-reading-js",{"title":116,"path":117,"stem":118},"JavaScript for Beginners","\u002Fteaching\u002Fapps-dev\u002Flesson-plans\u002Fjavascript-for-beginners","2.teaching\u002F1.apps-dev\u002F1.lesson-plans\u002F3.javascript-for-beginners",{"title":120,"path":121,"stem":122,"children":123},"Activities","\u002Fteaching\u002Fapps-dev\u002Factivities","2.teaching\u002F1.apps-dev\u002F2.activities\u002Findex",[124,125,129,133],{"title":120,"path":121,"stem":122},{"title":126,"path":127,"stem":128},"Dynamic Portfolio Website","\u002Fteaching\u002Fapps-dev\u002Factivities\u002Fdynamic-portfolio-website","2.teaching\u002F1.apps-dev\u002F2.activities\u002F2.dynamic-portfolio-website",{"title":130,"path":131,"stem":132},"Mini Product Store","\u002Fteaching\u002Fapps-dev\u002Factivities\u002Fmini-product-store","2.teaching\u002F1.apps-dev\u002F2.activities\u002F3.mini-product-store",{"title":134,"path":135,"stem":136},"Semester Project","\u002Fteaching\u002Fapps-dev\u002Factivities\u002Fsemester-project","2.teaching\u002F1.apps-dev\u002F2.activities\u002F4.semester-project",{"title":138,"path":139,"stem":140,"children":141},"Exercises","\u002Fteaching\u002Fapps-dev\u002Fexercises","2.teaching\u002F1.apps-dev\u002F4.exercises\u002Findex",[142,143],{"title":138,"path":139,"stem":140},{"title":144,"path":145,"stem":146},"Read & Predict","\u002Fteaching\u002Fapps-dev\u002Fexercises\u002Fread-and-predict","2.teaching\u002F1.apps-dev\u002F4.exercises\u002F1.read-and-predict",{"title":148,"path":149,"stem":150,"children":151},"AI Prompts","\u002Fteaching\u002Fapps-dev\u002Fai-prompts","2.teaching\u002F1.apps-dev\u002F7.ai-prompts\u002Findex",[152,153,157],{"title":148,"path":149,"stem":150},{"title":154,"path":155,"stem":156},"Prompt Flow","\u002Fteaching\u002Fapps-dev\u002Fai-prompts\u002Fbasic-prompting","2.teaching\u002F1.apps-dev\u002F7.ai-prompts\u002F1.basic-prompting",{"title":158,"path":159,"stem":160},"Using OpenCode CLI Instead of Copy-Pasting from ChatGPT","\u002Fteaching\u002Fapps-dev\u002Fai-prompts\u002Fopencode-cli","2.teaching\u002F1.apps-dev\u002F7.ai-prompts\u002F2.opencode-cli",{"title":162,"path":163,"stem":164,"children":165},"Cheat Sheets","\u002Fteaching\u002Fapps-dev\u002Fcheat-sheets","2.teaching\u002F1.apps-dev\u002F8.cheat-sheets\u002Findex",[166,167],{"title":162,"path":163,"stem":164},{"title":168,"path":169,"stem":170},"How to Collaborate on GitHub","\u002Fteaching\u002Fapps-dev\u002Fcheat-sheets\u002Fgithub-collaboration","2.teaching\u002F1.apps-dev\u002F8.cheat-sheets\u002F1.github-collaboration",{"title":172,"path":173,"stem":174,"children":175},"Snippets","\u002Fsnippets","3.snippets",[176,178],{"title":172,"path":173,"stem":177},"3.snippets\u002Findex",{"title":179,"path":180,"stem":181},"Debounce and Throttle","\u002Fsnippets\u002Fdebounce-and-throttle","3.snippets\u002F1.debounce-and-throttle",{"title":162,"path":183,"stem":184,"children":185},"\u002Fcheat-sheets","4.cheat-sheets",[186,188],{"title":162,"path":183,"stem":187},"4.cheat-sheets\u002Findex",{"title":189,"path":190,"stem":191},"Vim Cheat Sheet","\u002Fcheat-sheets\u002Fvim-cheat-sheet","4.cheat-sheets\u002F1.vim-cheat-sheet",{"title":193,"path":194,"stem":195,"children":196},"Templates","\u002Ftemplates","5.templates",[197,199],{"title":193,"path":194,"stem":198},"5.templates\u002Findex",{"title":200,"path":201,"stem":202},"Pull Request Template","\u002Ftemplates\u002Fpull-request-template","5.templates\u002F1.pull-request-template",{"title":204,"path":205,"stem":206,"children":207},"Meta","\u002Fmeta","6.meta",[208,210,214],{"title":204,"path":205,"stem":209},"6.meta\u002Findex",{"title":211,"path":212,"stem":213},"Authoring Guide","\u002Fmeta\u002Fauthoring-guide","6.meta\u002F1.authoring-guide",{"title":215,"path":216,"stem":217},"Markdown Showcase","\u002Fmeta\u002Fmarkdown-showcase","6.meta\u002F2.markdown-showcase",{"title":219,"path":220,"stem":221,"children":222},"Troubleshooting","\u002Ftroubleshooting","7.troubleshooting",[223,225],{"title":219,"path":220,"stem":224},"7.troubleshooting\u002Findex",{"title":226,"path":227,"stem":228},"Fixing CORS Errors","\u002Ftroubleshooting\u002Fcors-errors","7.troubleshooting\u002F1.cors-errors",{"id":230,"title":57,"body":231,"category":321,"createdAt":322,"description":323,"draft":324,"extension":325,"featured":324,"keywords":326,"links":331,"meta":332,"navigation":333,"path":58,"readingTime":334,"seo":335,"stem":59,"tags":336,"updatedAt":322,"__hash__":339},"docs\u002F1.dev\u002F2.csharp\u002Findex.md",{"type":232,"value":233,"toc":314},"minimark",[234,243,258,263,295,299],[235,236,237,238,242],"p",{},"Notes for picking up C# with a Laravel\u002FPHP mental model already in place. The\nlanguage is different, but the shapes are familiar — classes, services, models,\nnamespaces. Most of the work is learning what each Laravel idea is ",[239,240,241],"em",{},"called"," over\nhere.",[244,245,246],"tip",{},[235,247,248,249,253,254,257],{},"Coming from Laravel, the fastest way in is translation, not memorisation. When\nyou hit something new, ask \"what's the Laravel equivalent?\" — a service is still\na service, ",[250,251,252],"code",{},"composer"," is ",[250,255,256],{},"dotnet","\u002FNuGet, Collections are LINQ, Eloquent is EF\nCore.",[259,260,262],"h2",{"id":261},"start-here","Start here",[264,265,266,274,280,286],"ul",{},[267,268,269,273],"li",{},[270,271,272],"a",{"href":64},"C# basics"," — types, variables, and how to write a function (method).",[267,275,276,279],{},[270,277,278],{"href":68},"Classes & models"," — create a class, give it properties, and use it.",[267,281,282,285],{},[270,283,284],{"href":72},"Services & helpers"," — put code in another file and call it from anywhere.",[267,287,288,291,292,294],{},[270,289,290],{"href":76},"Project structure"," — how files, namespaces and the ",[250,293,256],{}," CLI fit together.",[259,296,298],{"id":297},"the-mental-model","The mental model",[235,300,301,302,306,307,310,311,313],{},"C# is ",[303,304,305],"strong",{},"compiled"," and ",[303,308,309],{},"statically typed"," — the opposite of PHP on both counts.\nYou declare types up front, the compiler checks them before the program runs, and\nyou build\u002Frun with the ",[250,312,256],{}," CLI instead of pointing a web server at a folder.\nThat feels heavier at first, then pays off: the editor knows exactly what\neverything is, so autocomplete and refactoring are excellent.",{"title":315,"searchDepth":316,"depth":316,"links":317},"",3,[318,320],{"id":261,"depth":319,"text":262},2,{"id":297,"depth":319,"text":298},null,"2026-07-19","Learning C# and .NET from a Laravel\u002FPHP background — the fundamentals, mapped to what you already know.",false,"md",[327,328,256,329,330],"c#",".net","console app","laravel to c#",[],{},true,1,{"title":57,"description":323},[337,256,338],"csharp","basics","F9DaZ0DEIyPg4gVuSawklqmWNDyTCZAOV2YsjeMojrs",[341,343],{"title":51,"path":52,"stem":53,"description":342,"children":-1},"Getting reliable, useful results out of language models.",{"title":63,"path":64,"stem":65,"description":344,"children":-1},"Types, variables, control flow and how to write a function (method) in C#, mapped from PHP.",[346,357,365,368,376,383,386,391,394,397,399,407,413,416,422,425,431,434,436,441,444,447,453,457,462,465,471,475,478,483,486,489,492,495,497,503,506,511,514,518,521,528,533,536,542],{"path":135,"title":134,"description":347,"tags":348,"category":120,"featured":324,"updatedAt":355,"createdAt":355,"readingTime":356,"draft":324},"Teams of four build one frontend application over the whole semester using AI, in a single shared GitHub repository where everyone contributes.",[349,350,351,352,353,354],"teaching","activity","capstone","github","ai","frontend","2026-08-01",12,{"path":169,"title":168,"description":358,"tags":359,"category":162,"featured":324,"updatedAt":355,"createdAt":355,"readingTime":364,"draft":324},"Create one repository, push your project, and add your teammates as collaborators so the whole team can work on the same code.",[352,360,361,362,363],"git","collaboration","teamwork","setup",4,{"path":163,"title":162,"description":366,"tags":367,"category":162,"featured":324,"updatedAt":355,"createdAt":355,"readingTime":334,"draft":324},"Step-by-step references students can follow on their own during class.",[],{"path":159,"title":158,"description":369,"tags":370,"category":148,"featured":324,"updatedAt":375,"createdAt":375,"readingTime":316,"draft":324},"Install and configure the OpenCode CLI so AI writes code directly into your project folder instead of you copying it from a chat window.",[353,371,372,373,374],"opencode","cli","tooling","workflow","2026-07-25",{"path":48,"title":47,"description":377,"tags":378,"category":37,"featured":324,"updatedAt":322,"createdAt":322,"readingTime":319,"draft":324},"A service should return a result and let the caller decide how to show it — the single most useful separation-of-concerns rule.",[379,380,381,382],"clean-code","architecture","separation-of-concerns","services",{"path":64,"title":63,"description":344,"tags":384,"category":321,"featured":324,"updatedAt":322,"createdAt":322,"readingTime":316,"draft":324},[337,256,338,385],"functions",{"path":68,"title":67,"description":387,"tags":388,"category":321,"featured":324,"updatedAt":322,"createdAt":322,"readingTime":316,"draft":324},"Create a class, give it properties and a constructor, and use it — the C# version of a Laravel model.",[337,256,389,390],"classes","models",{"path":72,"title":71,"description":392,"tags":393,"category":321,"featured":324,"updatedAt":322,"createdAt":322,"readingTime":316,"draft":324},"Put code in another file — a service or a static helper — and call it from anywhere, the C# way.",[337,256,382,380],{"path":76,"title":75,"description":395,"tags":396,"category":321,"featured":324,"updatedAt":322,"createdAt":322,"readingTime":316,"draft":324},"How C# files, namespaces, folders and the dotnet CLI fit together into a running app.",[337,256,373,380],{"path":58,"title":57,"description":323,"tags":398,"category":321,"featured":324,"updatedAt":322,"createdAt":322,"readingTime":334,"draft":324},[337,256,338],{"path":20,"title":19,"description":400,"tags":401,"category":13,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"The core Eloquent relationship types with examples and the N+1 trap to avoid.",[402,403,404,405],"laravel","eloquent","database","orm","2026-07-17",{"path":24,"title":23,"description":408,"tags":409,"category":13,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"My quick reference for setting up and using Laravel Homestead during development.",[402,410,411,412],"homestead","vagrant","virtualbox",{"path":14,"title":13,"description":414,"tags":415,"category":13,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"The PHP framework for web artisans — Eloquent, routing, queues and more.",[],{"path":34,"title":33,"description":417,"tags":418,"category":27,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":319,"draft":324},"Personal Bash aliases and helper functions that streamline my Laravel and Homestead development workflow.",[419,420,421,410,402],"bash","bashrc","git bash",{"path":28,"title":27,"description":423,"tags":424,"category":27,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"Shell scripting and a faster life on the command line.",[],{"path":44,"title":43,"description":426,"tags":427,"category":37,"featured":333,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"Practical rules for naming variables, functions and types so code reads like prose.",[379,428,429,430],"naming","readability","craft",{"path":38,"title":37,"description":432,"tags":433,"category":37,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"Writing code that other people (and future you) can read.",[],{"path":52,"title":51,"description":342,"tags":435,"category":51,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},[],{"path":86,"title":85,"description":437,"tags":438,"category":79,"featured":333,"updatedAt":406,"createdAt":406,"readingTime":319,"draft":324},"The Git commands I actually use day to day, plus how to undo things safely.",[360,372,439,440],"version-control","cheat-sheet",{"path":80,"title":79,"description":442,"tags":443,"category":79,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"Version control — everyday commands and getting out of trouble.",[],{"path":6,"title":10,"description":445,"tags":446,"category":10,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"Languages, frameworks and the craft of building software.",[],{"path":109,"title":108,"description":448,"tags":449,"category":89,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":364,"draft":324},"An introduction to AI-assisted software development, modern development workflows, and the mindset needed to use AI responsibly throughout the course.",[353,450,451,452],"software development","prompt engineering","beginners",{"path":113,"title":112,"description":454,"tags":455,"category":89,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":364,"draft":324},"Learn how to write effective AI prompts and read JavaScript code confidently. This lesson teaches students how to direct AI instead of blindly copying its output.",[353,456,451,452],"javascript",{"path":117,"title":116,"description":458,"tags":459,"category":89,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":316,"draft":324},"Introduction to the fundamentals of JavaScript, from variables and functions to loops, DOM manipulation, and events. This lesson prepares students for the Mini Product Store activity.",[456,452,460,461],"programming","web development",{"path":103,"title":102,"description":463,"tags":464,"category":102,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"Session-by-session plans with objectives, timing and materials.",[],{"path":127,"title":126,"description":466,"tags":467,"category":120,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":316,"draft":324},"Build a personal portfolio website using JavaScript arrays, loops, and DOM manipulation instead of hardcoded HTML.",[349,350,456,468,469,470],"portfolio","dom","loops",{"path":131,"title":130,"description":472,"tags":473,"category":120,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":316,"draft":324},"A JavaScript activity where students build a simple product store using arrays, loops, functions, DOM manipulation, and event listeners.",[349,350,456,469,474,470],"arrays",{"path":121,"title":120,"description":476,"tags":477,"category":120,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"In-class activities that get students doing, not just listening.",[],{"path":145,"title":144,"description":479,"tags":480,"category":120,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":319,"draft":324},"Practice reading JavaScript code, predicting its output, and verifying your understanding before running the program.",[349,350,456,385,481,482],"if-statement","debugging",{"path":139,"title":138,"description":484,"tags":485,"category":138,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"Practice problems that build skill through repetition.",[],{"path":155,"title":154,"description":487,"tags":488,"category":148,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":364,"draft":324},"A structured workflow for working with AI that emphasizes planning, review, and understanding before implementation.",[353,451,374],{"path":149,"title":148,"description":490,"tags":491,"category":148,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"Prompt templates for teaching with and about AI.",[],{"path":97,"title":96,"description":493,"tags":494,"category":89,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"Lesson plans, activities, rubrics and student references.",[],{"path":90,"title":89,"description":493,"tags":496,"category":89,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},[],{"path":180,"title":179,"description":498,"tags":499,"category":172,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"Two tiny functions to control how often a handler runs — with the difference explained.",[456,500,501,502],"performance","snippets","events",{"path":173,"title":172,"description":504,"tags":505,"category":172,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"Small, copy-ready fragments you reach for again and again.",[],{"path":190,"title":189,"description":507,"tags":508,"category":162,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"The essential Vim motions and commands to get productive and get out.",[509,510,440,372],"vim","editor",{"path":183,"title":162,"description":512,"tags":513,"category":162,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"Dense, scannable references for commands and syntax.",[],{"path":201,"title":200,"description":515,"tags":516,"category":193,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"A reusable PR description template that makes reviews faster and kinder.",[360,352,517,361],"template",{"path":194,"title":193,"description":519,"tags":520,"category":193,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"Reusable starting points for files, configs and docs.",[],{"path":212,"title":211,"description":522,"tags":523,"category":204,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":319,"draft":324},"The frontmatter and markdown conventions every note in this knowledge base follows.",[524,525,526,527],"meta","conventions","markdown","authoring",{"path":216,"title":215,"description":529,"tags":530,"category":204,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":319,"draft":324},"Every formatting feature this knowledge base supports, on one page — a living reference and rendering test.",[526,531,532],"mdc","reference",{"path":205,"title":204,"description":534,"tags":535,"category":204,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"How this knowledge base itself is built and maintained.",[],{"path":227,"title":226,"description":537,"tags":538,"category":219,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"What a CORS error actually means and how to fix it — on the server, where it belongs.",[539,540,541,482],"cors","http","apis",{"path":220,"title":219,"description":543,"tags":544,"category":219,"featured":324,"updatedAt":406,"createdAt":406,"readingTime":334,"draft":324},"Symptoms, causes and fixes for problems worth remembering.",[],1785598840291]