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&#039;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&#039;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&amp;referrer=twitter-cards" /><meta name="twitter:app:url:ipad" content="tumblr://x-callback-url/blog?blogName=ramrachum&amp;referrer=twitter-cards" /><meta name="twitter:app:url:googleplay" content="tumblr://x-callback-url/blog?blogName=ramrachum&amp;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> &middot; </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&rsquo;s a tool for machine learning researchers to explore social dynamics. </p><p> It&rsquo;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&rsquo;s called GridRoyale. </p><p> The game mechanics, Python framework and visualization are pretty good&ndash; The core algorithm sucks, and I&rsquo;m waiting for someone better than me to come and write a new one. If that&rsquo;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&rsquo;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&rsquo;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&rsquo;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> &middot; </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="{&quot;Components&quot;:{&quot;PostActivity&quot;:[],&quot;NotificationPoller&quot;:{&quot;messaging_keys&quot;:[],&quot;token&quot;:&quot;&quot;,&quot;inbox_unread&quot;:0},&quot;DesktopDashboardLogo&quot;:{&quot;animations&quot;:[[&quot;https:\/\/assets.tumblr.com\/images\/logo\/hover-animations\/1.png?_v=161861acded461bb6e995593a3bae835&quot;,&quot;https:\/\/assets.tumblr.com\/images\/logo\/hover-animations\/1@2x.png?_v=496a774637302a598c851381d00009b0&quot;]]},&quot;TumblelogIframe&quot;:{&quot;unified&quot;:true,&quot;variant&quot;:null,&quot;isCompact&quot;:true,&quot;tumblelogBundleSrc&quot;:&quot;https:\/\/assets.tumblr.com\/client\/prod\/standalone\/tumblelog\/index.build.js?_v=fe23fd6389c5ebd8c99ea80f0b1c77ba&quot;,&quot;tumblelogName&quot;:&quot;ramrachum&quot;,&quot;isLoggedIn&quot;:false,&quot;isFriend&quot;:false,&quot;formKey&quot;:&quot;&quot;,&quot;canSubscribe&quot;:false,&quot;isSubscribed&quot;:false,&quot;tumblelogTitle&quot;:&quot;Ram&#039;s blog&quot;,&quot;tumblelogAvatar&quot;:&quot;https:\/\/64.media.tumblr.com\/avatar_75e6567818f1_64.pnj&quot;,&quot;tumblelogAvatar128&quot;:&quot;https:\/\/64.media.tumblr.com\/avatar_75e6567818f1_128.pnj&quot;,&quot;tumblelogHost&quot;:&quot;https:\/\/blog.ram.rachum.com&quot;,&quot;hasCustomDomain&quot;:true,&quot;isOptica&quot;:false,&quot;isCustomTheme&quot;:true,&quot;themeHeaderImage&quot;:&quot;https:\/\/64.media.tumblr.com\/77701f37d660d3b52309f71161a46ac3\/f6d32d534cd8ab3b-4d\/s2048x3072\/0957cddb20106509360bd3fff2fbf796da8113c9.png&quot;,&quot;themeBackgroundColor&quot;:&quot;#F6F6F6&quot;,&quot;themeTitleColor&quot;:&quot;#444444&quot;,&quot;themeAccentColor&quot;:&quot;#529ECC&quot;,&quot;brag&quot;:false,&quot;canShowAd&quot;:true,&quot;isPremium&quot;:false,&quot;showLrecAds&quot;:false,&quot;showStickyLrecBackfill&quot;:false,&quot;showGeminiAds&quot;:false,&quot;geminiSectionCodeDesktop&quot;:&quot;a10bca9c-0c5d-4a02-ab13-14ab8513d81d&quot;,&quot;geminiSectionCodeMobile&quot;:&quot;ced63809-b609-4aca-96a0-abc099acba6b&quot;,&quot;currentPageType&quot;:&quot;blog&quot;,&quot;currentPage&quot;:1,&quot;searchQuery&quot;:&quot;&quot;,&quot;tag&quot;:&quot;&quot;,&quot;query&quot;:&quot;&quot;,&quot;chrono&quot;:false,&quot;postId&quot;:&quot;&quot;,&quot;src&quot;:&quot;https:\/\/blog.ram.rachum.com\/&quot;,&quot;postUrl&quot;:&quot;&quot;,&quot;openInPeeprUrl&quot;:&quot;https:\/\/www.tumblr.com\/ramrachum&quot;,&quot;isBlocked&quot;:null,&quot;isAdmin&quot;:false,&quot;lookupButtonUrl&quot;:&quot;&quot;,&quot;showSpamButton&quot;:false,&quot;showRootPostButton&quot;:false,&quot;rootPostUrl&quot;:&quot;&quot;,&quot;showRadarPostButton&quot;:false,&quot;radarKeys&quot;:&quot;&quot;,&quot;isUniblocked&quot;:false,&quot;isNsfw&quot;:false,&quot;isAdult&quot;:false,&quot;isSpam&quot;:false,&quot;isPrimaryBlog&quot;:false,&quot;canEdit&quot;:false,&quot;canReblogSelf&quot;:false,&quot;showLikeButton&quot;:false,&quot;showReblogButton&quot;:false,&quot;reblogUrl&quot;:&quot;&quot;,&quot;showMessagingButton&quot;:false,&quot;loginCheckIframeSrc&quot;:&quot;https:\/\/assets.tumblr.com\/assets\/html\/iframe\/login_check.html?_v=3de94a184d600617102ddd5b48fb36e9&quot;,&quot;appInstallUrls&quot;:{&quot;android&quot;:&quot;https:\/\/play.google.com\/store\/apps\/details?id=com.tumblr\u0026referrer=utm_source%3Dtumblr%26utm_medium%3Diframe%26utm_campaign%3Dbn_continue_or_install_cta&quot;,&quot;ios&quot;:&quot;https:\/\/apps.apple.com\/app\/apple-store\/id305343404?pt=212308\u0026ct=bn_continue_or_install_cta\u0026mt=8&quot;},&quot;appOpenReferrer&quot;:&quot;bn_header_open_btn&quot;,&quot;isShowSearch&quot;:true,&quot;supplyLogging&quot;:[],&quot;secondsSinceLastActivity&quot;:-1,&quot;installUrlOpenFailed&quot;:{&quot;android&quot;:&quot;https:\/\/play.google.com\/store\/apps\/details?id=com.tumblr\u0026referrer=utm_source%3Dtumblr%26utm_medium%3Diframe%26utm_campaign%3Dbn_header_app_open_failed&quot;,&quot;ios&quot;:&quot;https:\/\/apps.apple.com\/app\/apple-store\/id305343404?pt=212308\u0026ct=bn_header_app_open_failed\u0026mt=8&quot;},&quot;loginWallVariant&quot;:&quot;small_center&quot;},&quot;CommunityLabels&quot;:{&quot;has_community_label&quot;:false,&quot;is_single&quot;:false,&quot;redirect_target&quot;:null}},&quot;Flags&quot;:{&quot;features&quot;:&quot;eyJmaWx0ZXJfbnNmdyI6dHJ1ZSwibW9iaWxlX3dlYl9nYXRlIjp0cnVlLCJzYWZlX21vZGUiOnRydWUsInNhZmVfbW9kZV9lbmFibGVkIjp0cnVlLCJrZXljb21tYW5kX2F1dG9fcGFnaW5hdGUiOnRydWUsImxvZ2dlZF9vdXRfc2VhcmNoIjp0cnVlLCJrcmFrZW5fd2ViX2xvZ2dpbmdfbGlicmFyeSI6dHJ1ZSwibGl2ZXBob3Rvc193ZWIiOnRydWUsInVzZXJfdGFnX2ZpbHRlcmluZyI6dHJ1ZSwic2FmZV9tb2RlX293bl9wb3N0Ijp0cnVlLCJwcm9qZWN0X3hfYXBwZWFsIjp0cnVlLCJtb2JpbGVfd2ViX3Bob3Rvc2V0cyI6dHJ1ZSwiaGlkZV9kZWZhdWx0X2hlYWRlcnNfYmxvZ19jYXJkcyI6dHJ1ZSwibm90aWZpY2F0aW9uX3JlcGx5X2xpbmtfdG9fbm90ZXMiOnRydWUsInR5cGluZ19pbmRpY2F0b3Jfd3JpdGUiOnRydWUsInR1bWJscl92aWRlb19zcG9uc29yZWRfZGF5Ijp0cnVlLCJjYXB0Y2hhOnVzZV9yZWNhcHRjaGEyIjp0cnVlLCJsaXR0bGVfc2lzdGVyIjp0cnVlLCJsb2dfbGFkeSI6dHJ1ZSwicmVkcG9wX3Bvc3RfZm9ybV9tb2JpbGVfY3JlYXRlIjp0cnVlLCJsZWdhY3lfcG9zdF9mb3JtX2J1dHRvbnNfbGlua190b19yZWRwb3AiOnRydWUsInNob3dfdHNwX2NsaWNrX3Rocm91Z2hfdG9nZ2xlIjp0cnVlLCJkYXJsYV9hZF9mZWVkYmFjayI6dHJ1ZSwic3RhdHVzX2luZGljYXRvciI6dHJ1ZSwiY29udmVyc2F0aW9uYWxfbm90aWZpY2F0aW9ucyI6dHJ1ZSwiZGlzYWJsZV95YWhvb19iX2Nvb2tpZSI6dHJ1ZSwibGl2ZXBob3RvcyI6dHJ1ZSwiY29tbXVuaXR5X2xhYmVscyI6dHJ1ZX0=&quot;},&quot;Context&quot;:{&quot;name&quot;:&quot;default&quot;,&quot;time&quot;:1741980070000,&quot;userinfo&quot;:{&quot;primary&quot;:&quot;&quot;,&quot;name&quot;:&quot;&quot;,&quot;channels&quot;:[]},&quot;hosts&quot;:{&quot;assets_host&quot;:&quot;https:\/\/assets.tumblr.com&quot;,&quot;secure_assets_host&quot;:&quot;https:\/\/assets.tumblr.com&quot;,&quot;www_host&quot;:&quot;https:\/\/www.tumblr.com&quot;,&quot;secure_www_host&quot;:&quot;https:\/\/www.tumblr.com&quot;,&quot;embed_host&quot;:&quot;https:\/\/embed.tumblr.com&quot;,&quot;safe_host&quot;:&quot;https:\/\/safe.txmblr.com&quot;,&quot;platform_host&quot;:&quot;https:\/\/platform.tumblr.com&quot;},&quot;language&quot;:&quot;en_US&quot;,&quot;language_simple&quot;:&quot;en&quot;,&quot;assets&quot;:&quot;https:\/\/assets.tumblr.com\/client\/prod\/&quot;},&quot;Translations&quot;:{&quot;%1$sReport %2$s&#039;s post?%3$sIf it violates our user guidelines, we&#039;ll remove it.%4$s&quot;:&quot;%1$sReport %2$s&#039;s reblog?%3$sIf it violates our user guidelines, we&#039;ll remove it.%4$s&quot;,&quot;%1$sReport %2$s&#039;s reply?%3$sIf it violates our user guidelines, we&#039;ll remove it.%4$s&quot;:&quot;%1$sReport %2$s&#039;s reblog?%3$sIf it violates our user guidelines, we&#039;ll remove it.%4$s&quot;,&quot;%1$sDelete your tip??%2$s&quot;:&quot;%1$sDelete your tip?%2$s&quot;,&quot;Deleting your tip&quot;:&quot;Deleting your tip will only remove it from the replies tab and notes. %1$sYou won&#039;t receive a refund of your tip.%2$s For further help contact %3$sTumblr Support%4$s.&quot;}}"></noscript><script src="https://assets.tumblr.com/client/prod/standalone/tumblelog/index.build.js?_v=fe23fd6389c5ebd8c99ea80f0b1c77ba"></script></body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10