<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3825422117901839927</id><updated>2026-05-06T17:19:17.763+05:30</updated><category term="iPhone"/><category term="Objective C"/><category term="AFNetworking"/><category term="Phonegap"/><category term="UITableview"/><category term="Javascript"/><category term="NSDate"/><category term="UIImageview"/><category term="UINavigationBar"/><category term="Xcode7"/><category term="button text in iPhone"/><category term="iOS"/><category term="iOS9"/><category term="plist"/><category term="AFNetworking upload image"/><category term="Apple"/><category term="JQUERY"/><category term="NSDateFormatter"/><category term="NSHTTPURLResponse"/><category term="POST URL"/><category term="Raspberrypi"/><category term="UIAlertview"/><category term="UIBarButtonItem"/><category term="UIIMage"/><category term="UINavigationController"/><category term="UIViewController"/><category term="WCF"/><category term="finding iOS versions"/><category term="iOS7"/><category term="iPhone Simulator"/><category term="iTunes"/><category term=".bash_profile"/><category term=".dylib"/><category term=".ipa"/><category term=".md"/><category term=".tbd"/><category term="2 instances of Xcode installation"/><category term="AFMultipartFormData"/><category term="AI Detection"/><category term="AI Tools"/><category term="AI task management"/><category term="AJAX Request"/><category term="ASP.Net"/><category term="ATS"/><category term="Add NavigationBar on PresentModalViewController"/><category term="Add Subviews inside UIAlertview in iOS7"/><category term="Alert"/><category term="Android"/><category term="Angular2"/><category term="Apple rejected app"/><category term="Aspect Ratio"/><category term="Auto iPhone Shaking"/><category term="Autoscroll on UINavigationbar"/><category term="Bahuabali2"/><category term="Bahubali2 the conclusion"/><category term="Build settings"/><category term="CGAffineTransform"/><category term="CGAffineTransformIdentity"/><category term="CGPoint"/><category term="CGRect"/><category term="CLLocation"/><category term="CLLocationCoordinate2D"/><category term="CSM"/><category term="ChatGPT"/><category term="Claude"/><category term="CocoaPod"/><category term="Code Quality"/><category term="Codeigniter"/><category term="Combine date and time component into NSDate"/><category term="Combine two NSDates"/><category term="CommandLineTools"/><category term="CoreAnimation"/><category term="Custom UIBarButtonItem"/><category term="Custom UInavigationbar"/><category term="Custom URL Scheme"/><category term="CustomUitableview"/><category term="DATE Difference"/><category term="DBRestClient"/><category term="DBSession"/><category term="Default-568h"/><category term="Developer Tools"/><category term="Disallowed Key Characters"/><category term="DismissModalViewController"/><category term="Dropbox API"/><category term="EI Capitan"/><category term="Email Composing"/><category term="Enumeration"/><category term="Enumeration value not handled in UIPopoverArrowDirectionAny"/><category term="Enumeration value not handled in switch"/><category term="Error whitelist rejection"/><category term="Exception"/><category term="FOSOauthServerBundle"/><category term="FOSRestBundle"/><category term="FOSUserBundle"/><category term="Flask"/><category term="GMSCameraUpdate"/><category term="Gemini"/><category term="Gemini Pro AI agent"/><category term="Gemini Pro Python example"/><category term="Geocoding"/><category term="Git"/><category term="Github"/><category term="Google Map"/><category term="HTML"/><category term="HTTP"/><category term="HTTP status codes"/><category term="HTTPS"/><category term="Heuristics"/><category term="How to install .app package in iPhone Simulator"/><category term="How to install Xcode 3.2.6 on MACOSX Lion"/><category term="Hybrid"/><category term="Import Export sqlite db from Dropbox"/><category term="InnoDB error for MySQL5.6"/><category term="JSON"/><category term="Katappa"/><category term="Kong AI Gateway"/><category term="LLM"/><category term="LLM Gateway"/><category term="Langfuse"/><category term="LiteLLM"/><category term="Local path for iphone"/><category term="MKAnnotation"/><category term="MKMapview"/><category term="MMDrawer"/><category term="MMDrawerController"/><category term="Metadata"/><category term="NIB"/><category term="NSBundle"/><category term="NSCalendar"/><category term="NSDateComponents"/><category term="NSDictionary"/><category term="NSDocumentDirectory"/><category term="NSJSONSerialization"/><category term="NSURLRequest"/><category term="OAuth2.0"/><category term="OPTGROUP"/><category term="Objectivec"/><category term="Open Source"/><category term="OpenRouter"/><category term="PDF"/><category term="PDF email in iphone attachment"/><category term="Podfile"/><category term="Portkey"/><category term="Product owner"/><category term="Python"/><category term="Python AI agent tutorial"/><category term="Radiobutton in iPhone"/><category term="Reachability"/><category term="Ready for Sale"/><category term="Recalculation of persistent statistics requested for table"/><category term="Remove UIAlertview from window when didEnterBackground"/><category term="Run .app file onto another macosx"/><category term="SDCard"/><category term="SDK"/><category term="SSH"/><category term="Scrum"/><category term="Scrum Master"/><category term="Scrum alliance"/><category term="Side Project"/><category term="Sqlite DB"/><category term="Swipe"/><category term="Symfony2"/><category term="Sync Sqlite db with Dropbox"/><category term="TSplicedFONT failed creating descriptor for"/><category term="Tag"/><category term="Tagging"/><category term="Testflight"/><category term="TouchEvent"/><category term="Transport Security"/><category term="Trimming space"/><category term="TypeScript"/><category term="UIActivityIndicator"/><category term="UIApplication sharedApplication"/><category term="UIBArbuttonItem flip like ipod"/><category term="UIBarButtonItem flip"/><category term="UIBarButtonItem flip in iphone"/><category term="UIBarButtonItem title color iOS7"/><category term="UIButton title"/><category term="UIDevice currentDevice"/><category term="UIGestureRecognizer"/><category term="UIImageView+AFNetworking"/><category term="UINavigationBar ios7"/><category term="UINavigationBar title color iOS7"/><category term="UINavigationItem"/><category term="UIPopoverArrowDirection"/><category term="UIPopoverArrowDirectionUnknown"/><category term="UISearchBar iOS7"/><category term="UIStatusBarStyle iOS7"/><category term="UITableHeaderView Scrolls to top position"/><category term="UITableviewCell"/><category term="UITextField"/><category term="UITextField tint color"/><category term="UITextFieldAlignment"/><category term="UITextView tint color"/><category term="UIbutton shaking"/><category term="VNC"/><category term="Vibe Coding"/><category term="Web"/><category term="Web Development"/><category term="Why Katappa killed Bahuballi?"/><category term="XIB"/><category term="XML"/><category term="Xcode 3.2.6"/><category term="Xcode 4.5"/><category term="Xcode installation"/><category term="Zxing Library"/><category term="Zxing iPhone"/><category term="ZxingWidgetController"/><category term="[NSDate date]"/><category term="_clean_input_keys"/><category term="add 1 day to NSDate"/><category term="add 1 hour to NSDate"/><category term="add 5 minutes to NSDate"/><category term="add date with time component of another NSDate"/><category term="add days to NSDate"/><category term="add hours to NSDate"/><category term="add minutes to NSdate"/><category term="add uinavigationbar to modal uitableviewcontroller"/><category term="adding one date to another date"/><category term="animations"/><category term="appdelegate"/><category term="application loader"/><category term="approved"/><category term="authentication"/><category term="authorization"/><category term="autonomous AI agent"/><category term="badge"/><category term="brew"/><category term="build AI agent Gemini"/><category term="cell imageview"/><category term="ceremonies"/><category term="checking UIViewController"/><category term="contentHorizontolAlignment"/><category term="contentVerticalAlignment"/><category term="cordova"/><category term="crash on MMDrawer on sliding"/><category term="crash on route map directions"/><category term="csm mock questions"/><category term="custom MMDrawer"/><category term="custom UIAlertview"/><category term="date manipulation"/><category term="deauthorize macbook"/><category term="diskutils"/><category term="dismiss modal view from navigation controller on window"/><category term="drawer-icon"/><category term="failed on resume time"/><category term="flip UIBarButtonItem in iphone"/><category term="force user to update app"/><category term="http://itunes.apple.com/au/app/inthemix/id484848001?mt=8"/><category term="iOS built-in update mechanism"/><category term="iOS versions programmatically"/><category term="iOS7 check"/><category term="iOS7 optimization"/><category term="iPhone-5"/><category term="iPhone-5 UI elements"/><category term="iPhone5 optimization"/><category term="iScroll - enabling select boxes"/><category term="iTunes store"/><category term="icon"/><category term="icon specified in info.plist not found under top level wrapper"/><category term="import export file onto Dropbox"/><category term="innodb_index_stats"/><category term="innodb_table_stats"/><category term="inthemix"/><category term="inthemix itunes"/><category term="ionic2"/><category term="ipad"/><category term="keyboard focus color"/><category term="left-side of MMDrawer"/><category term="libbz2.dylib"/><category term="libiconv2.dylib"/><category term="linkedin icon with notification badge"/><category term="linker flag"/><category term="lint"/><category term="macosx"/><category term="map directions"/><category term="marquee feeling in iphone"/><category term="new line from NSString"/><category term="non-retina"/><category term="npm"/><category term="optimization of iOS7"/><category term="osx"/><category term="placeholder image"/><category term="polyline"/><category term="present modal view controller"/><category term="presentModalViewController"/><category term="ps1"/><category term="reddit"/><category term="reinstallation OSX"/><category term="remove \n"/><category term="remove duplicates character in iOS from NSString"/><category term="remove new line character from NSString"/><category term="remove white spaces"/><category term="retina"/><category term="rootViewController"/><category term="route map"/><category term="scroll text in iphone"/><category term="scroll to top"/><category term="scrollable text on navigation bar"/><category term="security"/><category term="select box iphone using iScroll"/><category term="services"/><category term="set background image of navigation bar"/><category term="set button title iPhone"/><category term="setImageWithURLRequest"/><category term="shake on iphone"/><category term="slave_master_info"/><category term="slave_relay_log_info"/><category term="slave_worker_info"/><category term="sound file in iPhone"/><category term="stringByReplacingOccurrencesOfString"/><category term="strings"/><category term="swipe tableview"/><category term="swipe using coreanimation"/><category term="tableheader scroll"/><category term="tableheaderview in iphone"/><category term="testflight sdk"/><category term="textAlignment"/><category term="transient table"/><category term="uitableview-scroll to top position"/><category term="uitextfield shaking"/><category term="update app"/><category term="upgrade"/><category term="virtual desktop"/><category term="whitelist rejection phonegap"/><category term="willEnterForeground"/><category term="window"/><category term="wipe macbook"/><title type='text'>Tech Insights</title><subtitle type='html'>Competing at the Edge of Innovation!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>72</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-2037015402957041654</id><published>2026-03-06T13:38:00.001+05:30</published><updated>2026-03-06T13:38:10.258+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI Detection"/><category scheme="http://www.blogger.com/atom/ns#" term="AI Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="ChatGPT"/><category scheme="http://www.blogger.com/atom/ns#" term="Claude"/><category scheme="http://www.blogger.com/atom/ns#" term="Code Quality"/><category scheme="http://www.blogger.com/atom/ns#" term="Developer Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="Flask"/><category scheme="http://www.blogger.com/atom/ns#" term="Gemini"/><category scheme="http://www.blogger.com/atom/ns#" term="Heuristics"/><category scheme="http://www.blogger.com/atom/ns#" term="Open Source"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><category scheme="http://www.blogger.com/atom/ns#" term="Side Project"/><category scheme="http://www.blogger.com/atom/ns#" term="Vibe Coding"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Development"/><title type='text'>Tool That Detects if a Website Was &quot;Vibe Coded&quot; — Here&#39;s How It Works!</title><content type='html'>&lt;blockquote&gt;&lt;em&gt;Vibe coding is everywhere. But can you tell when a website was built by prompting AI instead of writing
        code? I built VibeCheck to answer that question.&lt;/em&gt;&lt;/blockquote&gt;

&lt;p&gt;A friend sent me his new startup&#39;s landing page last month. Looked stunning — dark theme, smooth animations,
    glassmorphic cards, the whole nine yards. I opened DevTools out of curiosity and found a &lt;code&gt;data-v0-t&lt;/code&gt;
    attribute sitting right there in the markup. The entire thing was scaffolded with &lt;a href=&quot;https://v0.dev&quot;
        target=&quot;_blank&quot;&gt;v0&lt;/a&gt;. He hadn&#39;t written a single line of frontend code.&lt;/p&gt;

&lt;p&gt;No judgment — honestly, the site looked great. But it got me thinking. If I could spot that in 10 seconds by poking
    at the DOM, what other fingerprints are these AI tools leaving behind? And could you automate the detection?&lt;/p&gt;

&lt;p&gt;Turns out, you can. So I built &lt;a href=&quot;https://github.com/ashish-jabble/vibe-check&quot; target=&quot;_blank&quot;&gt;VibeCheck&lt;/a&gt;.
&lt;/p&gt;

&lt;div style=&quot;text-align: center; margin: 30px 0;&quot;&gt;
    &lt;img src=&quot;https://raw.githubusercontent.com/ashish-jabble/vibe-check/main/demo.gif&quot;
        alt=&quot;VibeCheck demo analyzing lovable.dev&quot;
        style=&quot;max-width: 100%; width: 800px; border-radius: 8px; box-shadow: 0 4px 20px rgba(0,0,0,0.15);&quot; /&gt;
    &lt;br /&gt;
    &lt;em style=&quot;color: #666; font-size: 14px;&quot;&gt;Analyzing &lt;a href=&quot;https://lovable.dev&quot; target=&quot;_blank&quot;&gt;lovable.dev&lt;/a&gt; —
        scored 42/100&lt;/em&gt;
&lt;/div&gt;

&lt;hr /&gt;

&lt;h2&gt;Wait, what&#39;s &quot;vibe coding&quot;?&lt;/h2&gt;

&lt;p&gt;If you haven&#39;t come across the term yet — vibe coding is when you build a website (or app, or feature) mostly by
    prompting AI tools. Sometimes that&#39;s specialized tools like v0, Bolt.new, Lovable, or Cursor. Sometimes it&#39;s just
    straight-up ChatGPT, Claude, or Gemini — paste the output into a file, fix what&#39;s broken, ship it. You describe what
    you want, the AI generates the code, you tweak it a bit, deploy, done.&lt;/p&gt;

&lt;p&gt;It&#39;s gotten &lt;em&gt;really&lt;/em&gt; good. I&#39;ve seen people ship MVPs in a weekend that would&#39;ve taken weeks to build from
    scratch. And for prototyping, it&#39;s genuinely amazing.&lt;/p&gt;

&lt;p&gt;But there&#39;s a flip side that doesn&#39;t get talked about enough.&lt;/p&gt;

&lt;p&gt;When someone submits a portfolio full of AI-generated sites during a hiring process, that&#39;s a problem. When a
    freelancer charges ₹2L for a &quot;custom-built&quot; website that was actually prompted in Bolt.new (or copy-pasted from a
    Claude conversation) in an afternoon, the client deserves to know. When a site skips accessibility, SEO
    fundamentals, and proper error handling because the AI didn&#39;t think of it — well, users pay the price.&lt;/p&gt;

&lt;p&gt;I wanted a way to check. Not to shame anyone (I use AI tools too), but simply to know.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;What already existed — and why it wasn&#39;t enough&lt;/h2&gt;

&lt;p&gt;I looked around before building anything, obviously. Found a couple of Chrome extensions — one checks for purple
    gradients and emoji density (seriously), another does some basic HTML analysis but gives you a binary
    &quot;likely/unlikely&quot; with no explanation of &lt;em&gt;why&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Then there&#39;s the AI text detector space — GPTZero, Originality.ai, etc. Those are great for detecting AI-written
    essays, but they only look at text content. They won&#39;t tell you that a site has 18 levels of DOM nesting, shadcn CSS
    variables everywhere, and Vercel&#39;s default caching headers.&lt;/p&gt;

