41554 blogs · [ { "id": "01a08770-1b54-72d6-8e25-ca73d23455bf", "title": "Migrating Legacy Apps to Next.js with Claude Code", "url": "https://dsheiko.com/weblog/migrating-legacy-apps-to-nextjs-with-claude-code/", "published_at": "2026-07-02T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73d2c43a2c", "title": "React Design Patterns: A Practical Reference", "url": "https://dsheiko.com/weblog/react-design-patterns-a-practical-reference/", "published_at": "2026-06-17T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73d3b2aa1a", "title": "Thirty Years of Building Software", "url": "https://dsheiko.com/weblog/thirty-years-of-building-software/", "published_at": "2026-06-12T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73d4286f3d", "title": "Claude Code Beyond the Basics: Skills, Rules, and Agents", "url": "https://dsheiko.com/weblog/claude-code-skills-rules-agents-real-world-workflows/", "published_at": "2026-06-01T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73d49b7226", "title": "Must-Know Web Development Concepts in 2026", "url": "https://dsheiko.com/weblog/must-know-web-development-concepts-2026/", "published_at": "2026-03-05T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73d4bb5c9c", "title": "How to Add Web Push Notifications to a Next.js App", "url": "https://dsheiko.com/weblog/how-to-add-web-push-notifications-to-nextjs-app/", "published_at": "2026-02-11T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73d5573246", "title": "A Global Custom 404 Page for Route Groups in Next.js", "url": "https://dsheiko.com/weblog/nextjs-global-404-route-groups/", "published_at": "2026-01-23T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73d6274ba7", "title": "Tables and Modals in Next.js 16: Preserving State", "url": "https://dsheiko.com/weblog/mastering-tables-and-modals-nextjs-16/", "published_at": "2025-11-14T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73d678cfca", "title": "Optimizing End-to-End Testing with Playwright", "url": "https://dsheiko.com/weblog/optimizing-end-to-end-testing-with-playwright/", "published_at": "2025-03-25T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73d69f6399", "title": "Next.js 15 Tutorial: Full-Stack App with Ant Design", "url": "https://dsheiko.com/weblog/nextjs-15-tutorial/", "published_at": "2025-02-26T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73d7268720", "title": "Refactoring Legacy React: From OOP to Functional", "url": "https://dsheiko.com/weblog/refactoring-legacy-react-code/", "published_at": "2025-02-17T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73d77fa265", "title": "From Zero to Blog: Getting Started with Hugo", "url": "https://dsheiko.com/weblog/building-a-blog-with-hugo/", "published_at": "2020-03-04T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73d7943ca8", "title": "Puppetry 3: Test Automation without Coding", "url": "https://dsheiko.com/weblog/puppetry-3-test-automation-without-coding/", "published_at": "2019-11-27T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73d88e3b24", "title": "Building an Awesome Image Preview with LQIP", "url": "https://dsheiko.com/weblog/how-to-create-a-kick-ass-image-preview-with-lqip/", "published_at": "2019-07-11T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73d9022930", "title": "Testing Email Activation in Sign-Up Flows", "url": "https://dsheiko.com/weblog/testing-sign-up-flow-with-activation-by-email/", "published_at": "2019-07-08T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73d94317be", "title": "Puppetry 2.0 released", "url": "https://dsheiko.com/weblog/puppetry-2-0-released/", "published_at": "2019-07-01T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73d9e7eea6", "title": "Validating Function Arguments in JavaScript: The Smart Way", "url": "https://dsheiko.com/weblog/validating-arguments-in-javascript-like-a-boss/", "published_at": "2019-05-23T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73dab08725", "title": "Puppeteer for E2E Testing: How to Automate Your Web Tests", "url": "https://dsheiko.com/weblog/end-to-end-testing-with-puppeteer/", "published_at": "2018-06-11T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73dae42117", "title": "Effortless Form Handling in React with HTML5 Validation API", "url": "https://dsheiko.com/weblog/handling-forms-with-react-and-html5-form-validation-api/", "published_at": "2018-06-05T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73db1fe867", "title": "Optimizing Your Dev Workflow with Webpack 3", "url": "https://dsheiko.com/weblog/javascript-and-underscore-js-type-methods-in-php/", "published_at": "2018-04-12T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73dc131e32", "title": "Setting Up Dev Environment with Webpack 3", "url": "https://dsheiko.com/weblog/setting-up-dev-environment-with-webpack-3/", "published_at": "2017-12-11T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73dc29de1b", "title": "Leveraging HTML5.2 for Interactive Web Apps", "url": "https://dsheiko.com/weblog/building-real-life-applications-with-functional-elements-of-html-5-2/", "published_at": "2017-08-15T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73dc4388fd", "title": "JavaScript Modules in 2017: Where We Stand and What’s Next", "url": "https://dsheiko.com/weblog/state-of-javascript-modules-2017/", "published_at": "2017-08-10T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73dc82c9d0", "title": "My Book on Electron, Node, NW.js, and React Is Out", "url": "https://dsheiko.com/weblog/cross-platform-desktop-application-development-electron-node-nw-js-and-react-is-out/", "published_at": "2017-07-31T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73dd5b8da3", "title": "Bringing Angular 2+ Development Experience into Backbone", "url": "https://dsheiko.com/weblog/second-wind-for-backbone/", "published_at": "2016-10-10T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73dd7a7985", "title": "Stop Bugs Before They Happen: Function Guards in JavaScript", "url": "https://dsheiko.com/weblog/guarding-functions-in-javascript/", "published_at": "2016-10-07T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73dded76a7", "title": "Nightmare of End-to-End Testing", "url": "https://dsheiko.com/weblog/nightmare-of-end-to-end-testing/", "published_at": "2016-09-28T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73de029016", "title": "Writing Backbone Applications in TypeScript", "url": "https://dsheiko.com/weblog/writing-backbone-applications-in-typescript/", "published_at": "2016-09-16T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73de427bed", "title": "User Experience: A Chapter from Unlocked JavaScript", "url": "https://dsheiko.com/weblog/enhancing-user-experience/", "published_at": "2015-12-08T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73de7e60c6", "title": "Responsive Web Design: Best Practices for Performance", "url": "https://dsheiko.com/weblog/responsive-web-design-best-practices-for-improving-performance/", "published_at": "2015-01-30T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73defdbd39", "title": "Automated CSS Regression Testing in Action", "url": "https://dsheiko.com/weblog/automated-css-regressive-testing-in-practice/", "published_at": "2015-01-15T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73df52eebc", "title": "Packaging JavaScript for Scalable, High-Performance Apps", "url": "https://dsheiko.com/weblog/modularizing-and-packaging-javascript-for-scalable-high-performance-web-apps/", "published_at": "2014-11-07T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73df5a3f4f", "title": "10 Things You Need to Know About CSS", "url": "https://dsheiko.com/weblog/10-things-to-need-to-know-about-css/", "published_at": "2014-10-14T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73dfa02d96", "title": "Creating a web-component: VanillaJS vs X-Tag vs Polymer", "url": "https://dsheiko.com/weblog/creating-a-web-component-with-vanillajs-x-tag-and-polymer/", "published_at": "2014-09-10T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73dffdfd9a", "title": "Pure CSS Magic: Modal Windows Without JavaScript", "url": "https://dsheiko.com/weblog/fancy-modal-windows-without-javascript/", "published_at": "2014-08-20T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e0974a83", "title": "JavaScript MV* Framework - Making the Right Choice", "url": "https://dsheiko.com/weblog/javascript-mv-framework-making-the-right-choice/", "published_at": "2014-06-06T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e11d7985", "title": "Enabling Templates in Client-Side JavaScript with CJSC", "url": "https://dsheiko.com/weblog/the-client-side-templating-with-commonjs-compiler/", "published_at": "2014-03-27T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e212e242", "title": "Modular JavaScript in the browser with CommonJS Compiler", "url": "https://dsheiko.com/weblog/modular-javascript-in-the-browser-with-commonjs-compiler/", "published_at": "2014-01-23T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e2cd902e", "title": "Mastering Responsive Web Design with HTML5", "url": "https://dsheiko.com/weblog/responsive-web-design-with-html5/", "published_at": "2013-10-31T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e3248472", "title": "Seamless Development: Mastering Live Reload", "url": "https://dsheiko.com/weblog/tooling-live-reload-for-multi-tasked-cycles/", "published_at": "2013-07-25T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e328addd", "title": "Importing External Files in JavaScript", "url": "https://dsheiko.com/weblog/importing-external-files-in-javascript/", "published_at": "2013-05-15T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e3f573f6", "title": "Mastering HTML5 Forms: Validation, Inputs, and Beyond", "url": "https://dsheiko.com/weblog/making-use-of-html5-form/", "published_at": "2013-03-27T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e467038d", "title": "Google Analytics Reports, Right Inside Your App", "url": "https://dsheiko.com/weblog/bringing-google-analytics-reports-to-your-application/", "published_at": "2013-03-18T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e4967745", "title": "JavaScript Asynchronous Dependency Loader", "url": "https://dsheiko.com/weblog/javascript-asynchronous-dependency-loader/", "published_at": "2013-03-12T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e521eea1", "title": "Harmony with TypeScript", "url": "https://dsheiko.com/weblog/harmony-with-typescript/", "published_at": "2012-11-16T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e6156587", "title": "Review: PHP Application Development with NetBeans", "url": "https://dsheiko.com/weblog/review-php-application-development-with-netbeans/", "published_at": "2012-11-15T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e6581ba6", "title": "Optimizing Mobile Navigation: A Smooth UX for Small Screens", "url": "https://dsheiko.com/weblog/tuning-navigation-for-mobile-devices/", "published_at": "2012-10-27T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e750c67f", "title": "My lovely Mac OS X web-development environment", "url": "https://dsheiko.com/weblog/my-lovely-mac-os-x-web-development-environment/", "published_at": "2012-10-15T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e7c7d8f6", "title": "Getting started with TypeScript", "url": "https://dsheiko.com/weblog/getting-started-with-typescript/", "published_at": "2012-10-12T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e8766c60", "title": "10 things you need to know about JavaScript", "url": "https://dsheiko.com/weblog/learning-javascript-from-the-code/", "published_at": "2012-07-10T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e887ddc4", "title": "Functional testing with qUnit", "url": "https://dsheiko.com/weblog/functional-testing-with-qunit/", "published_at": "2012-07-03T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e8a2a307", "title": "Scalable JavaScript Application", "url": "https://dsheiko.com/weblog/js-application-design/", "published_at": "2012-05-31T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e8a8e2ee", "title": "Pseudo-classical Inheritance in JavaScript for Modules", "url": "https://dsheiko.com/weblog/prototypal-inheritance-in-javascript-for-modules/", "published_at": "2012-05-24T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e8e873d6", "title": "Dependency Injection via Factory", "url": "https://dsheiko.com/weblog/dependency-injection-via-factory/", "published_at": "2012-01-21T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e99cdffd", "title": "Design by Contract and JS", "url": "https://dsheiko.com/weblog/design-by-contract-and-js/", "published_at": "2011-12-22T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e9a7b39c", "title": "Flyweight pattern using Mixins", "url": "https://dsheiko.com/weblog/flyweight-pattern-using-mixins/", "published_at": "2011-12-18T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73e9ceff45", "title": "Design Patterns by PHP and JavaScript examples", "url": "https://dsheiko.com/weblog/design-patterns-by-php-and-js-es5-examples/", "published_at": "2011-12-15T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73ea1400ee", "title": "Bringing realtime to your web applications", "url": "https://dsheiko.com/weblog/real-time-web-application-architecture/", "published_at": "2011-10-17T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73eab7cf70", "title": "Build Your Own Simple Web Form Testing Tool", "url": "https://dsheiko.com/weblog/you-own-simple-tool-to-test-web-forms/", "published_at": "2011-10-07T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73ead60762", "title": "Support Request Tool like Google Feedback", "url": "https://dsheiko.com/weblog/support-request-tool-like-google-feedback/", "published_at": "2011-09-19T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73eb0617c6", "title": "WebSockets vs Server-Sent Events vs Long-polling", "url": "https://dsheiko.com/weblog/websockets-vs-sse-vs-long-polling/", "published_at": "2011-09-05T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73ec003646", "title": "Review services getting consolidated", "url": "https://dsheiko.com/weblog/review-services-getting-consolidated/", "published_at": "2011-08-04T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73ecf3432a", "title": "HTML5 Video on iPhone: Challenges and Solutions", "url": "https://dsheiko.com/weblog/html5-video-on-iphone/", "published_at": "2011-05-17T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73ecffe76a", "title": "When Great Ideas Meet Bad Code: A Look at Drupal", "url": "https://dsheiko.com/weblog/drupal-nice-ideas-and-bad-coding/", "published_at": "2011-04-15T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73edb2d833", "title": "ECMAScript 5 and JS frameworks", "url": "https://dsheiko.com/weblog/ecmascript-5-and-js-frameworks/", "published_at": "2010-12-13T00:00:00+00:00" }, { "id": "01a08770-1b54-72d6-8e25-ca73ee8a02a9", "title": "Beyond the Basics: Enhancing Drupal’s MVC Architecture", "url": "https://dsheiko.com/weblog/extending-mvc-on-drupal/", "published_at": "2010-11-10T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350da00d457e", "title": "Customizing phpBB3 the Smart Way", "url": "https://dsheiko.com/weblog/phpbb3-customization-driven-by-configurable-feature-list/", "published_at": "2010-10-26T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350da0f1bfa8", "title": "Drupal Meets MVC: A Smarter Way to Build Websites", "url": "https://dsheiko.com/weblog/building-a-site-on-drupal-using-mvc/", "published_at": "2010-07-01T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350da1e6c539", "title": "MVC on command line", "url": "https://dsheiko.com/weblog/mvc-on-command-line/", "published_at": "2010-06-15T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350da2dd5e2b", "title": "Real-Time Updates with HTML5: Unlocking Server-Sent Events", "url": "https://dsheiko.com/weblog/html5-and-server-sent-events/", "published_at": "2010-06-10T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350da3216dbb", "title": "Mastering i18n: Internationalizing Dynamic UIs with Ease", "url": "https://dsheiko.com/weblog/i18n-for-dynamic-ui/", "published_at": "2010-05-28T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350da41b078a", "title": "YUI3 vs jQuery", "url": "https://dsheiko.com/weblog/yui3-vs-jquery/", "published_at": "2010-05-28T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350da48ae6f0", "title": "From Chaos to Control: PHP Error Handling", "url": "https://dsheiko.com/weblog/error-handling-for-your-php-application/", "published_at": "2010-05-26T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350da5666f23", "title": "Anonymous Functions and Closures in PHP", "url": "https://dsheiko.com/weblog/anonymous-functions-and-closures-in-php/", "published_at": "2010-05-21T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350da61861c4", "title": "Source Code Analysis: Code Sniffer", "url": "https://dsheiko.com/weblog/source-code-analysis-code-sniffer/", "published_at": "2010-05-20T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350da688a2c1", "title": "Image Slider: Comparing JS, JQuery and YUI3 Implementations", "url": "https://dsheiko.com/weblog/image-slider-comparing-js-jquery-and-yui3-implementations/", "published_at": "2010-05-14T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350da74f62b7", "title": "Measuring Translation Coverage in Your Project", "url": "https://dsheiko.com/weblog/source-code-analysis-translation-coverage/", "published_at": "2010-05-10T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350da7be9c11", "title": "Persistent Full Duplex Connection via Web Socket", "url": "https://dsheiko.com/weblog/persistent-full-duplex-client-server-connection-via-web-socket/", "published_at": "2010-05-05T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350da7e1af1c", "title": "Sapid CMF reload", "url": "https://dsheiko.com/weblog/sapid-cmf-reload/", "published_at": "2010-04-30T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350da8a8fe10", "title": "Feature Driven Development for Web Developers", "url": "https://dsheiko.com/weblog/feature-driven-development-for-web-developers/", "published_at": "2008-12-22T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350da934980d", "title": "Building a Facebook Application with FBML and FBJS", "url": "https://dsheiko.com/weblog/building-a-facebook-application/", "published_at": "2008-05-06T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350da96a2c57", "title": "A World of Fascinating People: On Social Networking", "url": "https://dsheiko.com/weblog/popularly-about-social-networking/", "published_at": "2008-02-12T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350da9b0a8ca", "title": "Tendencies in Content Management Software: CMS 2.0", "url": "https://dsheiko.com/weblog/tendencies-in-content-management-software-development-or-cms-2-0/", "published_at": "2007-11-21T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350daa787142", "title": "Communities 2.0 or The Architecture of Participation", "url": "https://dsheiko.com/weblog/communities-2-0-or-the-architecture-of-participation/", "published_at": "2007-02-27T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350daab89281", "title": "E-Business 2.0", "url": "https://dsheiko.com/weblog/e-business-2-0/", "published_at": "2007-02-21T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350dab5dc772", "title": "Rich Internet Applications and Content Management", "url": "https://dsheiko.com/weblog/rich-internet-applications-and-content-management/", "published_at": "2007-02-19T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350dabd46ed4", "title": "Aspect-oriented Software Development and PHP", "url": "https://dsheiko.com/weblog/aspect-oriented-software-development-and-php/", "published_at": "2006-11-08T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350daca6dcee", "title": "How to Make AJAX Read between the Lines", "url": "https://dsheiko.com/weblog/how-to-make-ajax-read-between-the-lines/", "published_at": "2006-02-24T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350dad1f9161", "title": "Interactive Grid with Your Own Hands", "url": "https://dsheiko.com/weblog/interactive-grid-with-your-own-hands/", "published_at": "2006-02-17T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350dadce37fb", "title": "What is XML Sapiens?", "url": "https://dsheiko.com/weblog/what-is-xml-sapiens/", "published_at": "2006-02-17T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350dadd1e836", "title": "Data, its presentation and user interface forms", "url": "https://dsheiko.com/weblog/data-its-presentation-and-user-interface-forms/", "published_at": "2005-02-12T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350daec5148c", "title": "XML Sapiens: Dividing Site Functionality from Core Logic", "url": "https://dsheiko.com/weblog/xml-sapiens-is-a-tool-to-divide-site-functionality-and-program-core/", "published_at": "2004-12-05T00:00:00+00:00" }, { "id": "01a08770-1b55-7233-bf11-350daf5ae05f", "title": "How to make own CMS", "url": "https://dsheiko.com/weblog/how-to-make-own-cms/", "published_at": "2004-02-20T00:00:00+00:00" } ] posts Claim your blog
Back to dsheiko.com
Blog · corpus.blog/blogs/dsheiko.com/posts

dsheiko.com

dsheiko.com

2026

2025

2020

2019

2018

2017

2016

2015

2014

2013

2012

2011

2010

2008

2007

2006

2005

2004