<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Hapoy Gety</title>
    <description>The latest articles on DEV Community by Hapoy Gety (@hapoy_gety_354fc2a8166bb3).</description>
    <link>https://dev.to/hapoy_gety_354fc2a8166bb3</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4096470%2F47a6ed8f-9a4f-4702-a1ee-f41f52c5ed6b.png</url>
      <title>DEV Community: Hapoy Gety</title>
      <link>https://dev.to/hapoy_gety_354fc2a8166bb3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hapoy_gety_354fc2a8166bb3"/>
    <language>en</language>
    <item>
      <title>What I Learned Debugging Osintgram on a Linux VM with HikerAPI</title>
      <dc:creator>Hapoy Gety</dc:creator>
      <pubDate>Thu, 27 Aug 2026 00:59:15 +0000</pubDate>
      <link>https://dev.to/hapoy_gety_354fc2a8166bb3/what-i-learned-debugging-osintgram-on-a-linux-vm-with-hikerapi-2ien</link>
      <guid>https://dev.to/hapoy_gety_354fc2a8166bb3/what-i-learned-debugging-osintgram-on-a-linux-vm-with-hikerapi-2ien</guid>
      <description>&lt;p&gt;What I Learned Debugging Osintgram on a Linux VM with HikerAPI&lt;/p&gt;

&lt;p&gt;I recently spent some time experimenting with Osintgram inside a Linux virtual machine and connecting it to HikerAPI.&lt;/p&gt;

&lt;p&gt;What started as a straightforward installation turned into a useful debugging exercise. Instead of focusing only on getting commands to run, I wanted to understand what was happening between Osintgram, Python, and the external API.&lt;/p&gt;

&lt;p&gt;The environment&lt;/p&gt;

&lt;p&gt;The project was running inside a Freestyle Linux VM that I accessed from my Android device.&lt;/p&gt;

&lt;p&gt;This gave me a more traditional Linux environment while still allowing me to manage everything from Termux.&lt;/p&gt;

&lt;p&gt;My basic workflow looked like this:&lt;/p&gt;

&lt;p&gt;Android&lt;br&gt;
   ↓&lt;br&gt;
Termux&lt;br&gt;
   ↓&lt;br&gt;
Freestyle VM&lt;br&gt;
   ↓&lt;br&gt;
Linux environment&lt;br&gt;
   ↓&lt;br&gt;
Osintgram&lt;br&gt;
   ↓&lt;br&gt;
HikerAPI&lt;/p&gt;

&lt;p&gt;The important part was that each layer could potentially introduce its own problem.&lt;/p&gt;

&lt;p&gt;First mistake: assuming installation means everything is ready&lt;/p&gt;

&lt;p&gt;One thing I quickly learned is that successfully installing a Python package doesn't mean the application is ready to use it.&lt;/p&gt;

&lt;p&gt;I checked the installed HikerAPI package with:&lt;/p&gt;

&lt;p&gt;python3 -m pip show hikerapi&lt;/p&gt;

&lt;p&gt;I was running version "1.7.1".&lt;/p&gt;

&lt;p&gt;I also inspected the Python client rather than assuming its interface from documentation or examples.&lt;/p&gt;

&lt;p&gt;For example, I checked the available constructor and method signatures:&lt;/p&gt;

&lt;p&gt;import inspect&lt;br&gt;
from hikerapi import Client&lt;/p&gt;

&lt;p&gt;print(inspect.signature(Client))&lt;br&gt;
print(inspect.signature(Client.user_by_id_v2))&lt;/p&gt;

&lt;p&gt;This helped me understand what the installed version actually exposed.&lt;/p&gt;

&lt;p&gt;Looking at Osintgram itself&lt;/p&gt;

&lt;p&gt;The next step was to stop treating Osintgram as a black box.&lt;/p&gt;

&lt;p&gt;I looked through the project's files to see where the HikerAPI integration was being handled.&lt;/p&gt;

&lt;p&gt;This was particularly useful because it showed me that debugging the project wasn't simply a matter of installing "hikerapi" and hoping the application would automatically use it correctly.&lt;/p&gt;

&lt;p&gt;The application's own configuration and API wrapper mattered too.&lt;/p&gt;

