Help
RSS
API
Feed
Maltego
Contact
Domain > aftnn.org
×
Welcome!
Right click nodes and scroll the mouse to navigate the graph.
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2012-06-08
109.74.206.242
(
ClassC
)
2024-09-11
66.6.44.4
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyServer: nginxDate: Wed, 11 Sep 2024 18:03:51 GMTContent-Type: text/htmlContent-Length: 162Connection: keep-aliveLocation: https://aftnn.org/ html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>nginx/center>/body>/html>
Port 443
HTTP/1.1 200 OKServer: nginxDate: Wed, 11 Sep 2024 18:03:51 GMTContent-Type: text/html; charsetUTF-8Content-Length: 49519Connection: keep-aliveVary: Accept-EncodingX-Rid: a70fe96d55ccdf6bf5606c62748dfb40P3p: CPTumblrs privacy policy is available here: https://www.tumblr.com/policy/en/privacyX-Xss-Protection: 1; modeblockX-Content-Type-Options: nosniffStrict-Transport-Security: max-age15552001X-Tumblr-User: aftrnoonX-Tumblr-Pixel-0: https://px.srvcs.tumblr.com/impixu?T1726077831&JeyJ0eXBlIjoidXJsIiwidXJsIjoiaHR0cDovL2FmdG5uLm9yZy8iLCJyZXF0eXBlIjowLCJyb3V0ZSI6Ii8ifQ&UEJHLHHMGPD&K25458b6443ad528600c0d58e7702255a4f4f57a758f884d72f20d4663d9a6937--https://px.srvcs.tumblr.com/impixu?T1726077831&JeyJ0eXBlIjoicG9zdCIsInVybCI6Imh0dHA6Ly9hZnRubi5vcmcvIiwicmVxdHlwZSI6MCwicm91dGUiOiIvIiwicG9zdHMiOlt7InBvc3RpZCI6IjE0Mzc1NjAxOTE0NyIsImJsb2dpZCI6NDQ2ODI5NzQsInNvdXJjZSI6MzN9LHsicG9zdGlkIjoiMTM3ODQzMDcwOTE3IiwiYmxvZ2lkIjo0X-Tumblr-Pixel-1: NDY4Mjk3NCwic291cmNlIjozM30seyJwb3N0aWQiOiIxMzA1NTMyOTgwODciLCJibG9naWQiOjQ0NjgyOTc0LCJzb3VyY2UiOjMzfSx7InBvc3RpZCI6IjEyOTI0MTY2ODY2NyIsImJsb2dpZCI6NDQ2ODI5NzQsInNvdXJjZSI6MzN9LHsicG9zdGlkIjoiNzk1NDcyODI3MzgiLCJibG9naWQiOjQ0NjgyOTc0LCJzb3VyY2UiOjMzfSx7InBvc3RpZCI6Ijc2NzQzODE5NTc1IiwiYmxvZ2lkIjo0NDY4Mjk3NCwic291cmNlIjozM30seyJwb3N0aWQiOiI3NTc4OTUzNjQyMiIsImJsb2dpZCI6NDQ2ODI5NzQsInNvdXJjZSI6MzN9LHsicG9zdGlkIjoiNzU3MzA3MzQzNTIiLCJibG9naWQiOjQ0NjgyOTc0LCJzb3VyY2UiOjMzfSx7InBvc3RpZCI6IjYwMjX-Tumblr-Pixel-2: YzMzIwMzg4IiwiYmxvZ2lkIjo0NDY4Mjk3NCwic291cmNlIjozM30seyJwb3N0aWQiOiI1MjM3MDA2Mjc4MCIsImJsb2dpZCI6NDQ2ODI5NzQsInNvdXJjZSI6MzN9XX0&UFKONDJAMEH&K4951b384d86ab63a14f86c86f4a89c71f9e1954474ad21163a720c34bd7cee72X-Tumblr-Pixel: 3Link: https://64.media.tumblr.com/avatar_76d56d257585_128.pnj>; reliconX-UA-Compatible: IEEdge,chrome1X-UA-Device: desktopVary: X-UA-Device, Accept, Accept-EncodingAccept-Ranges: bytesx-a8cblr: 1 !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 typetext/javascript languagejavascript srchttps://assets.tumblr.com/assets/scripts/pre_tumblelog.js?_vb9f848c06fcba7eaf305d4a7cb7a1b98>/script>!DOCTYPE html>html langen>head prefixog: http://ogp.me/ns# fb: http://ogp.me/ns/fb# blog: http://ogp.me/ns/blog#>title>Ben Godfrey/title>meta charsetutf-8>meta namedescription contentEngineering Manager at Wonga. Hacker. Cyclist. I ♥ techno.>!-- options -->meta nametext:Disqus Shortname content>meta nametext:Google Analytics ID content>meta http-equivX-UA-Compatible contentIEedge,chrome1>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 relstylesheet mediascreen hrefhttps://assets.tumblr.com/client/prod/standalone/blog-network-npf/index.build.css?_vf085dde138e244526309d4673db67b4c>link relshortcut icon hrefhttps://64.media.tumblr.com/avatar_76d56d257585_128.pnj>meta nameviewport contentwidthdevice-width>link relapple-touch-icon hrefhttps://64.media.tumblr.com/avatar_76d56d257585_128.pnj>link relalternate typeapplication/rss+xml hrefhttps://aftnn.org/rss>script srchttps://dd6zx4ibq538k.cloudfront.net/smartserve-4574.js>/script>style> /* reset */ a img { border: 0; } /* layout */ html { margin: 0; padding: 0; } body { margin: 1.5em 0 0; padding: 0; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; color: #333; font-size: 16px; } div.header, div.content, div.post, #disqus_thread, div.notes, div.pagination, div.footer-inner { position: relative; max-width: 43.75em; /* 700px @ 16px */ margin: 0 auto; } div.footer-inner { margin: 4em auto 0; } div.content, div.post, #disqus_thread { margin-top: 5em; } div.content { text-align: center; } div.text, div.caption, div.quote, div.tags, ul.conversation, div.link { text-align: left; } div.notes, div.pagination { margin-top: 1em; } div.footer { margin-bottom: 3em; } div.footer-inner { text-align: center; } a.next { position: absolute; right: 0; } /* type */ h1 { font-size: 2em; margin-bottom: 0.5em; line-height: 1.25em; } h2 { font-size: 1.5em; line-height: 1.5em; } h3 { font-size: 1.25em; line-height: 1.25em; } h4 { font-size: 1.125em; line-height: 1.125em; } dt { font-weight: bold; margin: 1em 0; } p, li, dd, dt, pre, div { line-height: 1.5em; } li { margin: 0 0 0.5em 0; } pre, code { font-family: Menlo, Consolas, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Anonymous Pro, Courier New, monospace, serif; overflow-x: auto; } pre { background-color: #1b1d1e; color: white; border-radius: 3px; padding: 1em 1.5em; } .gist .gist-file { border-width: 0 !important; border-radius: 3px !important; } .gist .gist-file .gist-data { background-color: #1b1d1e !important; border-width: 0 !important; } .gist .gist-file .gist-meta { background-color: #232526 !important; background-image: none !important; border-width: 0 !important; text-shadow: none !important; } .gist .gist-file .gist-data .line-numbers { background-color: #232526 !important; border-right-width: 0 !important; } .kr, .kd, .k, .o, .s1 { color: #ff0069 !important; } .kt { color: #9464ff !important; } a { color: #09f; } a:hover { background-color: #eff; } h1 a, div.title a { color: black; text-decoration: none; } h1 a:hover, div.title a:hover { background-color: #eee; } /* post styles */ div.date { color: #999; font-size: 0.75em; /* 15px @ 20px */ text-align: left; } div.tags { font-size: 0.75em; /* 15px @ 20px */ } table, th, td { border: 1px solid #eee; border-collapse: collapse; } th, td { padding: 10px; vertical-align: top; } th { background-color: #f6f6f6; } img { max-width: 43.75em; } /style>link relalternate hrefandroid-app://com.tumblr/tumblr/x-callback-url/blog?blogNameaftrnoon />link relalternate hrefios-app://305343404/tumblr/x-callback-url/blog?blogNameaftrnoon />script defer typeapplication/javascript idbilmur data-providertumblr.com data-serviceblognetwork data-customproperties{theme: } nonceDuHMGsT1lsSyubGng7O6DKGqPkY srchttps://s0.wp.com/wp-content/js/bilmur.min.js?m202437 >/script>script srchttps://assets.tumblr.com/assets/scripts/tumblelog_post_message_queue.js?_va8fadfa499d8cb7c3f8eefdf0b1adfdd>/script>link relstylesheet typetext/css hrefhttps://assets.tumblr.com/fonts/gibson/stylesheet.css?v3>meta namekeywords contentvim,prioritisation,estimation,costofdelay,culture />!-- BEGIN TUMBLR FACEBOOK OPENGRAPH TAGS -->!-- If youd like to specify your own Open Graph tags, define the og:url and og:title tags in your themes HTML. -->!-- Read more: http://ogp.me/ -->meta propertyfb:app_id content48119224995 />meta propertyog:site_name contentTumblr />meta propertyog:title contentBen Godfrey />meta propertyog:url contenthttps://aftnn.org/?og1 />meta propertyog:description contentEngineering Manager at Wonga. Hacker. Cyclist. I ♥ techno. />meta propertyog:type contentprofile />meta propertyog:image contenthttps://64.media.tumblr.com/avatar_76d56d257585_128.pnj />meta propertyal:ios:url contenttumblr://x-callback-url/blog?blogNameaftrnoon />meta propertyal:ios:app_name contentTumblr />meta propertyal:ios:app_store_id content305343404 />meta propertyal:android:url contenttumblr://x-callback-url/blog?blogNameaftrnoon />meta propertyal:android:app_name contentTumblr />meta propertyal:android:package contentcom.tumblr />!-- END TUMBLR FACEBOOK OPENGRAPH TAGS -->!-- TWITTER TAGS -->meta charsetutf-8>meta nametwitter:site contenttumblr />meta nametwitter:card contentsummary />meta nametwitter:description contentEngineering Manager at Wonga. Hacker. Cyclist. I ♥ techno. />meta nametwitter:title contentBen Godfrey />meta nametwitter:creator contentafternoon />meta nametwitter:app:name:iphone contentTumblr />meta nametwitter:app:name:ipad contentTumblr />meta nametwitter:app:name:googleplay contentTumblr />meta nametwitter:app:id:iphone content305343404 />meta nametwitter:app:id:ipad content305343404 />meta nametwitter:app:id:googleplay contentcom.tumblr />meta nametwitter:app:url:iphone contenttumblr://x-callback-url/blog?blogNameaftrnoon&referrertwitter-cards />meta nametwitter:app:url:ipad contenttumblr://x-callback-url/blog?blogNameaftrnoon&referrertwitter-cards />meta nametwitter:app:url:googleplay contenttumblr://x-callback-url/blog?blogNameaftrnoon&referrertwitter-cards />!-- GOOGLE CAROUSEL -->script typeapplication/ld+json> {@type:ItemList,url:https:\/\/aftnn.org,itemListElement:{@type:ListItem,position:1,url:https:\/\/aftnn.org\/post\/143756019147\/modelling-cost-of-delay-of-technical-debt},{@type:ListItem,position:2,url:https:\/\/aftnn.org\/post\/137843070917\/culture-and-policy},{@type:ListItem,position:3,url:https:\/\/aftnn.org\/post\/130553298087\/go-faster-with-angular},{@type:ListItem,position:4,url:https:\/\/aftnn.org\/post\/129241668667\/speaking-about-angularjs-at-the-excellent},{@type:ListItem,position:5,url:https:\/\/aftnn.org\/post\/79547282738\/generate-json-index-of-images-with-awk-and},{@type:ListItem,position:6,url:https:\/\/aftnn.org\/post\/76743819575\/type-check-your-javascript-with-typescript},{@type:ListItem,position:7,url:https:\/\/aftnn.org\/post\/75789536422\/bubble-lines-up-and-down-like-sublime-text-in},{@type:ListItem,position:8,url:https:\/\/aftnn.org\/post\/75730734352\/vim-auto-closers-compared},{@type:ListItem,position:9,url:https:\/\/aftnn.org\/post\/60263320388\/at-christmas-1994-the-nme-carried-a-mixtape-from},{@type:ListItem,position:10,url:https:\/\/aftnn.org\/post\/52370062780\/should-you-move-away-from-heroku-to-protect-your},@context:http:\/\/schema.org}/script>link relcanonical hrefhttps://aftnn.org />/head>body>div classheader>div classtitle>a href/>Ben Godfrey/a>/div>/div>div classcontent>div classpost>div classdate> May 2, 2016 /div>div classtext>h1>a hrefhttps://aftnn.org/post/143756019147/modelling-cost-of-delay-of-technical-debt>Modelling cost of delay of technical debt/a>/h1>p>a hrefhttps://t.umblr.com/redirect?zhttps%3A%2F%2Fwww.amazon.co.uk%2FPrinciples-Product-Development-Flow-Generation%2Fdp%2F1935401009&tNzI3NzYyY2RhZGZhMzJkMjk4YmUyZjIyMWJiOTVhYzBhYzVhMzkxOSw1UmhxV1dsNg%3D%3D&bt%3AKOsEgVk845unCxGS-MlkQg&phttps%3A%2F%2Faftnn.org%2Fpost%2F143756019147%2Fmodelling-cost-of-delay-of-technical-debt&m1&ts1726077831>DonReinertsen/a>and others propose a hrefhttp://blackswanfarming.com/cost-of-delay/>Cost of Delay/a>as a metric for prioritising work in product delivery teams (read: agile). Thiscan be applied building new features and to a hrefhttp://reinertsenassociates.com/technical-debt-adding-math-metaphor/>repaying technicaldebt/a>./p>p>There are multiple types of technical debt:/p>ul>li>Issues which are the root cause of failures affecting customers and thereforeaffecting profits, like a database query that doesn’t scale and makes yoursite unusably slow at busy times/li>li>Issues which might cause a failure in the future, like a a hrefhttps://en.wikipedia.org/wiki/Single_point_of_failure>single point offailure/a>/li>li>System design issues which make the software harder to maintain and affectcycle time, like lack of test coverage or a hrefhttps://en.wikipedia.org/wiki/God_object>godobjects/a>/li>/ul>p>Could we build a model for each type of debt? This would allow us to capture afew inputs for each new issue and calculate the cost of delay quickly. We couldalso update our cost of delay calculations when we gain new information, eitherby plugging in new inputs or by changing the assumptions in the model./p>h2>Issues affecting product availability/h2>pre>code>Cost of delay per week probability of failure occuring each week * mean timeto recovery in hours * cost of hour of downtime./code>/pre>p>We can create a general model for technical debt which has caused failures inthe past or which might cause failures in the future. For past failures, we cancalculate the probability of failure each week from availability metrics orincident post-mortems. For things that might happen in the future, we mustestimate that probability, but the input is the same. You can use base ratesfrom other sources, e.g. if your point of failure is a single server, you coulduse industry server failure rate data to guide your estimation./p>p>Likewise, the a hrefhttps://en.wikipedia.org/wiki/Mean_time_to_recovery>mean time torecovery/a>, how long ittakes to get everything working normally again, can be calculated from recordsor estimated based on similar failures./p>p>The cost of an hour of downtime depends on the type of failure. It might be anyrevenue you make for an hour if your whole site or app is down. Ifnon-transactional features are not working, the cost might be more to yourreputation, which knocks on to your revenue/profit in ways which are hard topredict. The trick is to come up with a consistent model for different issues,based on your company goals. You may not know the monetary cost of a flakeyapplication, but if one organisation and your customers value reliability, thenyou should weight it high in your prioritisation./p>p>To keep things simple, we could count the cost of an hour of downtime as thelifetime value of the customers we would have acquired in that hour, and assumethat our returning customers are perfectly loyal - that we will not churn asingle one. obviously that’s naive, but the extent to which that introduceserror into the model varies from business to business./p>h2>Issues that increase cycle time/h2>pre>code>Cost of delay per week total dev hours lost per week/code>/pre>p>A developer hour is worth code>(average annual salary / working hours in a year) *employee cost multipler/code>. An employee costs not just their salary. They receiveother benefits, need space to work, a desk, a computer, etc. We represent thisas the employee cost multiplier./p>p>Increased cycle time has a large effect on which opportunities you pursue. Whatnew features would we build and launch if our cycle times were 10 times shorter?What profits would they generate? This is impossible to estimate. The simplestapproach from the perspective of cost of delay is not to try./p>/div>/div>div classtags> #a hrefhttps://aftnn.org/tagged/prioritisation>prioritisation/a> #a hrefhttps://aftnn.org/tagged/estimation>estimation/a> #a hrefhttps://aftnn.org/tagged/costofdelay>costofdelay/a>/div>div classpost>div classdate> Jan 23, 2016 /div>div classtext>h1>a hrefhttps://aftnn.org/post/137843070917/culture-and-policy>Culture and Policy/a>/h1>p>As a regulated financial services company, Wonga has a number of clearly-defined policies covering aspects of its operations from marketing to customerservices to software engineering. The goal of these is to ensure proper care istaken and that mistakes are avoided./p>p>Other organisations, notably Facebook, rely heavily on culture to avoid issues.Anyone can directly access their servers and make changes, but their culture issuch that no one ever does./p>p>Culture is flexible, robust to change and everybody is empowered to make thedecisions, but it’s tough to build and maintain. Policies are centralised andinflexible, however they may be easier to scale./p>h2>Comparison/h2>table>tr>th>/th>th>Culture/th>th>Policy/th>/tr>tr>td>Creation/td>td>Culture must be created early and grow with the company. This is very hard to get right./td>td>Policies must be developed for a wide range of activities if they’re to be useful./td>/tr>tr>td>Ease of change/td>td>a hrefhttp://cmr.berkeley.edu/documents/sample_articles/2002_44_3_4776.pdf>Changing your organisation’s culture is painful/a> and may be impossible, because it means changing the values of your people. /td>td>Policies must be developed for a wide range of activities if they’re to be useful./td>/tr>tr>td>Hiring/td>td>Hiring is one of the key activities for building and preserving culture. Each new hire must be selected for culture or indoctrinated when they join. Finding candidates with culture fit slows down the hiring process./td>td>New hires are trained on the policies. Wonga uses quick and easy online training to do this for company-wide policies./td>/tr>tr>td>Preventing issues/td>td>If you have a culture of investigating issues, preventing them before they happen and baking quality in to your ways of working, then you may be able to avoid a wide-range of complex issues. If your culture is gung-ho, you’re in trouble./td>td>A familiar, sensible policy can be a valuable thing: a checklist to make sure you’ve been through the right steps. It can be a band-aid over a poor culture./td>/tr>tr>td>Resolving issues/td>td>Likewise, cultures are different. Your team may drop everything and fix defects immediately, they may track them and fix them in time or they may ignore them completely./td>td>Policies should describe what issues might occur, how to resolve them, and how quickly they should be resolved./td>/tr>tr>td>Enforcement/td>td>Culture can be uneven, team X and Y may disagree on what steps to take to announce a new version will be released./td>td>Well-written policies are easy to enforce, by simple tools in some cases, e.g. JIRA for issue-tracking workflows./td>/tr>tr>td>Communication/td>td>Once embedded, culture is everywhere all the time./td>td>Policies are published, but can be difficult to read and apply./td>/tr>tr>td>Flexibility/td>td>Cultural values give everyone tools to understand new situations and solve new problems./td>td>Policies are comprehensive but inflexible, attempts to apply them to new situations can result in fear, uncertainty and doubt. Only their authors are really empowered to solve new problems (creating bottlenecks for other people)./td>/tr>/table>/div>/div>div classtags> #a hrefhttps://aftnn.org/tagged/culture>culture/a> #a hrefhttps://aftnn.org/tagged/policy>policy/a>/div>div classpost>div classdate> Oct 5, 2015 /div>div classtext>h1>a hrefhttps://aftnn.org/post/130553298087/go-faster-with-angular>Go Faster With Angular/a>/h1>iframe srchttps://player.vimeo.com/video/139870422 width500 height281 frameborder0 webkitallowfullscreen mozallowfullscreen allowfullscreenallowfullscreen>/iframe>p>a hrefhttps://t.umblr.com/redirect?zhttps%3A%2F%2Fvimeo.com%2F139870422&tNGVjZDc4OTFiNDBhYzI3NGJiZGJlNjQ3ZjY5OGQ1MjEwYzU4YzE0YyxTWlVVNVcyZg%3D%3D&bt%3AKOsEgVk845unCxGS-MlkQg&phttps%3A%2F%2Faftnn.org%2Fpost%2F130553298087%2Fgo-faster-with-angular&m1&ts1726077831>Go faster with Angular – Ben Godfrey at The Lead Developer 2015/a> from a hrefhttps://t.umblr.com/redirect?zhttps%3A%2F%2Fvimeo.com%2Fwhiteoctober&tM2Y5N2I5NTNlNDBmNTU2ZmQxYjJmNWJmM2RlZGNlYTM0NzI3MDZlYyxTWlVVNVcyZg%3D%3D&bt%3AKOsEgVk845unCxGS-MlkQg&phttps%3A%2F%2Faftnn.org%2Fpost%2F130553298087%2Fgo-faster-with-angular&m1&ts1726077831>White October/a> on a hrefhttps://t.umblr.com/redirect?zhttps%3A%2F%2Fvimeo.com&tMzkwOTZhZjk3NjZmZWEyYzVkMTk4NTBlZWVkNjYwYWMxYzQxNzRhZixTWlVVNVcyZg%3D%3D&bt%3AKOsEgVk845unCxGS-MlkQg&phttps%3A%2F%2Faftnn.org%2Fpost%2F130553298087%2Fgo-faster-with-angular&m1&ts1726077831>Vimeo/a>./p>/div>/div>div classtags> #a hrefhttps://aftnn.org/tagged/angular>angular/a> #a hrefhttps://aftnn.org/tagged/theleaddev>theleaddev/a>/div>div classpost>div classdate> Sep 16, 2015 /div>div classphoto>a hrefhttps://aftnn.org/image/129241668667>img srchttps://64.media.tumblr.com/d7339d29db61e116d30df4c6a5fbb7d2/tumblr_nusjygSJeh1rpd4s2o1_1280.jpg altSpeaking about AngularJS at the excellent #theleaddev conference.>/a>div classcaption>p>Speaking about AngularJS at the excellent #theleaddev conference./p>/div>/div>/div>div classpost>div classdate> Mar 14, 2014 /div>div classtext>h1>a hrefhttps://aftnn.org/post/79547282738/generate-json-index-of-images-with-awk-and>Generate JSON Index Of Images With awk and identify/a>/h1>p>I maintain a manifest file for a Trigger.io mobile app which includes a set of images indexed by size. I’ve taken to generating the JSON with code>awk/code> and a hrefhttp://www.imagemagick.org/script/identify.php>Imagemagick’s code>identify/code>/a> command:/p>p>code>identify/code> returns a wealth of information about an image file:/p>pre>code>$ identify Default~iphone.pngDefault~iphone.png6 PNG 320x480 320x480+0+0 8-bit sRGB 11.5KB 0.000u 0:00.000/code>/pre>p>I want to transform that into some JSON. code>awk/code> is designed for exactly this kindof text transformation problem./p>pre>code>$ identify *.png | awk {gsub(\.png.*$, .png, $1); printf \%s\: \%s\,\n, $3, $1} | sort1024x748: Default-Portrait@2x~ipad.png,1024x768: Default-Landscape~ipad.png,2048x1496: Default-Landscape@2x~ipad.png,320x480: Default~iphone.png,640x1136: Default-568h@2x~iphone.png,640x960: Default@2x~iphone.png,768x1004: Default-Portrait~ipad.png,/code>/pre>p>Copy and paste into manifest, remove trailing comma, make cup of tea./p>p>strong>EDIT/strong>: Achieve the same effect with the code>-format/code> parameter for code>identify/code> (a hrefhttp://www.imagemagick.org/script/escape.php>code>-format/code> docs here/a>):/p>pre>code>identify -format %wx%h: %f,\n *.png/code>/pre>/div>/div>div classtags> #a hrefhttps://aftnn.org/tagged/awk>awk/a> #a hrefhttps://aftnn.org/tagged/imagemagick>imagemagick/a> #a hrefhttps://aftnn.org/tagged/unix>unix/a>/div>div classpost>div classdate> Feb 15, 2014 /div>div classtext>h1>a hrefhttps://aftnn.org/post/76743819575/type-check-your-javascript-with-typescript>Type-check Your JavaScript With TypeScript/a>/h1>p>TypeScript is a superset of JavaScript with optional static typing. Thea href#https://github.com:borisyankov/DefinitelyTyped>DefinitelyTyped/a> projectcontains type definitions for major JavaScript libraries contributed by thecommunity. You can use these definitions and TypeScript’s compiler to check yourcode for errors, just by adding references./p>p>We have a large AngularJS project. I’d like to type-check all our code and maybe find a few bugs./p>h2>Install TypeScript/h2>h2>Clone DefinitelyTyped to code>references/code>/h2>p>The a href#https://github.com:borisyankov/DefinitelyTyped>DefinitelyTyped/a> projectprovides type definitions for AngularJS, Jasmine and about 100 other commonJavaScript libraries./p>p>To keep it simple, I’m just going to clone the whole lot into my project, whereI can reference anything I need./p>h2>Rename All code>.js/code> Files To code>.ts/code>/h2>p>By renaming all our files, we let code>tsc/code> and other tools know the code should betreated as TypeScript./p>p>Let’s give our unix skills a workout and do this with a code>find/code> one-liner:/p>h2>Create References Includes For The Project/h2>p>TypeScript code needs to be annotated with comments to link to thetype definitions we downloaded from DefinitelyTyped. E.g. for a Jasmine specwhich tests an Angular controller, we might need the following block at the topof the file:/p>p>You’ll need a reference for each library you’re using. Tosimplify things, let’s create a couple of reference files which define the shared references for our module definitions and test specs and include those inour code./p>p>Note that code>test.ts/code> references code>module.ts/code>./p>h2>Add References To All code>.ts/code> Files/h2>p>Now, let’s add the references to every TypeScript file with a couple more code>find/code>one-liners (requires GNU code>sed/code>, if you’re on OS X, install with code>brew install gnu-sed --default-names/code>)./p>p>Phew!/p>p>The code>path/code> attribute needs to be right. Luckily, all of the code in our projectis 5 levels deep in the directory structure. If your code doesn’t have such aregular structure, you’ll need to do something more clever./p>h2>Compile Everything With code>tsc/code>/h2>p>Finally, let’s run everything through the TypeScript compiler and see the issueswe have to resolve:/p>h2>Adding Definitions For Missing Modules/h2>p>Adding type definitions for your own modules or 3rd-party modules missing fromDefinitelyTyped is straightforward. A few examples:/p>/div>/div>div classtags> #a hrefhttps://aftnn.org/tagged/typescript>typescript/a> #a hrefhttps://aftnn.org/tagged/definitelytyped>definitelytyped/a> #a hrefhttps://aftnn.org/tagged/javascript>javascript/a>/div>div classpost>div classdate> Feb 6, 2014 /div>div classtext>h1>a hrefhttps://aftnn.org/post/75789536422/bubble-lines-up-and-down-like-sublime-text-in>“Bubble” Lines Up And Down Like Sublime Text In Vim/a>/h1>p>strong>NB/strong>: You can a hrefhttps://github.com/afternoon/dotvim/blob/master/gvimrc#L175>see this hack in my code>.vim/code> repo on GitHub/a>./p>p>Sublime Text allows you to use ^⌘↑ and ^⌘↓ to “bubble” a selected block of text up and down in a file./p>p>For a single line, we could just use the code>dd/code>, code>j/code>, code>p/code> and code>P/code> motion and editing commands to move the current line around:/p>p>However, this doesn’t work for multiline selections and it overwrites the default register, wiping anything you’ve previously deleted to there./p>p>A better solution is to use the code>:move/code> command. We can safely use it in both normal and visual mode because it works with multiline blocks:/p>p>We pass locations relative to the selection to code>:move/code>, code><-2/code> is 2 lines before the first line of the selection, code>>+1/code> is one line after the last line./p>p>In the visual mode mappings, we use code>gv/code> to return to visual mode with the previous selection highlighted after the code>:move/code> is complete./p>p>By default, MacVim maps ^⌘↑ and ^⌘↓ to move around the quickfix list. We can disable that by setting the menu option’s key to code><nop>/code>. Add this to your code>.gvimrc/code>:/p>p>If you hit ^⌘↑ or ^⌘↓ with a character-wise visual selection, the whole line will still be moved./p>p>You can map different keys for different platforms./p>p>We can also extend this to fix indentation of the block as you move it:/p>p>This is a bit unpredictable in my experience. YMMV./p>/div>/div>div classtags> #a hrefhttps://aftnn.org/tagged/vim>vim/a> #a hrefhttps://aftnn.org/tagged/sublime>sublime/a>/div>div classpost>div classdate> Feb 5, 2014 /div>div classtext>h1>a hrefhttps://aftnn.org/post/75730734352/vim-auto-closers-compared>Vim Auto-closers Compared/a>/h1>p>I type code>{/code>, Vim types code>}/code> for me. Vim has a number of plugins to do this andeach does the job slightly differently./p>ol>li>a hrefhttps://github.com/Raimondi/delimitMate>delimitMate/a> by Raimondi (484GitHub stars)/li>li>a hrefhttps://github.com/jiangmiao/auto-pairs>Auto-Pairs/a> by Miao Jiang (181)/li>li>a hrefhttps://github.com/kana/vim-smartinput>smartinput/a> by Kana Natsuno (239)/li>li>a hrefhttps://github.com/vim-scripts/AutoClose>AutoClose/a> by Karl Guertin (44)/li>li>a hrefhttps://github.com/Townk/vim-autoclose>AutoClose/a> by Townk (212)/li>/ol>h2>My Requirements/h2>ol>li>Don’t break HTML templates that use double braces, e.g. code>{{name}}/code>/li>li>Create a new block easily, i.e. type code>{/code> and the matching code>}/code> is inserted andthe cursor is positioned on a blank line between the two, correctly indented./li>li>Handle escaped string terminators/li>li>Don’t break other plugins/li>li>Understand that code>/code> is the comment character in Vim/li>li>BONUS! Press return within a string splits line, adds delimiters and a stringconcatenation operator./li>/ol>table>thead>tr>th>Feature/th>th>a hrefhttps://github.com/Raimondi/delimitMate>delimitMate/a>/th>th>a hrefhttps://github.com/jiangmiao/auto-pairs>Auto-Pairs/a>/th>th>a hrefhttps://github.com/kana/vim-smartinput>smartinput/a>/th>/tr>/thead>tbody>tr>td>HTML templates/td>td>Doesn’t work with HTML filetype/td>td>✔/td>td>✔/td>/tr>tr>td>New block/td>td>✘/td>td>✔ (type code>{<CR/code> to open a new block)/td>td>✘/td>/tr>tr>td>Handle escaped string terminators/td>td>✘/td>td>✔/td>td>✔/td>/tr>tr>td>Don’t break other plugins/td>td>✔/td>td>✔/td>td>✔/td>/tr>tr>td>Vim comment character/td>td>✘/td>td>✔/td>td>✔/td>/tr>tr>td>String split/td>td>✘/td>td>✘/td>td>✘/td>/tr>/tbody>/table>h2>a hrefhttps://github.com/vim-scripts/AutoClose>AutoClose/a> and a hrefhttps://github.com/Townk/vim-autoclose>AutoClose/a>/h2>p>The AutoClose plugins are much simpler than the 3 tested above. If you’re usingone and happy, great. If you’re not using anything, trya hrefhttps://github.com/Raimondi/delimitMate>delimitMate/a>,a hrefhttps://github.com/jiangmiao/auto-pairs>Auto-Pairs/a> ora hrefhttps://github.com/kana/vim-smartinput>smartinput/a>./p>h2>The Winner: a hrefhttps://github.com/jiangmiao/auto-pairs>Auto-Pairs/a>/h2>p>I’m going with a hrefhttps://github.com/jiangmiao/auto-pairs>Auto-Pairs/a> unless itbreaks or I find something better./p>p>I’d be interested to investigatea hrefhttps://github.com/kana/vim-smartinput>smartinput/a> a bit more, but Auto-Pairsgets the job done with minimal effort./p>h2>What About String Splitting?/h2>p>None of the tested plugins wrap strings. One way to implement this would be touse code>formatexpr/code> and code>formatprg/code>, which tells Vim to run lines through aformatter./p>/div>/div>div classtags> #a hrefhttps://aftnn.org/tagged/vim>vim/a> #a hrefhttps://aftnn.org/tagged/plugins>plugins/a>/div>div classpost>div classdate> Sep 4, 2013 /div>div classvideo>iframe classspotify_audio_player srchttps://open.spotify.com/embed?urispotify%3Atrack%3A1FsrOv4rWrWxBPRCpXx1rI&viewcoverart frameborder0 allowtransparencytrue width500 height580>/iframe>div classcaption>p>At Christmas 1994 the NME carried a mixtape from the Chemical Brothers (still known as the Dust Brothers at that point). I lost my copy ages ago, but it was probably warped to shit from all the times I played it. This track was the highlight. I don’t think I’ve heard it since then. It’s insane to think that was almost 20 years ago. O.M.G. I’m practically dead now./p>p>strong>Edit/strong>: Lo and behold, somebody’s kindly posted the entire a hrefhttp://www.mixcloud.com/eaguilarm/the-chemical-brothers-nme-xmas-dust-up-1994/>NME Xmas Dust Up mixtape/a> to Mixcloud. Enjoy!/p>p>(Source: a hrefhttps://open.spotify.com/track/1FsrOv4rWrWxBPRCpXx1rI titleSpotify>Spotify/a>)/p>/div>/div>/div>div classtags> #a hrefhttps://aftnn.org/tagged/music>music/a> #a hrefhttps://aftnn.org/tagged/spotify>spotify/a>/div>div classpost>div classdate> Jun 7, 2013 /div>div classtext>h1>a hrefhttps://aftnn.org/post/52370062780/should-you-move-away-from-heroku-to-protect-your>Should You Move Away From Heroku To Protect Your Users?/a>/h1>p>Heroku provides an a hrefhttps://addons.heroku.com/ssl>SSL add-on/a> for encrypting traffic between browsers and the Heroku network./p>p>However, SSL is terminated at the Heroku routing layer. Traffic is then passed unecrypted through the network to your application. That network is AWS./p>p>A Heroku support agent confirmed this by email:/p>blockquote>p>“I have confirmed with our routing team that HTTPS traffic will be terminated at the SSL Endpoint, and passed over to the runtime (where your application resides) in plaintext.”/p>/blockquote>p>If your customers are submitting sensitive data to your app, like payment card details or personally-identifiable information, then that data is transmitted between nodes in Heroku’s network without encryption./p>h2>Threat?/h2>p>Does this mean your traffic can be intercepted by other users? I’m not a security expert but I believe it’s a risk you might not want to take with customer data./p>p>Apps running on Heroku do not have root access, but it’s possible to sniff network traffic even without root access, e.g. a hrefhttp://packetlife.net/blog/2010/mar/19/sniffing-wireshark-non-root-user/>Sniffing with Wireshark as a Non-Root User/a>./p>p>a hrefhttps://policy.heroku.com/security>Heroku’s Security policy/a> claims that packet sniffing is not possible:/p>blockquote>p>“Managed firewalls prevent IP, MAC, and ARP spoofing on the network and between virtual hosts to ensure spoofing is not possible. Packet sniffing is prevented by infrastructure including the hypervisor which will not deliver traffic to an interface which it is not addressed to. Heroku utilizes application isolation, operating system restrictions, and encrypted connections to further ensure risk is mitigated at all levels.”/p>/blockquote>p>About a month ago, a hrefhttps://blog.heroku.com/archives/2013/5/2/new_dyno_networking_model>Heroku revised their networking model to improve isolation between dynos/a>:/p>blockquote>p>“Previously, network interfaces were shared between multiple dynos. … The shared network interface … resulted in a low grade information leak where one dyno could obtain some information about connections made by other dynos. This information did not include any customer data or other customer identifying information. But it broke the core principle of tenant isolation. With the new networking model, dynos now have fully isolated network configurations.”/p>/blockquote>h2>PCI/h2>p>The PCI standard requires that sensitive data be encrypted at rest and when transmitted over public networks, but not internal networks. Heroku’s network is surely public, despite their considerable pains to make it look and feel like an internal network./p>h2>Alternatives/h2>p>AWS allows traffic to be encrypted between an Elastic Load Balancer and EC2 instances via a feature called a hrefhttps://t.umblr.com/redirect?zhttp%3A%2F%2Fdocs.aws.amazon.com%2FElasticLoadBalancing%2Flatest%2FDeveloperGuide%2FUS_SettingUpLoadBalancerHTTPS.html&tM2RlNTBjYTZhN2I5YjhjMGJjNDhlZGNhNGE1MzI5YWVkM2ZlMjVhZSxpN0FsSmt5aA%3D%3D&bt%3AKOsEgVk845unCxGS-MlkQg&phttps%3A%2F%2Faftnn.org%2Fpost%2F52370062780%2Fshould-you-move-away-from-heroku-to-protect-your&m1&ts1726077831>backend server authentication/a>./p>/div>/div>div classtags> #a hrefhttps://aftnn.org/tagged/heroku>heroku/a> #a hrefhttps://aftnn.org/tagged/ssl>ssl/a> #a hrefhttps://aftnn.org/tagged/security>security/a>/div>div classpagination>span classcurrent-page>1/span>a classjump-page href/page/2>2/a>a classjump-page href/page/3>3/a>a classjump-page href/page/4>4/a>a classjump-page href/page/5>5/a>a classnext href/page/2>Next/a>/div>/div>div classfooter>div classfooter-inner>a href/archive>Archive/a> | a hrefhttps://aftnn.org/rss>RSS/a>form idsearch action/search methodget>input typetext placeholderSearch nameq value>input typesubmit valueSearch>/form>/div>/div>!-- Google tag (gtag.js) -->script async srchttps://www.googletagmanager.com/gtag/js?idG-9X7FTZNFSF>/script>script> window.dataLayer window.dataLayer || ; function gtag(){dataLayer.push(arguments);} gtag(js, new Date()); gtag(config, G-9X7FTZNFSF); /script>iframe scrollingno width1 height1 frameborder0 stylebackground-color:transparent; overflow:hidden; position:absolute; top:0; left:0; z-index:9999; idga_target>/iframe>script typetext/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 windoweventMethod; var messageEvent eventMethod attachEvent ? onmessage : message; eventer(messageEvent,function(e) { var message (e.data && e.data.split) ? e.data.split(;) : ; switch (message0) { case analytics_iframe_loaded: analytics_iframe_loaded true; postCSMessage(); postGAMessage(); break; case user_logged_in: user_logged_in message1; postGAMessage(); break; } }, false); analytics_frame.src https://assets.tumblr.com/analytics.html?_v9f5febfd57a8a649c598d888f2d9e062# + https://aftnn.org; 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 typetext/javascript nonceDuHMGsT1lsSyubGng7O6DKGqPkY>!function(s){s.srchttps://px.srvcs.tumblr.com/impixu?T1726077831&JeyJ0eXBlIjoidXJsIiwidXJsIjoiaHR0cDovL2FmdG5uLm9yZy8iLCJyZXF0eXBlIjowLCJyb3V0ZSI6Ii8ifQ&UKBMMFIGCNG&K3c2aa5f70ac6888304bfbdc4d92e317e3f34bc12ecd56a71f29448898fe20428&R.replace(/&R^&$*/,).concat(&R+escape(document.referrer)).slice(0,2000).replace(/%.?.?$/,);}(new Image());/script>noscript>img styleposition:absolute;z-index:-3334;top:0px;left:0px;visibility:hidden; srchttps://px.srvcs.tumblr.com/impixu?T1726077831&JeyJ0eXBlIjoidXJsIiwidXJsIjoiaHR0cDovL2FmdG5uLm9yZy8iLCJyZXF0eXBlIjowLCJyb3V0ZSI6Ii8iLCJub3NjcmlwdCI6MX0&UKBMMFIGCNG&Ka396737b42e3d8b3b75853882fdb537609bd32ceee7d11bc765c556aa03abd1c&R>/noscript>script typetext/javascript nonceDuHMGsT1lsSyubGng7O6DKGqPkY>!function(s){s.srchttps://px.srvcs.tumblr.com/impixu?T1726077831&JeyJ0eXBlIjoicG9zdCIsInVybCI6Imh0dHA6Ly9hZnRubi5vcmcvIiwicmVxdHlwZSI6MCwicm91dGUiOiIvIiwicG9zdHMiOlt7InBvc3RpZCI6IjE0Mzc1NjAxOTE0NyIsImJsb2dpZCI6NDQ2ODI5NzQsInNvdXJjZSI6MzN9LHsicG9zdGlkIjoiMTM3ODQzMDcwOTE3IiwiYmxvZ2lkIjo0NDY4Mjk3NCwic291cmNlIjozM30seyJwb3N0aWQiOiIxMzA1NTMyOTgwODciLCJibG9naWQiOjQ0NjgyOTc0LCJzb3VyY2UiOjMzfSx7InBvc3RpZCI6IjEyOTI0MTY2ODY2NyIsImJsb2dpZCI6NDQ2ODI5NzQsInNvdXJjZSI6MzN9LHsicG9zdGlkIjoiNzk1NDcyODI3MzgiLCJibG9naWQiOjQ0NjgyOTc0LCJzb3VyY2UiOjMzfSx7InBvc3RpZCI6Ijc2NzQzODE5NTc1IiwiYmxvZ2lkIjo0NDY4Mjk3NCwic291cmNlIjozM30seyJwb3N0aWQiOiI3NTc4OTUzNjQyMiIsImJsb2dpZCI6NDQ2ODI5NzQsInNvdXJjZSI6MzN9LHsicG9zdGlkIjoiNzU3MzA3MzQzNTIiLCJibG9naWQiOjQ0NjgyOTc0LCJzb3VyY2UiOjMzfSx7InBvc3RpZCI6IjYwMjYzMzIwMzg4IiwiYmxvZ2lkIjo0NDY4Mjk3NCwic291cmNlIjozM30seyJwb3N0aWQiOiI1MjM3MDA2Mjc4MCIsImJsb2dpZCI6NDQ2ODI5NzQsInNvdXJjZSI6MzN9XX0&UBDMLCMFLBI&K156c18ce94e9327b9f999df411bc72a301b23b6351102b4fab67a23718f665a6&R.replace(/&R^&$*/,).concat(&R+escape(document.referrer)).slice(0,2000).replace(/%.?.?$/,);}(new Image());/script>noscript>img styleposition:absolute;z-index:-3334;top:0px;left:0px;visibility:hidden; srchttps://px.srvcs.tumblr.com/impixu?T1726077831&JeyJ0eXBlIjoicG9zdCIsInVybCI6Imh0dHA6Ly9hZnRubi5vcmcvIiwicmVxdHlwZSI6MCwicm91dGUiOiIvIiwicG9zdHMiOlt7InBvc3RpZCI6IjE0Mzc1NjAxOTE0NyIsImJsb2dpZCI6NDQ2ODI5NzQsInNvdXJjZSI6MzN9LHsicG9zdGlkIjoiMTM3ODQzMDcwOTE3IiwiYmxvZ2lkIjo0NDY4Mjk3NCwic291cmNlIjozM30seyJwb3N0aWQiOiIxMzA1NTMyOTgwODciLCJibG9naWQiOjQ0NjgyOTc0LCJzb3VyY2UiOjMzfSx7InBvc3RpZCI6IjEyOTI0MTY2ODY2NyIsImJsb2dpZCI6NDQ2ODI5NzQsInNvdXJjZSI6MzN9LHsicG9zdGlkIjoiNzk1NDcyODI3MzgiLCJibG9naWQiOjQ0NjgyOTc0LCJzb3VyY2UiOjMzfSx7InBvc3RpZCI6Ijc2NzQzODE5NTc1IiwiYmxvZ2lkIjo0NDY4Mjk3NCwic291cmNlIjozM30seyJwb3N0aWQiOiI3NTc4OTUzNjQyMiIsImJsb2dpZCI6NDQ2ODI5NzQsInNvdXJjZSI6MzN9LHsicG9zdGlkIjoiNzU3MzA3MzQzNTIiLCJibG9naWQiOjQ0NjgyOTc0LCJzb3VyY2UiOjMzfSx7InBvc3RpZCI6IjYwMjYzMzIwMzg4IiwiYmxvZ2lkIjo0NDY4Mjk3NCwic291cmNlIjozM30seyJwb3N0aWQiOiI1MjM3MDA2Mjc4MCIsImJsb2dpZCI6NDQ2ODI5NzQsInNvdXJjZSI6MzN9XSwibm9zY3JpcHQiOjF9&UBDMLCMFLBI&Kf5bc1464db292b6e737fcf07c978f8dbe37d52e31b74c9f9aeb037317895ebad&R>/noscript>noscript idbootloader data-bootstrap{"Components":{"PostActivity":,"NotificationPoller":{"messaging_keys":,"token":"","inbox_unread":0},"DesktopDashboardLogo":{"animations":"https:\/\/assets.tumblr.com\/images\/logo\/hover-animations\/1.png?_v161861acded461bb6e995593a3bae835","https:\/\/assets.tumblr.com\/images\/logo\/hover-animations\/1@2x.png?_v496a774637302a598c851381d00009b0"},"TumblelogIframe":{"unified":true,"variant":null,"isCompact":true,"tumblelogBundleSrc":"https:\/\/assets.tumblr.com\/client\/prod\/standalone\/tumblelog\/index.build.js?_v03e800b27eff76cee863b8346f5e3e52","tumblelogName":"aftrnoon","isLoggedIn":false,"isFriend":false,"formKey":"","canSubscribe":false,"isSubscribed":false,"tumblelogTitle":"Ben Godfrey","tumblelogAvatar":"https:\/\/64.media.tumblr.com\/avatar_76d56d257585_64.pnj","tumblelogAvatar128":"https:\/\/64.media.tumblr.com\/avatar_76d56d257585_128.pnj","tumblelogHost":"https:\/\/aftnn.org","hasCustomDomain":true,"isOptica":false,"isCustomTheme":true,"themeHeaderImage":"","themeBackgroundColor":"#ffffff","themeTitleColor":"#444444","themeAccentColor":"#529ECC","brag":true,"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:\/\/aftnn.org\/","postUrl":"","openInPeeprUrl":"https:\/\/www.tumblr.com\/aftrnoon","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?_v3de94a184d600617102ddd5b48fb36e9","appInstallUrls":{"android":"https:\/\/play.google.com\/store\/apps\/details?idcom.tumblr\u0026referrerutm_source%3Dtumblr%26utm_medium%3Diframe%26utm_campaign%3Dbn_continue_or_install_cta","ios":"https:\/\/apps.apple.com\/app\/apple-store\/id305343404?pt212308\u0026ctbn_continue_or_install_cta\u0026mt8"},"appOpenReferrer":"bn_header_open_btn","isShowSearch":true,"supplyLogging":,"secondsSinceLastActivity":-1,"installUrlOpenFailed":{"android":"https:\/\/play.google.com\/store\/apps\/details?idcom.tumblr\u0026referrerutm_source%3Dtumblr%26utm_medium%3Diframe%26utm_campaign%3Dbn_header_app_open_failed","ios":"https:\/\/apps.apple.com\/app\/apple-store\/id305343404?pt212308\u0026ctbn_header_app_open_failed\u0026mt8"},"loginWallVariant":"small_center"},"CommunityLabels":{"has_community_label":false,"is_single":false,"redirect_target":null}},"Flags":{"features":"eyJmaWx0ZXJfbnNmdyI6dHJ1ZSwibW9iaWxlX3dlYl9nYXRlIjp0cnVlLCJzYWZlX21vZGUiOnRydWUsInNhZmVfbW9kZV9lbmFibGVkIjp0cnVlLCJrZXljb21tYW5kX2F1dG9fcGFnaW5hdGUiOnRydWUsImxvZ2dlZF9vdXRfc2VhcmNoIjp0cnVlLCJrcmFrZW5fd2ViX2xvZ2dpbmdfbGlicmFyeSI6dHJ1ZSwibGl2ZXBob3Rvc193ZWIiOnRydWUsInVzZXJfdGFnX2ZpbHRlcmluZyI6dHJ1ZSwic2FmZV9tb2RlX293bl9wb3N0Ijp0cnVlLCJwcm9qZWN0X3hfYXBwZWFsIjp0cnVlLCJtb2JpbGVfd2ViX3Bob3Rvc2V0cyI6dHJ1ZSwiaGlkZV9kZWZhdWx0X2hlYWRlcnNfYmxvZ19jYXJkcyI6dHJ1ZSwibm90aWZpY2F0aW9uX3JlcGx5X2xpbmtfdG9fbm90ZXMiOnRydWUsInR5cGluZ19pbmRpY2F0b3Jfd3JpdGUiOnRydWUsInR1bWJscl92aWRlb19zcG9uc29yZWRfZGF5Ijp0cnVlLCJjYXB0Y2hhOnVzZV9yZWNhcHRjaGEyIjp0cnVlLCJsaXR0bGVfc2lzdGVyIjp0cnVlLCJsb2dfbGFkeSI6dHJ1ZSwicmVkcG9wX3Bvc3RfZm9ybV9tb2JpbGVfY3JlYXRlIjp0cnVlLCJsZWdhY3lfcG9zdF9mb3JtX2J1dHRvbnNfbGlua190b19yZWRwb3AiOnRydWUsInNob3dfdHNwX2NsaWNrX3Rocm91Z2hfdG9nZ2xlIjp0cnVlLCJkYXJsYV9hZF9mZWVkYmFjayI6dHJ1ZSwic3RhdHVzX2luZGljYXRvciI6dHJ1ZSwiY29udmVyc2F0aW9uYWxfbm90aWZpY2F0aW9ucyI6dHJ1ZSwiZGlzYWJsZV95YWhvb19iX2Nvb2tpZSI6dHJ1ZSwibGl2ZXBob3RvcyI6dHJ1ZSwiY29tbXVuaXR5X2xhYmVscyI6dHJ1ZX0"},"Context":{"name":"default","time":1726077831000,"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 srchttps://assets.tumblr.com/client/prod/standalone/tumblelog/index.build.js?_v03e800b27eff76cee863b8346f5e3e52>/script>/body>/html>
Subdomains
Date
Domain
IP
stuff.aftnn.org
2015-03-12
54.231.165.20
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]