&lt;p&gt;Nothing combined structural analysis + content heuristics + deployment signals into one tool. And nothing was open
    source, so you couldn&#39;t even see what rules it was using.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;So what does VibeCheck actually do?&lt;/h2&gt;

&lt;p&gt;You give it a URL. It does the following (all automated):&lt;/p&gt;

&lt;ol&gt;
    &lt;li&gt;Fetches the page — and if Cloudflare blocks the request, it spins up a headless browser with Playwright as a
        fallback&lt;/li&gt;
    &lt;li&gt;Crawls up to 6 internal pages (follows links on the same domain)&lt;/li&gt;
    &lt;li&gt;Pulls linked stylesheets and JS files — because a lot of signals hide in external assets, not in the HTML itself
    &lt;/li&gt;
    &lt;li&gt;Runs everything through 9 detection categories&lt;/li&gt;
    &lt;li&gt;Spits out a score from 0 to 100, with a breakdown of every finding&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The important bit: &lt;b&gt;every point in the score maps to something concrete&lt;/b&gt;. If the tool says 72, you can scroll
    through and see exactly which signals were found, on which page, and how confident the detection is. No black box.
&lt;/p&gt;

&lt;p&gt;Scoring works like this:&lt;/p&gt;

&lt;table style=&quot;border-collapse: collapse; width: 100%; max-width: 480px; margin: 16px 0;&quot;&gt;
    &lt;thead&gt;
        &lt;tr style=&quot;background-color: #f5f5f5;&quot;&gt;
            &lt;th style=&quot;border: 1px solid #ddd; padding: 10px; text-align: left;&quot;&gt;Score&lt;/th&gt;
            &lt;th style=&quot;border: 1px solid #ddd; padding: 10px; text-align: left;&quot;&gt;What it means&lt;/th&gt;
        &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;🟢 0–25&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;Probably human-crafted&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;🟡 26–50&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;Mixed — hard to tell&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;🟠 51–75&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;Likely vibe coded&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;🔴 76–100&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;Almost certainly vibe coded&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h2&gt;The 9 things it checks&lt;/h2&gt;

&lt;p&gt;I&#39;ll keep this concise. Each category looks for specific, verifiable patterns:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;🤖 AI Platform Signatures&lt;/b&gt; — This is the most direct evidence. v0 leaves &lt;code&gt;data-v0-t&lt;/code&gt; attributes in
    the HTML. Lovable and GPTEngineer inject references into the source. Bolt.new has its own markers. Some tools add
    &lt;code&gt;&amp;lt;meta generator&amp;gt;&lt;/code&gt; tags. If these exist, it&#39;s pretty much game over — that&#39;s hard proof.
&lt;/p&gt;

&lt;p&gt;&lt;b&gt;🧩 UI Library Patterns&lt;/b&gt; — AI tools default to shadcn/ui more than anything else. VibeCheck looks for the
    telltale class combos (&lt;code&gt;rounded-md border bg-background&lt;/code&gt;), Radix UI data attributes, shadcn-specific CSS
    variables like &lt;code&gt;--radius&lt;/code&gt; and &lt;code&gt;--ring&lt;/code&gt;, and Lucide icon SVGs.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;⚡ Framework Detection&lt;/b&gt; — Next.js markers (&lt;code&gt;__next&lt;/code&gt;, &lt;code&gt;_next/static&lt;/code&gt;), Vite module scripts,
    React/Nuxt/Astro/SvelteKit traces. On its own this means nothing — tons of developers use Next.js. But Next.js +
    shadcn + Vercel is &lt;em&gt;the&lt;/em&gt; vibe coding stack, and the tool picks up on that combination.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;📝 Content Signals&lt;/b&gt; — Generic marketing copy has a pattern. If your site says &quot;Transform your workflow&quot; and
    &quot;Revolutionize your business&quot; and has 26 &quot;Get Started&quot; buttons, that&#39;s a signal. Same with stock image CDNs
    (Unsplash URLs, Pexels embeds) and placeholder text that never got replaced.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;🔬 Code Quality&lt;/b&gt; — DOM nesting depth is a surprisingly good indicator. AI-generated markup tends to be deeply
    nested (18+ levels isn&#39;t uncommon). High Tailwind utility-class density is another — elements with 10+ classes each.
    Also checks for those perfectly organized AI-style comments: &lt;code&gt;&amp;lt;!-- Hero Section --&amp;gt;&lt;/code&gt;,
    &lt;code&gt;&amp;lt;!-- Features Grid --&amp;gt;&lt;/code&gt;. Real developers rarely comment that neatly, let&#39;s be honest.
&lt;/p&gt;

&lt;p&gt;&lt;b&gt;🚀 Deployment Signals&lt;/b&gt; — Checks response headers and DNS for Vercel, Netlify, Railway. Also checks if
    &lt;code&gt;robots.txt&lt;/code&gt; and &lt;code&gt;sitemap.xml&lt;/code&gt; exist. Vibe-coded projects almost never set these up because
    the AI doesn&#39;t think about it and most people don&#39;t know to ask.
&lt;/p&gt;

&lt;p&gt;&lt;b&gt;🎨 Design Patterns&lt;/b&gt; — &lt;code&gt;backdrop-blur&lt;/code&gt; everywhere (glassmorphism), gradient overuse, the classic hero
    → features grid → testimonials → CTA layout that every AI tool generates. Card grids, neon glow effects.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;♿ Accessibility&lt;/b&gt; — Missing alt text, no ARIA labels, broken heading hierarchy, missing form labels. AI tools
    are getting better at this, but they still skip a lot of the basics.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;🔍 SEO&lt;/b&gt; — Missing or generic titles, no meta descriptions, multiple &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; tags on one page,
    no Open Graph tags. Pretty common in AI output because SEO requires intentionality.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;Not all signals are equal (the tier system)&lt;/h2&gt;

&lt;p&gt;This was something I spent a lot of time on. Early versions of the tool would flag a site as &quot;probably vibe coded&quot;
    just because it used Tailwind and was on Vercel. That&#39;s obviously wrong — plenty of legitimately hand-coded projects
    use that stack.&lt;/p&gt;

&lt;p&gt;So I built a 4-tier evidence system:&lt;/p&gt;

&lt;table style=&quot;border-collapse: collapse; width: 100%; max-width: 700px; margin: 16px 0;&quot;&gt;
    &lt;thead&gt;
        &lt;tr style=&quot;background-color: #f5f5f5;&quot;&gt;
            &lt;th style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;Tier&lt;/th&gt;
            &lt;th style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;Points&lt;/th&gt;
            &lt;th style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;Cap&lt;/th&gt;
            &lt;th style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;Example&lt;/th&gt;
        &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;🔴 Definitive&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;25 pts&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;None&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;v0.dev data attributes in HTML&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;🟠 Strong&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;10 pts&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;40&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;shadcn/ui class patterns detected&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;🟡 Moderate&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;4 pts&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;25&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;Generic marketing phrases&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;⚪ Weak&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;2 pts&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;10&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;Deployed on Vercel&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;The caps are important. Seven weak signals can&#39;t push a score past 10 points, no matter how many you find. But one
    definitive finding (an actual v0 data attribute) is worth 25 points on its own. This way, a legitimate
    Next.js/Vercel site doesn&#39;t get unfairly flagged, but actual AI fingerprints get properly weighted.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;Under the hood&lt;/h2&gt;

&lt;p&gt;The tech stack is straightforward — I didn&#39;t want it to be complicated for people to self-host or contribute to:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;b&gt;Python + Flask&lt;/b&gt; for the server and API endpoint&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;BeautifulSoup + lxml&lt;/b&gt; for HTML parsing&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;Playwright&lt;/b&gt; for headless browser fallback (some sites have Cloudflare protection that blocks regular
        requests)&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;Vanilla HTML/CSS/JS&lt;/b&gt; for the frontend — yes, no React. I wanted it simple&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing I want to emphasize: &lt;b&gt;no AI is used in the detection&lt;/b&gt;. The whole analyzer is plain heuristic pattern
    matching. The detection engine is a single Python file (~1,000 lines). Every rule is readable, every weight is
    configurable. I didn&#39;t want this to be another black box.&lt;/p&gt;

&lt;p&gt;The analysis flow:&lt;/p&gt;

&lt;pre
    style=&quot;background-color: #1e1e1e; color: #d4d4d4; padding: 16px; border-radius: 8px; overflow-x: auto; font-family: &#39;Courier New&#39;, monospace; font-size: 14px; line-height: 1.6;&quot;&gt;
URL submitted
    ↓
Fetch page (requests first, Playwright if blocked)
    ↓
Discover &amp;amp; crawl internal pages (≤6)
    ↓
Fetch linked CSS/JS assets (≤10)
    ↓
Run 9 detection categories
    ↓
Compute tiered score
    ↓
Return JSON with score + all evidence&lt;/pre&gt;

&lt;hr /&gt;

&lt;h2&gt;A few things I learned along the way&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;AI code has a &quot;smell,&quot; and it&#39;s the combination that gives it away.&lt;/b&gt; No single signal is definitive (except
    platform-specific markers). But when you see Next.js + shadcn/ui + Vercel + 18-level DOM nesting + generic copy +
    missing robots.txt + glassmorphism on every card — you know. Individually, each of those is fine. Together, the
    pattern is unmistakable.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;False positives are unavoidable.&lt;/b&gt; A well-known SaaS company using shadcn/ui legitimately will trigger some
    signals. That&#39;s by design — the tier system keeps it in the &quot;Mixed Signals&quot; range unless there&#39;s stronger evidence.
    I&#39;ve tuned the weights a lot, but it&#39;s an ongoing process. If you run it against your own (genuinely hand-coded)
    site and it scores high, I&#39;d genuinely like to know — that helps me improve the heuristics.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;AI tool output is evolving fast.&lt;/b&gt; v0&#39;s output six months ago was way more obvious than what it produces now.
    Some tools have started cleaning up their markers. The heuristics need to keep pace, which is partly why I made the
    whole thing open source — more eyes on it, more rules getting added.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Static analysis only goes so far.&lt;/b&gt; VibeCheck can&#39;t execute full client-side JS in a meaningful way. SPAs that
    render everything dynamically will show fewer signals. Playwright helps with the initial load, but there&#39;s a ceiling
    to what you can detect without something more sophisticated. That&#39;s on the roadmap, eventually.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;Try it&lt;/h2&gt;

&lt;p&gt;It&#39;s &lt;a href=&quot;https://github.com/ashish-jabble/vibe-check&quot; target=&quot;_blank&quot;&gt;on GitHub&lt;/a&gt; — MIT licensed, free to use.
&lt;/p&gt;

&lt;p&gt;Getting it running locally takes about 2 minutes:&lt;/p&gt;

&lt;pre
    style=&quot;background-color: #1e1e1e; color: #d4d4d4; padding: 16px; border-radius: 8px; overflow-x: auto; font-family: &#39;Courier New&#39;, monospace; font-size: 14px; line-height: 1.6;&quot;&gt;
git clone https://github.com/ashish-jabble/vibe-check.git
cd vibe-check
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python app.py&lt;/pre&gt;

&lt;p&gt;Then open &lt;code&gt;http://localhost:5000&lt;/code&gt;, paste a URL, and see what comes back.&lt;/p&gt;

&lt;p&gt;There&#39;s also a JSON API if you want to integrate it into something:&lt;/p&gt;

&lt;pre
    style=&quot;background-color: #1e1e1e; color: #d4d4d4; padding: 16px; border-radius: 8px; overflow-x: auto; font-family: &#39;Courier New&#39;, monospace; font-size: 14px; line-height: 1.6;&quot;&gt;
curl -X POST http://localhost:5000/api/analyze \
  -H &quot;Content-Type: application/json&quot; \
  -d &#39;{&quot;url&quot;: &quot;https://example.com&quot;}&#39;&lt;/pre&gt;

&lt;hr /&gt;

&lt;h2&gt;What I want to build next&lt;/h2&gt;

&lt;p&gt;Some things I&#39;m thinking about (PRs welcome, by the way):&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;A &lt;b&gt;browser extension&lt;/b&gt; that shows a quick vibe score while you&#39;re browsing&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;Batch analysis&lt;/b&gt; — paste a list of URLs and get a report&lt;/li&gt;
    &lt;li&gt;Tracking &lt;b&gt;score changes over time&lt;/b&gt; for a given site (interesting for portfolio audits)&lt;/li&gt;
    &lt;li&gt;Adding detection rules for newer tools — &lt;b&gt;Windsurf&lt;/b&gt;, &lt;b&gt;Replit Agent&lt;/b&gt;, and better fingerprinting for
        code generated by &lt;b&gt;ChatGPT&lt;/b&gt;, &lt;b&gt;Claude&lt;/b&gt;, and &lt;b&gt;Gemini&lt;/b&gt;&lt;/li&gt;
    &lt;li&gt;Maybe a public hosted version with rate limiting, though self-hosting is always going to be an option&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you work in hiring, client services, or QA and find this useful — or if you think a detection rule is unfair or
    missing something — I&#39;d like to hear about it. Open an issue or shoot me a message.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Again: this isn&#39;t about dunking on vibe coding. I use AI tools in my own workflow. But when the question is &quot;did a
    human actually build this?&quot; — whether for hiring, for client work, or just for curiosity — there should be a way to
    get a straight answer backed by real evidence.&lt;/p&gt;

&lt;p&gt;That&#39;s what VibeCheck does.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href=&quot;https://github.com/ashish-jabble/vibe-check&quot; target=&quot;_blank&quot;&gt;github.com/ashish-jabble/vibe-check&lt;/a&gt;&lt;/p&gt;



</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/2037015402957041654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2026/03/tool-that-detects-if-website-was-vibe.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/2037015402957041654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/2037015402957041654'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2026/03/tool-that-detects-if-website-was-vibe.html' title='Tool That Detects if a Website Was &quot;Vibe Coded&quot; — Here&#39;s How It Works!'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-3184332027478950410</id><published>2026-02-25T17:38:00.003+05:30</published><updated>2026-02-25T17:48:51.297+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI task management"/><category scheme="http://www.blogger.com/atom/ns#" term="autonomous AI agent"/><category scheme="http://www.blogger.com/atom/ns#" term="build AI agent Gemini"/><category scheme="http://www.blogger.com/atom/ns#" term="Gemini Pro AI agent"/><category scheme="http://www.blogger.com/atom/ns#" term="Gemini Pro Python example"/><category scheme="http://www.blogger.com/atom/ns#" term="Python AI agent tutorial"/><title type='text'>Build Your First AI Agent with Gemini – Python Tutorial + GitHub Template</title><content type='html'>&lt;p&gt;&lt;i&gt;Learn to build your first autonomous AI agent using Gemini and Python. Step-by-step tutorial with GitHub repo, code examples, and diagrams for beginners.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/p&gt;&lt;h2 data-end=&quot;769&quot; data-start=&quot;750&quot;&gt;&lt;strong data-end=&quot;769&quot; data-start=&quot;753&quot;&gt;Introduction&lt;/strong&gt;&lt;/h2&gt;&lt;p data-end=&quot;969&quot; data-start=&quot;771&quot;&gt;Are you curious about &lt;strong data-end=&quot;815&quot; data-start=&quot;793&quot;&gt;building AI agents&lt;/strong&gt; that can think, act, and manage tasks autonomously? With &lt;strong data-end=&quot;887&quot; data-start=&quot;873&quot;&gt;Gemini&lt;/strong&gt;&amp;nbsp;and Python, you can create your very own intelligent agent in just a few steps.&lt;/p&gt;&lt;p data-end=&quot;1014&quot; data-start=&quot;971&quot;&gt;In this tutorial, we’ll walk you through:&lt;/p&gt;&lt;ul data-end=&quot;1219&quot; data-start=&quot;1016&quot;&gt;
&lt;li data-end=&quot;1060&quot; data-start=&quot;1016&quot;&gt;
&lt;p data-end=&quot;1060&quot; data-start=&quot;1018&quot;&gt;Setting up a Gemini AI agent&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1102&quot; data-start=&quot;1061&quot;&gt;
&lt;p data-end=&quot;1102&quot; data-start=&quot;1063&quot;&gt;Running the agent locally with Python&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1149&quot; data-start=&quot;1103&quot;&gt;
&lt;p data-end=&quot;1149&quot; data-start=&quot;1105&quot;&gt;Understanding the code and logic behind it&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1219&quot; data-start=&quot;1150&quot;&gt;
&lt;p data-end=&quot;1219&quot; data-start=&quot;1152&quot;&gt;Linking the ready-to-use &lt;strong data-end=&quot;1196&quot; data-start=&quot;1177&quot;&gt;GitHub template&lt;/strong&gt; for easy replication&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;



