[{"data":1,"prerenderedAt":536},["ShallowReactive",2],{"$ZdvyQrnBwh":3,"$0IiTuCiDHz":28,"$exqWFWucNA":478},{"id":4,"title":5,"author":6,"body":7,"description":18,"extension":19,"intro":13,"meta":20,"name":21,"navigation":22,"path":23,"pubDate":6,"role":24,"seo":25,"stem":26,"tags":6,"__hash__":27},"content\u002Findex.md","d9r — Danny Krämer",null,{"type":8,"value":9,"toc":14},"minimark",[10],[11,12,13],"p",{},"I build e-commerce systems with SAP Commerce Cloud by day, and explore Rust, WebAssembly, and where AI meets software engineering by night. This is where I write about what I learn, share what I build, and run experiments.",{"title":15,"searchDepth":16,"depth":16,"links":17},"",2,[],"Danny Krämer is a full-stack developer building e-commerce systems and exploring Rust, WebAssembly, and AI-augmented development.","md",{},"Danny Krämer",true,"\u002F","Full-stack developer working on e-commerce systems, exploring Rust, WebAssembly, and AI-augmented development.",{"title":5,"description":18},"index","tNk8ryqiPeFy4jwS7L8ELDjZlnbabLjSEqybkwsTwNw",[29,117,317,412],{"id":30,"title":31,"author":21,"body":32,"description":104,"extension":19,"intro":6,"meta":105,"name":6,"navigation":22,"path":107,"pubDate":108,"role":6,"seo":109,"stem":110,"tags":111,"__hash__":116},"content\u002Fblog\u002Fplaywright-webkit-testing.md","You Can Use Playwright to Test Your Site on WebKit",{"type":8,"value":33,"toc":97},[34,37,42,47,50,54,72,75,86,92],[11,35,36],{},"Cross-browser testing can be challenging, especially when testing WebKit browsers like Safari. If you are on Windows or Linux, you have to use tools like Browserstack to test on WebKit browsers like Safari because it is not available cross platform. But did you know that you can use Playwright to open a WebKit browser on any operating system? As Playwright can be used to run automated E2E-test cross-browser, it comes with its own bundled versions of every main browser engine and WebKit is one of them. Here is a very short tutorial on how it works.",[38,39,41],"h2",{"id":40},"tutorial","Tutorial",[43,44,46],"h3",{"id":45},"prerequisites","Prerequisites",[11,48,49],{},"You need to have installed Node.js and npm.",[43,51,53],{"id":52},"steps","Steps",[55,56,57,66],"ol",{},[58,59,60,61,65],"li",{},"Open up your terminal\u002Fpowershell and type ",[62,63,64],"code",{},"npx playwright install",".",[58,67,68,69],{},"To open a URL in WebKit run  the following command ",[62,70,71],{},"npx playwright wk \u003Cyour-url>",[11,73,74],{},"What you get is a WebKit browser with your URL opened. You can even use the WebKit Inspector. Depending on your operating system, not all features will be identical to the branded version of Safari. For that, you should use macOS. But still you can see how WebKit is rendering your site and identify some problems that may occur, without opening Browserstack or using an actual Apple device.",[11,76,77,78,85],{},"The Playwright ",[79,80,84],"a",{"href":81,"rel":82},"https:\u002F\u002Fplaywright.dev\u002Fdocs\u002Fbrowsers#open-pages",[83],"nofollow","documentation"," states the following:",[87,88,89],"blockquote",{},[11,90,91],{},"Playwright's WebKit is derived from the latest WebKit main branch sources, often before these updates are incorporated into Apple Safari and other WebKit-based browsers. This gives a lot of lead time to react on the potential browser update issues. Playwright doesn't work with the branded version of Safari since it relies on patches. Instead, you can test using the most recent WebKit build.",[87,93,94],{},[11,95,96],{},"Note that availability of certain features, which depend heavily on the underlying platform, may vary between operating systems. For example, available media codecs vary substantially between Linux, macOS and Windows. While running WebKit on Linux CI is usually the most affordable option, for the closest-to-Safari experience you should run WebKit on mac, for example if you do video playback.",{"title":15,"searchDepth":16,"depth":16,"links":98},[99],{"id":40,"depth":16,"text":41,"children":100},[101,103],{"id":45,"depth":102,"text":46},3,{"id":52,"depth":102,"text":53},"Playwright provides a convenient way to test websites in WebKit browsers across any operating system without requiring specialized tools like Browserstack or Apple devices. With just two simple commands, developers can install Playwright and launch a WebKit browser with inspector capabilities, though some platform-specific features may vary compared to Safari on macOS.",{"image":106},{"url":15,"alt":15},"\u002Fblog\u002Fplaywright-webkit-testing","2025-03-14",{"title":31,"description":104},"blog\u002Fplaywright-webkit-testing",[112,113,114,115],"testing","web development","playwright","frontend","5NHHCGbVcTjkpbTp06PG3jxop3My5KnPPQDigpGZ4qU",{"id":118,"title":119,"author":21,"body":120,"description":305,"extension":19,"intro":6,"meta":306,"name":6,"navigation":22,"path":308,"pubDate":309,"role":6,"seo":310,"stem":311,"tags":312,"__hash__":316},"content\u002Fblog\u002Fspa-db-aduit.md","Turn off DB_AUDIT Logs in SAP Commerce",{"type":8,"value":121,"toc":303},[122,133,142,151,164,169,195,200,214,219,285,299],[11,123,124,125,128,129,132],{},"SAP Commerce's database audit logging can get really annoying. Every database interaction creates a ",[62,126,127],{},"DB_AUDIT"," log from the ",[62,130,131],{},"AuditbaleActionsHandler",". Especially, if you want to debug a database heavy class, it can get really hard to find your beloved debug logs in between all the audit logs. But turning off the audit logs isn't that easy.",[11,134,135,136,141],{},"I found ",[79,137,140],{"href":138,"rel":139},"https:\u002F\u002Fcommunity.sap.com\u002Ft5\u002Fcrm-and-cx-blogs-by-members\u002Faudit-data-and-audit-logging-in-sap-commerce\u002Fba-p\u002F13738362",[83],"this article about audit logging",". It suggests to set the following properties:",[143,144,149],"pre",{"className":145,"code":147,"language":148},[146],"language-text","log4j2.logger.auditableActionsHandler.name=de.hybris.platform.audit.actions.impl.Slf4jAuditableActionHandler\nlog4j2.logger.auditableActionsHandler.level=OFF\n","text",[62,150,147],{"__ignoreMap":15},[11,152,153,154,157,158,163],{},"That did not work for me. Even after setting the properties in my ",[62,155,156],{},"local.properties"," I got all the logs. Also editing the Log4J config did not work. Then I found ",[79,159,162],{"href":160,"rel":161},"https:\u002F\u002Fme.sap.com\u002Fnotes\u002F3342126\u002FE",[83],"this note"," from SAP. The only thing that seems to work is to turn off the logging for every item type. But how do you know which types to set? Here is an easy step by step solution.",[55,165,166],{},[58,167,168],{},"You need to install xmlstarlet",[143,170,174],{"className":171,"code":172,"language":173,"meta":15,"style":15},"language-bash shiki shiki-themes github-dark github-light","sudo apt install xmlstarlet\n","bash",[62,175,176],{"__ignoreMap":15},[177,178,181,185,189,192],"span",{"class":179,"line":180},"line",1,[177,182,184],{"class":183},"s-Z4r","sudo",[177,186,188],{"class":187},"sg6BJ"," apt",[177,190,191],{"class":187}," install",[177,193,194],{"class":187}," xmlstarlet\n",[55,196,197],{"start":16},[58,198,199],{},"Go to your source",[143,201,203],{"className":171,"code":202,"language":173,"meta":15,"style":15},"cd path\u002Fto\u002Fhybris\u002Fbin  \n",[62,204,205],{"__ignoreMap":15},[177,206,207,211],{"class":179,"line":180},[177,208,210],{"class":209},"s0DvM","cd",[177,212,213],{"class":187}," path\u002Fto\u002Fhybris\u002Fbin\n",[55,215,216],{"start":102},[58,217,218],{},"Find all item types that are enabled for database audit logging.",[143,220,222],{"className":171,"code":221,"language":173,"meta":15,"style":15},"find . -name \"*-items.xml\" | xargs xmlstarlet select -t -m \"\u002F\u002Fitemtype\" -n -v \"concat(concat('dbaudit.', @code), '.disabled=true')\" | sort | uniq > dbaudit.txt\n",[62,223,224],{"__ignoreMap":15},[177,225,226,229,232,235,238,242,245,248,251,254,257,260,263,266,269,271,274,276,279,282],{"class":179,"line":180},[177,227,228],{"class":183},"find",[177,230,231],{"class":187}," .",[177,233,234],{"class":209}," -name",[177,236,237],{"class":187}," \"*-items.xml\"",[177,239,241],{"class":240},"scx8i"," |",[177,243,244],{"class":183}," xargs",[177,246,247],{"class":187}," xmlstarlet",[177,249,250],{"class":187}," select",[177,252,253],{"class":209}," -t",[177,255,256],{"class":209}," -m",[177,258,259],{"class":187}," \"\u002F\u002Fitemtype\"",[177,261,262],{"class":209}," -n",[177,264,265],{"class":209}," -v",[177,267,268],{"class":187}," \"concat(concat('dbaudit.', @code), '.disabled=true')\"",[177,270,241],{"class":240},[177,272,273],{"class":183}," sort",[177,275,241],{"class":240},[177,277,278],{"class":183}," uniq",[177,280,281],{"class":240}," >",[177,283,284],{"class":187}," dbaudit.txt\n",[11,286,287,288,291,292,295,296,298],{},"You will get a text file ",[62,289,290],{},"dbaudit.txt"," with all item types and the ",[62,293,294],{},"dbaudit.\u003Citemtype>.disbaled"," property set to true. Now, turn everything into lower case, and put them into your ",[62,297,156],{},". Voila! The logging is gone.",[300,301,302],"style",{},"html pre.shiki code .s-Z4r, html code.shiki .s-Z4r{--shiki-dark:#B392F0;--shiki-default:#6F42C1}html pre.shiki code .sg6BJ, html code.shiki .sg6BJ{--shiki-dark:#9ECBFF;--shiki-default:#032F62}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s0DvM, html code.shiki .s0DvM{--shiki-dark:#79B8FF;--shiki-default:#005CC5}html pre.shiki code .scx8i, html code.shiki .scx8i{--shiki-dark:#F97583;--shiki-default:#D73A49}",{"title":15,"searchDepth":16,"depth":16,"links":304},[],"The databse audit logging of SAP Commerce can fill up your logs. Then it is hard to use logs for debugging. This article covers how you can turn off the logging for local development.",{"image":307},{"url":15,"alt":15},"\u002Fblog\u002Fspa-db-aduit","2024-11-22",{"title":119,"description":305},"blog\u002Fspa-db-aduit",[313,314,315],"sap commerce","software development","configuration","8_IzlAecsNzzytI9_A_xBZPGMrreMgkJlsvuVu1eOUo",{"id":318,"title":319,"author":21,"body":320,"description":401,"extension":19,"intro":6,"meta":402,"name":6,"navigation":22,"path":404,"pubDate":405,"role":6,"seo":406,"stem":407,"tags":408,"__hash__":411},"content\u002Fblog\u002Fnotes-week-44.md","Weekly Notes 44\u002F24",{"type":8,"value":321,"toc":399},[322,337,340,353,355,363,375,377],[11,323,324,325,330,331,336],{},"After Twitter updated its blocking policy, there was a notable of exodus from Twitter to BlueSky. For example ",[79,326,329],{"href":327,"rel":328},"https:\u002F\u002Fbsky.app\u002Fprofile\u002Fkelseyhightower.com",[83],"Kelsey Hightower"," suspended his Twitter account and moved to BlueSky. Several other tech personalities, like ",[79,332,335],{"href":333,"rel":334},"https:\u002F\u002Fbsky.app\u002Fprofile\u002Fthorstenball.com",[83],"Thorsten Ball",", are now actively posting there. Could this signal a larger shift from Twitter to BlueSky?",[338,339],"hr",{},[11,341,342,343,348,349,352],{},"The ",[79,344,347],{"href":345,"rel":346},"https:\u002F\u002F2024.stateofcss.com\u002Fen-US",[83],"State of CSS 2024"," results have been released. The clear winner appears to be the ",[350,351],"has",{},"() pseudo-class. Beyond this highlight, the results were largely predictable: Tailwind continues to dominate as the preferred CSS framework, while SASS\u002FSCSS remains the most popular CSS preprocessor.",[338,354],{},[11,356,342,357,362],{},[79,358,361],{"href":359,"rel":360},"https:\u002F\u002Ftsh.io\u002Fstate-of-frontend\u002F",[83],"State of Frontend Survey 2024"," have also been published. Some results:",[364,365,366,369,372],"ul",{},[58,367,368],{},"TypeScript has become the de facto standard for frontend development",[58,370,371],{},"Vite has emerged as the predominant build tool",[58,373,374],{},"React maintains its position as the most widely used frontend framework",[338,376],{},[11,378,379,380,385,386,391,392,385,395,398],{},"Thorsten Ball had a great ",[79,381,384],{"href":382,"rel":383},"https:\u002F\u002Fregisterspill.thorstenball.com\u002Fp\u002Fin-conversation-david-albert",[83],"conversation with David Albert",", the co-founder of ",[79,387,390],{"href":388,"rel":389},"https:\u002F\u002Fwww.recurse.com",[83],"the Recurse Center",". Their discussion covered various topics, including the nature of learning, whether learning should be enjoyable, and the decision-making process behind building custom tools.\nThorsten Ball had a great ",[79,393,384],{"href":382,"rel":394},[83],[79,396,390],{"href":388,"rel":397},[83],". Their discussion covered various topics, including the nature of learning, whether learning should be enjoyable, and the decision-making process behind building custom tools.",{"title":15,"searchDepth":16,"depth":16,"links":400},[],"Weekly Notes of the week 44 of 2024. Results for the State of CSS and State of Frontend 2024 surveys are in.",{"image":403},{"url":15,"alt":15},"\u002Fblog\u002Fnotes-week-44","2024-11-02",{"title":319,"description":401},"blog\u002Fnotes-week-44",[409,314,410,115],"notes","CSS","2WI5hNRSvlysJjDz4uDovsqn8Jt24xSTspf4omMZ6X8",{"id":413,"title":414,"author":21,"body":415,"description":467,"extension":19,"intro":6,"meta":468,"name":6,"navigation":22,"path":470,"pubDate":471,"role":6,"seo":472,"stem":473,"tags":474,"__hash__":477},"content\u002Fblog\u002Fnotes-week-43.md","Weekly Notes 43\u002F24",{"type":8,"value":416,"toc":465},[417,425,428,433,444,446,455,457],[11,418,419,424],{},[79,420,423],{"href":421,"rel":422},"https:\u002F\u002Fsubstack.com\u002Fhome\u002Fpost\u002Fp-150382437",[83],"Adam Ard described"," an interesting point about Management. There is a continuum between no managers at all and having everyone be a manager. The interesting point is, that having no mangers is effectively the same as having only managers, because everyone needs to do management. Therefore, Founder Mode, described by Paul Graham, isn't that bad at all. If you have only one manager or benevolent dictator (as in open source projects), that means there is less bureaucracy and less surveillance - because how should one manager watch after everyone? The management role then becomes more about company culture than about micromanaging developers.",[11,426,427],{},"Also, there were two interesting quotes:",[87,429,430],{},[11,431,432],{},"“It doesn't make sense to hire smart people and then tell them what to to , We hire smart people so they can tell us what to do.” -Steve Jobs",[87,434,435],{},[11,436,437,438,443],{},"Don't listen to marketing people or designers or product managers just because of their job titles. If they have good ideas, use them, but it's up to you to decide; software has to be designed by hackers who understand design, not designers who know a little about software.\n(",[79,439,442],{"href":440,"rel":441},"https:\u002F\u002Fpaulgraham.com\u002Froad.html",[83],"Source",")",[338,445],{},[11,447,448,449,454],{},"I just finished reading ",[79,450,453],{"href":451,"rel":452},"https:\u002F\u002Fwww.susandavid.com\u002Fbook\u002F",[83],"Emotional Agility - Get Unstuck, Embrace Change and Thrive in Work and Life",". One metaphor that stood out to me was the following: It is not helpful to set yourself unrealistic goals for your life, like being always happy, never getting hurt, never getting stressed, or never making mistakes. Do you know who the only people are that never make mistakes? Dead people. So accept yourself, but also life, as what it is: a mess with good, bad, and ugly parts, but also with parts that are beautiful and fun as hell.",[338,456],{},[11,458,459,464],{},[79,460,463],{"href":461,"rel":462},"https:\u002F\u002Fnabeelqu.co\u002Freflections-on-palantir",[83],"Nabeel S. Qureshi post on Palantir"," is pretty interesting. Especially the concept of \"forward deployed engineers\" who work on site for companies to develop software products that those companies need to handle a specific problems, and engineers back at Palantir who take the lessons learned in those projects and build core products that can be sold to other companies. Also, the discussion of working for companies or organizations that handle morally thorny areas like defense was interesting.",{"title":15,"searchDepth":16,"depth":16,"links":466},[],"Weekly notes of the week 43\u002F2024 about how many managers a company should have, Emotional Agility and Palantir.",{"image":469},{"url":15,"alt":15},"\u002Fblog\u002Fnotes-week-43","2024-10-28",{"title":414,"description":467},"blog\u002Fnotes-week-43",[409,314,475,476],"emotional agility","management","suHVEOziYKt9R8rWwvfTGbvRqks98Wq-jMbuMKiuuGE",[479,498,517],{"id":480,"title":481,"body":482,"description":486,"extension":19,"meta":487,"navigation":22,"path":488,"repo":6,"seo":489,"status":490,"stem":491,"tech":492,"url":496,"__hash__":497},"projects\u002Fprojects\u002Fportfolio.md","Portfolio Site",{"type":8,"value":483,"toc":484},[],{"title":15,"searchDepth":16,"depth":16,"links":485},[],"My personal portfolio built with Nuxt, featuring a blog and projects section.",{},"\u002Fprojects\u002Fportfolio",{"title":481,"description":486},"active","projects\u002Fportfolio",[493,494,495],"Nuxt","Vue","TypeScript","https:\u002F\u002Fd9r.dev","t6KQFr3MeVqFREvNaKVXpzc6A2l1IIreUpHrQCUyUeg",{"id":499,"title":500,"body":501,"description":505,"extension":19,"meta":506,"navigation":22,"path":507,"repo":508,"seo":509,"status":490,"stem":510,"tech":511,"url":515,"__hash__":516},"projects\u002Fprojects\u002Ftime-rs.md","time-rs",{"type":8,"value":502,"toc":503},[],{"title":15,"searchDepth":16,"depth":16,"links":504},[],"A fast, lightweight TUI timer application written in Rust for tracking time from the terminal.",{},"\u002Fprojects\u002Ftime-rs","https:\u002F\u002Fgithub.com\u002Fd9r-dev\u002Ftime-rs",{"title":500,"description":505},"projects\u002Ftime-rs",[512,513,514],"Rust","ratatui","SQLite","https:\u002F\u002Fcrates.io\u002Fcrates\u002Ftime-rs","r1WGUX0Nod6NBcPlj-K30FnCJS3En0aKaEFbiqjnsB8",{"id":518,"title":519,"body":520,"description":524,"extension":19,"meta":525,"navigation":22,"path":526,"repo":527,"seo":528,"status":490,"stem":529,"tech":530,"url":534,"__hash__":535},"projects\u002Fprojects\u002Fwhat-the-genre.md","What The Genre",{"type":8,"value":521,"toc":522},[],{"title":15,"searchDepth":16,"depth":16,"links":523},[],"Search Spotify for the genre of artists. Find out what genre your favorite artists belong to.",{},"\u002Fprojects\u002Fwhat-the-genre","https:\u002F\u002Fgithub.com\u002Fd9r-dev\u002Fwhat-the-genre",{"title":519,"description":524},"projects\u002Fwhat-the-genre",[495,531,532,533],"Hono","Bun","Spotify API","https:\u002F\u002Fwtg.d9r.dev","KhC4_c8EBZe9WjUGjymNm1q2fOzPcncU5Lbnno5oJRs",1775933921680]