// API callback
related_results_labels_thumbs({"version":"1.0","encoding":"UTF-8","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":{"$t":"tag:blogger.com,1999:blog-419320228883344195"},"updated":{"$t":"2023-11-26T02:21:41.764-08:00"},"category":[{"term":"Technical"},{"term":"My Poetry"},{"term":"Programming"},{"term":"Release"},{"term":"Life"},{"term":"My Software Applications"},{"term":"Personal"},{"term":"Android Apps"},{"term":"Booklet"},{"term":"Reviews\/Reports"},{"term":"Tutorial"},{"term":"LearnedToday"},{"term":"Hacks"},{"term":"Nostalgia"},{"term":"OneSignal"}],"title":{"type":"text","$t":"Shakes Vision"},"subtitle":{"type":"html","$t":"ShakesVision by Shakeeb Ahmad| The blog \"Shakes Vision\" is all about how I see the world! This blog is to share my views, knowledge and hacks I've learned, My poetry and the software applications I've created. ©Shakeeb Ahmad"},"link":[{"rel":"http://schemas.google.com/g/2005#feed","type":"application/atom+xml","href":"https:\/\/www.shakeeb.in\/feeds\/posts\/default"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/419320228883344195\/posts\/default\/-\/Technical?alt=json-in-script\u0026max-results=6"},{"rel":"alternate","type":"text/html","href":"https:\/\/www.shakeeb.in\/search\/label\/Technical"},{"rel":"hub","href":"http://pubsubhubbub.appspot.com/"},{"rel":"next","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/419320228883344195\/posts\/default\/-\/Technical\/-\/Technical?alt=json-in-script\u0026start-index=7\u0026max-results=6"}],"author":[{"name":{"$t":"Shakeeb Ahmad"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/17653459503215179964"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj0xfeyUVi21b-PCYCtvmlsj8yBnPBPqjmkTXju9QARy7EeajeXP7FiMLrWYy9f1gpsHkMTwucDqCjN9QPKqG6-zGZG-Nv-St1BdjmMgXWaf2hlrscbT6D8FPdDEwTFJzU\/s220\/ShakeebAvatarLowQuality.jpg"}}],"generator":{"version":"7.00","uri":"http://www.blogger.com","$t":"Blogger"},"openSearch$totalResults":{"$t":"11"},"openSearch$startIndex":{"$t":"1"},"openSearch$itemsPerPage":{"$t":"6"},"entry":[{"id":{"$t":"tag:blogger.com,1999:blog-419320228883344195.post-2144413843127653629"},"published":{"$t":"2023-04-26T11:28:00.019-07:00"},"updated":{"$t":"2023-10-05T01:35:46.917-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Android Apps"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Technical"}],"title":{"type":"text","$t":"Building an App Builder - Strategies, Limitations and Available Tools"},"content":{"type":"html","$t":"\u003Cp\u003EAs a budding app developer, creating an app builder for mobile devices is an exciting idea which I'm giving a lot of thinking since early 2019. However, there are several strategies, and limitations that need to be considered before embarking on this journey. In this blog post, I will explore these aspects in detail.\u003C\/p\u003E\u003Cp\u003EThis would be a brainstorming session for me, where I'd just put all that I've found while researching this subject.\u003C\/p\u003E\u003Ch2 style=\"text-align: left;\"\u003ETechniques\u003C\/h2\u003E\u003Ch3 style=\"text-align: left;\"\u003EScratchware\u003C\/h3\u003E\u003Cp\u003EScratchware was an interesting project but is now deprecated. Its technique was unique, where the app was built on the device itself, without any internet connection. However, other app builders mostly build the app on the server. Therefore, it is not necessary that the build part should be on the server.\u003C\/p\u003E\u003Cp\u003EScratchware was based on\u0026nbsp;MIT App Inventor as per their website before the deprecation. Showing ads before each build, and giving options to arrange items (buttons, cards, inputs, labels etc.) in rows and columns were really awesome features. For logic, it used Scratch Programming blocks.\u003C\/p\u003E\u003Ch3 style=\"text-align: left;\"\u003EAPK Editor\u003C\/h3\u003E\u003Cp\u003EAnother app builder that is worth mentioning is \u003Ca href=\"https:\/\/github.com\/REAndroid\/APKEditor\"\u003EAPK Editor\u003C\/a\u003E, which uses ARSCLib. Another similar one is \u003Ca href=\"https:\/\/github.com\/apk-editor\/APK-Explorer-Editor\"\u003EAPK Explorer Editor\u003C\/a\u003E, which offers a full version via Fdroid.Other repos for Apk Editor might be using apktool.jar. Apktool is also being used in many Android apps, like revanced. How are they able to run.jar tools is a mystery for me yet, as executing jar requires JRE while Android runs on Dalvik Virtual Machine.\u003C\/p\u003E\u003Cp\u003EA workaround (or not?) is to use jar library via custom Cordova plugin. Plugin docs suggest it can be done easily. See this suggestion from a stackoverflow answer:\u003C\/p\u003E\u003Cp\u003EAdd lib-file element to your plugin.xml:\u003C\/p\u003E\u003Cp\u003E\u0026lt;platform name=\"android\"\u0026gt;\u003C\/p\u003E\u003Cp\u003E\u0026nbsp; \u0026lt;lib-file src=\"AztecReader.jar\" \/\u0026gt;\u003C\/p\u003E\u003Cp\u003E\u0026lt;\/platform\u0026gt;\u003C\/p\u003E\u003Cp\u003EAnyway, ApkEditor recompiles the app on the device itself, without any internet connection. This approach proves that building an app builder on a mobile device is possible without the need for a server.\u003C\/p\u003E\u003Ch3 style=\"text-align: left;\"\u003ECordova-like Environment\u003C\/h3\u003E\u003Cp\u003ECreating a Cordova-like environment on a mobile device seems difficult. Even though initializing an empty Cordova app within the user's device is possible using Node Mobile or AndroidJs, compiling the APK will be tricky as it would need gradle, java jdk, android build tools, apksigner, etc. The end-users may not have these tools installed on their devices, making it difficult for them to compile the app.\u003C\/p\u003E\u003Ch3 style=\"text-align: left;\"\u003ETermux\u003C\/h3\u003E\u003Cp\u003EJava runtime, etc., would be possible using Termux in android, but that would require end-users to have Termux installed, which may be a challenge.\u003C\/p\u003E\u003Ch3 style=\"text-align: left;\"\u003EUsing a Sample App as a Base\u003C\/h3\u003E\u003Cp\u003EAnother approach could be to use a sample app as a base and replace its content at runtime using a user-defined config file. This approach is similar to the Cordova-like environment but is more simplified and straightforward.\u003C\/p\u003E\u003Ch3 style=\"text-align: left;\"\u003EMeta-data\u003C\/h3\u003E\u003Cp\u003EOne of the most popular strategies for creating an app builder is to use meta-data. In this strategy, the \"app\" you define is meta-data in a higher-level definition that is interpreted in a host wrapper app. This approach makes it easier to create apps as the app builder is more of a code generator.\u003C\/p\u003E\u003Ch3 style=\"text-align: left;\"\u003EDesktop - HTML to APK\u003C\/h3\u003E\u003Cp style=\"text-align: left;\"\u003EA tool I found, and tested but never used in production or even to build anything remotely of any use for myself is \u003Ca href=\"https:\/\/website2apk.en.softonic.com\/?ex=DINS-635.1\" target=\"_blank\"\u003EWebsite to APK\u003C\/a\u003E\u003Ci\u003E \u003C\/i\u003Ewhich is a desktop-based tool. The interface looks like it's built using the C# Windows Form Application. The options are really great, and it's user-friendly.\u0026nbsp;\u003C\/p\u003E\u003Cp style=\"text-align: left;\"\u003ESoftonic's dev bio hyperlink suggests Pravesh Agrawal as the developer. \u003Ca href=\"https:\/\/praveshagrawal.com\/\" target=\"_blank\"\u003EWeb\u003C\/a\u003E, \u003Ca href=\"https:\/\/github.com\/praveshagrawal\" target=\"_blank\"\u003EGithub\u003C\/a\u003E, \u003Ca href=\"https:\/\/twitter.com\/praveshag\" target=\"_blank\"\u003ETwitter\u003C\/a\u003E.\u003C\/p\u003E\u003Cp style=\"text-align: left;\"\u003EIt seems to be using all the standard tools in the background (probably running a bash script for build instructions). Options to select a URL or a local folder are awesome, along with an icon, splash screen, and setting up Admob ids in presumably pre-configured ad spaces.\u0026nbsp;\u003C\/p\u003E\u003Cp style=\"text-align: left;\"\u003EThis perfectly depicts the \"meta-data\" type or a \"base app\" already set, which is modified based on the user's input.\u0026nbsp;\u003C\/p\u003E\u003Ch2 style=\"text-align: left;\"\u003EAvailable Tools\u003C\/h2\u003E\u003Cp\u003EThere are several tools available for creating an app builder on mobile devices. Some of these tools include:\u0026nbsp;\u003C\/p\u003E\u003Cp\u003E\u003Cb\u003EAppSheet:\u003C\/b\u003E AppSheet uses a meta-data strategy to create an app builder. It interprets the higher-level definition in a host wrapper app, making it easier to create apps.\u003C\/p\u003E\u003Cblockquote\u003E\u003Cp\u003E\u003Ci\u003EA sample response to the question \"Building an App Builder - how do they do it?\" on \u003Ca href=\"https:\/\/stackoverflow.com\/questions\/39032767\/building-an-app-builder-how-do-they-do-it\" target=\"_blank\"\u003Estackoverflow\u003C\/a\u003E as a reference:\u003C\/i\u003E\u003C\/p\u003E\u003Cp\u003EI work at AppSheet. There are two basic approaches an app builder can follow: (a) act as a code generator, or (b) implement an intepreter. In the former case, it spits out code that gets compiled into an executable package that can be installed and run on a device. In the latter case, the \"app\" you define is meta-data in a higher-level definition that is interpreted in a host wrapper app. Each has its strengths and weaknesses. AppSheet uses the latter approach. \u003Ci\u003E— Praveen Seshadri\u003C\/i\u003E\u003C\/p\u003E\u003C\/blockquote\u003E\u003Cp\u003E\u003Cb\u003EThunkable:\u003C\/b\u003E\u0026nbsp;Thunkable uses a simple drag-drop interface and loads of pre-defined templates and customizations. As far as I remember, It also uses Sratch for programming logic similar to Scratchware.\u003C\/p\u003E\u003Cp\u003E\u003Cb\u003EAndromo:\u003C\/b\u003E Andromo is an online app builder that lets you create Android apps without any coding. It has a user-friendly interface that makes it easy to build apps.\u003C\/p\u003E\u003Cp\u003E\u003Cb\u003EBuildFire:\u003C\/b\u003E BuildFire is another online app builder that offers a drag-and-drop interface for creating Android apps.\u003C\/p\u003E\u003Ch2 style=\"text-align: left;\"\u003EConclusion\u003C\/h2\u003E\u003Cp\u003EI'm not really sure which strategy would work the best, but a couple of them looks promising to me. \u003Ci\u003EFor Android on Android\u003C\/i\u003E, editing the APK and recompiling might be the easiest one. Although I've to dig deeper to understand how APK editor and the likes do it. It's not just unzip and re-zip of the package, which often results in app corruption.\u0026nbsp;\u003C\/p\u003E\u003Cp\u003EA desktop app might be simple, but dependencies should be bundled within the executable in that case, otherwise, it'd again feel like something built for advanced users.\u003C\/p\u003E\u003Cp\u003E\u003Ci\u003EReferences\u003C\/i\u003E\u003C\/p\u003E\u003Cp\u003E\u003Ca href=\"https:\/\/github.com\/Sketchware-Pro\/Sketchware-Pro\"\u003EScratchware Pro\u003C\/a\u003E continued on GitHub\u003C\/p\u003E\u003Cp\u003E\u003Ca href=\"https:\/\/stackoverflow.com\/questions\/50988518\/how-do-i-build-a-cordova-8-x-cordova-jar-to-include-in-existing-android-app\"\u003EHow do I build a Cordova 8.x cordova.jar to include in existing Android app?\u003C\/a\u003E\u003Cbr\u003E\u003C\/p\u003E\u003Cp\u003E\u003Ca href=\"https:\/\/www.linkedin.com\/pulse\/integrating-hybrid-app-cordova-native-java-android-part-bhandari\"\u003EIntegrating Hybrid App (Cordova) with Native App (Java android app) — Part 1\u003C\/a\u003E\u0026nbsp;by \u003Ca href=\"https:\/\/github.com\/pankajbhandari08?tab=repositories\"\u003Epankajbhandari08\u003C\/a\u003E\u003Cbr\u003E\u003C\/p\u003E\u003Cp\u003E\u003Ca href=\"https:\/\/www.xda-developers.com\/decompile-and-modify-apks-on-the-go-with-apktool-for-android\/\"\u003EDecompile and Modify APKs on the go with APKTool for Android [XDA Spotlight]\u003C\/a\u003E introduces apktool by \u003Ca href=\"https:\/\/www.androidfilehost.com\/?w=profile\u0026amp;uid=24562946973631820\"\u003EAndro Black\u003C\/a\u003E\u003Cbr\u003E\u003C\/p\u003E\u003Cp\u003E\u003Ca href=\"https:\/\/stackoverflow.com\/questions\/16608135\/android-studio-add-jar-as-library\"\u003EAndroid Studio: Add jar as library?\u003C\/a\u003E Directly or using mavenCentral as per one of the comments\u003C\/p\u003E\u003Cp\u003E\u003Ca href=\"https:\/\/stackoverflow.com\/questions\/26038026\/including-jar-file-into-cordova-plugin\"\u003EIncluding .jar file into cordova plugin\u003C\/a\u003E with suggestion to add lib-file in plugin\u003C\/p\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/www.shakeeb.in\/feeds\/2144413843127653629\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/www.shakeeb.in\/2023\/04\/building-app-builder-strategies.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/419320228883344195\/posts\/default\/2144413843127653629"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/419320228883344195\/posts\/default\/2144413843127653629"},{"rel":"alternate","type":"text/html","href":"https:\/\/www.shakeeb.in\/2023\/04\/building-app-builder-strategies.html","title":"Building an App Builder - Strategies, Limitations and Available Tools"}],"author":[{"name":{"$t":"Shakeeb Ahmad"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/17653459503215179964"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj0xfeyUVi21b-PCYCtvmlsj8yBnPBPqjmkTXju9QARy7EeajeXP7FiMLrWYy9f1gpsHkMTwucDqCjN9QPKqG6-zGZG-Nv-St1BdjmMgXWaf2hlrscbT6D8FPdDEwTFJzU\/s220\/ShakeebAvatarLowQuality.jpg"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-419320228883344195.post-7252855088495953191"},"published":{"$t":"2020-12-31T09:19:00.007-08:00"},"updated":{"$t":"2021-03-12T04:46:03.165-08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Booklet"},{"scheme":"http://www.blogger.com/atom/ns#","term":"My Software Applications"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Programming"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Release"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Technical"}],"title":{"type":"text","$t":"iPhone Users! Here's a Web App for Qaafiyah Expert"},"content":{"type":"html","$t":"\u003Ch2 style=\"text-align: left;\"\u003ETldr;\u003C\/h2\u003E\u003Cdiv\u003EIf you are in a hurry, here's the link to Qaafiyah Expert - Web:\u003C\/div\u003E\u003Cdiv\u003E\u003Cul style=\"text-align: left;\"\u003E\u003Cli\u003E\u003Ca href=\"https:\/\/q.shakeeb.in\/\"\u003Ehttps:\/\/q.shakeeb.in\/\u003C\/a\u003E\u003C\/li\u003E\u003C\/ul\u003E\u003C\/div\u003E\u003Ch2 style=\"text-align: left;\"\u003EThe Web App and its Journey\u003C\/h2\u003E\u003Cp\u003ERight from the beginning when I \u003Ca href=\"https:\/\/www.shakeeb.in\/2020\/02\/qaafiyah-expert-android.html\"\u003Elaunched \u003C\/a\u003Ean android app for Qaafiyah Expert (an app to assist Urdu poets with rhymes, meter, dictionary, diary, designing and much more), people were requesting the same for iPhone users. As I was using the cross-platform approach for the app, building the same thing for iPhone wouldn't have taken so long. But the problem was, apple AppStore's pricing. I couldn't afford it. Well, most of us can't.\u003C\/p\u003E\u003Cp\u003EAnyway, after some research on pricings, I decided to go for a PWA (Progressive Web App), which is an installable app, but you don't need to pay a single penny to Google or Apple whatsoever.\u0026nbsp;\u003C\/p\u003E\u003Cp\u003EIt does bring some drawbacks, but there are alternatives for most of the incompatible native-app functionalities. For a naïve user though, PWAs and native Android\/ios apps are indistinguishable. For instance:\u003C\/p\u003E\u003Cp\u003E\u003C\/p\u003E\u003Cul style=\"text-align: left;\"\u003E\u003Cli\u003EVisiting a Progressive Web App asks you to \"Add it to Home Screen\", which is alternative to \"Installing an app\"\u003C\/li\u003E\u003Cli\u003EIt does have an icon, just like a native app\u003C\/li\u003E\u003Cli\u003EIt can work offline using service workers etc.\u003C\/li\u003E\u003C\/ul\u003E\u003Cdiv\u003EThis PWA for Qaafiyah Expert had been hosted on my domain 'q.shakeeb.in' for quite a while now, as you can see in the \"first commit\"\u0026nbsp;\u003Ca href=\"https:\/\/github.com\/ShakesVision\/QaafiyahExpert\" target=\"_blank\"\u003Ehere\u003C\/a\u003E. But some of the features were not working as expected, so I didn't announce it \"officially.\" Now that the android app has been completely rewired, performance is improved and speed is optimized, I decided to use the new code-base, modified it for the web-app and deployed it. iPhone users can now finally use this app.\u003C\/div\u003E\u003Cp style=\"text-align: left;\"\u003EIf you are an android user though, I strongly recommend the \u003Ca href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.sarbakaf.qaafiyah\" target=\"_blank\"\u003Eandroid version\u003C\/a\u003E, which has some cool extra features and obvious UX advantages.\u003C\/p\u003E\u003Cp style=\"text-align: left;\"\u003EOnce again, here's the link to the web-app:\u003C\/p\u003E\u003Cp style=\"text-align: center;\"\u003E\u003Ca href=\"https:\/\/q.shakeeb.in\/\"\u003EQaafiyah Expert - Live Demo\u003C\/a\u003E\u003C\/p\u003E\u003Cp style=\"text-align: left;\"\u003EHope this will assist in your poetry-writing journey.\u0026nbsp;\u003C\/p\u003E\u003Cp style=\"text-align: left;\"\u003E\u003Ci\u003ERab raakha!\u0026nbsp;\u003C\/i\u003E\u003Cspan style=\"color: #222222; font-family: Consolas, \u0026quot;Lucida Console\u0026quot;, \u0026quot;Courier New\u0026quot;, monospace; font-size: 12px; white-space: pre-wrap;\"\u003E👋\u003C\/span\u003E\u003C\/p\u003E\u003Cp\u003E\u003C\/p\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/www.shakeeb.in\/feeds\/7252855088495953191\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/www.shakeeb.in\/2020\/12\/qaafiyah-expert-web.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/419320228883344195\/posts\/default\/7252855088495953191"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/419320228883344195\/posts\/default\/7252855088495953191"},{"rel":"alternate","type":"text/html","href":"https:\/\/www.shakeeb.in\/2020\/12\/qaafiyah-expert-web.html","title":"iPhone Users! Here's a Web App for Qaafiyah Expert"}],"author":[{"name":{"$t":"Shakeeb Ahmad"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/17653459503215179964"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj0xfeyUVi21b-PCYCtvmlsj8yBnPBPqjmkTXju9QARy7EeajeXP7FiMLrWYy9f1gpsHkMTwucDqCjN9QPKqG6-zGZG-Nv-St1BdjmMgXWaf2hlrscbT6D8FPdDEwTFJzU\/s220\/ShakeebAvatarLowQuality.jpg"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-419320228883344195.post-2595003895901018021"},"published":{"$t":"2020-12-24T05:50:00.013-08:00"},"updated":{"$t":"2022-01-22T10:10:36.416-08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Booklet"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Programming"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Release"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Technical"}],"title":{"type":"text","$t":"Rekhta Content Scraper by Shakeeb Ahmad | For Programmers Only"},"content":{"type":"html","$t":"\u003Cp\u003E\u003Cb\u003ENote: \u003C\/b\u003EThis is not yet available for non-programmers. Soon I'll make an easy-to-use version for all, iA.\u003C\/p\u003E\u003Cp\u003EThis scraper with Node.js works for both prose and poetry. Check the \u003Ca href=\"https:\/\/github.com\/ShakesVision\/scraperforliturdu\" target=\"_blank\"\u003EGitHub repo\u003C\/a\u003E for installation instructions.\u003C\/p\u003E\u003Cp\u003EYou would need a text file with all the links you want to download the contents from. To get the list of links, you could manually collect all which interests you, or use the following to scrape all links from an author\/poet page.\u003C\/p\u003E\u003Ch3 style=\"text-align: left;\"\u003EBookmarklets - One Click Solution to get the links etc.\u003C\/h3\u003E\u003Cp\u003ERekhta loads 50 links at a time, and if user scrolls, it adds more content to the DOM. This extra fetch has not been automated in my code yet. (Well I tried, but parsing it wasted so much time that I preferred using manual scroll. Just let the page load, then press \"end\" on your keyboard. Wait for a moment, it will add all the remaining links.)\u003C\/p\u003E\u003Cp\u003EAnyway, once you have the complete list on the page, you can use the bookmarklets below to copy all of them with a click.\u003C\/p\u003E\u003Cp\u003EI've been testing this in browser console for a while now, i.e. open browser console, then paste the script, then change the page text to only what I need, then select and copy them manually.\u0026nbsp;\u003C\/p\u003E\u003Cp\u003ELater on I decided to \u003Ca href=\"https:\/\/www.shakeeb.in\/2020\/10\/magic-of-browser-bookmarks-automate.html\"\u003Euse magic of bookmarklets\u003C\/a\u003E to automate these tasks I've been doing repeatedly:\u0026nbsp;\u003C\/p\u003E\u003Cp\u003E\u003C\/p\u003E\u003Cul style=\"text-align: left;\"\u003E\u003Cli\u003ECopy all the links from the Poet\/Author page.\u003C\/li\u003E\u003Cli\u003EFor \u003Ca href=\"https:\/\/liturdu.sarbakaf.com\" target=\"_blank\"\u003ELitUrdu\u003C\/a\u003E specifically, turn them into an \"object\" with required properties (title, author, link, description, text) and copy it.\u003C\/li\u003E\u003Cli\u003EUse the \"object\" to automatically fill-in text-boxes on new Blogger\u0026nbsp;post.\u003C\/li\u003E\u003C\/ul\u003E\u003Cdiv\u003EUltimate plan is to use Blogger API and post it directly, but this bookmarklet approach doesn't hurt much because most of the things I'm doing are just a click away.\u003C\/div\u003E\u003Cdiv\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cdiv\u003E\u003Cb\u003EBookmarklets\u003C\/b\u003E\u003C\/div\u003E\u003Cdiv\u003E\u003Ci\u003EDrag and drop the links to the bookmarks bar in your browser. (Ctrl+Shift+b to toggle the bar)\u003C\/i\u003E\u003C\/div\u003E\u003Cdiv\u003E\u003Ca href=\"javascript:void%20function(){var%20a=document.querySelectorAll(%22div.contentListBody.contentLoadMoreSection%20%3E%20div%22),b=[];a.forEach(c=%3E{var%20d=c.querySelector(%22a:nth-child(2)%22);d.hasAttribute(%22class%22)||b.push(d.href)}),console.log(b.join(%22\\n%22));var%20c=document.createElement(%22textarea%22);c.value=b.join(%22\\n%22),document.body.appendChild(c),c.select(),document.execCommand(%22Copy%22),document.body.removeChild(c),alert(b.length+%22%20links%20copied!%22)}();\"\u003ECopyRekhtaLinks\u003C\/a\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cdiv\u003EUse on author\/poet's page to copy all the links to their enlisted work\u003C\/div\u003E\n\u003Cdiv\u003E\u003Ca href=\"javascript:'use strict';void function(){var b=document.querySelector('h1').innerText,c=document.querySelector('.authorAddFavorite').innerText,d=document.querySelector('.poemPageContentBody').innerText,e=document.createElement('a');e.href=window.location.href;var a=e.pathname.replace(\/\\\/. \\\/\/,'').replace(\/-stories$\/,''),f=a.split('-').join(' ').split(' ').map(function(a){return a.charAt(0).toUpperCase() a.substring(1)}).join(' ') ' in Urdu Unicode text.\\n' c ' \\u06A9\\u0627 \\u0627\\u0641\\u0633\\u0627\\u0646\\u06C1 \\'' b '\\' \\u0627\\u0631\\u062F\\u0648 \\u06CC\\u0648\\u0646\\u06CC\\u06A9\\u0648\\u0688 \\u0645\\u062A\\u0646 \\u0645\\u06CC\\u06BA\\u06D4',g={title:b ' \\u2014 ' c,text:d.replaceAll('\\n\\n','\\n'),label:'\\u0627\\u0641\\u0633\\u0627\\u0646\\u06D2,\\u0645\\u0635\\u0646\\u0641:',description:f,link:a};console.log(g);var h=document.createElement('textarea');h.value=JSON.stringify(g),document.body.appendChild(h),h.select(),document.execCommand('Copy'),document.body.removeChild(h),alert('Object copied with details!')}();\"\u003ECopyRekhta{}\u003C\/a\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cdiv\u003EUse on individual poem\/story page to copy an object with properties (title, author, link, description, text). Modify as per your needs.\u003C\/div\u003E\n\u003Cdiv\u003E\u003Ca href=\"javascript:'use strict';void function(){document.querySelectorAll('input')[2].value=o.title,document.querySelector('[aria-label=\\'Title\\']').value=o.title,document.querySelector('[aria-label=\\'Enter search description\\']').value=o.description,document.querySelector('[aria-label=\\'Custom Permalink Input\\']').value=o.link,document.querySelector('[aria-label=\\'Separate labels by commas\\']').value=o.label,document.querySelector('body.editable').innerText=o.text}();\"\u003EBloggerPaste\u003C\/a\u003E\u003C\/div\u003E\u003Cdiv\u003EUse on a new Blogger post after pasting the \"object\" from rekhta in console. This will fill in all the required fields in the new post automatically.\u003C\/div\u003E\u003Cp\u003E\u003C\/p\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/www.shakeeb.in\/feeds\/2595003895901018021\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/www.shakeeb.in\/2020\/12\/rekhta-content-scraper-by-shakeeb-ahmad.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/419320228883344195\/posts\/default\/2595003895901018021"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/419320228883344195\/posts\/default\/2595003895901018021"},{"rel":"alternate","type":"text/html","href":"https:\/\/www.shakeeb.in\/2020\/12\/rekhta-content-scraper-by-shakeeb-ahmad.html","title":"Rekhta Content Scraper by Shakeeb Ahmad | For Programmers Only"}],"author":[{"name":{"$t":"Shakeeb Ahmad"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/17653459503215179964"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj0xfeyUVi21b-PCYCtvmlsj8yBnPBPqjmkTXju9QARy7EeajeXP7FiMLrWYy9f1gpsHkMTwucDqCjN9QPKqG6-zGZG-Nv-St1BdjmMgXWaf2hlrscbT6D8FPdDEwTFJzU\/s220\/ShakeebAvatarLowQuality.jpg"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-419320228883344195.post-2445926190904848113"},"published":{"$t":"2020-10-03T11:17:00.006-07:00"},"updated":{"$t":"2021-11-19T00:40:50.647-08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Hacks"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Programming"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Technical"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Tutorial"}],"title":{"type":"text","$t":"Magic of Browser Bookmarks - Automate Simple Tasks using JavaScript"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/1.bp.blogspot.com\/-zhkcEuKdf6s\/YHaaNpSIiJI\/AAAAAAAAFb0\/UCQ8ahc1MtMnTZjG0dG2g7g8v5ehugzqQCLcBGAsYHQ\/s560\/Bookmarklets.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg alt=\"Automation using Bookmarklet\" border=\"0\" data-original-height=\"315\" data-original-width=\"560\" height=\"360\" src=\"https:\/\/1.bp.blogspot.com\/-zhkcEuKdf6s\/YHaaNpSIiJI\/AAAAAAAAFb0\/UCQ8ahc1MtMnTZjG0dG2g7g8v5ehugzqQCLcBGAsYHQ\/w640-h360\/Bookmarklets.png\" title=\"Magical Automation using Bookmarklet\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cp\u003EAs I promised in #LearnedToday, I'm going to show you how much you can achieve with this little bookmark feature in the browsers.\u003C\/p\u003E\u003Cblockquote\u003E\u003Cp\u003EEver wondered how to easily remove citations from a Wikipedia page?\u0026nbsp;\u003C\/p\u003E\u003C\/blockquote\u003E\u003Ch2 style=\"text-align: left;\"\u003EWhat are bookmarks?\u003C\/h2\u003E\u003Cp\u003EThe bookmarks in the browsers are to save the links to the pages you wish to visit again, or you just find them useful and save them for later.\u0026nbsp;\u003C\/p\u003E\u003Cp\u003EInstead of creating a text file \"Imp Links\" and saving all the links there (I've done it a lot), you could use the browser's bookmark feature.\u003C\/p\u003E\u003Cp\u003EThe shortcut to bookmark a webpage in most browsers is ctrl+b.\u003C\/p\u003E\u003Ch2 style=\"text-align: left;\"\u003EWhat more can they do?\u003C\/h2\u003E\u003Cp\u003ETo sum up, they can run JavaScript on a page. So instead of opening the browser console to do run a couple lines of code, you could create a bookmark and click that instead.\u003C\/p\u003E\u003Ch2 style=\"text-align: left;\"\u003EExample?\u003C\/h2\u003E\u003Cp\u003EWhenever I needed to copy something from Wikipedia, I usually had to deal with the references\/citations they have. You must've seen those, with squared brackets around numbers, something like this [1] or with a disclaimer like [citation needed], etc. I needed to remove all those.\u0026nbsp;\u003C\/p\u003E\u003Cp\u003EInitially, I used to do it in MS Word manually, by Find and Replace. I don't remember that now, doesn't matter anyway.\u0026nbsp;\u003C\/p\u003E\u003Cp\u003EFinally, I came to know about these browser bookmarklets, and then a simple regex was enough to do the work for me.\u003C\/p\u003E\u003Cp\u003ENow I have a simple bookmark. I go to any Wikipedia page, select the text I need, and click the bookmark. Viola! Citations are removed.\u003C\/p\u003E\u003Ch2 style=\"text-align: left;\"\u003EHow to create a bookmarklet?\u003C\/h2\u003E\u003Cp\u003EGot to Bookmarks Manager\u003C\/p\u003E\u003Cblockquote style=\"border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;\"\u003E\u003Cp\u003E1. Click three vertical dots in the upper right corner \u0026gt; Bookmark \u0026gt; Bookmark Manager\u003C\/p\u003E\u003Cp\u003EOr chrome shortcut: ctrl+shift+o\u003C\/p\u003E\u003Cp\u003EOr type in the address bar: chrome:\/\/bookmarks\/\u003C\/p\u003E\u003Cp\u003E2. Click three vertical dots in the upper right corner of Bookmark manager (Shows tooltip: Organize)\u0026nbsp;\u003C\/p\u003E\u003Cp\u003E3. Add new bookmark\u003C\/p\u003E\u003Cp\u003E4. It will show a popup with two fields: Name and URL.\u0026nbsp;\u003C\/p\u003E\u003Cp\u003E5. Give any appropriate name, and in the URL bar, paste the JavaScript code you want to execute.\u003C\/p\u003E\u003Cp\u003E6. Click Save.\u0026nbsp;\u003C\/p\u003E\u003Cp\u003E\u003Cbr \/\u003E\u003C\/p\u003E\u003C\/blockquote\u003E\u003Cp\u003EYou have your bookmarklet ready.\u0026nbsp;\u003C\/p\u003E\u003Cp\u003EShow\/Hide Bookmarks bar with ctrl+shift+b. Clicking on the name of your bookmark will run the underlying code.\u0026nbsp;\u003C\/p\u003E\u003Ch2 style=\"text-align: left;\"\u003EAny easier way to do this?\u003C\/h2\u003E\u003Cdiv\u003EIf you don't want to go through all those steps, there's a simple tool called \u003Ca href=\"https:\/\/chriszarate.github.io\/bookmarkleter\/\" target=\"_blank\"\u003EBookmarkleter\u003C\/a\u003E. Paste your JS code, it will generate a link that you can drag and drop to the bookmarks bar.\u0026nbsp;\u003C\/div\u003E\u003Cdiv\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cdiv\u003EFor example, drag and drop the following link to your bookmarks bar. This will allow you to change fonts on any website.\u0026nbsp;\u003C\/div\u003E\u003Cdiv\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cdiv\u003E\u003Ca href=\"javascript:void function(){javascript:(function(){var a=prompt(\u0026quot;Font Name?\u0026quot;);document.getElementsByTagName(\u0026quot;body\u0026quot;)[0].style.setProperty(\u0026quot;font-family\u0026quot;,a,\u0026quot;important\u0026quot;)})()}();\"\u003ESet Font\u003C\/a\u003E\u003C\/div\u003E\u003Ch2 style=\"text-align: left;\"\u003EWhich bookmarklets am I using?\u003C\/h2\u003E\u003Cp\u003E\u003C\/p\u003E\u003Col style=\"text-align: left;\"\u003E\u003Cli\u003E\u003Cb\u003ECitation Remover:\u003C\/b\u003E Removes citations from a Wikipedia page. Drag\u0026amp;drop this link to the bookmarks bar: \u003Ca href=\"javascript:void function(){javascript:function b(){document.body.innerHTML=document.body.innerHTML.replace(\/\u0026lt;sup\\b[^\u0026gt;]*\u0026gt;(.*?)\u0026lt;\\\/sup\u0026gt;\/gi,\u0026quot;\u0026quot;)}b()}();\"\u003ECitation Remover\u003C\/a\u003E\u003C\/li\u003E\u003Cli\u003E\u003Cb\u003ESet Font: \u003C\/b\u003EIf a website is using bad font, use this. As I use Urdu a lot, and Urdu without Nastaleeq font looks ugly. So I apply any font to the page available in my system. Payami Nastaleeq is the default one for me.\u003C\/li\u003E\u003Cli\u003E\u003Cb\u003ECalci:\u003C\/b\u003E A tiny calculator which returns results of simple arithmetic operations.\u003C\/li\u003E\u003Cli\u003E\u003Cb\u003EStyleStripper:\u003C\/b\u003E Strips all CSS styles from a webpage. Helpful if I don't want to load an entire page I want to copy something from. Also works on most of the sites which disable copying using JavaScript. Click StyleStripper and you can copy the text.\u0026nbsp;\u003C\/li\u003E\u003C\/ol\u003E\u003Ch3 style=\"text-align: left;\"\u003EMisc. bookmarklets I created\u003C\/h3\u003E\u003Cdiv\u003E\u003Ca href=\"javascript:void%20function(){document.querySelector(%22.qu-zIndex--blocking_wall%22).innerHTML=%22%22,document.querySelector(%22.qu-zIndex--blocking_wall%22).style=%22%22,document.querySelector(%22.qu-zIndex--blocking_wall%22).nextElementSibling.removeAttribute(%22style%22)}();\"\u003EQuoraSkip\u003C\/a\u003E: Skip Quora-enforced 'login' popup by removing added elements and blur overlay.\u003C\/div\u003E\u003Cdiv\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cp\u003E\u003C\/p\u003E\u003Cp\u003ETo those who requested, don't complain now. \u003Ci\u003E(Abuzar :D)\u003C\/i\u003E I have shared it finally. More such tips will follow. Keep visiting! And I know you will. :wink:\u003C\/p\u003E\u003Cp\u003E\u003Ci\u003ERab Raakha!\u003C\/i\u003E\u003C\/p\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/www.shakeeb.in\/feeds\/2445926190904848113\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/www.shakeeb.in\/2020\/10\/magic-of-browser-bookmarks-automate.html#comment-form","title":"3 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/419320228883344195\/posts\/default\/2445926190904848113"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/419320228883344195\/posts\/default\/2445926190904848113"},{"rel":"alternate","type":"text/html","href":"https:\/\/www.shakeeb.in\/2020\/10\/magic-of-browser-bookmarks-automate.html","title":"Magic of Browser Bookmarks - Automate Simple Tasks using JavaScript"}],"author":[{"name":{"$t":"Shakeeb Ahmad"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/17653459503215179964"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj0xfeyUVi21b-PCYCtvmlsj8yBnPBPqjmkTXju9QARy7EeajeXP7FiMLrWYy9f1gpsHkMTwucDqCjN9QPKqG6-zGZG-Nv-St1BdjmMgXWaf2hlrscbT6D8FPdDEwTFJzU\/s220\/ShakeebAvatarLowQuality.jpg"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/1.bp.blogspot.com\/-zhkcEuKdf6s\/YHaaNpSIiJI\/AAAAAAAAFb0\/UCQ8ahc1MtMnTZjG0dG2g7g8v5ehugzqQCLcBGAsYHQ\/s72-w640-h360-c\/Bookmarklets.png","height":"72","width":"72"},"thr$total":{"$t":"3"}},{"id":{"$t":"tag:blogger.com,1999:blog-419320228883344195.post-1700951170661134594"},"published":{"$t":"2020-10-02T11:22:00.014-07:00"},"updated":{"$t":"2021-03-12T04:46:03.164-08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Booklet"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Nostalgia"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Release"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Technical"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Tutorial"}],"title":{"type":"text","$t":"PDF to Single Image - A Tutorial by 17 Year Old Me"},"content":{"type":"html","$t":"\u003Cp\u003EBack in the days when I had a small Nokia phone, I wanted to do EVERTHING in that tiny device. It wasn't actually mine but because I was going to college, I was more \"in need\" of it than my sister.\u003C\/p\u003E\u003Ctable align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tr-caption-container\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Ctbody\u003E\u003Ctr\u003E\u003Ctd style=\"text-align: center;\"\u003E\u003Ca href=\"https:\/\/1.bp.blogspot.com\/-wLHfCbGuO5M\/X3dzR8dCC9I\/AAAAAAAAE8o\/o8Z17OGkfZcTMH05aE2cEfad2TkY9uelACLcBGAsYHQ\/s600\/nokia-c1-01-all.jpg\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Cimg alt=\"Nokia-C1-01 Phone I had in my Engineering\" border=\"0\" data-original-height=\"406\" data-original-width=\"600\" height=\"217\" src=\"https:\/\/1.bp.blogspot.com\/-wLHfCbGuO5M\/X3dzR8dCC9I\/AAAAAAAAE8o\/o8Z17OGkfZcTMH05aE2cEfad2TkY9uelACLcBGAsYHQ\/w320-h217\/nokia-c1-01-all.jpg\" title=\"Nokia-C1-01 Phone I had in my Engineering\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/td\u003E\u003C\/tr\u003E\u003Ctr\u003E\u003Ctd class=\"tr-caption\" style=\"text-align: center;\"\u003E\u003Cspan style=\"color: #999999;\"\u003ESource: gsmarena.com [1]\u003C\/span\u003E\u003Cbr \/\u003E\u003C\/td\u003E\u003C\/tr\u003E\u003C\/tbody\u003E\u003C\/table\u003E\u003Cbr \/\u003E\u003Cp\u003EThe one on your right with maroon border. That was it.\u003C\/p\u003E\u003Cp\u003EAnyway, with a screen of 144x160px, I wanted to read PDFs which were stored in our desktop + laptop. Lots of books, of almost all genres I was interested in. Interestingly enough, the same neatly arranged folders are copied over to every computer I have used. So I still have all those books, plus what was added later on.\u003C\/p\u003E\u003Cp\u003EInitially, the idea to \"read PDF on phone\" was for the Quran, so that I could read it in the Indo-Pak Naskh font. Actually I had a Quran app in it, full text with super fast search engine, but the font used in that wasn't good enough for long\u0026nbsp;\u003Ci\u003E\u003Ca href=\"https:\/\/en.wikipedia.org\/wiki\/Qira%27at#Recitations\" target=\"_blank\"\u003Etilaawat\u003C\/a\u003E\u003C\/i\u003E. In fact, even after getting android phone I've been searching something as fast as that app. I had been a fan of that guy who built it. Just looked it up, he goes by the name of Raza Mahi. His \"Mahi Dictionary\" was awesome too. All java .jar applications are things of the past now, but he has also moved on and started to build the similar apps for Android now. Good for him. I've linked his website in the references. [2]\u003C\/p\u003E\u003Cp\u003ESo where was I? Yes. As I had difficulty reading the Quran in that app, I selected a PDF copy of Quran which had Arabic text in one column and its Urdu translation side-by-side. I cropped-out the translation part (making the text narrow enough to fit on my phone) and then started thinking about a way to achieve the result.\u003C\/p\u003E\u003Cp\u003ENecessity is the mother of invention they say, so I came up with two methods (discussed in the booklet below). Will attach the Quran files too for the record. Wow! Time flies. Seems like yesterday to me.\u003C\/p\u003E\u003Cp\u003ELater on when I converted many books to 'single image' using the same method, I compiled a short tutorial in the form of a booklet. I've left the whole text as is, without any correction in grammar or sentence structure, because\u003C\/p\u003E\u003Cp\u003E\u003C\/p\u003E\u003Col style=\"text-align: left;\"\u003E\u003Cli\u003EIt's a reminder of my journey (read the booklet and see for yourself how writing styles change)\u003C\/li\u003E\u003Cli\u003EIt's cute. ;)\u003C\/li\u003E\u003C\/ol\u003E\u003Cdiv\u003EHere's the summary of the two methods discussed in the booklet:\u003C\/div\u003E\u003Cdiv\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cdiv\u003E\u003Cb\u003EMethod 1:\u003C\/b\u003E Microsoft Office OneNote + MS Paint\u003C\/div\u003E\u003Cdiv\u003E\u003Cb\u003EMethod 2:\u003C\/b\u003E PDF to Images + IrfanView\u003C\/div\u003E\u003Cdiv\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cdiv\u003ERead the booklet and know how to use them. And remember it's an OLD tutorial.\u003C\/div\u003E\u003Ch3 style=\"text-align: left;\"\u003EDOWNLOADS\u003C\/h3\u003E\u003Cdiv\u003E\u003Cb\u003EPDF to Single Image Tutorial (Booklet) : \u003C\/b\u003ERead online or download\u003C\/div\u003E\u003Cp\u003E\u003C\/p\u003E\u003Cp\u003E\u003Ca href=\"https:\/\/archive.org\/details\/PDFToSingleImageShakes.Ahmad\"\u003Ehttps:\/\/archive.org\/details\/PDFToSingleImageShakes.Ahmad\u003C\/a\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cb\u003EIrfanView:\u003C\/b\u003E I came to know later on that this was very popular image-manipulation tool back then, and still is. Its first release was in June 1996. Now it's more powerful than ever. Check its Wikipedia page.[3]\u003C\/p\u003E\u003Cp\u003E\u003Ca href=\"https:\/\/www.irfanview.com\"\u003Ehttps:\/\/www.irfanview.com\u003C\/a\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cb\u003EPDF to Images Converter: \u003C\/b\u003EI still use it. Small size, works smoothly.\u003C\/p\u003E\u003Cp\u003E\u003Ca href=\"https:\/\/www.weenysoft.com\/free-pdf-to-image-converter.html\"\u003Ehttps:\/\/www.weenysoft.com\/free-pdf-to-image-converter.html\u003C\/a\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cbr \/\u003E\u003C\/p\u003E\u003Cp\u003EEnjoy!\u003C\/p\u003E\u003Cp\u003E\u003Cbr \/\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cspan style=\"color: #999999;\"\u003EReference\u003C\/span\u003E\u003C\/p\u003E\u003Cp\u003E[1] Specifications of Nokia C1-01 \u003Ci\u003Evia\u003C\/i\u003E gsmarena \u003Ca href=\"https:\/\/www.gsmarena.com\/nokia_c1_01-pictures-3365.php\" target=\"_blank\"\u003E[link]\u003C\/a\u003E\u003C\/p\u003E\u003Cp\u003E[2] Raza Mahi Team - Old Apps \u003Ca href=\"https:\/\/razamahi.wordpress.com\/oldapps\/\" target=\"_blank\"\u003E[link]\u003C\/a\u003E\u003C\/p\u003E\u003Cp\u003E[3] IrfanView on Wikipedia \u003Ca href=\"https:\/\/en.wikipedia.org\/wiki\/IrfanView\" target=\"_blank\"\u003E[link]\u003C\/a\u003E\u003C\/p\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/www.shakeeb.in\/feeds\/1700951170661134594\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/www.shakeeb.in\/2020\/10\/pdf-to-single-image-b-shakeeb.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/419320228883344195\/posts\/default\/1700951170661134594"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/419320228883344195\/posts\/default\/1700951170661134594"},{"rel":"alternate","type":"text/html","href":"https:\/\/www.shakeeb.in\/2020\/10\/pdf-to-single-image-b-shakeeb.html","title":"PDF to Single Image - A Tutorial by 17 Year Old Me"}],"author":[{"name":{"$t":"Shakeeb Ahmad"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/17653459503215179964"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj0xfeyUVi21b-PCYCtvmlsj8yBnPBPqjmkTXju9QARy7EeajeXP7FiMLrWYy9f1gpsHkMTwucDqCjN9QPKqG6-zGZG-Nv-St1BdjmMgXWaf2hlrscbT6D8FPdDEwTFJzU\/s220\/ShakeebAvatarLowQuality.jpg"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/1.bp.blogspot.com\/-wLHfCbGuO5M\/X3dzR8dCC9I\/AAAAAAAAE8o\/o8Z17OGkfZcTMH05aE2cEfad2TkY9uelACLcBGAsYHQ\/s72-w320-h217-c\/nokia-c1-01-all.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-419320228883344195.post-660907245934368731"},"published":{"$t":"2020-04-24T04:56:00.001-07:00"},"updated":{"$t":"2020-04-24T04:56:04.766-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Technical"}],"title":{"type":"text","$t":"Cicada 3301 - A Mystery in the Cyber World"},"content":{"type":"html","$t":"\u003Cdiv dir=\"ltr\" style=\"text-align: left;\" trbidi=\"on\"\u003E\n\u003Ch2 style=\"text-align: left;\"\u003E\nHow I came across this?\u003C\/h2\u003E\n\u003Cdiv\u003E\nSo the year was 2017 I suppose, I was newly introduced to the dark web, and started watching creepy-pastas spread over the internet. It was interesting. Fascinating yet controversial.\u0026nbsp;\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\nThat's what makes it go viral, doesn't it? We all love conspiracies.\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\nConsidering my history of watching those videos, the YouTube suggestion algorithm one day decided to show me a video by LEMMiNO titled \"Cicada 3301: An Internet Mystery\" [link below]. And that short video introduced almost all concepts I'd studied in Cyber Security.\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\nLet me appreciate that guys editing skills first of all.What a lovely piece of craft, indeed!\u0026nbsp;\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\nWhen I watched the video, the curiosity made me search for more details related to it. I visited the Reddit threads related to it myself and the related onion links too. (Taken down, of course.)\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\nHere's a small introduction of what this mystery was, thanks to Wiki, Reddit and several other resources.\u0026nbsp;\u003C\/div\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/1.bp.blogspot.com\/-TRsdKmy2Znc\/XqLTs3roFZI\/AAAAAAAAEKU\/8522rbC7n504GCkpTmboIV4sq6CvAI27QCLcBGAsYHQ\/s1600\/cicada.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"720\" data-original-width=\"1280\" height=\"180\" src=\"https:\/\/1.bp.blogspot.com\/-TRsdKmy2Znc\/XqLTs3roFZI\/AAAAAAAAEKU\/8522rbC7n504GCkpTmboIV4sq6CvAI27QCLcBGAsYHQ\/s320\/cicada.jpg\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ch2 style=\"text-align: left;\"\u003E\nWhat’s Cicada 3301?\u003C\/h2\u003E\n\u003Cblockquote class=\"tr_bq\"\u003E\nThe most elaborate and mysterious puzzle of the internet age. — The Washington Post\u003C\/blockquote\u003E\nCicada 3301 is a nickname given to an organization that on three occasions has posted a group of puzzles to recruit code-breakers from the internet.\u003Cbr \/\u003E\n\u003Ch2 style=\"text-align: left;\"\u003E\nDifferent Rounds\u003C\/h2\u003E\nThe puzzle had few rounds. Nobody from the public knew that the next round exists, let alone guess it's date or format. It was because there was no official (signed message) from Cicada.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Col style=\"text-align: left;\"\u003E\n\u003Cli\u003EThe first internet puzzle started on January 4, 2012 on 4chan and ran for about one month.\u003C\/li\u003E\n\u003Cli\u003EA second round began one year afterward January 4, 2013.\u003C\/li\u003E\n\u003Cli\u003EAnd then a third round following the confirmation of a fresh clue posted on Twitter on January 4, 2014.\u003C\/li\u003E\n\u003C\/ol\u003E\n\u003Cbr \/\u003E\nThe stated intent was to recruit “intelligent individuals” by presenting a series of puzzles which were to be solved.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nNo new puzzles were published on January 4, 2015. However, a new clue was posted on Twitter on January 5, 2016. In April 2017 a verified PGP-signed message was found:\u003Cbr \/\u003E\n\u003Cblockquote class=\"tr_bq\"\u003E\nBeware false paths. Always verify PGP signature from 7A35090F.\u003C\/blockquote\u003E\nThat message explicitly denies the validity of any unsigned puzzle, as recently as April 2017.\u003Cbr \/\u003E\nThe puzzles focused heavily on:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cul style=\"text-align: left;\"\u003E\n\u003Cli\u003Edata security\u003C\/li\u003E\n\u003Cli\u003Ecryptography\u003C\/li\u003E\n\u003Cli\u003Esteganography\u003C\/li\u003E\n\u003Cli\u003Einternet anonymity\u003C\/li\u003E\n\u003Cli\u003Esurveillance\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cbr \/\u003E\n\u003Ch2 style=\"text-align: left;\"\u003E\nSpeculations\u003C\/h2\u003E\nIt has been called “the most elaborate and mysterious puzzle of the web age” and is listed as one of the “top 5 eeriest, unsolved mysteries of the internet”, and much speculation exists on its function.\u003Cbr \/\u003E\nMany have speculated that the puzzles are a recruitment tool for the NSA, CIA, MI6, a “Masonic conspiracy” or a cyber mercenary group. Others have claimed Cicada 3301 is an alternate reality game.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nNo company or individual has taken credit for it or attempted to monetize it, however.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ch2 style=\"text-align: left;\"\u003E\nThe Cicada 3301 Puzzle\u003C\/h2\u003E\nBefore diving into the main points, let me clear what it’s on the very surface level. It’s a puzzle which is posted on the web with the intentions of recruiting “highly intelligent individuals”.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nSolving which supposedly gets you recruited to the NSA, MI6, Hacker groups and therefore the speculations go on and on; although no official prize has ever been announced.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nIt all started on January 4th, 2012. An elaborate puzzle appeared on message boards and forums which read:\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/1.bp.blogspot.com\/-s02MLb4q8vI\/XqLQ5VFwrhI\/AAAAAAAAEJ0\/wQU9VbGx9jgdbExb270Do2rphZMVIG4EwCLcBGAsYHQ\/s1600\/cicada1.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"504\" data-original-width=\"509\" height=\"316\" src=\"https:\/\/1.bp.blogspot.com\/-s02MLb4q8vI\/XqLQ5VFwrhI\/AAAAAAAAEJ0\/wQU9VbGx9jgdbExb270Do2rphZMVIG4EwCLcBGAsYHQ\/s320\/cicada1.png\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\nThis image when opened using a text editor gives out a Caesar cipher string of semi-readable text, which when deciphered results in an Image URI.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nThe chase then continued, one clue leading to another. The puzzles used all sorts of techniques in cyber-security including cryptography, steganography etc. They even dropped some clues on physical addresses.\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/1.bp.blogspot.com\/-hdRFQ3xguQg\/XqLRqR5dPaI\/AAAAAAAAEJ8\/luWnjx1W9hckNOF5l1WCwNJAJ9r65hXgQCLcBGAsYHQ\/s1600\/cicada2.png.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"323\" data-original-width=\"242\" height=\"320\" src=\"https:\/\/1.bp.blogspot.com\/-hdRFQ3xguQg\/XqLRqR5dPaI\/AAAAAAAAEJ8\/luWnjx1W9hckNOF5l1WCwNJAJ9r65hXgQCLcBGAsYHQ\/s320\/cicada2.png.jpg\" width=\"239\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\nFinally the website closed with a line saying\u003Cbr \/\u003E\n\u003Cblockquote class=\"tr_bq\"\u003E\n“We want the best, not the followers”.\u0026nbsp;\u003C\/blockquote\u003E\nSoon there was a month of silence and then this Image was posted on the sub-reddit on Cicada.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/1.bp.blogspot.com\/-bx2ZbQ-yYhg\/XqLSJcvbCuI\/AAAAAAAAEKI\/KNzTLhmxJk4yU0bESgXsk3wyxanFxlFYQCLcBGAsYHQ\/s1600\/cicada3.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"850\" data-original-width=\"872\" height=\"311\" src=\"https:\/\/1.bp.blogspot.com\/-bx2ZbQ-yYhg\/XqLSJcvbCuI\/AAAAAAAAEKI\/KNzTLhmxJk4yU0bESgXsk3wyxanFxlFYQCLcBGAsYHQ\/s320\/cicada3.jpg\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\nAccording the Cicada they have found the people they were looking for. But the community out there was not satisfied because of the lack of ending to what was this all about. And many termed it as a wild goose chase and waste of time\u003Cbr \/\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\nBut little did we know, this was just the beginning. After an year another quiz dropped on the forum.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nThe second and third round went similarly. A detailed analysis can be watched in \u003Ca href=\"https:\/\/www.youtube.com\/watch?v=I2O7blSSzpI\" target=\"_blank\"\u003Ethis video\u003C\/a\u003E.\u003Cbr \/\u003E\n\u003Cdiv style=\"text-align: center;\"\u003E\n\u003Cspan style=\"font-size: x-large;\"\u003E. . .\u003C\/span\u003E\u003C\/div\u003E\n\u003Ci\u003Eby\u003C\/i\u003E\u003Cbr \/\u003E\nShakeeb Ahmad\u003Cbr \/\u003E\nAbuzar Gaffari\u003Cbr \/\u003E\nAshwini Ghonse\u003Cbr \/\u003E\nMustafa Al-Hammadi\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n[This is a truncated version of a 10-page long blog submitted to the institution.]\u003C\/div\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/www.shakeeb.in\/feeds\/660907245934368731\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/www.shakeeb.in\/2020\/04\/cicada-3301-mystery-in-cyber-world.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/419320228883344195\/posts\/default\/660907245934368731"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/419320228883344195\/posts\/default\/660907245934368731"},{"rel":"alternate","type":"text/html","href":"https:\/\/www.shakeeb.in\/2020\/04\/cicada-3301-mystery-in-cyber-world.html","title":"Cicada 3301 - A Mystery in the Cyber World"}],"author":[{"name":{"$t":"Shakeeb Ahmad"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/17653459503215179964"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj0xfeyUVi21b-PCYCtvmlsj8yBnPBPqjmkTXju9QARy7EeajeXP7FiMLrWYy9f1gpsHkMTwucDqCjN9QPKqG6-zGZG-Nv-St1BdjmMgXWaf2hlrscbT6D8FPdDEwTFJzU\/s220\/ShakeebAvatarLowQuality.jpg"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/1.bp.blogspot.com\/-TRsdKmy2Znc\/XqLTs3roFZI\/AAAAAAAAEKU\/8522rbC7n504GCkpTmboIV4sq6CvAI27QCLcBGAsYHQ\/s72-c\/cicada.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}}]}});