&lt;/p&gt;&lt;p data-end=&quot;1337&quot; data-start=&quot;1221&quot;&gt;By the end, you’ll have a functional AI agent capable of managing a simple to-do list and ready for customization.&lt;/p&gt;&lt;p data-end=&quot;1337&quot; data-start=&quot;1221&quot;&gt;&lt;strong data-end=&quot;1364&quot; data-start=&quot;1347&quot;&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;strong data-end=&quot;1364&quot; data-start=&quot;1347&quot;&gt;Prerequisites&lt;/strong&gt;&lt;/h2&gt;&lt;p data-end=&quot;1403&quot; data-start=&quot;1366&quot;&gt;Before you start, make sure you have:&lt;/p&gt;&lt;p data-end=&quot;1337&quot; data-start=&quot;1221&quot;&gt;

&lt;/p&gt;&lt;ul data-end=&quot;1985&quot; data-start=&quot;1809&quot; style=&quot;text-align: left;&quot;&gt;
&lt;li data-end=&quot;1466&quot; data-start=&quot;1405&quot;&gt;
&lt;p data-end=&quot;1466&quot; data-start=&quot;1407&quot;&gt;A &lt;strong data-end=&quot;1436&quot; data-start=&quot;1409&quot;&gt;Gemini subscription&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1497&quot; data-start=&quot;1467&quot;&gt;
&lt;p data-end=&quot;1497&quot; data-start=&quot;1469&quot;&gt;&lt;strong data-end=&quot;1485&quot; data-start=&quot;1469&quot;&gt;Python 3.10+&lt;/strong&gt; installed&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1539&quot; data-start=&quot;1498&quot;&gt;
&lt;p data-end=&quot;1539&quot; data-start=&quot;1500&quot;&gt;Basic knowledge of Python programming&lt;/p&gt;&lt;/li&gt;&lt;li data-end=&quot;1539&quot; data-start=&quot;1498&quot;&gt;&lt;p data-end=&quot;1539&quot; data-start=&quot;1500&quot;&gt;Git installed to clone the repo&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Step 1: Clone the GitHub Repository&lt;/h2&gt;

&lt;p&gt;We’ve prepared a complete template for your AI agent. Clone it locally:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git clone https://github.com/ashish-jabble/ai.git
cd ai/agents/gemini&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This repository includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;agent_gemini.py&lt;/strong&gt; → Main agent script&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;requirements.txt&lt;/strong&gt; → Python dependencies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;diagram.png&lt;/strong&gt; → Visual overview of the agent&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2&gt;Step 2: Install Dependencies&lt;/h2&gt;

&lt;p&gt;Install the required Python packages:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;pip install -r requirements.txt&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This ensures your agent can communicate with Gemini properly.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;Step 3: Set Your Gemini API Key&lt;/h2&gt;

&lt;p&gt;To allow your agent to use Gemini, export your API key as an environment variable.&lt;/p&gt;

&lt;h4&gt;On macOS / Linux:&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;export GEMINI_API_KEY=&quot;your_key_here&quot;&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;On Windows (PowerShell):&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;setx GEMINI_API_KEY &quot;your_key_here&quot;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Never commit your API key to GitHub. Always use environment variables.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;Step 4: Run Your AI Agent&lt;/h2&gt;

&lt;p&gt;Start the agent with:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;python gemini.py&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You will see a prompt like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Enter a new task for your AI agent:&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Example input:&lt;/p&gt;

&lt;pre&gt;&lt;span style=&quot;background-color: white; font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; white-space: normal;&quot;&gt;Find the latest major tech news headlines from the past hour and summarize the top 3 with bullet points.&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The agent will display top 3 news from techcrunch.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;Step 5: Explore the Code&lt;/h2&gt;

&lt;p&gt;Here’s how the logic works inside &lt;strong&gt;gemini.py&lt;/strong&gt;:&lt;/p&gt;

&lt;h4&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;1. Read&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-family: Menlo, Monaco, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;font-family: Menlo, Monaco, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;ash command and returns the standard output&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;def execute_bash():&lt;br /&gt;    ...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This function can be used for things like creating directories, moving files, searching, or running curl requests.&lt;/p&gt;