&lt;p&gt;Testing the credentials&lt;/p&gt;

&lt;p&gt;I then focused on the API credentials.&lt;/p&gt;

&lt;p&gt;Instead of immediately blaming Python or the VM, I tested whether the configured HikerAPI token was actually being loaded.&lt;/p&gt;

&lt;p&gt;A small check showed that the token was present:&lt;/p&gt;

&lt;p&gt;print("Token loaded:", bool(t))&lt;br&gt;
print("Length:", len(t) if t else 0)&lt;/p&gt;

&lt;p&gt;The token was being detected and had a length of 32 characters.&lt;/p&gt;

&lt;p&gt;That eliminated one possible source of the problem.&lt;/p&gt;

&lt;p&gt;The error that changed the investigation&lt;/p&gt;

&lt;p&gt;When I ran Osintgram against a username, I eventually reached HikerAPI, but the response indicated that the account needed to be topped up.&lt;/p&gt;

&lt;p&gt;That was a useful turning point.&lt;/p&gt;

&lt;p&gt;It meant I no longer needed to spend all my time changing the Python environment just because the application wasn't producing the result I expected.&lt;/p&gt;

&lt;p&gt;The API was responding with an account-related restriction.&lt;/p&gt;

&lt;p&gt;In debugging terms, that is very different from a missing package, a syntax error, or a completely invalid configuration.&lt;/p&gt;

&lt;p&gt;Why the VM was still useful&lt;/p&gt;

&lt;p&gt;Moving the project into a VM wasn't a magic solution, but it gave me a cleaner Linux environment for experimenting.&lt;/p&gt;

&lt;p&gt;I could inspect files, install Python packages, check versions, run scripts, and reproduce errors without depending entirely on the Android userspace.&lt;/p&gt;

&lt;p&gt;The VM also made it easier to keep the project environment separate from the rest of my phone.&lt;/p&gt;

&lt;p&gt;My debugging checklist&lt;/p&gt;

&lt;p&gt;After going through the process, this is the sequence I would use for a similar Python/API project:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Confirm Python is working&lt;/li&gt;
&lt;li&gt;Check the installed package version&lt;/li&gt;
&lt;li&gt;Inspect the application's integration code&lt;/li&gt;
&lt;li&gt;Confirm the credential is being loaded&lt;/li&gt;
&lt;li&gt;Test the API independently&lt;/li&gt;
&lt;li&gt;Run the application&lt;/li&gt;
&lt;li&gt;Read the exact error&lt;/li&gt;
&lt;li&gt;Fix the layer that is actually failing&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The most important part is step seven.&lt;/p&gt;

&lt;p&gt;An error message often contains more information than it appears to at first glance.&lt;/p&gt;

&lt;p&gt;What I would do differently next time&lt;/p&gt;

&lt;p&gt;If I repeated the setup, I would verify each layer earlier instead of changing several components at once.&lt;/p&gt;

&lt;p&gt;For example, I would first establish that Python works, then verify the HikerAPI package, then confirm the credential is loaded, and only after that test Osintgram.&lt;/p&gt;

&lt;p&gt;That makes it much easier to identify the exact point where something stops working.&lt;/p&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;This experiment didn't end with every Osintgram feature fully operational.&lt;/p&gt;

&lt;p&gt;Instead, it gave me something almost as useful: a clearer understanding of the system I was troubleshooting.&lt;/p&gt;

&lt;p&gt;I learned that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A VM doesn't automatically solve API problems.&lt;/li&gt;
&lt;li&gt;An installed Python package isn't proof that the application is configured correctly.&lt;/li&gt;
&lt;li&gt;Checking the actual installed library version matters.&lt;/li&gt;
&lt;li&gt;Credentials should be tested independently.&lt;/li&gt;
&lt;li&gt;Error messages can reveal which layer is failing.&lt;/li&gt;
&lt;li&gt;API account restrictions are different from local installation problems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For me, the most valuable part wasn't simply running another command. It was learning how to break a complicated setup into smaller pieces and test each piece independently.&lt;/p&gt;

</description>
      <category>debugging</category>
      <category>linux</category>
      <category>python</category>
    </item>
  </channel>
</rss>
