CINXE.COM
Ram’s blog
<!DOCTYPE html><script>var __pbpa = true;</script><script>var translated_warning_string = 'Warning: Never enter your Tumblr password unless \u201chttps://www.tumblr.com/login\u201d\x0ais the address in your web browser.\x0a\x0aYou should also see a green \u201cTumblr, Inc.\u201d identification in the address bar.\x0a\x0aSpammers and other bad guys use fake forms to steal passwords.\x0a\x0aTumblr will never ask you to log in from a user\u2019s blog.\x0a\x0aAre you absolutely sure you want to continue?';</script><script type="text/javascript" language="javascript" src="https://assets.tumblr.com/assets/scripts/pre_tumblelog.js?_v=b9f848c06fcba7eaf305d4a7cb7a1b98"></script><!-- All content on this website is copyright 1986-2015 Ram Rachum. This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License, with attribution to "Ram Rachum at ram.rachum.com" including link to https://ram.rachum.com or https://blog.ram.rachum.com . To view a copy of this license, visit: https://creativecommons.org/licenses/by-sa/3.0/ --> <!DOCTYPE html> <html lang="en"> <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# blog: http://ogp.me/ns/blog#"> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title> Ram’s blog </title> <meta name="keywords" content='Ram,Rachum,Python,Django'> <meta name="theme-color" content="#000000"> <style>figure{margin:0}.tmblr-iframe{position:absolute}.tmblr-iframe.hide{display:none}.tmblr-iframe--amp-cta-button{visibility:hidden;position:fixed;bottom:10px;left:50%;transform:translateX(-50%);z-index:100}.tmblr-iframe--amp-cta-button.tmblr-iframe--loaded{visibility:visible;animation:iframe-app-cta-transition .2s ease-out}</style><link rel="stylesheet" media="screen" href="https://assets.tumblr.com/client/prod/standalone/blog-network-npf/index.build.css?_v=f085dde138e244526309d4673db67b4c"><link rel="alternate" type="application/rss+xml" title="RSS" href="https://feeds.feedburner.com/RamRachumsBlog"> <link href="https://ram.rachum.com/evilcorp/css/fonts.css" media="screen" rel="stylesheet"> <link href="https://fonts.googleapis.com/css?family=Seaweed+Script" rel="stylesheet" type="text/css"> <link rel="icon" href="https://ram.rachum.com/evilcorp/favicon.ico" type="image/x-icon"> <link rel="shortcut" icon href="https://ram.rachum.com/evilcorp/favicon.ico" type="image/x-icon"> <link href="https://ram.rachum.com/evilcorp/bootstrap/css/bootstrap.min.css" rel="stylesheet"> <link href="https://ram.rachum.com/evilcorp/bootstrap/css/bootstrap-theme.min.css" rel="stylesheet"> <link rel="stylesheet" href="https://ram.rachum.com/evilcorp/magnific-popup/magnific-popup.css"> <link href="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.css" type="text/css" rel="stylesheet"> <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> <link href="https://ram.rachum.com/evilcorp/css/style.css" type="text/css" rel="stylesheet"> <link rel="alternate" href="android-app://com.tumblr/tumblr/x-callback-url/blog?blogName=ramrachum" /><link rel="alternate" href="ios-app://305343404/tumblr/x-callback-url/blog?blogName=ramrachum" /><script defer type="application/javascript" id="bilmur" data-provider="tumblr.com" data-service="blognetwork" data-customproperties='{"theme": ""}' nonce="nxg8JLTiYgRFgyGa2NlqndjUkk" src="https://s0.wp.com/wp-content/js/bilmur.min.js?m=202511" ></script><script src="https://assets.tumblr.com/assets/scripts/tumblelog_post_message_queue.js?_v=a8fadfa499d8cb7c3f8eefdf0b1adfdd"></script><meta name="keywords" content="planetpython,python,open-source,projects,machine learning" /><!-- BEGIN TUMBLR FACEBOOK OPENGRAPH TAGS --><!-- If you'd like to specify your own Open Graph tags, define the og:url and og:title tags in your theme's HTML. --><!-- Read more: http://ogp.me/ --><meta property="fb:app_id" content="48119224995" /><meta property="og:site_name" content="Tumblr" /><meta property="og:title" content="Ram's blog" /><meta property="og:url" content="https://blog.ram.rachum.com/?og=1" /><meta property="og:description" content="" /><meta property="og:type" content="profile" /><meta property="og:image" content="https://64.media.tumblr.com/avatar_75e6567818f1_128.pnj" /><meta property="al:ios:url" content="tumblr://x-callback-url/blog?blogName=ramrachum" /><meta property="al:ios:app_name" content="Tumblr" /><meta property="al:ios:app_store_id" content="305343404" /><meta property="al:android:url" content="tumblr://x-callback-url/blog?blogName=ramrachum" /><meta property="al:android:app_name" content="Tumblr" /><meta property="al:android:package" content="com.tumblr" /><!-- END TUMBLR FACEBOOK OPENGRAPH TAGS --><!-- TWITTER TAGS --><meta charset="utf-8"><meta name="twitter:site" content="tumblr" /><meta name="twitter:card" content="summary" /><meta name="twitter:description" content="" /><meta name="twitter:title" content="Ram's blog" /><meta name="twitter:creator" content="coolRR" /><meta name="twitter:app:name:iphone" content="Tumblr" /><meta name="twitter:app:name:ipad" content="Tumblr" /><meta name="twitter:app:name:googleplay" content="Tumblr" /><meta name="twitter:app:id:iphone" content="305343404" /><meta name="twitter:app:id:ipad" content="305343404" /><meta name="twitter:app:id:googleplay" content="com.tumblr" /><meta name="twitter:app:url:iphone" content="tumblr://x-callback-url/blog?blogName=ramrachum&referrer=twitter-cards" /><meta name="twitter:app:url:ipad" content="tumblr://x-callback-url/blog?blogName=ramrachum&referrer=twitter-cards" /><meta name="twitter:app:url:googleplay" content="tumblr://x-callback-url/blog?blogName=ramrachum&referrer=twitter-cards" /><!-- GOOGLE CAROUSEL --><script type="application/ld+json"> {"@type":"ItemList","url":"https:\/\/blog.ram.rachum.com","itemListElement":[{"@type":"ListItem","position":1,"url":"https:\/\/blog.ram.rachum.com\/post\/631666550733225984\/gridroyale-a-life-simulation-for-exploring"},{"@type":"ListItem","position":2,"url":"https:\/\/blog.ram.rachum.com\/post\/629952546416541696\/live-coding-a-music-synthesizer"},{"@type":"ListItem","position":3,"url":"https:\/\/blog.ram.rachum.com\/post\/624430307333079040\/quick-project-guitar-tuning-peg-turner"}],"@context":"http:\/\/schema.org"}</script><link rel="canonical" href="https://blog.ram.rachum.com" /></head> <body> <div class="white-popup mfp-hide" id="share_box"> <ul> <li> <div data-layout="button_count" data-action="like" data-show-faces="true" data-share="true" class="fb-like"></div> </li> <li> <a href="https://twitter.com/share" class="twitter-share-button" data-via="coolRR" data-size="large" data-dnt="true">Tweet</a> </li> <li> <g:plusone></g:plusone> </li> </ul> </div> <div class="white-popup mfp-hide" id="subscribe_box"> <p> Choose wisely: </p> <ul> <li> <a href="https://feedburner.google.com/fb/a/mailverify?uri=RamRachumsBlog" target="_blank"> Subscribe to get <b> all posts </b> from Ram’s blog by email </a> </li> <li> <a href="https://feedburner.google.com/fb/a/mailverify?uri=RamRachumsBlog/planetpython" target="_blank"> Subscribe to get <b> only tech-related posts </b> from Ram’s blog by email </a> </li> </ul> </div> <div class='width_container index_page' id="everything"> <div width="100%" id="top_bar"> <h1> <a href="/"> Ram's blog </a> </h1> <div id="filler"></div> <div align="right" id="top_links"> <span class="small_hidden"> <a href="#" data-mfp-src="#subscribe_box" class="open-popup-link" id="subscribe_button">Subscribe by email</a> · </span> <a href="/archive">Archive</a> </div> </div> <div class="width_container width_breaker"> <h2 class="index_h2"> <a href="https://blog.ram.rachum.com/post/631666550733225984/gridroyale-a-life-simulation-for-exploring"> GridRoyale - A life simulation for exploring social dynamics </a> </h2> <h2><a href="#"> GridRoyale - A life simulation for exploring social dynamics </a></h2><p> Another day, another project :) </p><div class="center_image_container"><a href="https://github.com/cool-RR/grid_royale"><figure class="tmblr-full" data-orig-height="768" data-orig-width="600" data-orig-src="https://i.imgur.com/pmxEKnR.gif"><img src="https://64.media.tumblr.com/8af80b8c19135ba8737087221a718bff/f154f7bae512b079-30/s500x750/28febfdb109d0c41bf1df86612609343fc109a4c.gifv" data-orig-height="768" data-orig-width="600" data-orig-src="https://i.imgur.com/pmxEKnR.gif" width="500" height="640" alt="image" /></figure></a></div><p> This is a project that I wanted to do for years. I finally had the opportunity to do it. <a href="https://github.com/cool-RR/grid_royale"> Check out the GridRoyale readme on GitHub for more details and a live demo. </a></p><p> GridRoyale is a life simulation. It’s a tool for machine learning researchers to explore social dynamics. </p><p> It’s similar to Game of Life or GridWorld, except I added game mechanics to encourage the players to behave socially. These game mechanics are similar to those in the battle royale genre of computer games, which is why it’s called GridRoyale. </p><p> The game mechanics, Python framework and visualization are pretty good– The core algorithm sucks, and I’m waiting for someone better than me to come and write a new one. If that’s you, please open a pull request. </p> <div class="post_tags"> <a href="/tagged/planetpython" class="span"> #planetpython </a> <a href="/tagged/python" class="span"> #python </a> <a href="/tagged/open-source" class="span"> #open-source </a> <a href="/tagged/projects" class="span"> #projects </a> <a href="/tagged/machine learning" class="span"> #machine learning </a> <a href="/tagged/reinforcement learning" class="span"> #reinforcement learning </a> </div> <hr> <h2 class="index_h2"> <a href="https://blog.ram.rachum.com/post/629952546416541696/live-coding-a-music-synthesizer"> Live-coding a music synthesizer </a> </h2> <h2><a href="#"> Live-coding a music synthesizer </a></h2><p> After so much work and waiting, the video of my EuroPython talk is <a href="https://www.youtube.com/watch?v=SSyQ0kRHzis">finally released!</a></p><div class="center_image_container"><iframe width="560" height="315" src="https://www.youtube.com/embed/SSyQ0kRHzis" frameborder="0" allowfullscreen="allowfullscreen"></iframe></div><p> This is a fun live-coding session using <a href="https://numpy.org/">NumPy</a> and <a href="https://github.com/spatialaudio/python-sounddevice">SoundDevice.</a> The goal of this talk is to make the computer produce realistic-sounding instrument sounds, using nothing but math. </p><p> The talk starts with creating a simple sound using a sine wave. We gradually make it sound more like a real instrument, learning a little bit about music theory on the way. We add features one-by-one until by the end of the talk, we hear our synthesizer play a piece of classical music. </p> <div class="post_tags"> <a href="/tagged/python" class="span"> #python </a> <a href="/tagged/planetpython" class="span"> #planetpython </a> <a href="/tagged/europython" class="span"> #europython </a> <a href="/tagged/talks" class="span"> #talks </a> <a href="/tagged/open-source" class="span"> #open-source </a> </div> <hr> <h2 class="index_h2"> <a href="https://blog.ram.rachum.com/post/624430307333079040/quick-project-guitar-tuning-peg-turner"> Quick project: Guitar tuning peg turner </a> </h2> <h2><a href="#"> Quick project: Guitar tuning peg turner </a></h2><p> Here’s a cute 3D printing I did on a whim a couple of days ago. </p><p> I wanted to change the strings on my acoustic bass guitar, so I’ll have crisp sound on my upcoming talk <a href="https://ep2020.europython.eu/talks/4WLzSf3-live-coding-a-music-synthesizer/">Live-coding a music synthesizer</a> on EuroPython 2020. Do watch it, or watch the YouTube video after it’s released. </p><p class="read_more_container"><a href="https://blog.ram.rachum.com/post/624430307333079040/quick-project-guitar-tuning-peg-turner" class="read_more">Keep reading</a></p> <hr> <div id="bio"> <table> <tr> <td id="bio_picture"> <a href="https://ram.rachum.com"> <img src='https://ram.rachum.com/evilcorp/images/RamRachum.png' width="60" height="60"></img> </a> </td> <td id="bio_text"> <div id="bio_name"> <a href="https://ram.rachum.com"> Ram Rachum </a> </div> <div id="bio_description"> <p> I'm a software developer based in Israel, specializing in the Python programming language. I write about technology, programming, startups, Python, and any other thoughts that come to my mind. </p> <p> I'm sometimes available for <a href='https://chipmunkdev.com'>freelance work in Python and Django</a>. My expertise is in developing a product from scratch. </p> </div> </td> </tr> </table> <hr> </div> <p class="paginate"> Page 1 of 36 <b> · </b> <a href="/page/2">Older posts</a> </p> </div> <div id="fb-root"></div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="https://ram.rachum.com/evilcorp/bootstrap/js/bootstrap.min.js"></script> <script src="https://ram.rachum.com/evilcorp/magnific-popup/jquery.magnific-popup.js"></script> <script type="text/javascript" src="//www.googleadservices.com/pagead/conversion.js"></script> <script src="https://apis.google.com/js/platform.js" async defer></script> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/run_prettify.js"></script> <script type="text/javascript"> /////////////////////////////////////////////////////////////////////// // // // Hide Header on on scroll down var didScroll; var lastScrollTop = 0; var delta = 5; var navbarHeight = $('#top_bar').outerHeight(); $(window).scroll(function(event){ didScroll = true; }); setInterval(function() { if (didScroll) { hasScrolled(); didScroll = false; } }, 250); function hasScrolled() { var st = $(this).scrollTop(); // Make sure they scroll more than delta if(Math.abs(lastScrollTop - st) <= delta) return; // If they scrolled down and are past the navbar, add class .nav-up. // This is necessary so you never see what is "behind" the navbar. if (st > lastScrollTop && st > navbarHeight){ // Scroll Down $('#top_bar').addClass('up'); } else { // Scroll Up if(st + $(window).height() < $(document).height()) { $('#top_bar').removeClass('up'); } } lastScrollTop = st; } // // /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// // // $('#share_button').magnificPopup({ type: 'inline', midClick: true, callbacks: { open: function() { $('#everything').addClass('blurred'); }, close: function() { $('#everything').removeClass('blurred'); } } }); $('#subscribe_button').magnificPopup({ type: 'inline', midClick: true, callbacks: { open: function() { $('#everything').addClass('blurred'); }, close: function() { $('#everything').removeClass('blurred'); } } }); // // /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// // // // Facebook window.fbAsyncInit = function() { FB.init({ appId : '689338864527785', xfbml : true, version : 'v2.3' }); }; (function(d, s, id){ var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) {return;} js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_US/sdk.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); // // /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// // // // Twitter !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs'); // // /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// // // // Google Analytics (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-1136525-6', 'auto'); ga('send', 'pageview'); // // /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// // // // Making bands be bands, but only on post pages relevant_bands = $('#everything.post_page .band_image_container') relevant_bands.each(function(index) { band = this; $(band).css('padding-top', '20px'); $(band).css('padding-bottom', '20px'); attributes = band.attributes; for (var i = 0; i < attributes.length ; i++) { attribute = attributes[i]; match = attribute.name.match(/^data-band-(.*)$/) if (match == null) {continue;} css_property_name = match[1]; $(band).css(css_property_name, attribute.value) } }); // // /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// // // candidate_paragraphs = $('.width_container > p, .width_container > blockquote') for (var i = 0; i < candidate_paragraphs.length ; i++) { candidate_paragraph = candidate_paragraphs[i]; if ((candidate_paragraph.textContent[0] == '"') || (candidate_paragraph.textContent[0] == '“')) { $(candidate_paragraph).addClass('starts_with_double_quote'); } } // // /////////////////////////////////////////////////////////////////////// </script> </div> <iframe scrolling="no" width="1" height="1" frameborder="0" style="background-color:transparent; overflow:hidden; position:absolute; top:0; left:0; z-index:9999;" id="ga_target"></iframe><script type="text/javascript"> (function(){ var analytics_frame = document.getElementById('ga_target'); var analytics_iframe_loaded; var user_logged_in; var blog_is_nsfw = 'No'; var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent"; var eventer = window[eventMethod]; var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message"; eventer(messageEvent,function(e) { var message = (e.data && e.data.split) ? e.data.split(';') : ''; switch (message[0]) { case 'analytics_iframe_loaded': analytics_iframe_loaded = true; postCSMessage(); postGAMessage(); break; case 'user_logged_in': user_logged_in = message[1]; postGAMessage(); break; } }, false); analytics_frame.src = "https://assets.tumblr.com/analytics.html?_v=9f5febfd57a8a649c598d888f2d9e062#" + "https://blog.ram.rachum.com"; function postGAMessage() { if (analytics_iframe_loaded && user_logged_in) { var is_ajax = false; analytics_frame.contentWindow.postMessage(['tick_google_analytics', is_ajax, user_logged_in, blog_is_nsfw, '/?route=%2F'].join(';'), analytics_frame.src.split('/analytics.html')[0]); } } function postCSMessage() { COMSCORE = true; analytics_frame.contentWindow.postMessage('enable_comscore;' + window.location, analytics_frame.src.split('/analytics.html')[0]); } })(); </script><script type="text/javascript" nonce="nxg8JLTiYgRFgyGa2NlqndjUkk">!function(s){s.src='https://px.srvcs.tumblr.com/impixu?T=1741980070&J=eyJ0eXBlIjoidXJsIiwidXJsIjoiaHR0cDovL2Jsb2cucmFtLnJhY2h1bS5jb20vIiwicmVxdHlwZSI6MCwicm91dGUiOiIvIn0=&U=ECOAOGCKKI&K=7e7a9ee452f17fbeef9b2892b141fd97d813998c21b8fe36524cd75ea0bcf10e&R='.replace(/&R=[^&$]*/,'').concat('&R='+escape(document.referrer)).slice(0,2000).replace(/%.?.?$/,'');}(new Image());</script><noscript><img style="position:absolute;z-index:-3334;top:0px;left:0px;visibility:hidden;" src="https://px.srvcs.tumblr.com/impixu?T=1741980070&J=eyJ0eXBlIjoidXJsIiwidXJsIjoiaHR0cDovL2Jsb2cucmFtLnJhY2h1bS5jb20vIiwicmVxdHlwZSI6MCwicm91dGUiOiIvIiwibm9zY3JpcHQiOjF9&U=ECOAOGCKKI&K=daad9ef3f9a8e98aac35de85dced13bd8bd086cc1f070b655a7d16186128b15e&R="></noscript><script type="text/javascript" nonce="nxg8JLTiYgRFgyGa2NlqndjUkk">!function(s){s.src='https://px.srvcs.tumblr.com/impixu?T=1741980070&J=eyJ0eXBlIjoicG9zdCIsInVybCI6Imh0dHA6Ly9ibG9nLnJhbS5yYWNodW0uY29tLyIsInJlcXR5cGUiOjAsInJvdXRlIjoiLyIsInBvc3RzIjpbeyJwb3N0aWQiOiI2MzE2NjY1NTA3MzMyMjU5ODQiLCJibG9naWQiOjg1OTMzOCwic291cmNlIjozM30seyJwb3N0aWQiOiI2Mjk5NTI1NDY0MTY1NDE2OTYiLCJibG9naWQiOjg1OTMzOCwic291cmNlIjozM30seyJwb3N0aWQiOiI2MjQ0MzAzMDczMzMwNzkwNDAiLCJibG9naWQiOjg1OTMzOCwic291cmNlIjozM31dfQ==&U=MHHMOAHMHC&K=db6b1ed007e086da02c86a59e33163e7186b6717baea8d0e9c02c69ff5ba25f0&R='.replace(/&R=[^&$]*/,'').concat('&R='+escape(document.referrer)).slice(0,2000).replace(/%.?.?$/,'');}(new Image());</script><noscript><img style="position:absolute;z-index:-3334;top:0px;left:0px;visibility:hidden;" src="https://px.srvcs.tumblr.com/impixu?T=1741980070&J=eyJ0eXBlIjoicG9zdCIsInVybCI6Imh0dHA6Ly9ibG9nLnJhbS5yYWNodW0uY29tLyIsInJlcXR5cGUiOjAsInJvdXRlIjoiLyIsInBvc3RzIjpbeyJwb3N0aWQiOiI2MzE2NjY1NTA3MzMyMjU5ODQiLCJibG9naWQiOjg1OTMzOCwic291cmNlIjozM30seyJwb3N0aWQiOiI2Mjk5NTI1NDY0MTY1NDE2OTYiLCJibG9naWQiOjg1OTMzOCwic291cmNlIjozM30seyJwb3N0aWQiOiI2MjQ0MzAzMDczMzMwNzkwNDAiLCJibG9naWQiOjg1OTMzOCwic291cmNlIjozM31dLCJub3NjcmlwdCI6MX0=&U=MHHMOAHMHC&K=c69a61a753049bd3799e040556da606af823a4c6e9c0d1e607213b3a0c6bf85c&R="></noscript><noscript id="bootloader" data-bootstrap="{"Components":{"PostActivity":[],"NotificationPoller":{"messaging_keys":[],"token":"","inbox_unread":0},"DesktopDashboardLogo":{"animations":[["https:\/\/assets.tumblr.com\/images\/logo\/hover-animations\/1.png?_v=161861acded461bb6e995593a3bae835","https:\/\/assets.tumblr.com\/images\/logo\/hover-animations\/1@2x.png?_v=496a774637302a598c851381d00009b0"]]},"TumblelogIframe":{"unified":true,"variant":null,"isCompact":true,"tumblelogBundleSrc":"https:\/\/assets.tumblr.com\/client\/prod\/standalone\/tumblelog\/index.build.js?_v=fe23fd6389c5ebd8c99ea80f0b1c77ba","tumblelogName":"ramrachum","isLoggedIn":false,"isFriend":false,"formKey":"","canSubscribe":false,"isSubscribed":false,"tumblelogTitle":"Ram's blog","tumblelogAvatar":"https:\/\/64.media.tumblr.com\/avatar_75e6567818f1_64.pnj","tumblelogAvatar128":"https:\/\/64.media.tumblr.com\/avatar_75e6567818f1_128.pnj","tumblelogHost":"https:\/\/blog.ram.rachum.com","hasCustomDomain":true,"isOptica":false,"isCustomTheme":true,"themeHeaderImage":"https:\/\/64.media.tumblr.com\/77701f37d660d3b52309f71161a46ac3\/f6d32d534cd8ab3b-4d\/s2048x3072\/0957cddb20106509360bd3fff2fbf796da8113c9.png","themeBackgroundColor":"#F6F6F6","themeTitleColor":"#444444","themeAccentColor":"#529ECC","brag":false,"canShowAd":true,"isPremium":false,"showLrecAds":false,"showStickyLrecBackfill":false,"showGeminiAds":false,"geminiSectionCodeDesktop":"a10bca9c-0c5d-4a02-ab13-14ab8513d81d","geminiSectionCodeMobile":"ced63809-b609-4aca-96a0-abc099acba6b","currentPageType":"blog","currentPage":1,"searchQuery":"","tag":"","query":"","chrono":false,"postId":"","src":"https:\/\/blog.ram.rachum.com\/","postUrl":"","openInPeeprUrl":"https:\/\/www.tumblr.com\/ramrachum","isBlocked":null,"isAdmin":false,"lookupButtonUrl":"","showSpamButton":false,"showRootPostButton":false,"rootPostUrl":"","showRadarPostButton":false,"radarKeys":"","isUniblocked":false,"isNsfw":false,"isAdult":false,"isSpam":false,"isPrimaryBlog":false,"canEdit":false,"canReblogSelf":false,"showLikeButton":false,"showReblogButton":false,"reblogUrl":"","showMessagingButton":false,"loginCheckIframeSrc":"https:\/\/assets.tumblr.com\/assets\/html\/iframe\/login_check.html?_v=3de94a184d600617102ddd5b48fb36e9","appInstallUrls":{"android":"https:\/\/play.google.com\/store\/apps\/details?id=com.tumblr\u0026referrer=utm_source%3Dtumblr%26utm_medium%3Diframe%26utm_campaign%3Dbn_continue_or_install_cta","ios":"https:\/\/apps.apple.com\/app\/apple-store\/id305343404?pt=212308\u0026ct=bn_continue_or_install_cta\u0026mt=8"},"appOpenReferrer":"bn_header_open_btn","isShowSearch":true,"supplyLogging":[],"secondsSinceLastActivity":-1,"installUrlOpenFailed":{"android":"https:\/\/play.google.com\/store\/apps\/details?id=com.tumblr\u0026referrer=utm_source%3Dtumblr%26utm_medium%3Diframe%26utm_campaign%3Dbn_header_app_open_failed","ios":"https:\/\/apps.apple.com\/app\/apple-store\/id305343404?pt=212308\u0026ct=bn_header_app_open_failed\u0026mt=8"},"loginWallVariant":"small_center"},"CommunityLabels":{"has_community_label":false,"is_single":false,"redirect_target":null}},"Flags":{"features":"eyJmaWx0ZXJfbnNmdyI6dHJ1ZSwibW9iaWxlX3dlYl9nYXRlIjp0cnVlLCJzYWZlX21vZGUiOnRydWUsInNhZmVfbW9kZV9lbmFibGVkIjp0cnVlLCJrZXljb21tYW5kX2F1dG9fcGFnaW5hdGUiOnRydWUsImxvZ2dlZF9vdXRfc2VhcmNoIjp0cnVlLCJrcmFrZW5fd2ViX2xvZ2dpbmdfbGlicmFyeSI6dHJ1ZSwibGl2ZXBob3Rvc193ZWIiOnRydWUsInVzZXJfdGFnX2ZpbHRlcmluZyI6dHJ1ZSwic2FmZV9tb2RlX293bl9wb3N0Ijp0cnVlLCJwcm9qZWN0X3hfYXBwZWFsIjp0cnVlLCJtb2JpbGVfd2ViX3Bob3Rvc2V0cyI6dHJ1ZSwiaGlkZV9kZWZhdWx0X2hlYWRlcnNfYmxvZ19jYXJkcyI6dHJ1ZSwibm90aWZpY2F0aW9uX3JlcGx5X2xpbmtfdG9fbm90ZXMiOnRydWUsInR5cGluZ19pbmRpY2F0b3Jfd3JpdGUiOnRydWUsInR1bWJscl92aWRlb19zcG9uc29yZWRfZGF5Ijp0cnVlLCJjYXB0Y2hhOnVzZV9yZWNhcHRjaGEyIjp0cnVlLCJsaXR0bGVfc2lzdGVyIjp0cnVlLCJsb2dfbGFkeSI6dHJ1ZSwicmVkcG9wX3Bvc3RfZm9ybV9tb2JpbGVfY3JlYXRlIjp0cnVlLCJsZWdhY3lfcG9zdF9mb3JtX2J1dHRvbnNfbGlua190b19yZWRwb3AiOnRydWUsInNob3dfdHNwX2NsaWNrX3Rocm91Z2hfdG9nZ2xlIjp0cnVlLCJkYXJsYV9hZF9mZWVkYmFjayI6dHJ1ZSwic3RhdHVzX2luZGljYXRvciI6dHJ1ZSwiY29udmVyc2F0aW9uYWxfbm90aWZpY2F0aW9ucyI6dHJ1ZSwiZGlzYWJsZV95YWhvb19iX2Nvb2tpZSI6dHJ1ZSwibGl2ZXBob3RvcyI6dHJ1ZSwiY29tbXVuaXR5X2xhYmVscyI6dHJ1ZX0="},"Context":{"name":"default","time":1741980070000,"userinfo":{"primary":"","name":"","channels":[]},"hosts":{"assets_host":"https:\/\/assets.tumblr.com","secure_assets_host":"https:\/\/assets.tumblr.com","www_host":"https:\/\/www.tumblr.com","secure_www_host":"https:\/\/www.tumblr.com","embed_host":"https:\/\/embed.tumblr.com","safe_host":"https:\/\/safe.txmblr.com","platform_host":"https:\/\/platform.tumblr.com"},"language":"en_US","language_simple":"en","assets":"https:\/\/assets.tumblr.com\/client\/prod\/"},"Translations":{"%1$sReport %2$s's post?%3$sIf it violates our user guidelines, we'll remove it.%4$s":"%1$sReport %2$s's reblog?%3$sIf it violates our user guidelines, we'll remove it.%4$s","%1$sReport %2$s's reply?%3$sIf it violates our user guidelines, we'll remove it.%4$s":"%1$sReport %2$s's reblog?%3$sIf it violates our user guidelines, we'll remove it.%4$s","%1$sDelete your tip??%2$s":"%1$sDelete your tip?%2$s","Deleting your tip":"Deleting your tip will only remove it from the replies tab and notes. %1$sYou won't receive a refund of your tip.%2$s For further help contact %3$sTumblr Support%4$s."}}"></noscript><script src="https://assets.tumblr.com/client/prod/standalone/tumblelog/index.build.js?_v=fe23fd6389c5ebd8c99ea80f0b1c77ba"></script></body> </html>