&lt;h4&gt;3. Gemini Interaction&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;chat = client.chats.create(model=&#39;gemini-2.5-flash&#39;, config=config)&lt;/code&gt;&lt;/pre&gt;

&lt;hr /&gt;

&lt;h2&gt;Step 6: Architecture Diagram&lt;/h2&gt;

&lt;p&gt;Below is a simple architecture overview:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[User Input] → [Gemini API] → [Agent Logic] → [Output]&lt;/code&gt;&lt;/pre&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;User Input&lt;/strong&gt; → You provide a new task&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gemini API&lt;/strong&gt; → AI processes and prioritizes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent Logic&lt;/strong&gt; → Python handles task management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory&lt;/strong&gt; → Tasks saved locally&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Output&lt;/strong&gt; → Updated prioritized list&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2&gt;Step 7: Customize Your Agent&lt;/h2&gt;

&lt;p&gt;Once your agent works, you can extend it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add multi-step reasoning&lt;/li&gt;
&lt;li&gt;Integrate Google Calendar or email APIs&lt;/li&gt;
&lt;li&gt;Create multi-agent workflows&lt;/li&gt;
&lt;li&gt;Store memory in a database instead of a text file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gemini Pro allows longer context windows, making it ideal for advanced workflows.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;Step 8: GitHub Repository&lt;/h2&gt;

&lt;p&gt;Explore or download the full template here:&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://github.com/ashish-jabble/ai/tree/main/agents/gemini&quot; target=&quot;_blank&quot;&gt;
&lt;strong&gt;View on GitHub → Gemini AI Agent Template&lt;/strong&gt;
&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;This repository serves as the foundation for building more advanced AI agents using Gemini.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;strong&gt;Congratulations!&lt;/strong&gt; 🎉&lt;/p&gt;
&lt;p&gt;You have successfully built your first AI agent using Gemini and Python. Now you can extend it, improve it, and integrate it into real-world applications.&lt;/p&gt;&lt;p&gt;&lt;strong data-end=&quot;4662&quot; data-start=&quot;4654&quot;&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong data-end=&quot;4662&quot; data-start=&quot;4654&quot;&gt;Tip:&lt;/strong&gt; Bookmark this repo — it’s the foundation for all future AI agent experiments!&lt;/p&gt;&lt;h2 data-end=&quot;4766&quot; data-start=&quot;4749&quot;&gt;&lt;strong data-end=&quot;4766&quot; data-start=&quot;4752&quot;&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;4766&quot; data-start=&quot;4749&quot;&gt;&lt;strong data-end=&quot;4766&quot; data-start=&quot;4752&quot;&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;&lt;p data-end=&quot;4961&quot; data-start=&quot;4768&quot;&gt;You’ve now built your first &lt;strong data-end=&quot;4836&quot; data-start=&quot;4796&quot;&gt;autonomous AI agent using Gemini&lt;/strong&gt;. With the GitHub template, Python code, and step-by-step tutorial, you can start experimenting with advanced AI workflows.&lt;/p&gt;&lt;p data-end=&quot;4961&quot; data-start=&quot;4768&quot;&gt;&lt;i&gt;Share your agent with friends, customize it for your own tasks, and watch your AI skills grow!&lt;/i&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/3184332027478950410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2026/02/build-your-first-ai-agent-with-gemini.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/3184332027478950410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/3184332027478950410'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2026/02/build-your-first-ai-agent-with-gemini.html' title='Build Your First AI Agent with Gemini – Python Tutorial + GitHub Template'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-4852698803715123406</id><published>2026-02-24T16:29:00.004+05:30</published><updated>2026-02-25T17:55:36.869+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Kong AI Gateway"/><category scheme="http://www.blogger.com/atom/ns#" term="Langfuse"/><category scheme="http://www.blogger.com/atom/ns#" term="LiteLLM"/><category scheme="http://www.blogger.com/atom/ns#" term="LLM"/><category scheme="http://www.blogger.com/atom/ns#" term="LLM Gateway"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenRouter"/><category scheme="http://www.blogger.com/atom/ns#" term="Portkey"/><title type='text'>LLM Gateways: The Missing Infrastructure Layer for Production AI</title><content type='html'>&lt;h2 style=&quot;text-align: left;&quot;&gt;The Problem: LLM Calls Are Not Just API Calls&lt;/h2&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;When you first integrate an LLM into your application, it feels simple. You install the &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=OpenAI+SDK&amp;amp;bbid=3825422117901839927&amp;amp;bpid=4852698803715123406&quot; target=&quot;_blank&quot;&gt;OpenAI SDK&lt;/a&gt;, pass a prompt, get a response. Ship it.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Then reality hits.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;You want to try &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=Claude+AI&amp;amp;bbid=3825422117901839927&amp;amp;bpid=4852698803715123406&quot; target=&quot;_blank&quot;&gt;Claude&lt;/a&gt; for summarization because it&#39;s cheaper. Now you have two SDKs, two authentication flows, two response formats. A teammate adds Mistral for a classification task. Someone else wants to experiment with Llama running on &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=AWS+Bedrock&amp;amp;bbid=3825422117901839927&amp;amp;bpid=4852698803715123406&quot; target=&quot;_blank&quot;&gt;Bedrock&lt;/a&gt;. Suddenly, your &quot;simple&quot; integration has become a tangle of provider-specific code scattered across your codebase.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;But the &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=define+API+sprawl&amp;amp;bbid=3825422117901839927&amp;amp;bpid=4852698803715123406&quot; target=&quot;_blank&quot;&gt;API sprawl&lt;/a&gt; is only the surface. The deeper problems creep in once LLM calls sit on the critical path of your system:&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;Cost blindness.&lt;/strong&gt; &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=LLM+token-based+pricing+implications&amp;amp;bbid=3825422117901839927&amp;amp;bpid=4852698803715123406&quot; target=&quot;_blank&quot;&gt;Token-based pricing&lt;/a&gt; is unpredictable. A single runaway loop can burn through your monthly budget in minutes. Without centralized tracking, you have no idea which team, feature, or prompt is responsible for the spend.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;Fragile reliability.&lt;/strong&gt; LLM providers have outages. Rate limits get hit. Latency spikes. Without retries, fallbacks, and circuit breaking, your application is only as reliable as the weakest provider endpoint you depend on.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;Zero observability.&lt;/strong&gt; Traditional &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=APM+tools+vs+LLM+observability&amp;amp;bbid=3825422117901839927&amp;amp;bpid=4852698803715123406&quot; target=&quot;_blank&quot;&gt;APM tools&lt;/a&gt; can tell you an HTTP call took 3 seconds. They can&#39;t tell you that it consumed 4,200 tokens, cost $0.12, and the response quality degraded because you hit a rate limit and silently fell back to a weaker model.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;Governance gaps.&lt;/strong&gt; As LLM usage grows across teams, you need to answer questions like: who has access to which models? Are we leaking &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=define+PII+LLM+security&amp;amp;bbid=3825422117901839927&amp;amp;bpid=4852698803715123406&quot; target=&quot;_blank&quot;&gt;PII&lt;/a&gt; in prompts? Is anyone using unapproved providers? Without a centralized layer, these questions are nearly impossible to answer.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;








&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;This is the problem space &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=define+LLM+gateways&amp;amp;bbid=3825422117901839927&amp;amp;bpid=4852698803715123406&quot; target=&quot;_blank&quot;&gt;LLM gateways&lt;/a&gt; were built to solve.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;What Is an LLM Gateway?&lt;/h2&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;An LLM gateway is a centralized service that sits between your applications and LLM providers. Instead of your code talking directly to OpenAI, Anthropic, or a self-hosted model, requests flow through the gateway. The gateway then handles routing, authentication, retries, caching, spend tracking, and observability — all without your application needing to know the details.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Think of it as what an API gateway (like Kong or Nginx) does for microservices, but purpose-built for the unique demands of LLM traffic: token-based billing, streaming responses, &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=define+semantic+caching+LLM&amp;amp;bbid=3825422117901839927&amp;amp;bpid=4852698803715123406&quot; target=&quot;_blank&quot;&gt;semantic caching&lt;/a&gt;, prompt-level security, and multi-model routing.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;


&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;From the application&#39;s perspective, there&#39;s one stable interface. From the platform team&#39;s perspective, there&#39;s one place to observe, control, and govern all LLM usage across the organization.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;/p&gt;&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;The Contenders: LiteLLM, Portkey, OpenRouter, and Kong AI Gateway&lt;/h2&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Not all gateways solve the same problems in the same way. Let&#39;s break down four popular options and what makes each one distinct.&lt;/p&gt;
&lt;h3 class=&quot;text-text-100 mt-2 -mb-1 text-base font-bold&quot;&gt;1. LiteLLM — The Open-Source Swiss Army Knife&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;What it is:&lt;/strong&gt; An open-source proxy and SDK that provides a unified, &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=define+OpenAI-compatible+API&amp;amp;bbid=3825422117901839927&amp;amp;bpid=4852698803715123406&quot; target=&quot;_blank&quot;&gt;OpenAI-compatible API&lt;/a&gt; across 100+ LLM providers.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;Why choose it:&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;[li_&amp;amp;]:mb-0 [li_&amp;amp;]:mt-1 [li_&amp;amp;]:gap-1 [&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Full self-hosted control.&lt;/strong&gt; You deploy it on your own infrastructure. Your data never leaves your network. For teams in regulated industries or with strict data residency requirements, this matters enormously.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Provider breadth.&lt;/strong&gt; &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=LiteLLM+LLM+gateway&amp;amp;bbid=3825422117901839927&amp;amp;bpid=4852698803715123406&quot; target=&quot;_blank&quot;&gt;LiteLLM&lt;/a&gt; supports virtually every major provider — OpenAI, Anthropic, Bedrock, Vertex, Mistral, Ollama, and many more — behind a single &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;completion()&lt;/code&gt; call.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Cost tracking built in.&lt;/strong&gt; Automatic spend tracking across providers, with the ability to log costs to S3, GCS, or your data warehouse. You can set budgets per team or per API key.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Open source (MIT).&lt;/strong&gt; The core is free. You can inspect the code, contribute, and customize. Enterprise features like SSO, JWT auth, and audit logging are available as paid add-ons.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;The trade-off:&lt;/strong&gt; LiteLLM is infrastructure you operate. You&#39;re responsible for scaling, availability, and monitoring. Observability is basic out of the box — you&#39;ll likely want to pair it with something like &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=Langfuse+LLM+observability&amp;amp;bbid=3825422117901839927&amp;amp;bpid=4852698803715123406&quot; target=&quot;_blank&quot;&gt;Langfuse&lt;/a&gt; for deeper tracing and evaluation. There&#39;s no native enterprise governance (RBAC, workspaces, approval workflows) without additional tooling.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Platform teams that want maximum control and flexibility, are comfortable managing infrastructure, and need to give internal developers unified access to many LLMs with cost guardrails.&lt;/p&gt;
&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;
&lt;h3 class=&quot;text-text-100 mt-2 -mb-1 text-base font-bold&quot;&gt;2. Portkey — The Production Control Plane&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A managed AI gateway and observability platform designed for production GenAI workloads, supporting 1,600+ models.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;Why choose it:&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;[li_&amp;amp;]:mb-0 [li_&amp;amp;]:mt-1 [li_&amp;amp;]:gap-1 [&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Enterprise-grade out of the box.&lt;/strong&gt; &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=Portkey+AI+gateway&amp;amp;bbid=3825422117901839927&amp;amp;bpid=4852698803715123406&quot; target=&quot;_blank&quot;&gt;Portkey&lt;/a&gt; ships with features many teams would otherwise spend months building: RBAC, workspaces, audit trails, SSO/SCIM, and data residency controls.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Deep observability.&lt;/strong&gt; Detailed logs, latency metrics, token and cost analytics — broken down by app, team, or model. This is not an afterthought; it&#39;s core to the product.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Guardrails and security.&lt;/strong&gt; Request and response filters, jailbreak detection, PII redaction, and policy-based enforcement are built in. If compliance is a first-class concern, Portkey addresses it natively.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Prompt management.&lt;/strong&gt; Reusable templates, variable substitution, versioning, and environment promotion (dev → staging → prod) for prompts.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Reliability primitives.&lt;/strong&gt; Automatic retries, fallbacks with exponential backoff, and configurable routing across providers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;The trade-off:&lt;/strong&gt; Portkey introduces a managed layer into your architecture. It&#39;s more opinionated than LiteLLM, which means less customization but faster time to production. Advanced governance features sit in higher-tier paid plans. For lightweight prototyping, it can feel heavier than needed.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Product and engineering teams building production LLM applications that need reliability, cost control, and compliance without building the platform layer themselves.&lt;/p&gt;
&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;
&lt;h3 class=&quot;text-text-100 mt-2 -mb-1 text-base font-bold&quot;&gt;3. OpenRouter — The Model Marketplace&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A developer-focused gateway that provides a single API for accessing 280+ models across providers, abstracting billing and credentials behind a unified endpoint.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;Why choose it:&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;[li_&amp;amp;]:mb-0 [li_&amp;amp;]:mt-1 [li_&amp;amp;]:gap-1 [&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Zero infrastructure.&lt;/strong&gt; There&#39;s nothing to deploy. Point your OpenAI SDK to &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=OpenRouter+LLM+gateway&amp;amp;bbid=3825422117901839927&amp;amp;bpid=4852698803715123406&quot; target=&quot;_blank&quot;&gt;OpenRouter&lt;/a&gt;&#39;s base URL, and you immediately have access to models from OpenAI, Anthropic, Mistral, Meta, Google, and dozens of open-source providers.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Effortless experimentation.&lt;/strong&gt; Want to compare &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=GPT-4o+model&amp;amp;bbid=3825422117901839927&amp;amp;bpid=4852698803715123406&quot; target=&quot;_blank&quot;&gt;GPT-4o&lt;/a&gt; against Claude Sonnet against Llama 3? Change the model string in your request. No new accounts, no new API keys, no provider-specific SDKs.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Automatic failover.&lt;/strong&gt; Requests can be transparently routed around provider outages to maintain availability.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Unified billing.&lt;/strong&gt; One account, one bill, regardless of how many providers you use.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;The trade-off:&lt;/strong&gt; OpenRouter adds a 5% markup on requests — that&#39;s the cost of convenience. Observability is limited; there&#39;s no deep tracing, token-level debugging, or per-team cost attribution. Governance and access controls are minimal, making it difficult to use as an internal platform for large organizations. You&#39;re also trusting a third party with your prompts and API traffic.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Individual developers and small teams in the experimentation and prototyping phase who prioritize model flexibility and speed of iteration over infrastructure control or enterprise governance.&lt;/p&gt;
&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;
&lt;h3 class=&quot;text-text-100 mt-2 -mb-1 text-base font-bold&quot;&gt;4. Kong AI Gateway — The Enterprise API Gateway, Extended&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;What it is:&lt;/strong&gt; AI-specific capabilities built into Kong Gateway (the widely-deployed open-source API gateway), delivered as a suite of plugins.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;Why choose it:&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;[li_&amp;amp;]:mb-0 [li_&amp;amp;]:mt-1 [li_&amp;amp;]:gap-1 [&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Leverage existing infrastructure.&lt;/strong&gt; If your organization already runs Kong for API management, adding AI gateway capabilities is an incremental step — not a new tool. All 1,000+ existing Kong plugins (auth, rate limiting, transformations, logging) work alongside AI traffic.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Semantic intelligence.&lt;/strong&gt; Kong&#39;s AI plugins go beyond basic proxying. Semantic caching reduces redundant LLM calls. Semantic routing dispatches requests to the best model based on prompt content. A prompt guard enforces topic-level allow/deny lists.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Security and compliance.&lt;/strong&gt; PII sanitization across 18 languages, integration with AWS Bedrock Guardrails, Azure AI Content Safety, and Google Cloud Model Armor. &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=prompt+injection+detection+security&amp;amp;bbid=3825422117901839927&amp;amp;bpid=4852698803715123406&quot; target=&quot;_blank&quot;&gt;Prompt injection detection&lt;/a&gt;. These are production-grade security features.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;MCP and A2A support.&lt;/strong&gt; Kong has moved aggressively into supporting Model Context Protocol and Agent-to-Agent workflows, making it a strong choice for teams building agentic systems.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;Deployment flexibility.&lt;/strong&gt; Self-hosted, Kubernetes-native (via Kong Ingress Controller), hybrid, or managed through Kong Konnect.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;The trade-off:&lt;/strong&gt; Kong is a general-purpose API gateway with AI capabilities bolted on through plugins. For teams that don&#39;t already use Kong, the operational overhead of running a full Kong deployment may be excessive. Advanced AI-specific features (token-based rate limiting, advanced analytics) are locked behind enterprise tiers. The per-service licensing model can get expensive as you add model endpoints.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Enterprise teams that already use Kong Gateway and want to extend it to govern LLM traffic alongside existing API infrastructure, especially in regulated environments.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;How They Compare at a Glance&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;&lt;table class=&quot;min-w-full border-collapse text-sm leading-[1.7] whitespace-normal&quot;&gt;&lt;thead class=&quot;text-left&quot;&gt;&lt;tr&gt;&lt;th class=&quot;text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold&quot;&gt;Dimension&lt;/th&gt;&lt;th class=&quot;text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold&quot;&gt;LiteLLM&lt;/th&gt;&lt;th class=&quot;text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold&quot;&gt;Portkey&lt;/th&gt;&lt;th class=&quot;text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold&quot;&gt;OpenRouter&lt;/th&gt;&lt;th class=&quot;text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold&quot;&gt;Kong AI Gateway&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;&lt;strong&gt;Deployment&lt;/strong&gt;&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Self-hosted (open source)&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Managed SaaS&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Managed SaaS&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Self-hosted / Managed (Konnect)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;&lt;strong&gt;Provider support&lt;/strong&gt;&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;100+&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;1,600+&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;280+&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Major providers via plugins&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;&lt;strong&gt;Cost model&lt;/strong&gt;&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Free (OSS) / Enterprise paid&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Starts ~$49/mo&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;5% markup on usage&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Free (OSS) / Enterprise licensed&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;&lt;strong&gt;Observability&lt;/strong&gt;&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Basic (needs Langfuse)&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Deep, native&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Limited&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Metrics via plugins + OTEL&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;&lt;strong&gt;Governance&lt;/strong&gt;&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Minimal native&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Strong (RBAC, SSO, audit)&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Minimal&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Strong (enterprise tier)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Basic&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Guardrails, PII, jailbreak detection&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Basic&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;PII, prompt guard, RAG, Bedrock/Azure guardrails&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;&lt;strong&gt;Best fit&lt;/strong&gt;&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Platform teams, self-hosters&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Production AI teams&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Prototyping, experimentation&lt;/td&gt;&lt;td class=&quot;border-b-0.5 border-border-300/30 py-2 pr-4 align-top&quot;&gt;Enterprises with existing Kong&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div class=&quot;standard-markdown grid-cols-1 grid [&amp;amp;_&amp;gt;_*]:min-w-0 gap-3 !gap-3.5&quot;&gt;&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;Where Langfuse Fits: The Observability Layer&lt;/h2&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Here&#39;s the critical insight: &lt;strong&gt;a gateway routes your requests, but Langfuse helps you understand them.&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Langfuse is an open-source &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=define+LLM+observability&amp;amp;bbid=3825422117901839927&amp;amp;bpid=4852698803715123406&quot; target=&quot;_blank&quot;&gt;LLM observability&lt;/a&gt; platform that provides tracing, monitoring, evaluation, and debugging for LLM applications. It&#39;s not a gateway — it doesn&#39;t route traffic. Instead, it ingests telemetry from your gateway (and your application code) and gives you deep visibility into what&#39;s happening across your LLM stack.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;The good news is that Langfuse integrates natively with all four gateways discussed above.&lt;/p&gt;
&lt;h3 class=&quot;text-text-100 mt-2 -mb-1 text-base font-bold&quot;&gt;LiteLLM + Langfuse&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;This is one of the most popular pairings in the ecosystem. LiteLLM supports Langfuse as a callback target via OpenTelemetry. Set your Langfuse credentials as environment variables, add &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;litellm.callbacks = [&quot;langfuse_otel&quot;]&lt;/code&gt;, and every LLM call flowing through LiteLLM is automatically traced in Langfuse — with token counts, latencies, costs, and model metadata. You can also send logs from the LiteLLM Proxy directly, meaning every request from every team member gets captured without any SDK changes on their side.&lt;/p&gt;
&lt;h3 class=&quot;text-text-100 mt-2 -mb-1 text-base font-bold&quot;&gt;Portkey + Langfuse&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Portkey&#39;s API is OpenAI-compatible, so you can use Langfuse&#39;s OpenAI SDK wrapper (&lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;from langfuse.openai import OpenAI&lt;/code&gt;) and point it at Portkey&#39;s gateway URL. Every request gets dual visibility: Portkey&#39;s native analytics for routing and reliability, plus Langfuse&#39;s tracing for prompt-level debugging and evaluation. This pairing gives you the best of both worlds — Portkey for traffic control, Langfuse for deep observability.&lt;/p&gt;
&lt;h3 class=&quot;text-text-100 mt-2 -mb-1 text-base font-bold&quot;&gt;OpenRouter + Langfuse&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;OpenRouter supports a &quot;Broadcast&quot; feature that automatically sends traces to Langfuse without any code changes. You connect your Langfuse API keys in your OpenRouter settings, and all requests are traced. For teams that want more control — custom metadata, nested tracing, session grouping — you can use Langfuse&#39;s OpenAI SDK wrapper since OpenRouter follows the OpenAI API schema.&lt;/p&gt;
&lt;h3 class=&quot;text-text-100 mt-2 -mb-1 text-base font-bold&quot;&gt;Kong AI Gateway + Langfuse&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Kong integrates with Langfuse through an &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;ai-tracing&lt;/code&gt; plugin. Once configured with your Langfuse API keys, the plugin automatically captures every AI request proxied through Kong and creates traces in Langfuse. You can enrich traces with user IDs, session IDs, and organization metadata via HTTP headers. Because it&#39;s a Kong plugin, it works alongside all other Kong capabilities (auth, rate limiting, logging) with zero application code changes.&lt;/p&gt;
&lt;h3 class=&quot;text-text-100 mt-2 -mb-1 text-base font-bold&quot;&gt;Why This Matters&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;The gateway gives you the operational layer: routing, fallbacks, cost controls, security. Langfuse gives you the intelligence layer: understanding prompt quality, debugging regressions, evaluating model outputs, tracking experiments over time. Together, they form a complete platform for running LLMs in production.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Without Langfuse (or equivalent observability), you can route and control your LLM traffic, but you&#39;re flying blind on &lt;em&gt;quality&lt;/em&gt;. Did that model switch degrade user experience? Is the new prompt template actually better? Which conversations are hitting guardrails? These are the questions Langfuse answers.&lt;/p&gt;
&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;
&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;So, Which Should You Pick?&lt;/h2&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;There&#39;s no single right answer. The choice depends on where you are in your journey:&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;You&#39;re experimenting and iterating fast →&lt;/strong&gt; Start with &lt;strong&gt;OpenRouter&lt;/strong&gt;. Zero setup, instant access to hundreds of models. Pair with Langfuse (via Broadcast) to start building observability habits early.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;You&#39;re building an internal LLM platform for your team →&lt;/strong&gt; Go with &lt;strong&gt;LiteLLM&lt;/strong&gt;. Self-host it, configure budgets and access per team, and integrate Langfuse for the observability LiteLLM doesn&#39;t natively provide. This is the stack companies like Lemonade and RocketMoney have adopted.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;You&#39;re shipping a production AI product and need reliability + compliance →&lt;/strong&gt; Choose &lt;strong&gt;Portkey&lt;/strong&gt;. Its managed approach means less operational burden, and its native guardrails, RBAC, and prompt management will save you months of build time. Add Langfuse for deeper tracing and evaluation workflows.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;strong&gt;You already run Kong and need to govern LLM traffic alongside APIs →&lt;/strong&gt; Extend with &lt;strong&gt;Kong AI Gateway&lt;/strong&gt;. You get enterprise security, semantic routing, and MCP support without introducing a new tool. The Langfuse plugin gives you AI-specific observability on top of Kong&#39;s existing monitoring.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;The LLM gateway space is maturing rapidly. The teams that invest in this infrastructure layer now — routing, observability, governance — will be the ones that can move fastest as models improve and use cases multiply. The gateway handles the plumbing. Langfuse ensures you can see what&#39;s flowing through it. Together, they turn LLM usage from a series of isolated API calls into a managed, observable, improvable system.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Start with the gateway that matches your constraints today. Add Langfuse from day one. Iterate from there.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;h-8&quot;&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/4852698803715123406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2026/02/llm-gateways-missing-infrastructure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/4852698803715123406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/4852698803715123406'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2026/02/llm-gateways-missing-infrastructure.html' title='LLM Gateways: The Missing Infrastructure Layer for Production AI'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-3226421253547178989</id><published>2017-07-12T13:55:00.002+05:30</published><updated>2017-08-23T16:39:34.162+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="diskutils"/><category scheme="http://www.blogger.com/atom/ns#" term="Raspberrypi"/><category scheme="http://www.blogger.com/atom/ns#" term="SDCard"/><title type='text'>Raspberrypi setup</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;b&gt;Prerequisite:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
1) Raspberry Pi device with data cable.&lt;br /&gt;
2) Card reader&lt;br /&gt;
3) Micro SD card. Here is the compatible &lt;a href=&quot;https://www.raspberrypi.org/documentation/installation/sd-cards.md&quot; target=&quot;_blank&quot;&gt;documentation&lt;/a&gt;&lt;br /&gt;
4) A monitor with an HDMI interface&lt;br /&gt;
5) HDMI cable&lt;br /&gt;
6) USB keyboard&lt;br /&gt;
7) USB Mouse&lt;br /&gt;
8) Ethernet Cable [Optional]&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Following are the steps to move with:&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
1) Format SD card:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Recommended way to format &amp;nbsp;by SD Card Formatter, you can download it from&amp;nbsp;&lt;a href=&quot;https://www.sdcard.org/downloads/formatter_4/index.html&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
2) Let say we have to load RASPBIAN image onto SD Card, download image from&amp;nbsp;&lt;a href=&quot;https://www.raspberrypi.org/downloads/raspbian/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
3) Now its time to load image on SD Card&lt;br /&gt;
&lt;br /&gt;
4)&amp;nbsp;Open a MAC terminal window and then run command:&amp;nbsp;&lt;code class=&quot;prettyprint&quot;&gt;&lt;b style=&quot;text-align: center;&quot;&gt;diskutil list&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
5) Identify your removable drive device address, it will probably be look like the ones below:&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;code class=&quot;prettyprint&quot;&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;code class=&quot;prettyprint&quot;&gt;&lt;b&gt;/dev/disk0&lt;/b&gt;
&lt;/code&gt;&lt;/div&gt;
&lt;code class=&quot;prettyprint&quot;&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;code class=&quot;prettyprint&quot;&gt;&lt;b&gt;#: TYPE NAME &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SIZE &amp;nbsp; &amp;nbsp; &amp;nbsp; IDENTIFIER&lt;/b&gt;&lt;/code&gt;&lt;/div&gt;
&lt;code class=&quot;prettyprint&quot;&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;code class=&quot;prettyprint&quot;&gt;&lt;b&gt;0:GUID_partition_scheme *500.3 GB &amp;nbsp; disk0&lt;/b&gt;&lt;/code&gt;&lt;/div&gt;
&lt;code class=&quot;prettyprint&quot;&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;code class=&quot;prettyprint&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;/dev/disk2&lt;/b&gt;&lt;/code&gt;&lt;/div&gt;
&lt;code class=&quot;prettyprint&quot;&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;code class=&quot;prettyprint&quot;&gt;&lt;b&gt;#: TYPE NAME &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SIZE &amp;nbsp; &amp;nbsp; IDENTIFIER&lt;/b&gt;&lt;/code&gt;&lt;/div&gt;
&lt;code class=&quot;prettyprint&quot;&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;code class=&quot;prettyprint&quot;&gt;&lt;b&gt;0: Macintosh HD &amp;nbsp;*378.1 GB &amp;nbsp; disk1&lt;/b&gt;&lt;/code&gt;&lt;/div&gt;
&lt;code class=&quot;prettyprint&quot;&gt;
&lt;/code&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;code class=&quot;prettyprint&quot;&gt;&lt;b&gt;&amp;nbsp;Logical Volume on disk0s2&lt;/b&gt;&lt;/code&gt;&lt;/div&gt;
&lt;code class=&quot;prettyprint&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;&amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;b&gt;DAB8DF9E23&lt;/b&gt;&lt;b&gt;-A4RR-420D-&lt;/b&gt;&lt;b&gt;00R1&lt;/b&gt;&lt;b&gt;-FRT67WE&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;Unlocked Encrypted&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;/dev/disk3&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;&amp;nbsp; #: &amp;nbsp; &amp;nbsp; &amp;nbsp; TYPE NAME &amp;nbsp; &amp;nbsp; SIZE &amp;nbsp; &amp;nbsp; &amp;nbsp; IDENTIFIER&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;&amp;nbsp; 0: &amp;nbsp;FDisk_partition_scheme *7.9 GB &amp;nbsp; &amp;nbsp; disk3&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;&amp;nbsp; &amp;nbsp; 1: &amp;nbsp; DOS_FAT_32 AJ &amp;nbsp; &amp;nbsp; 7.9 GB &amp;nbsp; &amp;nbsp; disk3s1&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;/code&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;i&gt;Note that your removable drive must be DOS_FAT_32 formatted. In this example, &lt;b&gt;/dev/disk3&lt;/b&gt; is the drive address of an 8GB SD card.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
6) Unmount your SD card via command:&amp;nbsp;&lt;code class=&quot;prettyprint&quot;&gt;&lt;b style=&quot;text-align: center;&quot;&gt;diskutil unmountDisk &amp;lt;drive address&amp;gt;&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
7) When successful, you should see a message similar to this one:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;color: #274e13;&quot;&gt;Unmount of all volumes on &amp;lt;drive address&amp;gt; was successful&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
8) You can now copy/load the image onto SD card, using the following command:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;code class=&quot;prettyprint&quot;&gt;&lt;b&gt;sudo dd &lt;/b&gt;&lt;b&gt;bs=32m&amp;nbsp;&lt;/b&gt;&lt;b&gt;if=&amp;lt;image file path&amp;gt; of=&amp;lt;drive address&amp;gt;&lt;/b&gt;&lt;/code&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
Thereafter you will see the following message output and also by pressing&amp;nbsp;&lt;b&gt;Ctrl+t &lt;/b&gt;you can see like below records in/out bytes&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;i&gt;3420+1 records in&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;i&gt;3420+1 records out&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;i&gt;286665744 bytes transferred in 524.761215 secs (5069924 bytes/sec)&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
9) Now you can eject your removable drive. You are ready to install RASPBIAN image on your device.&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
In &lt;a href=&quot;https://jabbleashish.blogspot.in/2017/06/raspberry-pi-ssh-and-vnc-virtual.html&quot; target=&quot;_blank&quot;&gt;Part Two&lt;/a&gt;&amp;nbsp;we will learn about how to use SSH and VNC as a virtually desktop on MACOSX.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/3226421253547178989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2017/07/raspberrypi-setup.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/3226421253547178989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/3226421253547178989'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2017/07/raspberrypi-setup.html' title='Raspberrypi setup'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-862912431219552015</id><published>2017-06-09T18:40:00.000+05:30</published><updated>2017-07-24T19:21:20.921+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="macosx"/><category scheme="http://www.blogger.com/atom/ns#" term="Raspberrypi"/><category scheme="http://www.blogger.com/atom/ns#" term="SSH"/><category scheme="http://www.blogger.com/atom/ns#" term="virtual desktop"/><category scheme="http://www.blogger.com/atom/ns#" term="VNC"/><title type='text'>Raspberry Pi : SSH and VNC : Virtual Desktop on your mac</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
In previous tutorial we have learnt &lt;a href=&quot;https://jabbleashish.blogspot.in/2017/07/raspberrypi-setup.html&quot; target=&quot;_blank&quot;&gt;How to raspberrypi setup?&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Now its time to see its display for Raspberry Pi with Laptop. Below steps are with Macbook&lt;br /&gt;
&lt;br /&gt;
1) &lt;i&gt;Open a Terminal in RaspberryPi&lt;/i&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;Enable SSH and VNC either from &lt;i&gt;sudo rasp-config&lt;/i&gt; or &lt;i&gt;Preferences=&amp;gt;Raspberry Pi Configuration =&amp;gt; Interfaces&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
2) &lt;i&gt;ifconfig and find ip address&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
3) Open Mac Terminal&lt;br /&gt;
&amp;nbsp; Connect via SSH &lt;i&gt;ssh pi@192.168.1.236&lt;/i&gt;&lt;br /&gt;
&amp;nbsp; password: &lt;i&gt;raspberry&lt;/i&gt; (by default)&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Now you will see you are connected to &lt;b&gt;pi@raspberrypi:~ $&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
4) Now its time to get update packages, tightvnc server&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;i&gt;sudo apt-get update&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp;sudo apt-get install xrdp&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp;sudo apt-get install tightvncserver&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
5) &lt;i&gt;cd .config&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
6) &lt;i&gt;mkdir autostart&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp;nano tighvnc.desktop&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;b&gt;[Desktop Entry]&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&amp;nbsp; &amp;nbsp;Type=Application&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&amp;nbsp; &amp;nbsp;Name=TightVNC&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&amp;nbsp; &amp;nbsp;Exec=vncviewer :1&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&amp;nbsp; &amp;nbsp;StartupNotify=false&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; save contents with above lines in same file.&lt;br /&gt;
&lt;br /&gt;
7) &lt;i&gt;cd /home/pi&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
8) Run &lt;i&gt;tightvncserver&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
9) Download Chicken VNC client on macosx &amp;amp; connect with&lt;br /&gt;
&amp;nbsp; &amp;nbsp; host:192.168.1.236&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Display: 1&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Password: raspberry(by default)&lt;br /&gt;
&lt;br /&gt;
Now you are able to see Macintosh as Display for a Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
Cheers!&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/862912431219552015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2017/06/raspberry-pi-ssh-and-vnc-virtual.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/862912431219552015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/862912431219552015'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2017/06/raspberry-pi-ssh-and-vnc-virtual.html' title='Raspberry Pi : SSH and VNC : Virtual Desktop on your mac'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-5560798876752126633</id><published>2017-04-29T00:17:00.001+05:30</published><updated>2017-04-29T00:26:54.816+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bahuabali2"/><category scheme="http://www.blogger.com/atom/ns#" term="Bahubali2 the conclusion"/><category scheme="http://www.blogger.com/atom/ns#" term="Katappa"/><category scheme="http://www.blogger.com/atom/ns#" term="Why Katappa killed Bahuballi?"/><title type='text'>Why Katappa killed Bahuballi?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;p1&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;For those who can&#39;t wait for it badly:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;b&gt;Background&lt;/b&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Bahubali owns mashismati kingdom, bhallaldeva and&amp;nbsp;&lt;span class=&quot;s2&quot;&gt;bijjalladeva&amp;nbsp;jealous about the victory.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;So they actually planned both to kill rajmata in a dramatic way and Veer bahadur kumar verma (which is very close to bahubali and his wife Devsena) has listen this gossip and &amp;nbsp;bijjalladeva&amp;nbsp;slapped his father to tell don&#39;t dig into this matter and emotionally character played by bijjalladeva&amp;nbsp;in front of Veer Bahadur to provoke to kill his own son (Bhallaldeva) so that they will tell Rajmata that veer bahadur came to kill Bhallaldeva from Bahubali order.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;So below is the actual story:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot; style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;b&gt;Katappa&lt;/b&gt;: Is this happening with your consent? I beg you queen mother. Ask the king to take back his command. Even integrity can take a backseat. Bahubali has no mean bone in his body. The son you raised. He grew up drinking your milk. The Dharma you taught him runs in his blood.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;b&gt;Rajmaata&lt;/b&gt;: Bahubali has to die.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;b&gt;Katappa&lt;/b&gt;: No, I can’t do it. He gave sword to rajmata as punishment for my refusal. Please sever my head&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;b&gt;Rajmata&lt;/b&gt;: Will you kill him? or shall I finish this task?&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;b&gt;Katappa&lt;/b&gt;: No queen mother. Your hands should not be stained by that sin. I will kill him.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p5&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;b&gt;Bijjaladeva&lt;/b&gt;&lt;/span&gt;: Can we trust this Dog bhalla?&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;b style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;, Arial, Helvetica, sans-serif;&quot;&gt;Katappa: &lt;/b&gt;&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;and he killed bahubali&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;More you will need to watch the film the actual scene :)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Cheers!&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Enjoy&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; -webkit-text-stroke: #222222}
p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; -webkit-text-stroke: #222222; min-height: 14.0px}
p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 16.0px; font: 12.0px Helvetica; -webkit-text-stroke: #222222}
span.s1 {font: 14.0px Helvetica; font-kerning: none; color: #222222; background-color: #ffffff; -webkit-text-stroke: 0px #222222}
span.s2 {-webkit-text-stroke: 0px #222222}
span.s3 {font: 14.0px Helvetica; font-kerning: none; color: #222222; background-color: #ffffff}
&lt;/style&gt;






















&lt;br /&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/5560798876752126633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2017/04/why-katappa-killed-bahuballi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/5560798876752126633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/5560798876752126633'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2017/04/why-katappa-killed-bahuballi.html' title='Why Katappa killed Bahuballi?'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-1994440934520149637</id><published>2017-02-14T17:52:00.001+05:30</published><updated>2017-02-14T17:52:48.469+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Angular2"/><category scheme="http://www.blogger.com/atom/ns#" term="cordova"/><category scheme="http://www.blogger.com/atom/ns#" term="Hybrid"/><category scheme="http://www.blogger.com/atom/ns#" term="ionic2"/><category scheme="http://www.blogger.com/atom/ns#" term="iPhone Simulator"/><category scheme="http://www.blogger.com/atom/ns#" term="npm"/><category scheme="http://www.blogger.com/atom/ns#" term="Phonegap"/><category scheme="http://www.blogger.com/atom/ns#" term="reddit"/><category scheme="http://www.blogger.com/atom/ns#" term="TypeScript"/><title type='text'>ionic2 based using Angular2 TypeScript</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
This tutorial is demonstrating &quot;&lt;i&gt;How to create ionic2 based app using Angular2 TypeScript&quot;?&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Here is the &lt;a href=&quot;https://github.com/ajabble/ionic2-reddit-sample&quot;&gt;demo example&lt;/a&gt;&amp;nbsp;with complete guide documentation process to install and run this demo project.&lt;br /&gt;
&lt;br /&gt;
Happy Coding!&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/1994440934520149637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2017/02/ionic2-based-using-angular2-typescript.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/1994440934520149637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/1994440934520149637'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2017/02/ionic2-based-using-angular2-typescript.html' title='ionic2 based using Angular2 TypeScript'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-7559367358257400277</id><published>2017-02-13T23:45:00.000+05:30</published><updated>2017-02-13T23:53:00.014+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="authentication"/><category scheme="http://www.blogger.com/atom/ns#" term="authorization"/><category scheme="http://www.blogger.com/atom/ns#" term="FOSOauthServerBundle"/><category scheme="http://www.blogger.com/atom/ns#" term="FOSRestBundle"/><category scheme="http://www.blogger.com/atom/ns#" term="FOSUserBundle"/><category scheme="http://www.blogger.com/atom/ns#" term="OAuth2.0"/><category scheme="http://www.blogger.com/atom/ns#" term="Objective C"/><category scheme="http://www.blogger.com/atom/ns#" term="Symfony2"/><category scheme="http://www.blogger.com/atom/ns#" term="Web"/><title type='text'>Mobile and Web Client sample code with OAuth2.0 | Symfony 2 RESTful API Project with FOSUserBundle, FOSRestBundle, FOSOAuthServerBundle</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;i&gt;OAuth is an open standard for authorization. It provides client application secure access to server resources on behalf of resource owner.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;i&gt;&lt;a href=&quot;https://tools.ietf.org/html/draft-ietf-oauth-v2-10&quot;&gt;OAuth2.0&lt;/a&gt;&lt;span id=&quot;goog_781906071&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_781906072&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.blogger.com/&quot;&gt;&lt;/a&gt; focuses on client developer simplicity while providing specific authorization flows for web, desktop applications and mobile devices.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;br /&gt;
Here is the complete guide documentation process and demo example for Mobile and Web Client:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;b&gt;&lt;a href=&quot;https://github.com/ajabble/AJOAuth2&quot; target=&quot;_blank&quot;&gt;AJOAuth2&lt;/a&gt;&amp;nbsp;&lt;/b&gt;- iOS&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href=&quot;https://github.com/mshariq-nerd/MSOAuth2&quot; target=&quot;_blank&quot;&gt;MSOAuth2&lt;/a&gt;&amp;nbsp;&lt;/b&gt;- Android&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href=&quot;https://github.com/nerdapplabs/authOauth&quot; target=&quot;_blank&quot;&gt;authOauth&lt;/a&gt;&amp;nbsp;&lt;/b&gt;- Symfony2&lt;br /&gt;
&lt;br /&gt;
Above sample code on different platforms are showing the process of authenticating against an OAuth 2 provider.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cheers!!&lt;br /&gt;
~ Nerd Team&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/7559367358257400277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2017/02/mobile-and-web-client-sample-code-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/7559367358257400277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/7559367358257400277'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2017/02/mobile-and-web-client-sample-code-with.html' title='Mobile and Web Client sample code with OAuth2.0 | Symfony 2 RESTful API Project with FOSUserBundle, FOSRestBundle, FOSOAuthServerBundle'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-2752226098193291866</id><published>2017-02-03T20:10:00.001+05:30</published><updated>2017-02-12T19:54:08.345+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AFNetworking"/><category scheme="http://www.blogger.com/atom/ns#" term="HTTP status codes"/><category scheme="http://www.blogger.com/atom/ns#" term="NSDictionary"/><category scheme="http://www.blogger.com/atom/ns#" term="NSHTTPURLResponse"/><category scheme="http://www.blogger.com/atom/ns#" term="NSJSONSerialization"/><title type='text'>AFNetworking - How to handle HTTP status error codes and messages in failure block?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;code class=&quot;prettyprint&quot;&gt;

failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint&quot;&gt;&amp;nbsp;NSLog(@&quot;Failure: %@&quot;, error);&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint&quot;&gt;&amp;nbsp;NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)task.response; &amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint&quot;&gt;&amp;nbsp;NSLog(@&quot;%zd&quot;, httpResponse.statusCode);&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint&quot;&gt;&amp;nbsp;id errorJson = [NSJSONSerialization &amp;nbsp;JSONObjectWithData:error.userInfo[AFNetworkingOperationFailingURLResponseDataError &amp;nbsp;Key] options:0 error:nil];&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint&quot;&gt;&amp;nbsp;NSDictionary *errorJsonDict = (NSDictionary *)errorJson;&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint&quot;&gt;&amp;nbsp;if (!errorJsonDict) &amp;nbsp; &amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint&quot;&gt;&amp;nbsp; &amp;nbsp; return;&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint&quot;&gt;&amp;nbsp;if ([errorJsonDict isKindOfClass:[NSDictionary class]] == NO)&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;NSAssert(NO, @&quot;Expected an Dictionary, got %@&quot;,NSStringFromClass([errorJsonDict &amp;nbsp;class]));&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code class=&quot;prettyprint&quot;&gt;&amp;nbsp; NSLog(@&quot;%@&quot;,errorJsonDict.description);&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint&quot;&gt;}                          
&lt;/code&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/2752226098193291866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2017/02/afnetworking-how-to-handle-http-status.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/2752226098193291866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/2752226098193291866'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2017/02/afnetworking-how-to-handle-http-status.html' title='AFNetworking - How to handle HTTP status error codes and messages in failure block?'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-5944276181960842041</id><published>2017-01-12T16:15:00.000+05:30</published><updated>2017-01-12T16:15:04.385+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".md"/><category scheme="http://www.blogger.com/atom/ns#" term="CocoaPod"/><category scheme="http://www.blogger.com/atom/ns#" term="Github"/><category scheme="http://www.blogger.com/atom/ns#" term="lint"/><category scheme="http://www.blogger.com/atom/ns#" term="Podfile"/><category scheme="http://www.blogger.com/atom/ns#" term="Tagging"/><title type='text'>How to create your own CocoaPod | Complete Guide to make your own CocoaPod</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Creating your own CocoaPod is fairly a straight forward. Running &lt;i&gt;Pod lib create [pod name] &lt;/i&gt;will set up out library structure.&lt;br /&gt;
&lt;br /&gt;
Here is the complete guide documentation process for CocoaPod &lt;a href=&quot;https://github.com/ajabble/LabelAppearance/blob/master/PodRelease.md&quot; target=&quot;_blank&quot;&gt;PodRelease.md&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I have used objective C, process for Swift pod is similar!&lt;br /&gt;
&lt;br /&gt;
Happy CocoaPod!&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/5944276181960842041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2017/01/how-to-create-your-own-cocoapod.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/5944276181960842041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/5944276181960842041'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2017/01/how-to-create-your-own-cocoapod.html' title='How to create your own CocoaPod | Complete Guide to make your own CocoaPod'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-8577986106137332310</id><published>2016-12-28T16:40:00.000+05:30</published><updated>2016-12-28T16:49:29.659+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="InnoDB error for MySQL5.6"/><category scheme="http://www.blogger.com/atom/ns#" term="innodb_index_stats"/><category scheme="http://www.blogger.com/atom/ns#" term="innodb_table_stats"/><category scheme="http://www.blogger.com/atom/ns#" term="Recalculation of persistent statistics requested for table"/><category scheme="http://www.blogger.com/atom/ns#" term="slave_master_info"/><category scheme="http://www.blogger.com/atom/ns#" term="slave_relay_log_info"/><category scheme="http://www.blogger.com/atom/ns#" term="slave_worker_info"/><category scheme="http://www.blogger.com/atom/ns#" term="transient table"/><title type='text'> [Warning] InnoDB: Cannot open table mysql/innodb_index_stats || InnoDB error for MySQL5.6 in MAMP</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
I did the procedure on a clean installed MAMP (with MySQL5.6 latest till now date) and it worked for me, atleast it gets rid from errors in the &lt;i&gt;&quot;/Applications/MAMP/logs/mysql_error_log.err&quot;&lt;/i&gt; and use of transient tables and yes it would be a temporary fix so do it as your own risk&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&amp;nbsp;Steps to be follow&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&amp;nbsp;-&amp;gt;&lt;/b&gt; Drop below tables from &lt;b&gt;mysql&lt;/b&gt; database:
 &lt;i&gt;innodb_index_stats, innodb_table_stats, slave_master_info, slave_relay_log_info, slave_worker_info&lt;/i&gt;&lt;br /&gt;
&amp;nbsp;i.e DROP TABLE if exists &amp;lt;TABLE_NAME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;-&amp;gt;&lt;/b&gt; Delete all .frm and.ibd of the tables above
 i.e rm &quot;&lt;i&gt;/Applications/MAMP/db/mysql56/mysql&lt;/i&gt;&quot;/&lt;table_name .frm=&quot;&quot;&gt;&amp;nbsp;&amp;lt;TABLE_NAME.frm&amp;gt;&lt;/table_name&gt;&lt;br /&gt;
&lt;table_name .frm=&quot;&quot;&gt;&lt;br /&gt;&lt;/table_name&gt;
&lt;table_name .frm=&quot;&quot;&gt;&lt;b&gt;-&amp;gt;&lt;/b&gt; run/download &lt;a href=&quot;http://bugs.mysql.com/file.php?id=19725&amp;amp;bug_id=67179&quot; target=&quot;_blank&quot;&gt;five tables&lt;/a&gt;&amp;nbsp;to create tables above again, either run SQL or import SQL&lt;/table_name&gt;&lt;br /&gt;
&lt;table_name .frm=&quot;&quot;&gt;&lt;br /&gt;&lt;/table_name&gt;
&lt;table_name .frm=&quot;&quot;&gt;&lt;b&gt;-&amp;gt;&lt;/b&gt; restart MAMP (basically we need to restart mysql server only)&lt;/table_name&gt;&lt;br /&gt;
&lt;table_name .frm=&quot;&quot;&gt;&lt;br /&gt;&lt;/table_name&gt;
&lt;table_name .frm=&quot;&quot;&gt;Cheers!&lt;/table_name&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/8577986106137332310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2016/12/warning-innodb-cannot-open-table.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/8577986106137332310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/8577986106137332310'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2016/12/warning-innodb-cannot-open-table.html' title=' [Warning] InnoDB: Cannot open table mysql/innodb_index_stats || InnoDB error for MySQL5.6 in MAMP'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-4870038859957636215</id><published>2016-11-17T18:03:00.002+05:30</published><updated>2016-11-17T18:04:11.700+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="deauthorize macbook"/><category scheme="http://www.blogger.com/atom/ns#" term="osx"/><category scheme="http://www.blogger.com/atom/ns#" term="plist"/><category scheme="http://www.blogger.com/atom/ns#" term="reinstallation OSX"/><category scheme="http://www.blogger.com/atom/ns#" term="security"/><category scheme="http://www.blogger.com/atom/ns#" term="TSplicedFONT failed creating descriptor for"/><category scheme="http://www.blogger.com/atom/ns#" term="wipe macbook"/><title type='text'>Deauthorisation of Macbook on boot | Macbook wipe and re-installation of OSX | TSplicedFont failed creating descriptor for</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Whenever you will get an error &lt;i&gt;&quot;Contact Apple Care&quot; &lt;/i&gt;on reinstalling &lt;b&gt;OSX. &lt;/b&gt;Then, you need to deauthorize apple account from machine either via manually logout from iTunes&amp;nbsp;+ App Store account &lt;b&gt;OR &lt;/b&gt;may use below approach if you are lazy to do with first approach :)&lt;br /&gt;
&lt;br /&gt;
1. Go to&amp;nbsp;&lt;b&gt;/Library/Preferences/&lt;/b&gt;&lt;br /&gt;
2. Find all plists which are having&amp;nbsp;&lt;i&gt;com.apple.security.&lt;b&gt;&amp;lt;&amp;gt;&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;3. &lt;/i&gt;Replace its contents with an empty string&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;i&gt;cat /dev/null &amp;gt; com.apple.security.&amp;lt;&amp;gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Now Quit terminal and reinstall OSX again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Whenever you will get below error in &lt;i style=&quot;font-weight: bold;&quot;&gt;InstallerLog, &lt;/i&gt;while reinstalling OSX, I would suggest you ignore this error and move on, this will download it and install but it will take &lt;i&gt;long hours&lt;/i&gt; (let&#39;s have some other work during this). If you are impatient and can&#39;t wait for long hours and obviously want to fix it manually then please go through&amp;nbsp;&lt;a href=&quot;https://discussions.apple.com/thread/7263067?tstart=0&quot;&gt;https://discussions.apple.com/thread/7263067?tstart=0&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;Chooser[438:7016] TSplicedFont failed creating descriptor for:
MacBook-Pro Unknown[439]: (
MacBook-Pro Unknown[439]: {
MacBook-Pro Unknown[439]: UnicodeRange = &quot;&lt;__nscfcharacterset: 0x7fe26c5d3940=&quot;&quot;&gt;&quot;;
MacBook-Pro Unknown[439]: name = NotoSansBuhid;
MacBook-Pro Unknown[439]: },
MacBook-Pro Unknown[439]: {
MacBook-Pro Unknown[439]: UnicodeRange = &quot;&lt;__nscfcharacterset: 0x7fe26c5d39f0=&quot;&quot;&gt;&quot;;
MacBook-Pro Unknown[439]: name = NotoSansHanunoo;&lt;/__nscfcharacterset:&gt;&lt;/__nscfcharacterset:&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/4870038859957636215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2016/11/deauthorisation-of-macbook-on-boot.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/4870038859957636215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/4870038859957636215'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2016/11/deauthorisation-of-macbook-on-boot.html' title='Deauthorisation of Macbook on boot | Macbook wipe and re-installation of OSX | TSplicedFont failed creating descriptor for'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-6357464111057125765</id><published>2016-11-12T14:45:00.002+05:30</published><updated>2016-11-12T14:45:37.389+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="ceremonies"/><category scheme="http://www.blogger.com/atom/ns#" term="CSM"/><category scheme="http://www.blogger.com/atom/ns#" term="csm mock questions"/><category scheme="http://www.blogger.com/atom/ns#" term="Product owner"/><category scheme="http://www.blogger.com/atom/ns#" term="Scrum"/><category scheme="http://www.blogger.com/atom/ns#" term="Scrum alliance"/><category scheme="http://www.blogger.com/atom/ns#" term="Scrum Master"/><title type='text'>CSM Mock Questions</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;b&gt;Questions:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
1) According to Scrum guidelines, who is responsible for hiring or assigning a new person into a Team?&lt;br /&gt;
&lt;br /&gt;
2) Why should the Product Owner attend the Daily scrum?&lt;br /&gt;
&lt;br /&gt;
3) How does the Agile Manifesto address Planning?&lt;br /&gt;
&lt;br /&gt;
4) Which role is MOST Likely to communicate an impediment during daily scrum?&lt;br /&gt;
&lt;br /&gt;
5) What should usually happen if during a sprint, the PO identifies a new Product backlog item?&lt;br /&gt;
&lt;br /&gt;
6) During a daily scrum meeting, One of developer founds an available solution and thinks that will solve one of problems developer has been working on it and wants to implement it immediately. What is the best next step?&lt;br /&gt;
&lt;br /&gt;
7) What is the main purpose of Sprint Review?&lt;br /&gt;
&lt;br /&gt;
8) What type of work is Scrum MOST suitable?&lt;br /&gt;
&lt;br /&gt;
9) Considering the Agile Manifesto, Which is best describes Scrum Teams and planning?&lt;br /&gt;
&lt;br /&gt;
10) CEO asks Development team to add an activity to current Sprint. What should the Development Team do?&lt;br /&gt;
&lt;br /&gt;
11) What is the best option when Product Owner is overworked?&lt;br /&gt;
&lt;br /&gt;
12) What is the main purpose of Sprint Backlog?&lt;br /&gt;
&lt;br /&gt;
13) Which describes best the Agile manifesto attitude towards customer collaboration?&lt;br /&gt;
&lt;br /&gt;
14) Characteristic of a good Scrum Team?&lt;br /&gt;
&lt;br /&gt;
15) Which role is responsible for turning Product Backlog into incremental pieces of functionality?&lt;br /&gt;
&lt;br /&gt;
16) How are the development teams guided during sprint?&lt;br /&gt;
&lt;br /&gt;
17) Which technique might a ScrumMaster use to facilitate communication beetween the Development Team and Product Owner?&lt;br /&gt;
&lt;br /&gt;
18) What are the desirable qualities of Product Vision?&lt;br /&gt;
&lt;br /&gt;
19) What does the Team do during the first Sprint?&lt;br /&gt;
&lt;br /&gt;
20) Who is primarily responsible for facilitation, when required in Scrum Meetings?&lt;br /&gt;
&lt;br /&gt;
21) What is MOST likely to result if Product owner is not available during a Sprint?&lt;br /&gt;
&lt;br /&gt;
22) When using Scrum, who is primarily responsible for making scope vs schedule trade off decisions?&lt;br /&gt;
&lt;br /&gt;
23) Who is accountable for business value delivered by Scrum Team?&lt;br /&gt;
&lt;br /&gt;
24) Which is the BEST represents the Product Owners responsibility?&lt;br /&gt;
&lt;br /&gt;
25) If Development Team determines that it has over-committed itself for Sprint, who should be present when reviewing and adjusting Sprint goal and work?&lt;br /&gt;
&lt;br /&gt;
26) After a Scrum Team has committed to Sprint Goal, what authority does it have?&lt;br /&gt;
&lt;br /&gt;
27) In 30 day Sprint, how long is the Sprint Review meeting?&lt;br /&gt;
&lt;br /&gt;
28) What is the approach that Scrum encourages when a Team determines it will be difficult to deliver any value at the end of Sprint?&lt;br /&gt;
&lt;br /&gt;
29) Can the Product Owner and Scrum Master be the same person?&lt;br /&gt;
&lt;br /&gt;
30) Who is primarily responsible for Product backlog?&lt;br /&gt;
&lt;br /&gt;
31) Who is primarily responsible for ensuring everyone follows Scrum rules and practices?&lt;br /&gt;
&lt;br /&gt;
32) Responsibility of product owner?&lt;br /&gt;
&lt;br /&gt;
33) 3 components of an empirical process?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;NOTE:&lt;/b&gt;&lt;br /&gt;
I would recommend to attend CSM workshop to clear its certification. Also, please do not follow blindly answers if you find some on other links. Common sense and your preparation matters. If you need answers for above, inbox me here. I will try to help you out and give more appropriate answer.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/6357464111057125765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2016/11/csm-mock-questions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/6357464111057125765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/6357464111057125765'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2016/11/csm-mock-questions.html' title='CSM Mock Questions'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-5066842247608018554</id><published>2016-10-27T13:37:00.001+05:30</published><updated>2016-10-27T15:47:52.372+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apple"/><category scheme="http://www.blogger.com/atom/ns#" term="Apple rejected app"/><category scheme="http://www.blogger.com/atom/ns#" term="approved"/><category scheme="http://www.blogger.com/atom/ns#" term="force user to update app"/><category scheme="http://www.blogger.com/atom/ns#" term="iOS built-in update mechanism"/><category scheme="http://www.blogger.com/atom/ns#" term="Ready for Sale"/><category scheme="http://www.blogger.com/atom/ns#" term="update app"/><category scheme="http://www.blogger.com/atom/ns#" term="upgrade"/><title type='text'>Apple rejected app whenever we force user to update an iOS application</title><content type='html'>I have developed an iPhone application, in order to fix some critical bugs on the very next patch release.
&lt;br /&gt;
I have done this feature by getting version from web service and comparing with current bundle version and if they do not match and isMandatoryVersion from our API, it will prompt user with OK button only.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;
#define kAppStoreURI @&quot;itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&amp;id=&lt;YOUR_APP_ID&gt;&quot;
[UIApplication
sharedApplication openURL:[NSURL URLWithString:kAppStoreURI]]
&lt;/pre&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDIAKCfvf122J6wfMv9jDYgtJ_W3p6QKbinTQ4Z2PRZJx3NpYg-B_npQPBtYMmw4uAuTP0sOxmtj18LUvhDl_pXvaaeFUpecZBh6MeTRD7aB2bOfITkLIxH0jGdbkXTvTWD7BjOmb2GTJa/s1600/alert.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;161&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDIAKCfvf122J6wfMv9jDYgtJ_W3p6QKbinTQ4Z2PRZJx3NpYg-B_npQPBtYMmw4uAuTP0sOxmtj18LUvhDl_pXvaaeFUpecZBh6MeTRD7aB2bOfITkLIxH0jGdbkXTvTWD7BjOmb2GTJa/s320/alert.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;
&lt;b&gt;Apple have complained about this and said:&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: red;&quot;&gt;Your app includes an update button or alerts the user to update app. To avoid user confusion, app version updates must utilize the iOS build-in update mechanism. Please remove the update feature from your app.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;NOTE:&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
We MUST have NOT had set any (i.e &lt;i&gt;isMandatoryVersion&lt;/i&gt;) flag which takes care at API side &lt;i&gt;(atleast for demo user which apple review board is using),&lt;/i&gt; until patch release is actually available on App Store.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;Important Note on App Store Submissions &quot;&lt;/span&gt;&lt;span style=&quot;-webkit-text-stroke-width: initial;&quot;&gt;The App Store reviewer will not see the alert.&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;Thereafter I made some changes instead of re-appeal to apple reviewer. Add skip option on alert.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot; style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfiLJjfSd5cmbiYJ4N5iX6E5AH3kjker0SZ-hDfInYcEjxFB-ImiWpk7ONDN_cdFx5WWuFel1ytZDDLPXSzb7C5wR3qhY9fzfoF38S5IU3U_uYYi_OIizeA4fv5qJmvk0Aa4gC1RB7NIij/s1600/revised_alert.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;155&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfiLJjfSd5cmbiYJ4N5iX6E5AH3kjker0SZ-hDfInYcEjxFB-ImiWpk7ONDN_cdFx5WWuFel1ytZDDLPXSzb7C5wR3qhY9fzfoF38S5IU3U_uYYi_OIizeA4fv5qJmvk0Aa4gC1RB7NIij/s320/revised_alert.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;Now Apple has no more objection on above and&amp;nbsp;&lt;span style=&quot;background-color: transparent;&quot;&gt;has been approved and the app status has changed to Ready for Sale.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/5066842247608018554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2016/10/apple-rejected-app-whenever-we-force.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/5066842247608018554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/5066842247608018554'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2016/10/apple-rejected-app-whenever-we-force.html' title='Apple rejected app whenever we force user to update an iOS application'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDIAKCfvf122J6wfMv9jDYgtJ_W3p6QKbinTQ4Z2PRZJx3NpYg-B_npQPBtYMmw4uAuTP0sOxmtj18LUvhDl_pXvaaeFUpecZBh6MeTRD7aB2bOfITkLIxH0jGdbkXTvTWD7BjOmb2GTJa/s72-c/alert.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-8700445227076507030</id><published>2016-10-11T17:50:00.000+05:30</published><updated>2016-10-11T17:50:11.253+05:30</updated><title type='text'>Error ITMS-90682: &quot;Invalid Bundle&quot;. The asset catalog at &#39;$Path&#39; can&#39;t contain 16-bit or P3 assets if the app is targeting iOS releases</title><content type='html'>If deployment target is set to either 8.3 or 8.4 and you have an asset catalog, then you will recieve ITMS-90682: Invalid Bundle error even if you do not have 16-bit or P3 assets.

