[{"content":"I use Python a lot. In the (hopefully) final semester of my Bachelor\u0026rsquo;s, almost all my courses involve using Python at some point or another. I\u0026rsquo;m doing my senior project mainly in Python, I have an ML course where most assignments require1 Python, I\u0026rsquo;m doing research with LLMs so that also devolves into1 Python. In all this mess, I\u0026rsquo;m dealing with Python and Python packages. First, I will tell you the way I started to deal with these, and then I will introduce my current method.\nMy old solution I started with the path of least resistance: Create a requirements.txt file in the project and create a virtual environment using python -m venv .venv. When a package is needed, just pip install that package! This is very much fine\u0026hellip;for the first commit of the project. Starting from there, the reqiurements.txt file becomes increasingly brittle. Any time you say to yourself:\nAh, I should add this package to make my life easier!\nAnd introduce another dependency, you must not forget to update the requirements file accordingly (with the correct version of the package). If you forget it, the workaround is actually rather simple:\npip freeze | grep the-package-you-added H2o\nFollowed by adding this to the requirements.txt. Is this okay? Sure. However, you again relied on your own vigilance to catch that you forgot to add a dependency. This problem goes on for a while. Additionally, when creating a virtual environment, you are bound to the Python versions you have installed in your device. If you want to have a Python 3.11 environment but have Python 3.14 installed, you will have to do some workarounds. Recently, and finally, this was my breaking point. I knew from a previous course that uv existed. I just had not tried to use it outside that course\u0026rsquo;s context. So, I dived in:\nuv uv is a package and project manager for Python. The important word there is \u0026ldquo;project.\u0026rdquo; After trying it out, I realized more clearly what I was missing with the venv+pip method: I didn\u0026rsquo;t have a project manager at all, I was the project manager. Sure, there was a list of what was needed for the project to run, but that was a manual and brittle process. In contrast, uv does things in a more programmatic way. Let\u0026rsquo;s say you want to create a Python project that uses Python 3.11.x. You use:\nuv init --python=3.11 new_project This creates a new project in the new_project directory, where the project structure looks like so:\nnew_project ├── .gitignore ├── main.py ├── pyproject.toml ├── .python-version └── README.md There are multiple nice things about this process:\nYou are independent of the Python version you have on your device, and the Python version is explicitly saved in the .python-version file for future reference. You have a pyproject.toml file that explicitly keeps track of the dependencies the user wanted in contrast to the old method where pip freeze would return all packages installed. .gitignore and main.py are quality of life additions which mean that you automatically get a gitignore for common files and an entry point for your application. This is a massive improvement to doing python -m venv .venv because you are independent from the Python version you have installed in your computer. In fact, this was the reason I tried uv: without changing the Python version on my PC, I couldn\u0026rsquo;t find an easy way to specify the Python version I wanted.\nAnyway, after this point you can start adding packages. Let\u0026rsquo;s start with these few:\nuv add numpy pandas spacy If we check the pyproject.toml2 file at this point, I think you\u0026rsquo;ll understand why I find this to be much better:\n[project] name = \u0026#34;sample-project\u0026#34; version = \u0026#34;0.1.0\u0026#34; description = \u0026#34;Sample description\u0026#34; readme = \u0026#34;README.md\u0026#34; requires-python = \u0026#34;\u0026gt;=3.14\u0026#34; dependencies = [ \u0026#34;numpy\u0026gt;=2.4.2\u0026#34;, \u0026#34;pandas\u0026gt;=3.0.1\u0026#34;, \u0026#34;spacy\u0026gt;=3.8.11\u0026#34;, ] As opposed to a pip freeze, you don\u0026rsquo;t get all the packages. You only get the ones you needed. Plus, you didn\u0026rsquo;t need to do two iterations: In the old solution, you would have to install and modify the requirements.txt. Here, they are in one command.\nSome small notes Apparently uv does not install pip automatically. In hindsight, this is not too weird, as pip is indeed just another package. However, some packages implicitly assume pip to be present. For example, if you try to download \u0026ldquo;en_core_web_sm\u0026rdquo; using the spacy package:\nuv run spacy download en_core_web_sm .venv/bin/python3: No module named pip This took me a rather embarassing amount of time to fix. Regardless, the fix is easy: uv add pip. Simple! Furthermore, you can still use the pip interface by uv pip install .... This is useful if you had a project already and are trying to migrate to a uv-managed project.\nRunning you project Running a uv-managed project can be done in two ways:\nActivating the virtual environment uv creates, and python main.py, Using uv run main.py The second option uses the same Python instance as the first option. The difference is that it does not require you to activate the virtual environment. This is another win in my book, as using uv run is less brittle as it is self-contained.\nConclusion I found the design philosophy and usage of uv to be very intuitive and helpful. I\u0026rsquo;m planning to use it on my personal projects for now to get a better feel for it. If my opinion stands the test of time, you can expect to see a uv.lock file in works I publish :P\nOf course, I could do these in Not-Python™ but that is a separate pain too.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nThe file contains information that I don\u0026rsquo;t touch on such as the readme field. Those are also interesting, but not the main point I want to push.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://erengokirmak.com/posts/uv-python-management/","summary":"\u003cp\u003eI use Python a lot. In the (hopefully) final semester of my Bachelor\u0026rsquo;s, almost all my courses involve using Python at some point or another. I\u0026rsquo;m doing my senior project mainly in Python, I have an ML course where most assignments require\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e Python, I\u0026rsquo;m doing research with LLMs so that also devolves into\u003csup id=\"fnref1:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e Python. In all this mess, I\u0026rsquo;m dealing with Python and Python packages. First, I will tell you the way I started to deal with these, and then I will introduce my current method.\u003c/p\u003e","title":"uv: python management"},{"content":"I\u0026rsquo;ve been working as a research volunteer at BILSEN for the last 3 months and the work has been quite eye-opening. I\u0026rsquo;ve had a chance to experience academia before, hopefully, I get into more academia :p I\u0026rsquo;m assuming that this will be my most methodical blog post so far (I have turned on the table of contents for this post, I am that serious :d). The rest of this post is composed of my recent findings about academic work.\nReading (of large volumes) God, there is so much reading! You may reasonably say that, for an industry that is mostly involved in writing about research, I should have been prepared for also reading many papers. I guess I was not ready for the sheer volume of it. Don\u0026rsquo;t get me wrong, reading is enjoyable. You do get to learn about the many approaches tried on problems. The shortcomings and strengths of those prior work guide your own ideas. Hopefully, that reading gives you the push you need to create something new.\nYou also develop an eye for nicely-written papers as you read more of them. You learn to look for what you need to find. There is definitely a skill to reading scientific papers. I know, another obvious take :P However, there is a non-negligible chance that a researcher new to their work can overlook this skill. In my case, my supervisor has been of great help in acquiring a better reading method. For example, one of his recommended reading on this, How to Read a Paper, is a succinct explanation of how a paper can be more easily digested. It also doubles as a peak into a potential reviewer\u0026rsquo;s goals when reading your papers (more on this in the writing section).\nWriting (and rewriting) Writing scientific papers turned out to also be an art in-itself. You would expect scientific language to be relatively straight-forward. However, a different kind of writer\u0026rsquo;s block can occur in academia. As with all kinds of writing, scientific writing will (hopefully) be read by humans, be it reviewers or other researchers wanting to use your work. This means it is in your best interest to make your writing as concise and engaging. If you make it too complicated, 1) reviewers will not waste time reading your work regardless of its significance, and 2) future researchers will scratch their heads trying to figure out what you were trying to say. If you make it too boring, in the same way, humans will struggle to read or use your work. It\u0026rsquo;s the art of the simple and engaging that makes the academic writing go. If you can figure out how to write so, you will have a much better time trying to get your papers accepted.\nThere are many resources for this purpose too. In fact, I\u0026rsquo;ve come across more resources that teach how to write than ones that teach how to read. There is an argument to be made about the irony of this, since reading much and reading well definitely contributes to writing well while the opposite is not necessarily true. Regardless, a good place to start is Writing Support.\nAdditionally, I would like to say that if there is one mentality that you should get rid of, it is the mentality that you should achieve the perfect on the first draft. In the last 3 months, what I found out is that there will always be revisions. You will feel terrible showing your half-baked writing to your supervisor. They will understand, as they understand the process better than you do. As time goes on, you will learn to grow a thicker skin and understand that criticism on your work is not an attack on your writing ability. Instead, it is a helpful eye, making you aware of your ignorance when it is necessary. The next time will not be so bad. Both you, and the writing.\nTransparency \u0026amp; Verifiability One thing about research is that you can not be right. You can only be not wrong, and that is only for now. The main point of research is to form hypotheses and test them against reality. If so, then we must make our experiments as reproducible as possible. The important, and relatively subtle, part of that statement is that we\u0026rsquo;re trying to make sure that our results are reproducible without any value judgment. If your results turn out to be satisfactory, they can only be satisfactory if we can reproduce them. If they are not satisfactory, we also want to be dissatisfied in the future when we reproduce your results.\nEnough with the tangent. This section is more related to the many steps one can take to make sure that their results are as reproducible as possible.\nDocument everything As with all work that depends on the past, you must keep artifacts. Be it experiments logs, code, writings; you must hold onto them until you are absolutely sure you will not need them anymore (this is likely after your paper gets accepted, and even then you should probably hold onto them). Especially in software engineering, version control systems make this very easy. Use them.\nValidate intermediate steps What do I mean by \u0026ldquo;intermediate steps?\u0026rdquo; There is a very real possibility that the code you used to make the experiments for research will not be the same code you present in a replication package. You will clean up the code, get rid of unnecessary files, etc. This is where you have to be really careful. The goal is to make it so that any step in this process should not change the outcome of your experiments (within reason, you can of course make name changes etc.).\nA good way to make sure of valid experiment refactoring is redundancy: Make multiple, easily-comparable copies of your experiment. In case of code, run the experiment, copy it somewhere safe, make a refactor step, run the experiment again. If the results are equivalent, hopefully you did a good job. There is always room for human error. That is why we\u0026rsquo;re being so careful.\nBe brutally transparent What arbitrary choices did you make during your study? Be honest and write them down. There is wisdom to learn from academia: You are human, we expect you to make mistakes. Just please let us figure out exactly what they were so we can collectively not make that specific mistake again. This is good advice for life too: It is the same reason I write. I want to remember my mistakes. It sounds counterintuitive but if I don\u0026rsquo;t remember my mistakes, who can tell when I will make them again?\nConclusion (or Future Work?) I have a long way to go in academia. That is the biggest realization I had during these last 3 months. It is a wildly different world compared to my reasonably-correct ways of thinking. I have many lessons to learn, many ways to fall over, and get up again. Regardless, I liked what I saw so far.\n","permalink":"https://erengokirmak.com/posts/research/","summary":"\u003cp\u003eI\u0026rsquo;ve been working as a research volunteer at \u003ca href=\"https://bilsen.cs.bilkent.edu.tr/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eBILSEN\u003c/a\u003e for the last 3 months and the work has been quite eye-opening. I\u0026rsquo;ve had a chance to experience academia before, hopefully, I get into more academia :p I\u0026rsquo;m assuming that this will be my most methodical blog post so far (I have turned on the table of contents for this post, I am that serious :d). The rest of this post is composed of my recent findings about academic work.\u003c/p\u003e","title":"research"},{"content":"For the last month, I\u0026rsquo;ve been doing an internship at Aselsan where I developed tests for validating the behavior of an in-house testing suite. The work has been quite eye-opening as I learned that software testing is not only about writing software tests. Well..I did end up writing a lot of tests. Still, there is an interesting world of knowledge about software testing that I want to share.\njust how much testing? Let\u0026rsquo;s say you\u0026rsquo;re testing a function foo. It takes some arguments and returns outputs depending on them. The most simple way to test it is to test one output and verify that the function returns the expected output.\ndef SimpleTest(): assert foo(args) == expected_result This is obviously a test that helps the developer gain more trust over the behavior of foo. However, there is a crucial problem with it: The code is only verifying one half of the problem. It is entirely possible that the code is written incorrectly in a way that the function returns one output all the time. A measure against this is to create a better test where the test checks both that the function outputs the expected value, and that it doesn\u0026rsquo;t output that expected value when it isn\u0026rsquo;t expected.\ndef SophisticatedTest(): assert foo(args_1) == expected_result assert foo(args_2) != expected_result Now, we have more confidence over the validity of the code: It returns the expected output at least once, and does not return it at least once. We have existence, and (a variant of) uniqueness. The takeaway from this is that almost all software tests must be in pairs: One of them check for correctness, and one for the obvious mistakes that can happen. And they happen more often than we would like.\ntesting vs. proving The immediate response to the test above should be \u0026ldquo;Well, this does not prove the validity of the function either!\u0026rdquo; The answer to this is \u0026ldquo;\u0026hellip;Yes, it does not. That is not what we expect out of tests.\u0026rdquo; What I understood from my internship is that software testing is separate from proving the correctness of programs. Formal methods is a way to prove the correctness of programs for all inputs, but it is an additional effort that only gets useful when programming very critical software. Examples of this are medical equipment like a pacemaker, ECG machines, or critical embedded software like a plane\u0026rsquo;s mission computer. In those cases, it is worth the effort to formally prove the programs will operate correctly. However, doing so for every program one ever writes is a huge demand that ends up not being worth it. Testing is an alternative to this process. We don\u0026rsquo;t get the certainty of a proof, but we\u0026rsquo;re not stuck with no confidence about the validity of code either. It is a healthy middle ground.\nmanual vs. automated My work during the internship did not require the rigor of formal methods. It was more focused on automating the tests humans have been doing to scripts. There already was documentation on how to verify the in-house testing suite by a human agent. As it should be immediately obvious, this is not a sustainable verification method. As the number of qualification tests grow, and human error creeps in, manual testing loses its trustworthiness. The silver lining is that the documentation for the manual tests were done very well, to the point that automating the process was very easy.\nIn general, automating testing work translates to more precisely specifying what a human would do to test an application. The user would look at the features of the program, hopefully follow some instructions, and see if they match their generally subjective expectations. That is why we do automation. I use automation willingly in my personal projects too. In how, I showcase my upload script that updates this website when I make changes to it. The instructions that script follow are not complicated, but I wouldn\u0026rsquo;t trust myself to do them correctly every single time. Never underestimate what one typo in a command can do. Machines are much better at following scripts. It\u0026rsquo;s better to leave that responsibility to them when we can.\nso? I consider the internship a success as it allowed me to understand a crucial part of complex systems \u0026ndash; testing \u0026ndash; much better. Complex systems need testing. They are too complicated to not make mistakes. Those mistakes are especially headache-inducing when they inevitably result in critical problems on a Friday evening. The best way to get rid of headaches is to put the appropriate effort to testing while building the software.\n","permalink":"https://erengokirmak.com/posts/test/","summary":"\u003cp\u003eFor the last month, I\u0026rsquo;ve been doing an internship at \u003ca href=\"https://aselsan.com\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eAselsan\u003c/a\u003e where I developed tests for validating the behavior of an in-house testing suite. The work has been quite eye-opening as I learned that software testing is not only about writing software tests. Well..I did end up writing a lot of tests. Still, there is an interesting world of knowledge about software testing that I want to share.\u003c/p\u003e\n\u003ch1 id=\"just-how-much-testing\"\u003ejust how much testing?\u003c/h1\u003e\n\u003cp\u003eLet\u0026rsquo;s say you\u0026rsquo;re testing a function \u003ccode\u003efoo\u003c/code\u003e. It takes some arguments and returns outputs depending on them. The most simple way to test it is to test one output and verify that the function returns the expected output.\u003c/p\u003e","title":"test"},{"content":"it is so easy to lose your dreams. the pieces of yourself that you wanted to carry, and make into your legacy. the things that make your life yours. sometimes i worry that i\u0026rsquo;m forgetting my dreams, letting them go. it is so easy to do that. to get carried in the motions of everyday life. forgetting to organize. forgetting to remember.\nhowever, just as easy as it is to forget, you start anew. every morning, you wake up to take care of your body. it does not forget the desire to continue. you…remember things from your past, and bring them back into your future. your dreams don\u0026rsquo;t need continuity. you are not a movie. but you are a story. a story that decides to rewrite itself from time to time. a story that dwells in the petty detail and the mundane stress. a story that sometimes needs room to breathe, and sometimes desperately needs something, anything to progress.\nin the end, regardless of your path there, you can always get back on your dreams. they will be waiting for you.\n","permalink":"https://erengokirmak.com/posts/lost+found/","summary":"\u003cp\u003eit is so easy to lose your dreams. the pieces of yourself that you wanted to carry, and make into your legacy. the things that make your life \u003cem\u003eyours\u003c/em\u003e. sometimes i worry that i\u0026rsquo;m forgetting my dreams, letting them go. it is so easy to do that. to get carried in the motions of everyday life. forgetting to organize. forgetting to remember.\u003c/p\u003e\n\u003cp\u003ehowever, just as easy as it is to forget, you start anew. every morning, you wake up to take care of your body. \u003cem\u003eit\u003c/em\u003e does not forget the desire to continue. you…remember things from your past, and bring them back into your future. your dreams don\u0026rsquo;t need continuity. you are not a movie. but you \u003cem\u003eare\u003c/em\u003e a story. a story that decides to rewrite itself from time to time. a story that dwells in the petty detail and the mundane stress. a story that sometimes needs room to breathe, and sometimes desperately needs something, \u003cem\u003eanything\u003c/em\u003e to progress.\u003c/p\u003e","title":"lost+found"},{"content":"I wanted to give a small explanation of how I\u0026rsquo;m generating this site and adding posts to it. As I said in hello, I\u0026rsquo;m using Hugo to compile this static site. It\u0026rsquo;s static, as there is no database or back-end this website is pulling information from. All knowledge about the website is known at compile-time. As I\u0026rsquo;m the only person making changes on the website and I know that they will all be independent of the outside world, I chose to use a tool like this. In the background, I have a GitHub repository that holds almost all the source code necessary to compile the latest version of the website. There are two things missing from this repository: The theme and the compilation script.\nHugo uses themes to make the website look as it is. There is an incredible amount of documentation for Hugo. It is genuinely a very powerful tool that shows you just how much you can do without ever needing a back-end. I\u0026rsquo;m using the theme hello-friend-ng and modifying it slightly to make it look a bit more to my liking. All the modifications can be found in the archetypes, assets, and layouts folders in the root directory.\nThe compilation script is a bash script I wrote to automate the recompilation and upload procedure to deploy the website. It resides in the root folder of the repository. It carries some sensitive information, which is why I show a slightly modified version of it in the following code-block:\n#!/bin/bash SERVER_USER= # Read username to use in ssh for the server read -p \u0026#34;Enter username: \u0026#34; -r SERVER_USER # Check if the username is malformed [[ \u0026#34;$SERVER_USER\u0026#34; =~ ^[a-zA-Z0-9._-]+$ ]] || { echo \u0026#34;[ERROR]: SERVER_USER: \\\u0026#34;$SERVER_USER\\\u0026#34; is invalid\u0026#34; exit } # Where the website files will be copied to FINAL_PATH=\u0026#34;server-ip-address:/path/to/your/webroot\u0026#34; # Remove files from compilations before rm -rf public/* || { echo \u0026#34;[ERROR]: There was an error deleting files from the public directory\u0026#34; exit } # Recompile the website hugo --minify --ignoreCache --panicOnWarning --logLevel=info || { echo \u0026#34;[ERROR]: Recompilation failed\u0026#34; exit } printf \u0026#34;\\n[INFO]: Recompilation complete\\n\\n\u0026#34; cd public || { echo \u0026#34;[ERROR]: Could not find public directory\u0026#34; exit } # Replace the files with the newly generated files echo \u0026#34;Syncing server content with local...\u0026#34; rsync -azP --delete --progress ./ \u0026#34;$SERVER_USER@$FINAL_PATH\u0026#34; || { echo \u0026#34;[ERROR]: There was an error syncing the directory. Is rsync installed?\u0026#34; exit } printf \u0026#34;\\n[INFO]: Sync complete! Enjoy the new version of your website :)\\n\u0026#34; Now, there is a bit to unpack in there. The user is expected to run this script while they are in the root directory of the repository. Afterwards, they will input the username that will be used to SSH into their server remotely to sync (more specifically rsync) the static website content. The script deletes the contents of the public directory, which is where the built files of the websites go. After recompiling the website with the hugo command, the script uses rsync to sync the content of the public directory with the directory specified by FINAL_PATH. This path is used by an Apache web server. After this (r)sync is complete, the new version of the website is up and running :)\n","permalink":"https://erengokirmak.com/posts/how/","summary":"\u003cp\u003eI wanted to give a small explanation of how I\u0026rsquo;m generating this site and adding posts to it. As I said in \u003ca href=\"/posts/hello\"\u003ehello\u003c/a\u003e, I\u0026rsquo;m using \u003ca href=\"https://gohugo.io/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eHugo\u003c/a\u003e to compile this static site. It\u0026rsquo;s static, as there is no database or back-end this website is pulling information from. \u003cem\u003eAll knowledge\u003c/em\u003e about the website is known at \u003cem\u003ecompile-time\u003c/em\u003e. As I\u0026rsquo;m the only person making changes on the website and I know that they will all be independent of the outside world, I chose to use a tool like this. In the background, I have a \u003ca href=\"https://github.com/erengokirmak/erengokirmak-website\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eGitHub repository\u003c/a\u003e that holds \u003cem\u003ealmost\u003c/em\u003e all the source code necessary to compile the latest version of the website. There are two things missing from this repository: The theme and the compilation script.\u003c/p\u003e","title":"how"},{"content":"what is our obsession with wanting to be in-person? what difference does the body make when it\u0026rsquo;s close to us?\nfriendships that go forgotten, only because a walking distance turns into a bus ride. relationships gone, for the warm hug is not there anymore. the easy access, turning into effort, turning into nothing at all.\nbut I have seen the distance not even making a dent on some. mails sent, not expecting a response for months on end, but still expecting an answer regardless. couples on airports, meeting at the first chance they have and having their moment of pure joy. friends, having never even met in person, relying on purely the acknowledgement that they have managed to keep a connection going for years on end. managing to make the embrace of two minds more important than the embrace. trusting that you have someone on the other side of the world who\u0026rsquo;s doing exactly the same thing. an unspoken trust.\nI trust many people in my life. many of them are far away. still, I believe in their ability to uphold their promise of \u0026ldquo;until we meet again.\u0026rdquo;\ntake care friend. until we meet again…\n","permalink":"https://erengokirmak.com/posts/distance/","summary":"\u003cp\u003ewhat is our obsession with wanting to be in-person? what difference does the body make when it\u0026rsquo;s close to us?\u003c/p\u003e\n\u003cp\u003efriendships that go forgotten, only because a walking distance turns into a bus ride. relationships gone, for the warm hug is not there anymore. the easy access, turning into effort, turning into nothing at all.\u003c/p\u003e\n\u003cp\u003ebut I have seen the distance not even making a dent on some. mails sent, not expecting a response for months on end, but still expecting an answer regardless. couples on airports, meeting at the first chance they have and having their moment of pure joy. friends, having never even met in person, relying on purely the acknowledgement that they have managed to keep a connection going for years on end. managing to make the embrace of two minds more important than the embrace. trusting that you have someone on the other side of the world who\u0026rsquo;s doing exactly the same thing. an unspoken trust.\u003c/p\u003e","title":"distance"},{"content":"hello, i\u0026rsquo;m eren.\ndon\u0026rsquo;t mind the lack of uppercase letters, they are There. right now, i only want to deal with plain-text as it is in my mind: rather calm and without much organization. they will probably come around for later posts.\ni compiled this version of the site through Hugo. i\u0026rsquo;m still quite new to it but i feel like it could serve me well. i don\u0026rsquo;t want to put too much effort into a static website designed to serve plain-text and images to viewers. anyway, the things you can expect to see in this blog are:\npoems ramblings about mathematics programming academia life updates updates about personal projects photos i take (without metadata :p) for now, that is all. hope you are doing well, wherever you are. take care.\n","permalink":"https://erengokirmak.com/posts/hello/","summary":"\u003cp\u003ehello, i\u0026rsquo;m eren.\u003c/p\u003e","title":"hello"}]