41554 blogs · [ { "id": "01a087c0-6a24-70b7-b041-3d2d108e6662", "title": "Are MCP Servers Going Obsolete? No — But Skills Are Claiming Territory That Was Never Really Theirs", "url": "https://peterkellner.net/posts/2026-03-10-are-mcp-servers-going-obsolete-skills-vs-mcp/", "published_at": "2026-03-10T10:00:00+00:00" }, { "id": "01a087c0-6a24-70b7-b041-3d2d11151dfb", "title": "Understanding React's useEffectEvent: A Complete Guide to Solving Stale Closures", "url": "https://peterkellner.net/posts/2026-01-09-understanding-react-useeffectevent-vs-useeffect/", "published_at": "2026-01-09T14:00:00+00:00" }, { "id": "01a087c0-6a24-70b7-b041-3d2d11b40174", "title": "Using AI to Create Secure MySQL Password Rotation Scripts (Without Exposing Secrets)", "url": "https://peterkellner.net/posts/2025-12-31-ai-assisted-mysql-password-rotation-without-exposing-secrets/", "published_at": "2025-12-31T14:00:00+00:00" }, { "id": "01a087c0-6a24-70b7-b041-3d2d1215e5cb", "title": "Monitoring Dual ISP Status with SonicWall SNMP and Next.js", "url": "https://peterkellner.net/posts/2025-12-22-monitoring-dual-isp-status-with-sonicwall-snmp-and-nextjs/", "published_at": "2025-12-22T10:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a671e5e45c4", "title": "Bluesky Lists Integration For Silicon Valley Code Camp Speakers and Attendees", "url": "https://peterkellner.net/posts/2025-02-17-bluesky-list-integration-live-for-all-speakers-and-attendees/", "published_at": "2025-02-18T13:58:01+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a671ebcf9bd", "title": "A Clean .zshrc Startup Script for Setting Github and Docker API Keys on a Mac", "url": "https://peterkellner.net/posts/2025-01-18-a-clean-zshrc-startup-script-for-setting-github-and-docker-api-on-mac/", "published_at": "2025-01-18T13:25:20+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a671faa39bc", "title": "Replacing Legacy throw in React 19 with Suspense and use", "url": "https://peterkellner.net/posts/2024-12-31-replacing-legacy-throw-in-react-19-with-suspense-and-use/", "published_at": "2024-12-31T23:57:31+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a67208da891", "title": "OBS Recording Resolution 4K Even Though Display is 1080P", "url": "https://peterkellner.net/posts/2024-05-11-obs-recording-resolution-4k-even-though-display-is-1080p/", "published_at": "2024-05-12T01:27:29+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a6720cfaa41", "title": "Running React 19 From a CDN and using esm.sh", "url": "https://peterkellner.net/posts/2024-05-10-running-react-19-from-a-cdn-and-using-esmsh/", "published_at": "2024-05-10T16:51:20+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a6721c0c206", "title": "Mastering useState in React to Handle Multiple Values", "url": "https://peterkellner.net/posts/2024-04-16-mastering-usestate-in-react-to-handle-multiple-values/", "published_at": "2024-04-16T23:13:45+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a6722438403", "title": "Understanding Environment Variable Pitfalls in Next.js", "url": "https://peterkellner.net/posts/2024-04-15-understanding-environment-variable-pitfalls-in-nextjs/", "published_at": "2024-04-15T21:28:56+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a6722ef65da", "title": "Enhancing React's Drag-and-Drop with State Management: A Deep Dive", "url": "https://peterkellner.net/posts/2024-04-02-enhancing-reacts-drag-and-drop-with-state-management-a-deep-dive/", "published_at": "2024-04-02T21:19:31+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a6723b56b84", "title": "Building a Drag-and-Drop Interface in React: Beyond Basic React", "url": "https://peterkellner.net/posts/2024-04-01-building-a-drag-and-drop-interface-in-react-beyond-basic-react/", "published_at": "2024-04-01T14:56:05+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a6723c8475e", "title": "The Importance of CSS Visibility,Visible vs. Hidden in React", "url": "https://peterkellner.net/posts/importance-css-visibility-visible-hidden-react/", "published_at": "2024-03-30T13:57:55+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a67249ab7ca", "title": "Lessons Learned Using ChatGPT for React Programming", "url": "https://peterkellner.net/posts/2024-03-28-2024-03-28-lessons-learned-building-react-app-with-help-of-chatgpt/", "published_at": "2024-03-28T17:41:50+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a67249ed747", "title": "Enhancing Security in Next.js with NextAuth, A Guide to Protected Pages", "url": "https://peterkellner.net/posts/2024-03-28-enhancing-security-in-nextjs-with-nextauth-protected-pages/", "published_at": "2024-03-28T14:00:09+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a67251d9919", "title": "Building a Multilingual Static Site with Next.js 14", "url": "https://peterkellner.net/posts/building-multilingual-static-site-js-14/", "published_at": "2024-02-27T08:43:57+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a672565fd12", "title": "Converting Blog From jekyl to astro", "url": "https://peterkellner.net/posts/2024-02-22-converting-blog-from-jekyl-to-astro/", "published_at": "2024-02-22T14:43:57+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a6725927fec", "title": "Can ChatGPT Reason? A Real-Life Example, You Decide", "url": "https://peterkellner.net/posts/2023-12-06-chatgpt-and-reasoning-can-it-or-can-it-not/", "published_at": "2023-12-06T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a6725e7802b", "title": "My TypeScript Skills Improving and Best Practices", "url": "https://peterkellner.net/posts/2023-12-05-my-typescript-skills-improving-and-best-practices/", "published_at": "2023-12-05T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a6726d86577", "title": "Silicon Valley Code Campfire Software Architecture Event Summary", "url": "https://peterkellner.net/posts/2023-11-19-silicon-valley-code-campfire-software-architecture-event-summary/", "published_at": "2023-11-19T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a67277ecd6b", "title": "Understanding OBS Backup Server Transition and Quick Reconnection Strategy", "url": "https://peterkellner.net/posts/2023-11-17-obs-retry-on-disconnect-number-of-times-multiplies/", "published_at": "2023-11-17T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a67278a3e25", "title": "Effective Development Process with Two Branches, Dev and Prod", "url": "https://peterkellner.net/posts/2023-10-06-effective-development-process-with-two-branches/", "published_at": "2023-10-06T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a67287b4b55", "title": "ChatGPT Can Be Lazy And Not Think Out of the Box", "url": "https://peterkellner.net/posts/2023-10-05-chatgpt-can-be-lazy-and-not-think-out-of-the-box/", "published_at": "2023-10-05T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a6729144a61", "title": "Handling Query Parameters in Next.js 13 React Server Components", "url": "https://peterkellner.net/posts/2023-09-29-handling-query-params-in-nextjs-13-react-server-components/", "published_at": "2023-09-29T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a67293a36b8", "title": "Redis Explained, Memory Metrics and Performance Insights", "url": "https://peterkellner.net/posts/2023-09-28-redis-memory-usage-explained/", "published_at": "2023-09-28T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a672964a925", "title": "ChatGPT for Code Reviews Accurate but Lacks Initiative", "url": "https://peterkellner.net/posts/2023-09-27-chatgpt-for-code-reviews--accurate-but-lacks-initiative/", "published_at": "2023-09-27T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a672a5aede1", "title": "Using Prisma with TypeScript for Rapid Database Query Testing", "url": "https://peterkellner.net/posts/2023-09-27-using-prisma-with-typescript-for-rapid-query-testing/", "published_at": "2023-09-27T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a672b125731", "title": "Using Prisma to Bridge JavaScript Devs to Databases with Elegance", "url": "https://peterkellner.net/posts/2023-09-27-prisma-bridging-gap-between-devs-and-database/", "published_at": "2023-09-27T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a672bc35323", "title": "Leveraging AI to Iteratively Improve Code Quality", "url": "https://peterkellner.net/posts/2023-09-26-leveraging-ai-to-iteratively-improve-code-quality/", "published_at": "2023-09-26T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a672bd5d7c6", "title": "Managing Job Queues in Bull While Preventing Log Clutter from Unprocessed Jobs", "url": "https://peterkellner.net/posts/2023-09-25-managing-job-queues-in-bull-while-preventing-log-clutter-from-unprocessed-jobs/", "published_at": "2023-09-25T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a672c708588", "title": "Managing Redis Memory Limits in Docker-Compose", "url": "https://peterkellner.net/posts/2023-09-24-managing-redis-memory-limits-with-docker-compose/", "published_at": "2023-09-24T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a672cd28cc9", "title": "How to Determine Disk Space Usage in MySQL", "url": "https://peterkellner.net/posts/2023-09-24-how-to-determine-disk-space-usage-in-mysql/", "published_at": "2023-09-24T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a672cd6c248", "title": "Replacing Label Fields with Aria-Label, A Focus on Accessibility", "url": "https://peterkellner.net/posts/2023-09-22-replacing-label-fields-with-aria-label-focussing-on-accessibility/", "published_at": "2023-09-22T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a672d0a0566", "title": "How to Use Google's ReCaptcha V3 with NextJS 13 and the New App Router", "url": "https://peterkellner.net/posts/2023-09-18-how-to-use-googles-recaptcha-v3-with-nextjs-13-and-the-new-app-router/", "published_at": "2023-09-18T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a672d541eb9", "title": "State Management in React Applications Through URL Hashes", "url": "https://peterkellner.net/posts/2023-09-16-state-management-in-react-applications-through-url-hashes/", "published_at": "2023-09-16T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a672e3a3d90", "title": "Resolving TypeScript Import Errors in Next.js", "url": "https://peterkellner.net/posts/2023-09-15-resolving-typescript-errors-in-nextjs/", "published_at": "2023-09-15T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a672e9bcd9b", "title": "Simplifying JavaScript Dictionary Creation with reduce in TypeScript", "url": "https://peterkellner.net/posts/2023-09-14-simplify-javascript-dictionary-creation-using-reduce-with-typescript-help/", "published_at": "2023-09-14T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a672f87cffd", "title": "How ChatGPT Scares Me When Writing Code", "url": "https://peterkellner.net/posts/2023-09-07-how-chatgpt-scares-me-when-writing-code/", "published_at": "2023-09-07T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a672ffe8d80", "title": "Accelerating Data Access with Indexed Arrays in Prisma", "url": "https://peterkellner.net/posts/2023-09-04-accelerating-data-access-with-indexed-arrays-in-prisma/", "published_at": "2023-09-04T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a6730f64327", "title": "Mastering Prisma Logging with Dynamic Configuration", "url": "https://peterkellner.net/posts/2023-09-03-mastering-prisma-logging-with-dynamic-config/", "published_at": "2023-09-03T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a6731cef921", "title": "Converting PascalCase to CamelCase in JavaScript Records Using TypeScript", "url": "https://peterkellner.net/posts/2023-09-03-converting-pascalcase-to-camelcase-in-javascript-typescript-using-records/", "published_at": "2023-09-03T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a673245700e", "title": "Building, Deploying, and Managing Docker Images with GitHub Actions", "url": "https://peterkellner.net/posts/2023-08-03-building-deploying-and-managing-docker-images-with-github-actions/", "published_at": "2023-08-03T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a6732ec9436", "title": "Enforcing SSL Connections in MySQL using Docker", "url": "https://peterkellner.net/posts/2023-08-02-enforcing-ssl-connections-in-mysql-using-docker/", "published_at": "2023-08-02T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a6733578e3c", "title": "Understanding TypeScript's Powerful Type Assertions Through Practical Examples", "url": "https://peterkellner.net/posts/2023-06-15-understanding-typescript-type-assertions/", "published_at": "2023-06-15T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a67342c6475", "title": "Creating a Custom React Context Provider", "url": "https://peterkellner.net/posts/2023-05-11-creating-a-custom-react-context-provider/", "published_at": "2023-05-11T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a6734dda528", "title": "Migrating from useState to useReducer, Building a Counter in a Next.js App", "url": "https://peterkellner.net/posts/2023-05-07-migrating-from-usestate-to-usereducer-building-a-counter-in-a-nextjs-app/", "published_at": "2023-05-07T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a67351d5c71", "title": "Understanding useRef and useState for Tracking Component Render Count in React", "url": "https://peterkellner.net/posts/2023-05-05-understanding-useref-and-usestate-for-tracking-component-render-count-in-react/", "published_at": "2023-05-05T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a67352564de", "title": "AI-driven Built-in Degradation and Enhancement in Next.js React Apps on Vercel", "url": "https://peterkellner.net/posts/2023-05-03-ai-driven-built-in-degradation-in-nextjs-vercel-apps/", "published_at": "2023-05-03T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a6735be26d6", "title": "Using useCallback Correctly in a Simple Next.js 13 Component", "url": "https://peterkellner.net/posts/2023-05-03-using-usecallback-correctly-in-a-simple-nextjs-13-component/", "published_at": "2023-05-03T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a673662f798", "title": "ChatGPT Problems in Coding React Apps", "url": "https://peterkellner.net/posts/2023-04-16-chatgpt-problems-coding-react-apps/", "published_at": "2023-04-16T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a6736fda048", "title": "Building a Bootstrap 5 Legend with the Help of ChatGPT", "url": "https://peterkellner.net/posts/2023-04-02-building-a-bootstrap-5-legend-with-chatgpt-help/", "published_at": "2023-04-02T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a67370d00de", "title": "Everything ChatGPT at Silicon Valley Code Campfire Streaming 2/25/23", "url": "https://peterkellner.net/posts/2023-02-25-everything-chat-gpt-at-sv-code-campfire---copy/", "published_at": "2023-02-25T20:00:00+00:00" }, { "id": "01a087c0-6a25-72fd-86a6-2a6737ab90c3", "title": "How To Create a Custom Name on Mastodon @pkellner@peterkellner.net", "url": "https://peterkellner.net/posts/2022-12-24-create-your-own-mastodon-domain-without-a-server/", "published_at": "2022-12-24T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0eef9312f47", "title": "How To View and Follow Another Person's Following on Mastodon", "url": "https://peterkellner.net/posts/2022-11-19-find-someone-elses-followers-on-mastodon/", "published_at": "2022-11-19T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0eef9445942", "title": "I Joined Mastodon as Alternative to Twitter", "url": "https://peterkellner.net/posts/2022-11-12-joined-mastodon-as-alternative-to-twitter/", "published_at": "2022-11-12T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0eef9ed9dc0", "title": "Convert useState to useReducer in a React Context", "url": "https://peterkellner.net/posts/2022-04-19-convert-usestate-to-usereducer-in-react-easily/", "published_at": "2022-04-19T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0eef9f2da3d", "title": "An Example GraphQL Apollo Server 3 with Redis and Auth Working", "url": "https://peterkellner.net/posts/2022-02-11-apollo-graphql-server-version-3-with-cache-auth-redis/", "published_at": "2022-02-11T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0eefa715841", "title": "Build a Web Site With React 18 That Shows the Most Polluted Cities in the United States", "url": "https://peterkellner.net/posts/2022-01-23-most-polluted-cities-air-quality-with-react-18/", "published_at": "2022-01-23T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0eefb533f29", "title": "NextJS 10 and Thoughts Around Incremental Static Regeneration (ISR)", "url": "https://peterkellner.net/posts/2020-01-05-nextjs-10-observations-regarding-incremental-static-regeneration-isr/", "published_at": "2020-01-05T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0eefb8bdbde", "title": "How To Return Non IQueryable Results That Include Entity Framework Context in Hot Chocolate GraphQL Server", "url": "https://peterkellner.net/posts/2020-01-03-return-non-iqueryable-results-using-hot-chocolate-and-entity-framework/", "published_at": "2020-01-03T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0eefc697eb2", "title": "To TypeScript or Not To TypeScript", "url": "https://peterkellner.net/posts/2019-09-25-to-typescript-or-not-to-typescript/", "published_at": "2019-09-25T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0eefd168b43", "title": "Debug React Hooks useState and useReducer with Redux DevTools Redux Support", "url": "https://peterkellner.net/posts/2019-09-19-debug-react-hooks-use-state-use-reducer-with-redux-devtools/", "published_at": "2019-09-19T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0eefd9848ad", "title": "Integrating Jekyll and SmartForms and ReCaptcha For Static Site Contact Forms", "url": "https://peterkellner.net/posts/2019-09-07-integrating-jekyll-and-smartforms-with-recaptcha-free-copy/", "published_at": "2019-09-07T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0eefe87b15b", "title": "Chrome Extension for Viewing Static Data in NextJS", "url": "https://peterkellner.net/posts/2019-06-16-a-chrome-extension-for-viewing-serialized-data-in-nextjs/", "published_at": "2019-06-16T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0eefeb89ce1", "title": "Should You Comment Your Code When You Program?", "url": "https://peterkellner.net/posts/2018-12-25-should-you-comment-your-code-when-you-program/", "published_at": "2018-12-25T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0eeff368f66", "title": "MacBook Pro 2018 vs 2015 Keyboard Head to Head", "url": "https://peterkellner.net/posts/2018-07-14-macbook-pro-2018-vs-2015-keyboard-head-to-head/", "published_at": "2018-07-14T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0eeff56ca75", "title": "Published Today My Latest Course on React and ASP.NET Core", "url": "https://peterkellner.net/posts/2018-05-23-published-today-my-latest-course-on-react-and-asp-net-core/", "published_at": "2018-05-23T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef00454781", "title": "Show a Spinner While Loading Data with React and Axios", "url": "https://peterkellner.net/posts/2018-02-11-show-spinner-loading-data-react-axios/", "published_at": "2018-02-11T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef011d2407", "title": "Learn ASP.NET Core Tag Helpers in this 3 Hour Video on Pluralsight", "url": "https://peterkellner.net/posts/2017-06-10-learn-asp-net-core-tag-helpers-3-hour-video-pluralsight/", "published_at": "2017-06-10T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef017eadcc", "title": "Vote On Which of Douglas Crockford's Session to See at Silicon Valley Code Camp", "url": "https://peterkellner.net/posts/2017-06-07-vote-on-which-of-douglas-crockfords-session-to-see-at-silicon-valley-code-camp/", "published_at": "2017-06-07T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef01fb5dc4", "title": "Looking Forward to Talking about ASP.NET Core Tag Helpers Tonight at South Bay.Net in Mountain View", "url": "https://peterkellner.net/posts/2017-05-25-looking-forward-to-talking-about-asp-net-core-tag-helpers-tonight-at-south-bay-net-in-mountain-view/", "published_at": "2017-05-25T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef023ff593", "title": "Why I Love the Community and How It Helps Me", "url": "https://peterkellner.net/posts/2017-03-19-why-i-love-community/", "published_at": "2017-03-19T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef02f7388c", "title": "My Enthusiasm for Resharper Amplified", "url": "https://peterkellner.net/posts/2016-08-09-my-enthusiasm-for-resharper-amplified/", "published_at": "2016-08-09T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef038364c8", "title": "Redis Conference Talk on Fast Cache with ASP.NET by Peter Kellner", "url": "https://peterkellner.net/posts/2016-07-05-redis-conference-talk-fast-cache-asp-net-peter-kellner/", "published_at": "2016-07-05T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef040d1be7", "title": "Ransomeware Attacks and My Best Practices", "url": "https://peterkellner.net/posts/2016-05-28-ransomeware-attacks-and-my-best-practices/", "published_at": "2016-05-28T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef04874679", "title": "Using Type T for making C# Method Calls More Flexible", "url": "https://peterkellner.net/posts/2016-05-06-using-type-t-for-making-c-method-calls-more-flexible/", "published_at": "2016-05-06T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef04d9f82a", "title": "Parsing NewtonSoft JToken Inside WebAPI Call", "url": "https://peterkellner.net/posts/2016-05-05-parsing-newtonsoft-jtoken-inside-webapi-call/", "published_at": "2016-05-05T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef05948f8b", "title": "My Pluralsight ASP.NET Multi-tenant Course in Top 10", "url": "https://peterkellner.net/posts/2016-04-28-my-pluralsight-asp-net-multi-tenant-course-in-top-10/", "published_at": "2016-04-28T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef05eacab2", "title": "Showing WebAPI Validation Errors with ExtJS 6", "url": "https://peterkellner.net/posts/2016-04-09-showing-webapi-validation-errors-extjs-6/", "published_at": "2016-04-09T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef063cffba", "title": "A Short Video Tutorial on How To Fade in and out with Adobe Premiere", "url": "https://peterkellner.net/posts/2016-01-09-a-short-video-tutorial-on-how-to-fade-in-and-out-with-adobe-premiere/", "published_at": "2016-01-09T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef06ffa9d2", "title": "Converting a Controller Method in MVC5 to async", "url": "https://peterkellner.net/posts/2015-12-01-converting-controller-method-mvc5-async/", "published_at": "2015-12-01T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef07509760", "title": "Using map instead of a for loop in ECMAScript 5 JavaScript", "url": "https://peterkellner.net/posts/2015-11-21-using-map-instead-of-for-in-javascript/", "published_at": "2015-11-21T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef075b06e5", "title": "Seeding a Many to Many With Entity Framework and C# Dynamic", "url": "https://peterkellner.net/posts/2015-11-11-seeding-a-many-to-many-with-entity-framework-and-c-dynamic/", "published_at": "2015-11-11T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef07711003", "title": "GitHub Visual Studio 2015 Extension, Getting Started", "url": "https://peterkellner.net/posts/2015-11-10-github-visual-studio-2015-extension-getting-started/", "published_at": "2015-11-10T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef07f3b98e", "title": "Seed Entity Framework Code First With JSON Using C# Dynamic", "url": "https://peterkellner.net/posts/2015-11-10-seed-entity-framework-code-first-with-json-using-c-dynamic/", "published_at": "2015-11-10T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef087aae42", "title": "LINQ Support in Visual Studio 2015 Debugger Awesome", "url": "https://peterkellner.net/posts/2015-09-03-linq-support-in-visual-studio-2015-debugger-awesome/", "published_at": "2015-09-03T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef08b0d405", "title": "Visual Studio 2015, First and Second Impressions", "url": "https://peterkellner.net/posts/2015-08-05-visual-studio-2015-first-and-second-impressions/", "published_at": "2015-08-05T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef092c64ae", "title": "Magic in Chrome JavaScript Debugger", "url": "https://peterkellner.net/posts/2015-05-25-magic-in-chrome-javascript-debugger/", "published_at": "2015-05-25T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef09ecda94", "title": "How To Create a Recorded Hangout", "url": "https://peterkellner.net/posts/2015-04-10-how-to-create-a-recorded-hangout/", "published_at": "2015-04-10T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef0ac81485", "title": "ExtJS Store and Cannot read property 'buffered' of undefined", "url": "https://peterkellner.net/posts/2015-04-05-extjs-store-and-cannot-read-property-buffered-of-undefined/", "published_at": "2015-04-05T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef0b7424cf", "title": "Routing and State (The AngularJS Discussions)", "url": "https://peterkellner.net/posts/2015-03-26-routing-and-state-the-angularjs-discussions/", "published_at": "2015-03-26T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef0c597e28", "title": "Why Am I So Excited About AngularU?", "url": "https://peterkellner.net/posts/2015-03-26-why-am-i-so-excited-about-angularu/", "published_at": "2015-03-26T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef0d29957e", "title": "Refactoring C# Code With ReSharper Help", "url": "https://peterkellner.net/posts/2015-03-08-refactoring-c-code-with-resharper-help/", "published_at": "2015-03-08T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef0d8dd7b1", "title": "Showing The Record Count in a Sencha ExtJS Grid Made Simple", "url": "https://peterkellner.net/posts/2015-02-25-showing-the-record-count-in-a-sencha-extjs-grid-made-simple/", "published_at": "2015-02-25T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef0e8b4e92", "title": "Add a Data Driven Combobox to ExtJS Form", "url": "https://peterkellner.net/posts/2015-02-19-add-a-data-driven-combobox-to-extjs-form/", "published_at": "2015-02-19T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef0f5d1271", "title": "ReSharper Continues to Make My Life Easier as a Programmer", "url": "https://peterkellner.net/posts/2015-02-18-resharper-continues-to-make-my-life-easier-as-a-programmer/", "published_at": "2015-02-18T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef0fee7ce5", "title": "Publishing Just Your JavaScript Folder With Visual Studio", "url": "https://peterkellner.net/posts/2015-02-13-publishing-just-your-javascript-folder-with-visual-studio/", "published_at": "2015-02-13T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef10655f81", "title": "Name Collisions with Asp.Net Webapi and How to Avoid", "url": "https://peterkellner.net/posts/2015-02-04-name-collisions-asp-net-webapi-avoid/", "published_at": "2015-02-04T20:00:00+00:00" }, { "id": "01a087c0-6a26-72dd-8da5-e0ef108852db", "title": "Visual Studio 2015 Nasty Scroll Problem", "url": "https://peterkellner.net/posts/2015-01-31-visual-studio-2015-nasty-scroll-problem/", "published_at": "2015-01-31T20:00:00+00:00" } ] posts Claim your blog
Back to peterkellner.net
Blog · corpus.blog/blogs/peterkellner.net/posts

peterkellner.net

peterkellner.net

2026

2025

2024

2023

2022

2020

2019

2018

2017

2016

2015