Update: &lt;b&gt;In this case you will either need to lower your Deployment target to 8.2 or move it up to 9.x&lt;/b&gt;</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/8700445227076507030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2016/10/error-itms-90682-invalid-bundle-asset.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/8700445227076507030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/8700445227076507030'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2016/10/error-itms-90682-invalid-bundle-asset.html' title='Error ITMS-90682: &quot;Invalid Bundle&quot;. The asset catalog at &#39;$Path&#39; can&#39;t contain 16-bit or P3 assets if the app is targeting iOS releases'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-584137920648750455</id><published>2016-07-13T16:39:00.000+05:30</published><updated>2016-07-13T16:49:05.418+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="[NSDate date]"/><category scheme="http://www.blogger.com/atom/ns#" term="date manipulation"/><category scheme="http://www.blogger.com/atom/ns#" term="NSCalendar"/><category scheme="http://www.blogger.com/atom/ns#" term="NSDate"/><category scheme="http://www.blogger.com/atom/ns#" term="NSDateComponents"/><category scheme="http://www.blogger.com/atom/ns#" term="NSDateFormatter"/><title type='text'>Update hours/minutes/seconds in NSDate | Get current date from NSDate but set custom time</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt; 
// 24 hour date format&lt;br /&gt;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];&lt;br /&gt;
[dateFormatter setDateStyle:NSDateFormatterShortStyle];&lt;br /&gt;
[dateFormatter setDateFormat:@&quot;YYYY-MM-dd HH:mm:ss&quot;];&lt;br /&gt;
&lt;br /&gt;
// Now date + 12 am time fixed (00:00:00)&lt;br /&gt;
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSCalendarIdentifierGregorian];&lt;br /&gt;
NSDate *nowDate = [calendar dateBySettingHour:0 minute:0 second:0 ofDate:[NSDate date] options:0];&lt;br /&gt;
NSString *str = [dateFormatter stringFromDate:nowDate];&lt;br /&gt;
NSLog (@&quot;String is: %@&quot;, str);
&lt;/pre&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/584137920648750455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2016/07/update-hoursminutesseconds-in-nsdate.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/584137920648750455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/584137920648750455'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2016/07/update-hoursminutesseconds-in-nsdate.html' title='Update hours/minutes/seconds in NSDate | Get current date from NSDate but set custom time'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-5179089445067344803</id><published>2016-02-23T22:01:00.000+05:30</published><updated>2016-02-23T22:01:02.759+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".dylib"/><category scheme="http://www.blogger.com/atom/ns#" term=".tbd"/><category scheme="http://www.blogger.com/atom/ns#" term="Apple"/><category scheme="http://www.blogger.com/atom/ns#" term="Build settings"/><category scheme="http://www.blogger.com/atom/ns#" term="iOS9"/><category scheme="http://www.blogger.com/atom/ns#" term="libbz2.dylib"/><category scheme="http://www.blogger.com/atom/ns#" term="libiconv2.dylib"/><category scheme="http://www.blogger.com/atom/ns#" term="linker flag"/><category scheme="http://www.blogger.com/atom/ns#" term="SDK"/><category scheme="http://www.blogger.com/atom/ns#" term="Xcode7"/><title type='text'>Dynamic library &quot;.dylib&quot; not found in Xcode7 | showing text based stub library &quot;.tbd&quot; in iOS9</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
I found some kind of way around (2 approaches)&lt;br /&gt;
&lt;br /&gt;
1) Go to Target &amp;gt; Build Phases &amp;gt; Link Library with Libraries &amp;gt; + &amp;gt; Click on Add Other&lt;br /&gt;
2) &quot;CMD&quot; + SHIFT + G &amp;gt; type (/user/lib)&lt;br /&gt;
3) Now you can find &quot;.dylib&quot; select and add into your project.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9q4ldilSm44MPWKzucnLax2_XsZui3KTo9sd1yoy1OU8UaVumjblQn-PAnn1b2okTNUaVGgS4BqGzCLULxOjvrcpmGIIKHB4-KFrdVxS-8p-PDZMV99h8KVTqoUEIaa0G5ah_oAGIDMnL/s1600/tbd.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9q4ldilSm44MPWKzucnLax2_XsZui3KTo9sd1yoy1OU8UaVumjblQn-PAnn1b2okTNUaVGgS4BqGzCLULxOjvrcpmGIIKHB4-KFrdVxS-8p-PDZMV99h8KVTqoUEIaa0G5ah_oAGIDMnL/s320/tbd.png&quot; title=&quot;#1&quot; width=&quot;276&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;Another approach:&lt;/b&gt;&lt;br /&gt;
You don&#39;t need to add library instead of you can add by changing the following option:&lt;br /&gt;
&lt;br /&gt;
1) Go to Target &amp;gt; Build Settings &amp;gt; Other Linker Flags &amp;gt; Double click on section &amp;gt; + &amp;gt; -l{your library name}&lt;br /&gt;
For example: libiconv2.dylib = -liiconv2&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; libbz2.dylib = -libz2&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;NOTE:&lt;/b&gt; &quot;&lt;i&gt;.tbd&lt;/i&gt;&quot; files are new &quot;text-based stub libraries&quot; that provide a much more compact version of stub libraries in SDK and it really helps to reduce its download size. Apple did a lot to strip the size of apps since Xcode7 and iOS9.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://forums.developer.apple.com/message/8609#8609&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Developer Reference:&lt;/b&gt;&lt;/a&gt; &lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/5179089445067344803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2016/02/dynamic-library-dylib-not-found-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/5179089445067344803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/5179089445067344803'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2016/02/dynamic-library-dylib-not-found-in.html' title='Dynamic library &quot;.dylib&quot; not found in Xcode7 | showing text based stub library &quot;.tbd&quot; in iOS9'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9q4ldilSm44MPWKzucnLax2_XsZui3KTo9sd1yoy1OU8UaVumjblQn-PAnn1b2okTNUaVGgS4BqGzCLULxOjvrcpmGIIKHB4-KFrdVxS-8p-PDZMV99h8KVTqoUEIaa0G5ah_oAGIDMnL/s72-c/tbd.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-3159264191136126496</id><published>2016-02-20T22:34:00.000+05:30</published><updated>2016-02-20T22:49:43.256+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AFNetworking"/><category scheme="http://www.blogger.com/atom/ns#" term="CLLocation"/><category scheme="http://www.blogger.com/atom/ns#" term="CLLocationCoordinate2D"/><category scheme="http://www.blogger.com/atom/ns#" term="Geocoding"/><category scheme="http://www.blogger.com/atom/ns#" term="GMSCameraUpdate"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Map"/><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><category scheme="http://www.blogger.com/atom/ns#" term="JSON"/><category scheme="http://www.blogger.com/atom/ns#" term="Objective C"/><title type='text'>Geocoding Google map in iOS</title><content type='html'>#define GEOCODING_URI @&quot;https://maps.googleapis.com/maps/api/geocode/json?key=&lt;DEV_KEY&gt;&amp;language=en-US&amp;sensor=true&amp;address=&quot; // TODO: add DEV_KEY for Geocoding

