{
    "version": "https://jsonfeed.org/version/1",
    "title": "shiren the creator",
    "home_page_url": "https://blog.shiren.dev",
    "feed_url": "https://blog.shiren.dev/en/feed.json",
    "description": "let the games begin.",
    "icon": "https://blog.shiren.dev/logo.jpg",
    "author": {
        "name": "Sungho Kim",
        "url": "https://blog.shiren.dev"
    },
    "items": [
        {
            "id": "https://blog.shiren.dev/en/post/2025-03-25",
            "content_html": "<img src=\"https://res.cloudinary.com/dow8qjmrt/image/upload/v1742782724/postcovor/xq4opjywe8xcg1xerqfq.jpg\" alt=\"Overcoming Burnout\"/><br/>Have you ever suspected you might be experiencing burnout?\nIn Korea, there's a tendency to be indifferent towards mental health, often considering it something shameful. As a result, many people ignore the symptoms.. They dismiss it as nothing serious, thinking a drink or the passage of time should resolve everything. If you can't overcome it, you...",
            "url": "https://blog.shiren.dev/en/post/2025-03-25",
            "title": "Overcoming Burnout",
            "summary": "<img src=\"https://res.cloudinary.com/dow8qjmrt/image/upload/v1742782724/postcovor/xq4opjywe8xcg1xerqfq.jpg\" alt=\"Overcoming Burnout\"/><br/>Have you ever suspected you might be experiencing burnout?\nIn Korea, there's a tendency to be indifferent towards mental health, often considering it something shameful. As a result, many people ignore the symptoms.. They dismiss it as nothing serious, thinking a drink or the passage of time should resolve everything. If you can't overcome it, you...",
            "image": "https://res.cloudinary.com/dow8qjmrt/image/upload/v1742782724/postcovor/xq4opjywe8xcg1xerqfq.jpg",
            "date_modified": "2025-03-24T15:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2025-03-04",
            "content_html": "<img src=\"https://res.cloudinary.com/dow8qjmrt/image/upload/v1740723688/postcovor/20250304.jpg\" alt=\"Implementing Web Animations with JavaScript\"/><br/>The Front-End ecosystem is becoming increasingly specialized and diverse, leading to higher complexity. This isn't surprising. I tend to reduce dependencies whenever possible, aiming to expand areas that don't change within the standard. JavaScript animations are no exception. While using open-source libraries can create complex and nice movements...",
            "url": "https://blog.shiren.dev/en/post/2025-03-04",
            "title": "Implementing Web Animations with JavaScript",
            "summary": "<img src=\"https://res.cloudinary.com/dow8qjmrt/image/upload/v1740723688/postcovor/20250304.jpg\" alt=\"Implementing Web Animations with JavaScript\"/><br/>The Front-End ecosystem is becoming increasingly specialized and diverse, leading to higher complexity. This isn't surprising. I tend to reduce dependencies whenever possible, aiming to expand areas that don't change within the standard. JavaScript animations are no exception. While using open-source libraries can create complex and nice movements...",
            "image": "https://res.cloudinary.com/dow8qjmrt/image/upload/v1740723688/postcovor/20250304.jpg",
            "date_modified": "2025-03-03T15:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2025-02-28",
            "content_html": "<img src=\"https://res.cloudinary.com/dow8qjmrt/image/upload/v1740635900/postcovor/20250228.jpg\" alt=\"Resume-Driven Career Development\"/><br/>I believe it's good practice to update your resume at least quarterly, reflecting on the past quarter's achievements and planning for the upcoming one.\nIt might be helpful to think of a company as a place where you not only receive a salary but also generate achievements to enrich your career. If you think this way, you can never work passively.\nIn...",
            "url": "https://blog.shiren.dev/en/post/2025-02-28",
            "title": "Resume-Driven Career Development",
            "summary": "<img src=\"https://res.cloudinary.com/dow8qjmrt/image/upload/v1740635900/postcovor/20250228.jpg\" alt=\"Resume-Driven Career Development\"/><br/>I believe it's good practice to update your resume at least quarterly, reflecting on the past quarter's achievements and planning for the upcoming one.\nIt might be helpful to think of a company as a place where you not only receive a salary but also generate achievements to enrich your career. If you think this way, you can never work passively.\nIn...",
            "image": "https://res.cloudinary.com/dow8qjmrt/image/upload/v1740635900/postcovor/20250228.jpg",
            "date_modified": "2025-02-27T15:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2023-08-07",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/258742163-be061be3-585f-45a5-9432-f68014e556d2.jpg\" alt=\"If I Were to Live a Second Life as a Developer...\"/><br/>A year ago, I had a great opportunity to give a talk about recruitment to job seekers and developers with 1-4 years of experience. I prepared content generally helpful for job searching or changing jobs. Although I tried to avoid focusing too much on \"how to get hired,\" the topic related to recruitment inevitably felt somewhat materialistic, like t...",
            "url": "https://blog.shiren.dev/en/post/2023-08-07",
            "title": "If I Were to Live a Second Life as a Developer...",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/258742163-be061be3-585f-45a5-9432-f68014e556d2.jpg\" alt=\"If I Were to Live a Second Life as a Developer...\"/><br/>A year ago, I had a great opportunity to give a talk about recruitment to job seekers and developers with 1-4 years of experience. I prepared content generally helpful for job searching or changing jobs. Although I tried to avoid focusing too much on \"how to get hired,\" the topic related to recruitment inevitably felt somewhat materialistic, like t...",
            "image": "https://user-images.githubusercontent.com/389021/258742163-be061be3-585f-45a5-9432-f68014e556d2.jpg",
            "date_modified": "2023-08-07T01:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2023-04-24",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/233938246-8ad07bd5-ec5e-42d5-9496-235cb39a3cb3.jpg\" alt=\"Page Visibility API\"/><br/>The Page Visibility API, as the name suggests, allows you to determine whether a page is currently visible to the user. More precisely, it tells you if the page can be seen on the monitor. There's no way to know if the user has their eyes closed or is looking elsewhere :)\nPreviously, onblur and onfocus events were used, but these events were more a...",
            "url": "https://blog.shiren.dev/en/post/2023-04-24",
            "title": "Page Visibility API",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/233938246-8ad07bd5-ec5e-42d5-9496-235cb39a3cb3.jpg\" alt=\"Page Visibility API\"/><br/>The Page Visibility API, as the name suggests, allows you to determine whether a page is currently visible to the user. More precisely, it tells you if the page can be seen on the monitor. There's no way to know if the user has their eyes closed or is looking elsewhere :)\nPreviously, onblur and onfocus events were used, but these events were more a...",
            "image": "https://user-images.githubusercontent.com/389021/233938246-8ad07bd5-ec5e-42d5-9496-235cb39a3cb3.jpg",
            "date_modified": "2023-04-24T10:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2023-04-18",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/232760986-8f130d1f-5b5c-4eb7-9584-62c0386f2456.jpg\" alt=\"Web Storage Events\"/><br/>Web storage, consisting of sessionStorage and localStorage, is now very familiar.\nUnlike cookies, which were difficult to handle, web storage clarifies its use as client-side storage and has already become our friend with better usability.\nLocal storage, frequently handled by frontend developers, can do the following:\n\nstorage.length\nstorage.key(n)...",
            "url": "https://blog.shiren.dev/en/post/2023-04-18",
            "title": "Web Storage Events",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/232760986-8f130d1f-5b5c-4eb7-9584-62c0386f2456.jpg\" alt=\"Web Storage Events\"/><br/>Web storage, consisting of sessionStorage and localStorage, is now very familiar.\nUnlike cookies, which were difficult to handle, web storage clarifies its use as client-side storage and has already become our friend with better usability.\nLocal storage, frequently handled by frontend developers, can do the following:\n\nstorage.length\nstorage.key(n)...",
            "image": "https://user-images.githubusercontent.com/389021/232760986-8f130d1f-5b5c-4eb7-9584-62c0386f2456.jpg",
            "date_modified": "2023-04-18T11:20:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2023-03-20",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/228464836-b48dc2e3-31f3-4452-a819-7f21d7541802.jpg\" alt=\"Frontend Development Environment Checklist (2023)\"/><br/>Every time I start a frontend project, there are things that need to be decided. Defining the development environment and stack, choosing a version control tool (usually Git), deciding how to manage branches, determining the versioning strategy, and so on. Starting a new project always involves checking or newly defining many things. Of course, a w...",
            "url": "https://blog.shiren.dev/en/post/2023-03-20",
            "title": "Frontend Development Environment Checklist (2023)",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/228464836-b48dc2e3-31f3-4452-a819-7f21d7541802.jpg\" alt=\"Frontend Development Environment Checklist (2023)\"/><br/>Every time I start a frontend project, there are things that need to be decided. Defining the development environment and stack, choosing a version control tool (usually Git), deciding how to manage branches, determining the versioning strategy, and so on. Starting a new project always involves checking or newly defining many things. Of course, a w...",
            "image": "https://user-images.githubusercontent.com/389021/228464836-b48dc2e3-31f3-4452-a819-7f21d7541802.jpg",
            "date_modified": "2023-03-31T09:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2022-11-21",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/202692818-96f5a7cc-939d-43e3-834d-38ab877b5688.jpg\" alt=\"My Back Blew Out: A Developer Rehab Notes\"/><br/>I thought I was still young and healthy.\nEventually, my back gave out.\nIt was a herniated disc, a representative disease of aging, commonly known as a slipped disc.\nMy back often hurt. Considering my terrible posture since childhood, it seems like it held up pretty well until now. Whenever I needed to concentrate, like during coding sessions, my po...",
            "url": "https://blog.shiren.dev/en/post/2022-11-21",
            "title": "My Back Blew Out: A Developer Rehab Notes",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/202692818-96f5a7cc-939d-43e3-834d-38ab877b5688.jpg\" alt=\"My Back Blew Out: A Developer Rehab Notes\"/><br/>I thought I was still young and healthy.\nEventually, my back gave out.\nIt was a herniated disc, a representative disease of aging, commonly known as a slipped disc.\nMy back often hurt. Considering my terrible posture since childhood, it seems like it held up pretty well until now. Whenever I needed to concentrate, like during coding sessions, my po...",
            "image": "https://user-images.githubusercontent.com/389021/202692818-96f5a7cc-939d-43e3-834d-38ab877b5688.jpg",
            "date_modified": "2022-11-21T01:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2022-09-22",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/202692021-49f39bc5-de0f-4b7e-91f1-d8036778e3f6.svg\" alt=\"XState, a Finite State Machine Created with JavaScript\"/><br/>I had occasionally used FSM (Finite State Machine) when implementing UIs. I applied the basic concepts using enum and conditional statements. In situations with many defined states and different possible actions depending on the state, I would likely apply FSM without hesitation. In such cases, the code tends to become complex regardless of how it'...",
            "url": "https://blog.shiren.dev/en/post/2022-09-22",
            "title": "XState, a Finite State Machine Created with JavaScript",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/202692021-49f39bc5-de0f-4b7e-91f1-d8036778e3f6.svg\" alt=\"XState, a Finite State Machine Created with JavaScript\"/><br/>I had occasionally used FSM (Finite State Machine) when implementing UIs. I applied the basic concepts using enum and conditional statements. In situations with many defined states and different possible actions depending on the state, I would likely apply FSM without hesitation. In such cases, the code tends to become complex regardless of how it'...",
            "image": "https://user-images.githubusercontent.com/389021/202692021-49f39bc5-de0f-4b7e-91f1-d8036778e3f6.svg",
            "date_modified": "2022-09-22T01:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2022-05-18",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/168763758-ef81e8ec-bd94-4816-aefe-e639cbf11387.jpg\" alt=\"A Developer Wine Recommendations\"/><br/>I enjoy wine. I don't remember exactly, but I think I started actively drinking wine around 2010. I've been drinking it periodically for at least over 10 years. I probably always drank three or four bottles a month.\nHaving drunk for over 10 years, you might think I have some professional knowledge and can distinguish wine tastes well. That's not re...",
            "url": "https://blog.shiren.dev/en/post/2022-05-18",
            "title": "A Developer Wine Recommendations",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/168763758-ef81e8ec-bd94-4816-aefe-e639cbf11387.jpg\" alt=\"A Developer Wine Recommendations\"/><br/>I enjoy wine. I don't remember exactly, but I think I started actively drinking wine around 2010. I've been drinking it periodically for at least over 10 years. I probably always drank three or four bottles a month.\nHaving drunk for over 10 years, you might think I have some professional knowledge and can distinguish wine tastes well. That's not re...",
            "image": "https://user-images.githubusercontent.com/389021/168763758-ef81e8ec-bd94-4816-aefe-e639cbf11387.jpg",
            "date_modified": "2022-05-18T01:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2022-04-28",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/165723723-c93929a5-01d9-49e1-907b-43669d8089e6.png\" alt=\"TypeScript Type Changes in React 18\"/><br/>React 18 was released recently. You might have already updated your project or are planning to update soon.\nIf your project uses React with TypeScript, here are a few breaking changes in type definitions that you'll need to address:\n\nRemoval of implicit children declaration from the React.FC type\nRemoval of {} from the ReactFragment type\nthis.conte...",
            "url": "https://blog.shiren.dev/en/post/2022-04-28",
            "title": "TypeScript Type Changes in React 18",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/165723723-c93929a5-01d9-49e1-907b-43669d8089e6.png\" alt=\"TypeScript Type Changes in React 18\"/><br/>React 18 was released recently. You might have already updated your project or are planning to update soon.\nIf your project uses React with TypeScript, here are a few breaking changes in type definitions that you'll need to address:\n\nRemoval of implicit children declaration from the React.FC type\nRemoval of {} from the ReactFragment type\nthis.conte...",
            "image": "https://user-images.githubusercontent.com/389021/165723723-c93929a5-01d9-49e1-907b-43669d8089e6.png",
            "date_modified": "2022-04-28T11:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2022-03-07",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/156925073-5321c9b1-2001-4611-9760-548807816289.jpg\" alt=\"How Facebook Developers Drive Performance\"/><br/>An acquaintance who works at Facebook, which we should now call Meta, visited Korea on vacation. We met up for drinks after a long time. Since it had been a while, we talked about many things. As the evening went on, we naturally drifted back to our usual topic: development. We often discussed work and development, so it felt natural. The bold and...",
            "url": "https://blog.shiren.dev/en/post/2022-03-07",
            "title": "How Facebook Developers Drive Performance",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/156925073-5321c9b1-2001-4611-9760-548807816289.jpg\" alt=\"How Facebook Developers Drive Performance\"/><br/>An acquaintance who works at Facebook, which we should now call Meta, visited Korea on vacation. We met up for drinks after a long time. Since it had been a while, we talked about many things. As the evening went on, we naturally drifted back to our usual topic: development. We often discussed work and development, so it felt natural. The bold and...",
            "image": "https://user-images.githubusercontent.com/389021/156925073-5321c9b1-2001-4611-9760-548807816289.jpg",
            "date_modified": "2022-03-07T01:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2022-01-27",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/93630848/151306397-470baa88-f1ac-4f12-9c52-cb5c8e300abd.png\" alt=\"Adding Sound to a React Game\"/><br/>Recently, I've been spending my weekends creating a simple game for my child using React. My child was so engrossed in a game called \"Infinite Stairs\" that I decided to create a version that retains the core fun(?) while removing potentially harmful addictive elements. It's a simple game where you climb stairs left and right, earning points to buy...",
            "url": "https://blog.shiren.dev/en/post/2022-01-27",
            "title": "Adding Sound to a React Game",
            "summary": "<img src=\"https://user-images.githubusercontent.com/93630848/151306397-470baa88-f1ac-4f12-9c52-cb5c8e300abd.png\" alt=\"Adding Sound to a React Game\"/><br/>Recently, I've been spending my weekends creating a simple game for my child using React. My child was so engrossed in a game called \"Infinite Stairs\" that I decided to create a version that retains the core fun(?) while removing potentially harmful addictive elements. It's a simple game where you climb stairs left and right, earning points to buy...",
            "image": "https://user-images.githubusercontent.com/93630848/151306397-470baa88-f1ac-4f12-9c52-cb5c8e300abd.png",
            "date_modified": "2022-01-27T01:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2021-10-05",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/134830937-6ece2e72-88bb-46b3-85b2-ec9d9df6f086.jpg\" alt=\"Leaving null, Meeting undefined\"/><br/>Recently, during a code review, a discussion arose about the use of undefined. Personally, for a very long time, I had quite clearly distinguished between null and undefined and used them according to their respective purposes, so I hadn't really thought about looking into this further. Ironically, the issue that sparked the discussion turned out t...",
            "url": "https://blog.shiren.dev/en/post/2021-10-05",
            "title": "Leaving null, Meeting undefined",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/134830937-6ece2e72-88bb-46b3-85b2-ec9d9df6f086.jpg\" alt=\"Leaving null, Meeting undefined\"/><br/>Recently, during a code review, a discussion arose about the use of undefined. Personally, for a very long time, I had quite clearly distinguished between null and undefined and used them according to their respective purposes, so I hadn't really thought about looking into this further. Ironically, the issue that sparked the discussion turned out t...",
            "image": "https://user-images.githubusercontent.com/389021/134830937-6ece2e72-88bb-46b3-85b2-ec9d9df6f086.jpg",
            "date_modified": "2021-10-05T01:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2021-08-30",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/130887748-c10e8286-661f-4e13-8acc-1cbfaf3db701.jpg\" alt=\"ES2021 Overview Focusing on WeakRefs and Finalizers\"/><br/>A few months ago, the final specification for ECMAScript 2021 was released. Some features are immediately usable, while others allow for deeper utilization of the language. It's good to see these changes and improvements each year, but perhaps I'm becoming desensitized, or the improvements aren't as impactful, as the interest and ripple effect seem...",
            "url": "https://blog.shiren.dev/en/post/2021-08-30",
            "title": "ES2021 Overview Focusing on WeakRefs and Finalizers",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/130887748-c10e8286-661f-4e13-8acc-1cbfaf3db701.jpg\" alt=\"ES2021 Overview Focusing on WeakRefs and Finalizers\"/><br/>A few months ago, the final specification for ECMAScript 2021 was released. Some features are immediately usable, while others allow for deeper utilization of the language. It's good to see these changes and improvements each year, but perhaps I'm becoming desensitized, or the improvements aren't as impactful, as the interest and ripple effect seem...",
            "image": "https://user-images.githubusercontent.com/389021/130887748-c10e8286-661f-4e13-8acc-1cbfaf3db701.jpg",
            "date_modified": "2021-08-30T01:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2021-06-29",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/123607253-a997d400-d838-11eb-9804-0c3cf6693572.jpg\" alt=\"Common JavaScript Errors\"/><br/>While developing, you frequently encounter red error messages due to mistakes in the code. It's fortunate if bugs are found during development, but seeing an error message in a live service can make a developer cringe and break out in a cold sweat. Since JavaScript only reveals errors at runtime, serious bugs like these can sometimes be missed. Now...",
            "url": "https://blog.shiren.dev/en/post/2021-06-29",
            "title": "Common JavaScript Errors",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/123607253-a997d400-d838-11eb-9804-0c3cf6693572.jpg\" alt=\"Common JavaScript Errors\"/><br/>While developing, you frequently encounter red error messages due to mistakes in the code. It's fortunate if bugs are found during development, but seeing an error message in a live service can make a developer cringe and break out in a cold sweat. Since JavaScript only reveals errors at runtime, serious bugs like these can sometimes be missed. Now...",
            "image": "https://user-images.githubusercontent.com/389021/123607253-a997d400-d838-11eb-9804-0c3cf6693572.jpg",
            "date_modified": "2021-06-29T01:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2021-05-17",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/117386779-6e58e300-af22-11eb-87a5-748a0fb059ef.jpg\" alt=\"Habits for Good Development\"/><br/>When I have a repetitive task, I tend to create an optimized routine that suits me best and follow it thoughtlessly each time I do the task. I don't stubbornly stick to a fixed routine, though. I gradually improve it based on experience or increased relevant knowledge. A routine could be called \"the best method I currently know to do this job well....",
            "url": "https://blog.shiren.dev/en/post/2021-05-17",
            "title": "Habits for Good Development",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/117386779-6e58e300-af22-11eb-87a5-748a0fb059ef.jpg\" alt=\"Habits for Good Development\"/><br/>When I have a repetitive task, I tend to create an optimized routine that suits me best and follow it thoughtlessly each time I do the task. I don't stubbornly stick to a fixed routine, though. I gradually improve it based on experience or increased relevant knowledge. A routine could be called \"the best method I currently know to do this job well....",
            "image": "https://user-images.githubusercontent.com/389021/117386779-6e58e300-af22-11eb-87a5-748a0fb059ef.jpg",
            "date_modified": "2021-05-17T01:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2021-04-20",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/115319970-e5b91380-a1bb-11eb-9dfe-a02d11601573.jpg\" alt=\"Becoming a Reliable Developer\"/><br/>When you're a working professional, your attitude towards work naturally develops, much like a character. The same applies to developers. Being a junior doesn't mean having a bad attitude, nor does experience guarantee a good one. Like coding skills, attitude can be improved. Less experienced individuals often exhibit poor attitudes simply due to l...",
            "url": "https://blog.shiren.dev/en/post/2021-04-20",
            "title": "Becoming a Reliable Developer",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/115319970-e5b91380-a1bb-11eb-9dfe-a02d11601573.jpg\" alt=\"Becoming a Reliable Developer\"/><br/>When you're a working professional, your attitude towards work naturally develops, much like a character. The same applies to developers. Being a junior doesn't mean having a bad attitude, nor does experience guarantee a good one. Like coding skills, attitude can be improved. Less experienced individuals often exhibit poor attitudes simply due to l...",
            "image": "https://user-images.githubusercontent.com/389021/115319970-e5b91380-a1bb-11eb-9dfe-a02d11601573.jpg",
            "date_modified": "2021-04-20T01:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2021-02-22",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/107895328-53f01880-6f76-11eb-9a7a-3c994cc92514.jpg\" alt=\"Exploring Modern FE Development Environments by Building a Coding Playground Part 2\"/><br/>(Updated 2022-03-04: Configuration code related to webpack-dev-server, babel, and jest has been modified.)\nIn Part 1, we built a basic JavaScript development environment with Lerna. While the basic setup might be sufficient for some, it usually isn't.\nNow, we'll add two more development environments: TypeScript and React.\nFirst, we'll add the TypeS...",
            "url": "https://blog.shiren.dev/en/post/2021-02-22",
            "title": "Exploring Modern FE Development Environments by Building a Coding Playground Part 2",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/107895328-53f01880-6f76-11eb-9a7a-3c994cc92514.jpg\" alt=\"Exploring Modern FE Development Environments by Building a Coding Playground Part 2\"/><br/>(Updated 2022-03-04: Configuration code related to webpack-dev-server, babel, and jest has been modified.)\nIn Part 1, we built a basic JavaScript development environment with Lerna. While the basic setup might be sufficient for some, it usually isn't.\nNow, we'll add two more development environments: TypeScript and React.\nFirst, we'll add the TypeS...",
            "image": "https://user-images.githubusercontent.com/389021/107895328-53f01880-6f76-11eb-9a7a-3c994cc92514.jpg",
            "date_modified": "2021-02-22T01:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2021-02-15",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/107895328-53f01880-6f76-11eb-9a7a-3c994cc92514.jpg\" alt=\"Experiencing the Current FE Development Environment While Building a Coding Playground Part 1\"/><br/>(Updated 2022-03-04: Configuration code for webpack-dev-server, babel, and jest has been modified.)\nSometimes when developing, you want to quickly write code in a specific environment and check the results. This happens when studying libraries, frameworks, or languages, or when you want to quickly experiment with ideas or prototype them. If a vanil...",
            "url": "https://blog.shiren.dev/en/post/2021-02-15",
            "title": "Experiencing the Current FE Development Environment While Building a Coding Playground Part 1",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/107895328-53f01880-6f76-11eb-9a7a-3c994cc92514.jpg\" alt=\"Experiencing the Current FE Development Environment While Building a Coding Playground Part 1\"/><br/>(Updated 2022-03-04: Configuration code for webpack-dev-server, babel, and jest has been modified.)\nSometimes when developing, you want to quickly write code in a specific environment and check the results. This happens when studying libraries, frameworks, or languages, or when you want to quickly experiment with ideas or prototype them. If a vanil...",
            "image": "https://user-images.githubusercontent.com/389021/107895328-53f01880-6f76-11eb-9a7a-3c994cc92514.jpg",
            "date_modified": "2021-02-15T04:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2020-12-01",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/100712708-87e78300-33f6-11eb-8300-e83fdba0b93e.png\" alt=\"A Quick Guide to Browserslist\"/><br/>For some time now, \"browserslist\" has been popping up frequently, and it has become an indispensable tool in the frontend development environment. I suspect this is largely because Babel, a standout star project in the frontend world, adopted it. Since many projects use Babel, they indirectly or directly end up using browserslist as well. Honestly,...",
            "url": "https://blog.shiren.dev/en/post/2020-12-01",
            "title": "A Quick Guide to Browserslist",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/100712708-87e78300-33f6-11eb-8300-e83fdba0b93e.png\" alt=\"A Quick Guide to Browserslist\"/><br/>For some time now, \"browserslist\" has been popping up frequently, and it has become an indispensable tool in the frontend development environment. I suspect this is largely because Babel, a standout star project in the frontend world, adopted it. Since many projects use Babel, they indirectly or directly end up using browserslist as well. Honestly,...",
            "image": "https://user-images.githubusercontent.com/389021/100712708-87e78300-33f6-11eb-8300-e83fdba0b93e.png",
            "date_modified": "2020-12-01T01:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2020-11-23",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/98948530-e6c58500-2539-11eb-832f-753d5d4d6769.png\" alt=\"Becoming the Developer Everyone Wants\"/><br/>Around my 5th or 6th year, I started getting involved in developer hiring, and I've been working as an interviewer at my current company for over 5 years now. The interviews were primarily first-round technical interviews. I've also taken the lead in improving the team's hiring process and creating pre-assignments and live coding problems. During t...",
            "url": "https://blog.shiren.dev/en/post/2020-11-23",
            "title": "Becoming the Developer Everyone Wants",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/98948530-e6c58500-2539-11eb-832f-753d5d4d6769.png\" alt=\"Becoming the Developer Everyone Wants\"/><br/>Around my 5th or 6th year, I started getting involved in developer hiring, and I've been working as an interviewer at my current company for over 5 years now. The interviews were primarily first-round technical interviews. I've also taken the lead in improving the team's hiring process and creating pre-assignments and live coding problems. During t...",
            "image": "https://user-images.githubusercontent.com/389021/98948530-e6c58500-2539-11eb-832f-753d5d4d6769.png",
            "date_modified": "2020-11-23T00:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2020-10-05",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/94404265-aee0c900-01a9-11eb-9a3e-41431e366309.jpg\" alt=\"Specific Ways to Build a Reading Habit\"/><br/>I've put in a lot of effort to make reading a habit. While habitually opening social media, I often thought, \"If only I read a book during this time...\" but it was hard to resist the temptation to tap the social media icon. I tried various methods, and as mentioned in \"Executing 25 Minutes a Day: A 14-Year Developer's Approach to the Day\", although...",
            "url": "https://blog.shiren.dev/en/post/2020-10-05",
            "title": "Specific Ways to Build a Reading Habit",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/94404265-aee0c900-01a9-11eb-9a3e-41431e366309.jpg\" alt=\"Specific Ways to Build a Reading Habit\"/><br/>I've put in a lot of effort to make reading a habit. While habitually opening social media, I often thought, \"If only I read a book during this time...\" but it was hard to resist the temptation to tap the social media icon. I tried various methods, and as mentioned in \"Executing 25 Minutes a Day: A 14-Year Developer's Approach to the Day\", although...",
            "image": "https://user-images.githubusercontent.com/389021/94404265-aee0c900-01a9-11eb-9a3e-41431e366309.jpg",
            "date_modified": "2020-10-05T00:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2020-09-07",
            "content_html": "<img src=\"/logo.jpg\" alt=\"Executing 25 Minutes a Day: A 14-Year Developer Approach to the Day\"/><br/>Everyone gets 24 hours a day, but not everyone uses those 24 hours equally. How to use my daily leisure time more efficiently has been a long-standing concern of mine.\nI've set short-term goals, long-term goals, adopted Pomodoro and GTD, used Gantt charts, created standard daily schedules, and even made weekly reports. I put a lot of \"effort\" into...",
            "url": "https://blog.shiren.dev/en/post/2020-09-07",
            "title": "Executing 25 Minutes a Day: A 14-Year Developer Approach to the Day",
            "summary": "<img src=\"/logo.jpg\" alt=\"Executing 25 Minutes a Day: A 14-Year Developer Approach to the Day\"/><br/>Everyone gets 24 hours a day, but not everyone uses those 24 hours equally. How to use my daily leisure time more efficiently has been a long-standing concern of mine.\nI've set short-term goals, long-term goals, adopted Pomodoro and GTD, used Gantt charts, created standard daily schedules, and even made weekly reports. I put a lot of \"effort\" into...",
            "image": "https://blog.shiren.dev/logo.jpg",
            "date_modified": "2020-09-07T00:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2020-07-27-1",
            "content_html": "<img src=\"/logo.jpg\" alt=\"A Developer Approach to Event Handlers\"/><br/>Event handlers are always used when developing UIs. Not just on the web, but native applications also use nearly identical abstractions, albeit with slight differences. As frequently as they are used, they are important, but because they are used so often, we tend to think lightly of them and habitually write poor code without much thought. Being f...",
            "url": "https://blog.shiren.dev/en/post/2020-07-27-1",
            "title": "A Developer Approach to Event Handlers",
            "summary": "<img src=\"/logo.jpg\" alt=\"A Developer Approach to Event Handlers\"/><br/>Event handlers are always used when developing UIs. Not just on the web, but native applications also use nearly identical abstractions, albeit with slight differences. As frequently as they are used, they are important, but because they are used so often, we tend to think lightly of them and habitually write poor code without much thought. Being f...",
            "image": "https://blog.shiren.dev/logo.jpg",
            "date_modified": "2020-07-27T05:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2020-06-15",
            "content_html": "<img src=\"/logo.jpg\" alt=\"A Developer Stance on Useful Test Cases\"/><br/>Seeing questions like \"How do I test private methods?\" or \"Should I test private methods?\" periodically appear in various communities made me think I should organize my thoughts on the topic someday. Quite some time has passed, and now I'm writing about it. The topic itself is relatively simple, but opinions seem to vary, especially among developer...",
            "url": "https://blog.shiren.dev/en/post/2020-06-15",
            "title": "A Developer Stance on Useful Test Cases",
            "summary": "<img src=\"/logo.jpg\" alt=\"A Developer Stance on Useful Test Cases\"/><br/>Seeing questions like \"How do I test private methods?\" or \"Should I test private methods?\" periodically appear in various communities made me think I should organize my thoughts on the topic someday. Quite some time has passed, and now I'm writing about it. The topic itself is relatively simple, but opinions seem to vary, especially among developer...",
            "image": "https://blog.shiren.dev/logo.jpg",
            "date_modified": "2020-06-15T05:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2020-03-24",
            "content_html": "<img src=\"/logo.jpg\" alt=\"Developers and Meditation\"/><br/>For some time, my mind had become cluttered with various worries. In such situations, exercise and reading can be solutions. I was already exercising regularly, so I significantly increased my reading volume. I read books on topics I thought were necessary for my life, rather than technical books. Yet, something was missing. I thought, \"I need time...",
            "url": "https://blog.shiren.dev/en/post/2020-03-24",
            "title": "Developers and Meditation",
            "summary": "<img src=\"/logo.jpg\" alt=\"Developers and Meditation\"/><br/>For some time, my mind had become cluttered with various worries. In such situations, exercise and reading can be solutions. I was already exercising regularly, so I significantly increased my reading volume. I read books on topics I thought were necessary for my life, rather than technical books. Yet, something was missing. I thought, \"I need time...",
            "image": "https://blog.shiren.dev/logo.jpg",
            "date_modified": "2020-03-24T09:20:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2020-03-12",
            "content_html": "<img src=\"/logo.jpg\" alt=\"JavaScript Journey Towards Encapsulation\"/><br/>Among the ECMAScript class field specifications, there is Private field, also known as Private Property (hereinafter referred to as Private Property). The class field spec has reached Stage 3 (Candidate), so it will likely soon pass Stage 4 (Finished) and become a standard specification. Honestly, when I first saw the specification document, I had...",
            "url": "https://blog.shiren.dev/en/post/2020-03-12",
            "title": "JavaScript Journey Towards Encapsulation",
            "summary": "<img src=\"/logo.jpg\" alt=\"JavaScript Journey Towards Encapsulation\"/><br/>Among the ECMAScript class field specifications, there is Private field, also known as Private Property (hereinafter referred to as Private Property). The class field spec has reached Stage 3 (Candidate), so it will likely soon pass Stage 4 (Finished) and become a standard specification. Honestly, when I first saw the specification document, I had...",
            "image": "https://blog.shiren.dev/logo.jpg",
            "date_modified": "2020-03-12T02:35:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2020-01-11",
            "content_html": "<img src=\"/logo.jpg\" alt=\"Starting a Healthy Development Culture with Code Review\"/><br/>At the company conference NHN FORWARD held in November 2019, we ran a Frontend Counseling Center to address concerns or questions about frontend development. There were various concerns, but I noticed that the questions and worries were similar across different years of experience and job titles. The concerns ranged from troubleshooting that requir...",
            "url": "https://blog.shiren.dev/en/post/2020-01-11",
            "title": "Starting a Healthy Development Culture with Code Review",
            "summary": "<img src=\"/logo.jpg\" alt=\"Starting a Healthy Development Culture with Code Review\"/><br/>At the company conference NHN FORWARD held in November 2019, we ran a Frontend Counseling Center to address concerns or questions about frontend development. There were various concerns, but I noticed that the questions and worries were similar across different years of experience and job titles. The concerns ranged from troubleshooting that requir...",
            "image": "https://blog.shiren.dev/logo.jpg",
            "date_modified": "2020-01-11T07:00:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2019-05-22",
            "content_html": "<img src=\"/logo.jpg\" alt=\"Chrome Native Lazy Loading\"/><br/>What is Lazy Loading?\nI had a great opportunity to attend Google I/O 2019. While there weren't any groundbreaking web technology sessions, some web-related technologies introduced in certain sessions were interesting. Native Lazy Loading, Portals, Duplex, and Rich Results caught my attention. Among them, native lazy loading, mentioned extensively f...",
            "url": "https://blog.shiren.dev/en/post/2019-05-22",
            "title": "Chrome Native Lazy Loading",
            "summary": "<img src=\"/logo.jpg\" alt=\"Chrome Native Lazy Loading\"/><br/>What is Lazy Loading?\nI had a great opportunity to attend Google I/O 2019. While there weren't any groundbreaking web technology sessions, some web-related technologies introduced in certain sessions were interesting. Native Lazy Loading, Portals, Duplex, and Rich Results caught my attention. Among them, native lazy loading, mentioned extensively f...",
            "image": "https://blog.shiren.dev/logo.jpg",
            "date_modified": "2019-05-22T00:39:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2019-03-28",
            "content_html": "<img src=\"/logo.jpg\" alt=\"How to Develop Vue Components in TypeScript\"/><br/>The Journey Here\nThe first time I worked on an SPA project was in 2012. It was a fairly large-scale project built based on Backbone, which was the hottest thing back then. At that time, the front-end development environment wasn't as good as it is now, and the concept of SPA itself was just starting to gain traction. The front-end landscape was dom...",
            "url": "https://blog.shiren.dev/en/post/2019-03-28",
            "title": "How to Develop Vue Components in TypeScript",
            "summary": "<img src=\"/logo.jpg\" alt=\"How to Develop Vue Components in TypeScript\"/><br/>The Journey Here\nThe first time I worked on an SPA project was in 2012. It was a fairly large-scale project built based on Backbone, which was the hottest thing back then. At that time, the front-end development environment wasn't as good as it is now, and the concept of SPA itself was just starting to gain traction. The front-end landscape was dom...",
            "image": "https://blog.shiren.dev/logo.jpg",
            "date_modified": "2019-03-28T08:53:00.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2019-01-11",
            "content_html": "<img src=\"/logo.jpg\" alt=\"On Running Open Source Projects..\"/><br/>2018 was a year full of good news for the FE Development Lab. The open source projects released by the lab received positive responses, leading to several significant achievements. In the hope that more great open source projects emerge from South Korea, which still plays a minor role in the open source ecosystem, I am writing this post to share th...",
            "url": "https://blog.shiren.dev/en/post/2019-01-11",
            "title": "On Running Open Source Projects..",
            "summary": "<img src=\"/logo.jpg\" alt=\"On Running Open Source Projects..\"/><br/>2018 was a year full of good news for the FE Development Lab. The open source projects released by the lab received positive responses, leading to several significant achievements. In the hope that more great open source projects emerge from South Korea, which still plays a minor role in the open source ecosystem, I am writing this post to share th...",
            "image": "https://blog.shiren.dev/logo.jpg",
            "date_modified": "2019-01-11T08:07:08.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2018-07-10",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/42009614-1bb58092-7ac6-11e8-8964-ba880911caac.png\" alt=\"Creating a Modern Front-End Development Environment (2018): ES6\"/><br/>The previous article in this series covered Webpack 4 and created a ready-to-use environment. This installment will use that same environment to add an ES6 development setup. I believe ES6 is mature enough for general use now. If you're thinking, \"I'm not a front-end developer, and not all browsers support it, so I can't use ES6 yet,\" I hope this a...",
            "url": "https://blog.shiren.dev/en/post/2018-07-10",
            "title": "Creating a Modern Front-End Development Environment (2018): ES6",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/42009614-1bb58092-7ac6-11e8-8964-ba880911caac.png\" alt=\"Creating a Modern Front-End Development Environment (2018): ES6\"/><br/>The previous article in this series covered Webpack 4 and created a ready-to-use environment. This installment will use that same environment to add an ES6 development setup. I believe ES6 is mature enough for general use now. If you're thinking, \"I'm not a front-end developer, and not all browsers support it, so I can't use ES6 yet,\" I hope this a...",
            "image": "https://user-images.githubusercontent.com/389021/42009614-1bb58092-7ac6-11e8-8964-ba880911caac.png",
            "date_modified": "2018-07-10T04:58:08.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2018-04-16",
            "content_html": "<img src=\"https://user-images.githubusercontent.com/389021/39568622-c4f1a4be-4efd-11e8-9ddd-b987e493e99b.png\" alt=\"Creating a Modern Frontend Development Environment (2018): Webpack 4\"/><br/>Recently, I started a new project and decided to fully adopt Vue (hereafter referred to as Vue), which I had only briefly explored before. Although the team initially preferred React, the use of Vue was rapidly increasing within the company, necessitating expertise in Vue within the team. Since Vue and React are tools that influence and evolve alon...",
            "url": "https://blog.shiren.dev/en/post/2018-04-16",
            "title": "Creating a Modern Frontend Development Environment (2018): Webpack 4",
            "summary": "<img src=\"https://user-images.githubusercontent.com/389021/39568622-c4f1a4be-4efd-11e8-9ddd-b987e493e99b.png\" alt=\"Creating a Modern Frontend Development Environment (2018): Webpack 4\"/><br/>Recently, I started a new project and decided to fully adopt Vue (hereafter referred to as Vue), which I had only briefly explored before. Although the team initially preferred React, the use of Vue was rapidly increasing within the company, necessitating expertise in Vue within the team. Since Vue and React are tools that influence and evolve alon...",
            "image": "https://user-images.githubusercontent.com/389021/39568622-c4f1a4be-4efd-11e8-9ddd-b987e493e99b.png",
            "date_modified": "2018-04-16T04:58:08.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2018-02-23",
            "content_html": "<img src=\"http://image.toast.com/aaaadh/real/2018/repimg/1.jpg\" alt=\"Exploring the ECMAScript Specification: Primitives\"/><br/>Questions About Primitives\nCurrently, the seniors within the team are improving the team's personnel hiring process. Among the processes, we are currently rewriting the written test questions, which is proving more difficult than expected, leading to daily disagreements. Then, one day, while discussing primitives, a debate arose about whether it's...",
            "url": "https://blog.shiren.dev/en/post/2018-02-23",
            "title": "Exploring the ECMAScript Specification: Primitives",
            "summary": "<img src=\"http://image.toast.com/aaaadh/real/2018/repimg/1.jpg\" alt=\"Exploring the ECMAScript Specification: Primitives\"/><br/>Questions About Primitives\nCurrently, the seniors within the team are improving the team's personnel hiring process. Among the processes, we are currently rewriting the written test questions, which is proving more difficult than expected, leading to daily disagreements. Then, one day, while discussing primitives, a debate arose about whether it's...",
            "image": "http://image.toast.com/aaaadh/real/2018/repimg/1.jpg",
            "date_modified": "2018-02-23T04:58:08.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2017-11-13",
            "content_html": "<img src=\"/logo.jpg\" alt=\"Development Environment with Emacs\"/><br/>Entering the Forbidden Realm\nI used to be the type of person who felt compelled to try every new tool related to work, whether it was an editor or an IDE. However, at some point, I realized that they were all pretty much the same, and even with new features, the functionalities I actually used for development were very limited. I used IntelliJ for...",
            "url": "https://blog.shiren.dev/en/post/2017-11-13",
            "title": "Development Environment with Emacs",
            "summary": "<img src=\"/logo.jpg\" alt=\"Development Environment with Emacs\"/><br/>Entering the Forbidden Realm\nI used to be the type of person who felt compelled to try every new tool related to work, whether it was an editor or an IDE. However, at some point, I realized that they were all pretty much the same, and even with new features, the functionalities I actually used for development were very limited. I used IntelliJ for...",
            "image": "https://blog.shiren.dev/logo.jpg",
            "date_modified": "2017-11-13T04:58:08.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2017-09-18",
            "content_html": "<img src=\"http://image.toast.com/aaaadh/alpha/2017/techblog/atswithwebtechnology.png\" alt=\"Implementing Adaptive HTTP Streaming with Web Technology\"/><br/>An enormous amount of video content is being consumed not only in Korea but globally. The dominant web video technology, once Flash, has gradually transitioned to the standard HTML5 video technology, and most video services today are based on HTML5. As video technologies have advanced, various methods have been explored to provide optimal video qua...",
            "url": "https://blog.shiren.dev/en/post/2017-09-18",
            "title": "Implementing Adaptive HTTP Streaming with Web Technology",
            "summary": "<img src=\"http://image.toast.com/aaaadh/alpha/2017/techblog/atswithwebtechnology.png\" alt=\"Implementing Adaptive HTTP Streaming with Web Technology\"/><br/>An enormous amount of video content is being consumed not only in Korea but globally. The dominant web video technology, once Flash, has gradually transitioned to the standard HTML5 video technology, and most video services today are based on HTML5. As video technologies have advanced, various methods have been explored to provide optimal video qua...",
            "image": "http://image.toast.com/aaaadh/alpha/2017/techblog/atswithwebtechnology.png",
            "date_modified": "2017-09-18T04:58:08.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2017-02-21",
            "content_html": "<img src=\"https://cloud.githubusercontent.com/assets/389021/23248115/120d3024-f9e1-11e6-8a8b-77ba5b8368dd.png\" alt=\"Understanding JavaScript Prototype Chain Easily\"/><br/>JavaScript is a multi-paradigm language that supports both object-oriented programming and functional programming, treating functions as first-class citizens. Those who have worked with JavaScript know that it lacks the concept of a class, making object creation and inheritance different from other languages. Particularly, object-oriented programmi...",
            "url": "https://blog.shiren.dev/en/post/2017-02-21",
            "title": "Understanding JavaScript Prototype Chain Easily",
            "summary": "<img src=\"https://cloud.githubusercontent.com/assets/389021/23248115/120d3024-f9e1-11e6-8a8b-77ba5b8368dd.png\" alt=\"Understanding JavaScript Prototype Chain Easily\"/><br/>JavaScript is a multi-paradigm language that supports both object-oriented programming and functional programming, treating functions as first-class citizens. Those who have worked with JavaScript know that it lacks the concept of a class, making object creation and inheritance different from other languages. Particularly, object-oriented programmi...",
            "image": "https://cloud.githubusercontent.com/assets/389021/23248115/120d3024-f9e1-11e6-8a8b-77ba5b8368dd.png",
            "date_modified": "2017-02-21T04:58:08.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2016-11-15",
            "content_html": "<img src=\"/logo.jpg\" alt=\"Measuring Frontend Performance Using Chrome Developer Tools\"/><br/>Timeline\nThe Timeline is a tool that records and visualizes browser operations triggered by webpage loading or user interactions in a timeline format. It allows you to monitor browser events (not just DOM events but also internal browser operations, including those that trigger DOM events), CPU usage, memory consumption, network activity, and FPS o...",
            "url": "https://blog.shiren.dev/en/post/2016-11-15",
            "title": "Measuring Frontend Performance Using Chrome Developer Tools",
            "summary": "<img src=\"/logo.jpg\" alt=\"Measuring Frontend Performance Using Chrome Developer Tools\"/><br/>Timeline\nThe Timeline is a tool that records and visualizes browser operations triggered by webpage loading or user interactions in a timeline format. It allows you to monitor browser events (not just DOM events but also internal browser operations, including those that trigger DOM events), CPU usage, memory consumption, network activity, and FPS o...",
            "image": "https://blog.shiren.dev/logo.jpg",
            "date_modified": "2016-11-15T04:44:08.000Z"
        },
        {
            "id": "https://blog.shiren.dev/en/post/2016-06-27",
            "content_html": "<img src=\"https://cloud.githubusercontent.com/assets/389021/16572615/630f8574-42a5-11e6-8947-b77610584848.jpg\" alt=\"Closures, Encapsulation, and Information Hiding\"/><br/>Closures and Objects\nI remember struggling to understand closures when I first encountered them. Properly grasping closures requires a solid understanding of JavaScript's core concepts. Personally, I once summarized closures as entities that delay the termination of their scope until they disappear themselves—essentially, they terminate their scope...",
            "url": "https://blog.shiren.dev/en/post/2016-06-27",
            "title": "Closures, Encapsulation, and Information Hiding",
            "summary": "<img src=\"https://cloud.githubusercontent.com/assets/389021/16572615/630f8574-42a5-11e6-8947-b77610584848.jpg\" alt=\"Closures, Encapsulation, and Information Hiding\"/><br/>Closures and Objects\nI remember struggling to understand closures when I first encountered them. Properly grasping closures requires a solid understanding of JavaScript's core concepts. Personally, I once summarized closures as entities that delay the termination of their scope until they disappear themselves—essentially, they terminate their scope...",
            "image": "https://cloud.githubusercontent.com/assets/389021/16572615/630f8574-42a5-11e6-8947-b77610584848.jpg",
            "date_modified": "2016-06-27T01:07:08.000Z"
        }
    ]
}