&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;
NSString *actionURI = [NSString stringWithFormat:@&quot;%@%@&quot;,GEOCODING_URI, self.geocodeTextField.text];
NSLog(@&quot;ACTION URL: %@&quot;,actionURI);
NSString *encodedURI = [actionURI stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
AFHTTPRequestOperationManager*manager = [AFHTTPRequestOperationManager manager];
[manager GET:encodedURI parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@&quot;JSON: %@&quot;, responseObject); 
NSDictionary *jsonDict = (NSDictionary *)responseObject;
if (!jsonDict)
   return;
if ([jsonDict isKindOfClass:[NSDictionary class]] == NO)
   NSAssert(NO, @&quot;Expected a dictionary, got %@&quot;, NSStringFromClass([jsonDict class]));     
if ([jsonDict[@&quot;status&quot;] isEqualToString:@&quot;OK&quot;]) {
    NSArray *locGeometryResult=[[jsonDict valueForKeyPath:@&quot;results.geometry&quot;] objectAtIndex:0];
    NSDictionary *locationDict = [locGeometryResult valueForKey:@&quot;location&quot;];
    NSLog(@&quot;JSON: %@&quot;, locationDict.description);
    CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake([locationDict[@&quot;lat&quot;] doubleValue], [locationDict[@&quot;lng&quot;] doubleValue]);
    GMSCameraUpdate *updatedCamera = [GMSCameraUpdate setTarget:coordinate zoom:17];
    [self.mapView animateWithCameraUpdate:updatedCamera];
} else {
        NSLog(@&quot;No location found.&quot;);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@&quot;Error: %@&quot;); 
}];
&lt;/pre&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/3159264191136126496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2016/02/geocoding-google-map-in-ios.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/3159264191136126496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/3159264191136126496'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2016/02/geocoding-google-map-in-ios.html' title='Geocoding Google map in iOS'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-7344756372096338675</id><published>2015-10-13T01:06:00.000+05:30</published><updated>2015-10-13T01:06:13.233+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="ATS"/><category scheme="http://www.blogger.com/atom/ns#" term="Exception"/><category scheme="http://www.blogger.com/atom/ns#" term="HTTP"/><category scheme="http://www.blogger.com/atom/ns#" term="HTTPS"/><category scheme="http://www.blogger.com/atom/ns#" term="iOS9"/><category scheme="http://www.blogger.com/atom/ns#" term="plist"/><category scheme="http://www.blogger.com/atom/ns#" term="Transport Security"/><category scheme="http://www.blogger.com/atom/ns#" term="Xcode7"/><title type='text'>App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app&#39;s Info.plist file.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Apple announced &quot;&lt;b&gt;App Transport Security&lt;/b&gt;&quot; for &lt;b&gt;iOS9 &amp;amp; EI Capitan OSX 10.11&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;ATS&lt;/b&gt;(&lt;i&gt;App Transport Security&lt;/i&gt;), an app add a declaration to its &lt;i&gt;&lt;b&gt;info.plist&lt;/b&gt;&lt;/i&gt; that specifies the domai&lt;b&gt;n&lt;/b&gt; which it needs secure communication. It prevents accidental disclosure, security and easy to adopt. If you were developing an app, you should use &lt;b&gt;HTTPS&lt;/b&gt; exclusively. Because if your application attempts to any &lt;b&gt;HTTP&lt;/b&gt; server that doesnot support &lt;b&gt;SSL&lt;/b&gt; technology.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;By passing app-security.&lt;/b&gt;&lt;br /&gt;
To configure domain exception, your app can connect to non-secure and add these keys to &lt;i&gt;&lt;b&gt;info.plist &lt;/b&gt;&lt;/i&gt;(&lt;i&gt;Xcode7 doesnot currently auto complete these keys&lt;/i&gt;)&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
Do changes in &lt;b&gt;info.plist&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h6OHnv4oqdcweibIrbOgKm2CgXhAysVSOMQgUSDZD3ed3pn44-fJ4YWoNtsv3uTuFyE2fDgGO6d2Ne8D_3QQLI28VvHPEqXwDDpXixHIhKvrFuhEQ_logp2sLGoIxuxpYqItyibzqMRh/s1600/NS_ATS.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;72&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h6OHnv4oqdcweibIrbOgKm2CgXhAysVSOMQgUSDZD3ed3pn44-fJ4YWoNtsv3uTuFyE2fDgGO6d2Ne8D_3QQLI28VvHPEqXwDDpXixHIhKvrFuhEQ_logp2sLGoIxuxpYqItyibzqMRh/s320/NS_ATS.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example you can &lt;i&gt;&lt;b&gt;add a domain specific&lt;/b&gt;&lt;/i&gt; like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;key&amp;gt;NSAppTransportSecurity&amp;lt;/key&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;key&amp;gt;NSExceptionDomains&amp;lt;/key&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;dict&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;key&amp;gt;YOUR_DOMAIN_NAME&amp;lt;/key&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dict&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;key&amp;gt;NSTemporaryExceptionAllowsInsecureHTTPLoads&amp;lt;/key&amp;gt;&amp;lt;true&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;key&amp;gt;NSIncludesSubdomains&amp;lt;/key&amp;gt;&amp;lt;true&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;key&amp;gt;NSTemporaryExceptionMinimumTLSVersion&amp;lt;/key&amp;gt;&amp;lt;string&amp;gt;TLSv1.1&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/true&amp;gt;&amp;lt;/true&amp;gt;&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/dict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Alternate solution&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
If I do not know all &lt;i&gt;insecure domains&lt;/i&gt;, then use&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCNkCuxGf7i_6YDAphGiyKVAW56X-KYfBXfNprLGJET25AL95Xsj1-3vhqkJKu08B4-CBxXJ5V9Cc2x9om8pnl19WdhIbu0d1QgtmBgpQSgm9BYxQXM4DuCME0L78I62hWjbSDuIB3OFL7/s1600/by_pass_ATS.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;25&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCNkCuxGf7i_6YDAphGiyKVAW56X-KYfBXfNprLGJET25AL95Xsj1-3vhqkJKu08B4-CBxXJ5V9Cc2x9om8pnl19WdhIbu0d1QgtmBgpQSgm9BYxQXM4DuCME0L78I62hWjbSDuIB3OFL7/s320/by_pass_ATS.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;key&amp;gt;NSAppTransportSecurity&amp;lt;/key&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;key&amp;gt;NSAllowsArbitraryLoads&amp;lt;/key&amp;gt;&amp;lt;true&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;dict&amp;gt;&lt;br /&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/7344756372096338675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2015/10/app-transport-security-has-blocked.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/7344756372096338675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/7344756372096338675'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2015/10/app-transport-security-has-blocked.html' title='App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app&#39;s Info.plist file.'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h6OHnv4oqdcweibIrbOgKm2CgXhAysVSOMQgUSDZD3ed3pn44-fJ4YWoNtsv3uTuFyE2fDgGO6d2Ne8D_3QQLI28VvHPEqXwDDpXixHIhKvrFuhEQ_logp2sLGoIxuxpYqItyibzqMRh/s72-c/NS_ATS.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-6112624225133933618</id><published>2015-10-12T22:45:00.002+05:30</published><updated>2015-10-12T22:47:23.877+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".bash_profile"/><category scheme="http://www.blogger.com/atom/ns#" term="brew"/><category scheme="http://www.blogger.com/atom/ns#" term="CommandLineTools"/><category scheme="http://www.blogger.com/atom/ns#" term="EI Capitan"/><category scheme="http://www.blogger.com/atom/ns#" term="Git"/><category scheme="http://www.blogger.com/atom/ns#" term="iOS9"/><category scheme="http://www.blogger.com/atom/ns#" term="ps1"/><category scheme="http://www.blogger.com/atom/ns#" term="Xcode7"/><title type='text'>Git doesnot work after upgrading Mac OS X EI Capitan (v10.11)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;i&gt;git-completion.bash to work on Mac OSX&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
1) &lt;i&gt;sudo brew update&lt;/i&gt;&lt;br /&gt;
2) &lt;i&gt;sudo brew doctor&lt;/i&gt;&lt;br /&gt;
3) &lt;i&gt;brew install git&lt;/i&gt;&lt;br /&gt;
4) Now, its time to check &lt;i&gt;git --version&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Display git branch name not working after upgrading to EI Capitan OSX&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
1) &lt;i&gt;cat ~/.bash_profile&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;b&gt;Output&lt;/b&gt;&lt;i&gt; &lt;/i&gt;&lt;br /&gt;
&lt;pre&gt;export JAVA_HOME=$(/usr/libexec/java_home)
source /Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh
PS1=&quot;[\[\033[32m\]\w]\[\033[0m\]\$(__git_ps1)\n\[\033[1;36m\]\u\[\033[32m\]$ \[\\033[0m\]&quot;export PATH=&quot;/usr/local/bin:$PATH&quot;&lt;/pre&gt;
&lt;br /&gt;
&lt;i&gt;2) source ~/.bash_profile&lt;/i&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Error:&lt;/b&gt;&lt;/span&gt; -bash: /Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh: No such file or directory&lt;br /&gt;
&lt;br /&gt;
3) Edit the path &lt;i&gt;&quot;/usr/local/etc/bash_completion.d/git-prompt.sh&quot; and then &lt;/i&gt;&lt;i&gt;source ~/.bash_profile&lt;/i&gt; &lt;br /&gt;
&lt;i&gt;cat ~/.bash_profile&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;b&gt;Output&lt;/b&gt;&lt;i&gt; &lt;/i&gt;&lt;br /&gt;
export JAVA_HOME=$(/usr/libexec/java_home)&lt;br /&gt;
source /usr/local/etc/bash_completion.d/git-prompt.sh&lt;br /&gt;
GIT_PS1_SHOWDIRTYSTATE=true&lt;br /&gt;
export PS1=&#39;[\u@&lt;b&gt;OSX-Capitan&lt;/b&gt; \w$(__git_ps1)]\$ &#39;&lt;br /&gt;
export PATH=&quot;/usr/local/bin:$PATH&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; background-color: white; border: 0px; clear: both; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 19.5px; margin: 0px 0px 1em; orphans: auto; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;&quot;&gt;
&lt;b&gt;Another solution&lt;/b&gt;: Reinstalling Xcode Command Line Tools via Terminal&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; background-color: white; border: 0px; clear: both; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 19.5px; margin: 0px 0px 1em; orphans: auto; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;&quot;&gt;
&lt;i&gt;xcode-select --install &lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/6112624225133933618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2015/10/git-doesnot-work-after-upgrading-mac-os.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/6112624225133933618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/6112624225133933618'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2015/10/git-doesnot-work-after-upgrading-mac-os.html' title='Git doesnot work after upgrading Mac OS X EI Capitan (v10.11)'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-6813723343241720943</id><published>2014-01-13T19:04:00.000+05:30</published><updated>2014-01-16T14:31:13.672+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="iOS7"/><category scheme="http://www.blogger.com/atom/ns#" term="keyboard focus color"/><category scheme="http://www.blogger.com/atom/ns#" term="UIBarButtonItem title color iOS7"/><category scheme="http://www.blogger.com/atom/ns#" term="UINavigationBar ios7"/><category scheme="http://www.blogger.com/atom/ns#" term="UINavigationBar title color iOS7"/><category scheme="http://www.blogger.com/atom/ns#" term="UISearchBar iOS7"/><category scheme="http://www.blogger.com/atom/ns#" term="UIStatusBarStyle iOS7"/><category scheme="http://www.blogger.com/atom/ns#" term="UITextField tint color"/><category scheme="http://www.blogger.com/atom/ns#" term="UITextView tint color"/><title type='text'>iOS 7 Layout changes | XCode5</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Hey Folks,&lt;br /&gt;
Here some fixes/changes on iOS7:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1)&lt;/b&gt; &lt;b&gt;UINavigationBar Background Image :&lt;/b&gt;&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;
 if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@&quot;7.0&quot;)
    [[UINavigationBar appearance]setBackgroundImage:[UIImage imageNamed:@&quot;navbar_bg_ios7.png&quot;]forBarMetrics:UIBarMetricsDefault];
else
    [[UINavigationBar appearance]setBackgroundImage:[UIImage imageNamed:@&quot;navbar_bg.png&quot;]forBarMetrics:UIBarMetricsDefault];&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;Important :Image should be of 320px x 64px (&lt;/b&gt;if you want to support lower versions, then you have to add another image of &lt;b&gt;320px x 44px)&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2) UINavigationBar title color&amp;nbsp;&lt;/b&gt;: (By default Black color in iOS7)&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;[[UINavigationBar appearance]setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIColor whiteColor];forKey:UITextAttributeTextColor]];&lt;/pre&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;3) UIBarButtonItem title color : (&lt;/b&gt;By default Blue color in iOS7&lt;b&gt;)&lt;/b&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;[[UIBarButtonItem appearance]setTintColor:[UIColor whiteColor]];&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4) UISearchBar Style + Cancel barButtonItem color&amp;nbsp;:&lt;/b&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:php;&quot;&gt;
[self.searchBar setSearchBarStyle:UISearchBarStyleMinimal];
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class,nil]setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:kBlueTintColor,UITextAttributeTextColor,[NSValue valueWithUIOffset:UIOffsetMake(0,1)],UITextAttributeTextShadowOffset,nil]forState:UIControlStateNormal];&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;5) APPDelegate Window&lt;/b&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt; self.window.tintColor = [UIColor whiteColor];&amp;nbsp;&lt;/pre&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;Important&lt;/b&gt;: Beware to use this code. Every UI elements traits behaves as in white color(i.e UIbarbutton item, keyboard focus etc..)&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;6) UITextView | UITextField focus color&lt;/b&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;[[UITextView appearance] setTintColor:kBlueTintColor]
&lt;/pre&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/6813723343241720943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2014/01/ios-7-layout-changes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/6813723343241720943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/6813723343241720943'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2014/01/ios-7-layout-changes.html' title='iOS 7 Layout changes | XCode5'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-2940583589247939170</id><published>2013-12-05T12:13:00.000+05:30</published><updated>2014-01-16T14:37:19.978+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="add uinavigationbar to modal uitableviewcontroller"/><category scheme="http://www.blogger.com/atom/ns#" term="presentModalViewController"/><category scheme="http://www.blogger.com/atom/ns#" term="UIImageview"/><category scheme="http://www.blogger.com/atom/ns#" term="UINavigationController"/><category scheme="http://www.blogger.com/atom/ns#" term="UINavigationItem"/><category scheme="http://www.blogger.com/atom/ns#" term="UIViewController"/><title type='text'>Add UINavigationBar to modal UITableViewController </title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;
ViewController *vc = [[ViewController alloc] initWithNibName:@&quot;ViewController&quot; bundle:nil];
UINavigationController *navC = [[UINavigationController alloc] initWithRootViewController:vc];
[self.navigationController presentModalViewController:navC animated:YES];
&amp;nbsp;&lt;/pre&gt;
Now , you&#39;ll add UINavigation items over this viewcontroller
&lt;pre class=&quot;brush: csharp&quot;&gt;
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@&quot;YOUR_IMAGE_NAME_WITH_EXTENSION&quot;]];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@&quot;Cancel&quot; style:UIBarButtonItemStyleDone target:self action:nil];
&lt;/pre&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/2940583589247939170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2013/12/add-uinavigationbar-to-modal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/2940583589247939170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/2940583589247939170'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2013/12/add-uinavigationbar-to-modal.html' title='Add UINavigationBar to modal UITableViewController '/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-1859553200641400759</id><published>2013-12-04T13:20:00.000+05:30</published><updated>2014-01-16T14:38:11.598+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AFNetworking"/><category scheme="http://www.blogger.com/atom/ns#" term="cell imageview"/><category scheme="http://www.blogger.com/atom/ns#" term="UIImageView+AFNetworking"/><category scheme="http://www.blogger.com/atom/ns#" term="UITableview"/><category scheme="http://www.blogger.com/atom/ns#" term="UITableviewCell"/><title type='text'>Setting UITableViewCell imageview via AFNetworking</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
#import &quot;UIImageView+AFNetworking.h&quot;&amp;nbsp;&lt;a href=&quot;https://github.com/AFNetworking/AFNetworking/blob/master/UIKit%2BAFNetworking/UIImageView%2BAFNetworking.h&quot; target=&quot;_blank&quot;&gt;Download&lt;/a&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:php;&quot;&gt;NSURLRequest *imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@&quot;YOUR_URL&quot;]];
[cell.imageView setImageWithURLRequest:imageRequest placeholderImage:nil
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image){
        NSLog(@&quot;success&quot;);
        cell.imageView.image = image;
        cell.imageView.contentMode = UIViewContentModeScaleAspectFit;
        cell.imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
        [cell setNeedsLayout];// To update the cell {if not using this, your image is not showing over cell.}
}failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){
        NSLog(@&quot;Failure&quot;);}
&lt;/pre&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/1859553200641400759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2013/12/setting-uitableviewcell-imageview-via.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/1859553200641400759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/1859553200641400759'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2013/12/setting-uitableviewcell-imageview-via.html' title='Setting UITableViewCell imageview via AFNetworking'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-4073364550154875585</id><published>2013-10-21T15:00:00.003+05:30</published><updated>2014-01-16T14:41:34.418+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="new line from NSString"/><category scheme="http://www.blogger.com/atom/ns#" term="remove \n"/><category scheme="http://www.blogger.com/atom/ns#" term="remove duplicates character in iOS from NSString"/><category scheme="http://www.blogger.com/atom/ns#" term="remove new line character from NSString"/><category scheme="http://www.blogger.com/atom/ns#" term="remove white spaces"/><category scheme="http://www.blogger.com/atom/ns#" term="stringByReplacingOccurrencesOfString"/><category scheme="http://www.blogger.com/atom/ns#" term="Trimming space"/><title type='text'>remove excess white spaces | new line or \n | Trimming space, new line from NSString</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;pre class=&quot;brush:php;&quot;&gt;
NSString *testString = @&quot;General Work Times change week-to-week.\n Please visit\n http:/&lt;a href=&quot;http://jabbleashish.blogspot.in/&quot;&gt;/jabbleashish.blogspot.in/&lt;/a&gt; \n for the latest schedule.\n\nOffice Hours:\n5 days a week except holidays.\n10Am-8Pm \n&amp;nbsp; or any late nights.&quot;;
NSLog(@&quot;str : %@ -- %i&quot;,testString,testString.length);
// Remove duplicate spaces
&amp;nbsp;while ([testString rangeOfString:@&quot;&amp;nbsp; &quot;].location != NSNotFound)
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testString = [testString stringByReplacingOccurrencesOfString:@&quot;&amp;nbsp; &quot; withString:@&quot; &quot;];
// Remove duplicate multiple newlines
&amp;nbsp; while ([testString rangeOfString:@&quot;\n\n&quot;].location != NSNotFound)
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; testString = [testString stringByReplacingOccurrencesOfString:@&quot;\n\n&quot; withString:@&quot;\n&quot;];
//Remove duplicate new line
&amp;nbsp;&amp;nbsp; while ([testString rangeOfString:@&quot;\n&quot;].location != NSNotFound)
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; testString = [testString stringByReplacingOccurrencesOfString:@&quot;\n&quot; withString:@&quot; &quot;];
NSLog(@&quot;\n%@ -- %i&quot;, testString,testString.length);
&lt;/pre&gt;
&lt;strike&gt;[NSCharacterSet whitespaceAndNewlineCharacterSet]]&lt;/strike&gt; &lt;b&gt;Not works for me.&lt;/b&gt;

&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/4073364550154875585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2013/10/remove-excess-white-spaces-new-line-or.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/4073364550154875585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/4073364550154875585'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2013/10/remove-excess-white-spaces-new-line-or.html' title='remove excess white spaces | new line or \n | Trimming space, new line from NSString'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3825422117901839927.post-5088973759247805243</id><published>2013-10-18T21:28:00.000+05:30</published><updated>2013-10-18T21:28:16.991+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="application loader"/><category scheme="http://www.blogger.com/atom/ns#" term="icon"/><category scheme="http://www.blogger.com/atom/ns#" term="icon specified in info.plist not found under top level wrapper"/><category scheme="http://www.blogger.com/atom/ns#" term="iTunes"/><category scheme="http://www.blogger.com/atom/ns#" term="iTunes store"/><category scheme="http://www.blogger.com/atom/ns#" term="non-retina"/><category scheme="http://www.blogger.com/atom/ns#" term="plist"/><category scheme="http://www.blogger.com/atom/ns#" term="retina"/><title type='text'>Icon specified in the info.plist not found under top level app wrapper</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg6IPfWo7IgMQSl72TQ7Y8LdA4XoGZnl0VsF82904hh9EKowALCfZ2dkGYuuZ41shwCIrTfe3nD6kCGi5-KjrJd1F74MDANijxkp2BujVeKTrXsFIUXvSZEY55We-Ce70MUVhW_uWcGUYo/s1600/iTunes.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;193&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg6IPfWo7IgMQSl72TQ7Y8LdA4XoGZnl0VsF82904hh9EKowALCfZ2dkGYuuZ41shwCIrTfe3nD6kCGi5-KjrJd1F74MDANijxkp2BujVeKTrXsFIUXvSZEY55We-Ce70MUVhW_uWcGUYo/s320/iTunes.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
This error is showing while uploading binary to iTunes store.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Error&lt;/b&gt;: Icon specified in info.plist not found.&lt;br /&gt;
&lt;b&gt;Solution: &lt;/b&gt;your icon name mismatch in info.plist file.&lt;br /&gt;
&lt;br /&gt;
I&#39;ve putted image&amp;nbsp;&lt;b&gt;app-prod@2x.png&lt;/b&gt;&amp;nbsp;in my resources folder, but in info.plist my icon name is&lt;br /&gt;
&lt;b&gt;app-prod@2X.png. {difference look &amp;nbsp;X letter is capitalized in info.plist}&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
Hope this works for you.&lt;br /&gt;
Cheers :)&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jabbleashish.blogspot.com/feeds/5088973759247805243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jabbleashish.blogspot.com/2013/10/icon-specified-in-infoplist-not-found.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/5088973759247805243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825422117901839927/posts/default/5088973759247805243'/><link rel='alternate' type='text/html' href='http://jabbleashish.blogspot.com/2013/10/icon-specified-in-infoplist-not-found.html' title='Icon specified in the info.plist not found under top level app wrapper'/><author><name>Ashish Jabble</name><uri>http://www.blogger.com/profile/12723981991436618453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg6IPfWo7IgMQSl72TQ7Y8LdA4XoGZnl0VsF82904hh9EKowALCfZ2dkGYuuZ41shwCIrTfe3nD6kCGi5-KjrJd1F74MDANijxkp2BujVeKTrXsFIUXvSZEY55We-Ce70MUVhW_uWcGUYo/s72-c/iTunes.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>