<?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: shashank agarwal</title>
    <description>The latest articles on DEV Community by shashank agarwal (@itsshashank).</description>
    <link>https://dev.to/itsshashank</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F383608%2F2a220134-0498-490f-9ab9-f2ed2b336f6b.jpg</url>
      <title>DEV Community: shashank agarwal</title>
      <link>https://dev.to/itsshashank</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/itsshashank"/>
    <language>en</language>
    <item>
      <title>🚀 Building the Enterprise-Grade AI Evaluation Platform the Industry Needs</title>
      <dc:creator>shashank agarwal</dc:creator>
      <pubDate>Mon, 14 Jul 2025 09:15:03 +0000</pubDate>
      <link>https://dev.to/itsshashank/building-the-enterprise-grade-ai-evaluation-platform-the-industry-needs-2go0</link>
      <guid>https://dev.to/itsshashank/building-the-enterprise-grade-ai-evaluation-platform-the-industry-needs-2go0</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# The dream: Evaluate any AI model with 3 lines of code
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;novaeval&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Evaluator&lt;/span&gt;
&lt;span class="n"&gt;evaluator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Evaluator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;evaluation.yaml&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;evaluator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The Technical Challenge&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As AI models proliferate, developers face a critical problem: &lt;strong&gt;How do you systematically compare GPT-4 vs Claude vs Bedrock for your specific use case?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most teams resort to manual testing or build custom evaluation scripts that break every time APIs change. We needed something better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enter NovaEval&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NovaEval is an open source, enterprise-grade evaluation framework that standardizes AI model comparison across providers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical Architecture:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unified Model Interface&lt;/strong&gt;: Abstract away provider differences&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pluggable Scorers&lt;/strong&gt;: Accuracy, semantic similarity, custom metrics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dataset Integration&lt;/strong&gt;: MMLU, HuggingFace, custom datasets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production Ready&lt;/strong&gt;: Docker, Kubernetes, CI/CD integration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Code Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# evaluation.yaml&lt;/span&gt;
&lt;span class="na"&gt;dataset&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mmlu"&lt;/span&gt;
  &lt;span class="na"&gt;subset&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;abstract_algebra"&lt;/span&gt;
  &lt;span class="na"&gt;num_samples&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500&lt;/span&gt;

&lt;span class="na"&gt;models&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;openai"&lt;/span&gt;
    &lt;span class="na"&gt;model_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;anthropic"&lt;/span&gt;
    &lt;span class="na"&gt;model_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-3-opus"&lt;/span&gt;

&lt;span class="na"&gt;scorers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;accuracy"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;semantic_similarity"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;CLI Power:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Quick evaluation&lt;/span&gt;
novaeval quick &lt;span class="nt"&gt;-d&lt;/span&gt; mmlu &lt;span class="nt"&gt;-m&lt;/span&gt; gpt-4 &lt;span class="nt"&gt;-s&lt;/span&gt; accuracy

&lt;span class="c"&gt;# Production evaluation&lt;/span&gt;
novaeval run production-config.yaml

&lt;span class="c"&gt;# List available options&lt;/span&gt;
novaeval list-models
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Contribution Opportunities&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We're actively seeking contributors in:&lt;/p&gt;

&lt;p&gt;🧪 &lt;strong&gt;Testing&lt;/strong&gt;: Improve our 62% test coverage&lt;br&gt;
📊 &lt;strong&gt;Metrics&lt;/strong&gt;: Build RAG and agent evaluation frameworks&lt;br&gt;
🔧 &lt;strong&gt;Integrations&lt;/strong&gt;: Add new model providers and datasets&lt;br&gt;
📚 &lt;strong&gt;Documentation&lt;/strong&gt;: Create tutorials and examples&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Getting Started:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;pip install novaeval&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Check out: &lt;a href="https://github.com/Noveum/NovaEval" rel="noopener noreferrer"&gt;https://github.com/Noveum/NovaEval&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Look for &lt;code&gt;good first issue&lt;/code&gt; labels&lt;/li&gt;
&lt;li&gt;Join our GitHub Discussions&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Discussion Questions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What evaluation metrics matter most for your AI applications?&lt;/li&gt;
&lt;li&gt;Which model providers would you like to see supported?&lt;/li&gt;
&lt;li&gt;What's your current AI evaluation workflow?&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>help</category>
    </item>
    <item>
      <title>Announcing the MagicAPI AI Gateway: The Fastest AI Proxy for Developers!</title>
      <dc:creator>shashank agarwal</dc:creator>
      <pubDate>Thu, 07 Nov 2024 13:40:39 +0000</pubDate>
      <link>https://dev.to/itsshashank/announcing-the-magicapi-ai-gateway-the-fastest-ai-proxy-for-developers-3g95</link>
      <guid>https://dev.to/itsshashank/announcing-the-magicapi-ai-gateway-the-fastest-ai-proxy-for-developers-3g95</guid>
      <description>&lt;h2&gt;
  
  
  🚀 Announcing MagicAPI AI Gateway: The Fastest AI Proxy for Developers!
&lt;/h2&gt;

&lt;p&gt;We are thrilled to introduce the &lt;strong&gt;MagicAPI AI Gateway&lt;/strong&gt;—the world's fastest AI Gateway proxy, meticulously crafted in Rust for unparalleled performance. Whether you're a developer seeking reliable AI API access or a tech enthusiast exploring the latest in AI infrastructure, MagicAPI is your go-to solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why MagicAPI AI Gateway?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🌟 Blazing Fast Performance
&lt;/h3&gt;

&lt;p&gt;Built with Rust, MagicAPI leverages zero-cost abstractions to deliver lightning-fast request handling. Experience low latency and high throughput like never before.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔄 Unified API Interface
&lt;/h3&gt;

&lt;p&gt;Seamlessly route requests to multiple AI providers, including &lt;strong&gt;OpenAI&lt;/strong&gt; and &lt;strong&gt;GROQ&lt;/strong&gt;, through a single, unified interface. Simplify your AI integrations with smart, provider-specific request routing.&lt;/p&gt;

&lt;h3&gt;
  
  
  📡 Real-time Streaming Support
&lt;/h3&gt;

&lt;p&gt;Enjoy real-time streaming capabilities with minimal overhead, ensuring smooth and efficient data flow for your applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔍 Robust Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Built-in Health Checking&lt;/strong&gt;: Keep your services running smoothly with automatic health checks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configurable CORS&lt;/strong&gt;: Tailor cross-origin resource sharing to fit your security needs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Efficient Proxying&lt;/strong&gt;: Optimize request and response handling for maximum efficiency.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get Started Quickly
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;Install via Cargo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo &lt;span class="nb"&gt;install &lt;/span&gt;magicapi-ai-gateway
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or use our pre-built Docker image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull magicapi1/magicapi-ai-gateway:latest
docker run &lt;span class="nt"&gt;-p&lt;/span&gt; 3000:3000 &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;RUST_LOG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;info magicapi1/magicapi-ai-gateway:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Docker Compose
&lt;/h3&gt;

&lt;p&gt;Choose between building from source or using the prebuilt image with Docker Compose for easy deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built for Developers
&lt;/h2&gt;

&lt;p&gt;(&lt;a href="https://magicapi.com/" rel="noopener noreferrer"&gt;https://magicapi.com/&lt;/a&gt;) AI Gateway is designed with developers in mind, offering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Asynchronous I/O&lt;/strong&gt; with Tokio for optimal resource utilization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connection Pooling&lt;/strong&gt; via Reqwest for efficient HTTP connections.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory-efficient&lt;/strong&gt; request/response proxying.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Join Our Community
&lt;/h2&gt;

&lt;p&gt;We welcome contributions and feedback! Check out our &lt;a href="https://github.com/MagicAPI/ai-gateway" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; to get involved. Our community is active and ready to support you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Explore More
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/MagicAPI/ai-gateway" rel="noopener noreferrer"&gt;MagicAPI AI Gateway&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cargo&lt;/strong&gt;: &lt;a href="https://crates.io/crates/magicapi-ai-gateway" rel="noopener noreferrer"&gt;MagicAPI on crates.io&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;MagicAPI AI Gateway is dual-licensed under the MIT License and the Apache License (Version 2.0), giving you the flexibility to choose the license that best suits your needs.&lt;/p&gt;




&lt;p&gt;We can't wait to see what you'll build with MagicAPI AI Gateway. Dive into the future of AI integration today!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>gateway</category>
      <category>llm</category>
      <category>openai</category>
    </item>
    <item>
      <title>Most affordable Whisper API</title>
      <dc:creator>shashank agarwal</dc:creator>
      <pubDate>Tue, 22 Oct 2024 07:09:17 +0000</pubDate>
      <link>https://dev.to/itsshashank/most-affordable-whisper-api-2nc6</link>
      <guid>https://dev.to/itsshashank/most-affordable-whisper-api-2nc6</guid>
      <description>&lt;h2&gt;
  
  
  🎙️ &lt;strong&gt;Whisper Speech-to-Text API by NeevCloud&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Try it here -&amp;gt; &lt;a href="https://api.market/store/neevcloud/whisper" rel="noopener noreferrer"&gt;https://api.market/store/neevcloud/whisper&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Whisper Speech-to-Text API&lt;/strong&gt; is the &lt;strong&gt;most affordable&lt;/strong&gt; speech-to-text solution available online. With &lt;strong&gt;up to 6x cheaper&lt;/strong&gt; pricing compared to OpenAI’s Whisper model and &lt;strong&gt;3x more affordable&lt;/strong&gt; than other providers, it delivers exceptional value while being &lt;strong&gt;super scalable&lt;/strong&gt;. Whether you need to transcribe individual audio files or process vast amounts of multimedia data, this API can handle it all with high accuracy and performance.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔑 &lt;strong&gt;Key Features&lt;/strong&gt;:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;💸 Most Affordable Solution&lt;/strong&gt;: Up to &lt;strong&gt;6x cheaper&lt;/strong&gt; than OpenAI’s Whisper and &lt;strong&gt;3x cheaper&lt;/strong&gt; than other providers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📝 High-Accuracy Transcriptions&lt;/strong&gt;: Leverages advanced machine learning to provide accurate speech-to-text conversion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🗣️ Speaker Diarization&lt;/strong&gt;: Identify and separate different speakers in an audio file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🌍 Multilingual Support&lt;/strong&gt;: Transcribe audio in multiple languages or translate spoken language into English.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;⚡ Real-Time or Async Processing&lt;/strong&gt;: Choose between real-time or asynchronous processing for flexibility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📂 Flexible Input&lt;/strong&gt;: Submit audio files via URLs or upload files directly.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 &lt;strong&gt;About Whisper&lt;/strong&gt;:
&lt;/h2&gt;

&lt;p&gt;Whisper is a state-of-the-art &lt;strong&gt;automatic speech recognition (ASR)&lt;/strong&gt; system trained on &lt;strong&gt;680,000 hours of multilingual&lt;/strong&gt; data from the web. It supports &lt;strong&gt;transcribing audio in multiple languages&lt;/strong&gt; and translating spoken content into English. Designed by OpenAI, Whisper is particularly useful in scenarios such as:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;🎧 Transcription Services&lt;/strong&gt;: Easily transcribe meetings, interviews, lectures, and other spoken content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📝 Subtitling and Closed Captioning&lt;/strong&gt;: Generate subtitles for videos, improving accessibility for deaf or hard-of-hearing viewers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🌐 Language Learning and Translation&lt;/strong&gt;: Use Whisper for &lt;strong&gt;language learning&lt;/strong&gt;, pronunciation practice, and &lt;strong&gt;cross-lingual communication&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📱 Accessibility Tools&lt;/strong&gt;: Integrate Whisper into assistive technologies for those with speech impairments or disabilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔍 Content Searchability&lt;/strong&gt;: Transcribe multimedia content into text to allow efficient search and analysis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🎙️ Voice-Controlled Applications&lt;/strong&gt;: Use Whisper to build voice-driven applications and interact naturally with technology.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📞 Customer Support Automation&lt;/strong&gt;: Transcribe and analyze calls in real-time to automate customer support.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🎙️ Podcasting and Journalism&lt;/strong&gt;: Transcribe interviews and podcasts quickly for faster content creation.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  💰 &lt;strong&gt;API Pricing&lt;/strong&gt;:
&lt;/h2&gt;

&lt;p&gt;The Whisper Speech-to-Text API charges &lt;strong&gt;per second&lt;/strong&gt; of audio processed, with &lt;strong&gt;1 second = 1 API unit&lt;/strong&gt;. This pricing is highly competitive for developers working with audio and video transcription at scale.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Audio Length&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Conversion to Seconds&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;API Units Consumed&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;12.9 minutes of audio&lt;/td&gt;
&lt;td&gt;12.9 * 60 = 774 seconds&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;774 API units&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5 minutes of audio&lt;/td&gt;
&lt;td&gt;5 * 60 = 300 seconds&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;300 API units&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30 seconds of audio&lt;/td&gt;
&lt;td&gt;30 seconds&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;30 API units&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;✅ No charges&lt;/strong&gt; for checking task status.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;❌ No charges&lt;/strong&gt; if the task fails (only charged for 200 HTTP responses).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📤 &lt;strong&gt;API Endpoints&lt;/strong&gt;:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Process Audio via URL&lt;/strong&gt; 🌐
&lt;/h3&gt;

&lt;p&gt;Submit an audio file by URL for transcription or other tasks like speaker diarization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Endpoint&lt;/strong&gt;: &lt;code&gt;POST /neevcloud/whisper/process_url/&lt;/code&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Parameter&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The URL of the audio file.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"https://example.com/audio.wav"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;task&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The task to perform: "transcribe", "translate".&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"transcribe"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;language&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Language of the audio (or set to "None" for no detection).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"None"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;batch_size&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Size of the audio chunks to process (in seconds).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;64&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;timestamp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Whether to generate timestamps ("none" or "chunk").&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"chunk"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;diarise_audio&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Whether to separate speakers in the audio.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;is_async&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Choose asynchronous processing (true or false).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Request Example:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; &lt;span class="s1"&gt;'POST'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s1"&gt;'https://api.magicapi.dev/api/v1/neevcloud/whisper/process_url/'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'accept: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'x-magicapi-key: &amp;lt;your-api-key&amp;gt;'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
        "url": "https://example.com/audio.wav",
        "task": "transcribe",
        "language": "None",
        "batch_size": 64,
        "timestamp": "chunk",
        "diarise_audio": false,
        "is_async": false
    }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  2. &lt;strong&gt;Process Audio via File Upload&lt;/strong&gt; 📂
&lt;/h3&gt;

&lt;p&gt;Upload an audio file directly for transcription and other tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Endpoint&lt;/strong&gt;: &lt;code&gt;POST /neevcloud/whisper/process_file/&lt;/code&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Parameter&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The audio file to upload.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@your-audio-file.mp3&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;task&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The task to perform: "transcribe", "translate".&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"transcribe"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;language&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The language of the audio file.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"None"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;batch_size&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Size of the audio chunks to process (in seconds).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;64&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;timestamp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Generate timestamps for the chunks ("none" or "chunk").&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"chunk"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;diarise_audio&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Whether to separate speakers in the audio.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;is_async&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Choose asynchronous processing (true or false).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Request Example:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; &lt;span class="s1"&gt;'POST'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s1"&gt;'https://api.magicapi.dev/api/v1/neevcloud/whisper/process_file/'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'accept: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'x-magicapi-key: &amp;lt;your-api-key&amp;gt;'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: multipart/form-data'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s1"&gt;'file=@your-audio-file.mp3'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s1"&gt;'task=transcribe'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s1"&gt;'language=None'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s1"&gt;'batch_size=64'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s1"&gt;'timestamp=chunk'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s1"&gt;'diarise_audio=false'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s1"&gt;'is_async=false'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  3. &lt;strong&gt;Check Task Status&lt;/strong&gt; 📊
&lt;/h3&gt;

&lt;p&gt;Retrieve the status and result of a specific transcription task using its task ID.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Endpoint&lt;/strong&gt;: &lt;code&gt;GET /neevcloud/whisper/status/{task_id}&lt;/code&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Parameter&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;task_id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The unique ID for the task you wish to check.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"ad371472-e6e9-4ecf-b20f-10884230a09e"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Request Example:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; &lt;span class="s1"&gt;'GET'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s1"&gt;'https://api.magicapi.dev/api/v1/neevcloud/whisper/status/ad371472-e6e9-4ecf-b20f-10884230a09e'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'accept: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'x-magicapi-key: &amp;lt;your-api-key&amp;gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Response Example:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"completed"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"output"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Many people think that the best way to escape war is to dwell upon its horrors..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"chunks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Many people think that the best way to escape war..."&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;9.84&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;16.5&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Them vividly upon the minds of the younger generation..."&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"task_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ad371472-e6e9-4ecf-b20f-10884230a09e"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"audio_duration_seconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;30.589&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📢 &lt;strong&gt;Error Handling&lt;/strong&gt;:
&lt;/h2&gt;

&lt;p&gt;In the event of an error, the API will return standard HTTP error codes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Error Code&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;400 Bad Request&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Invalid parameters or missing fields.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;401 Unauthorized&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Invalid or missing API key.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;500 Server Error&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;An issue occurred on the server while processing.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: No API units will be charged in case of task failures or errors.&lt;/p&gt;




&lt;p&gt;Try it here -&amp;gt; &lt;a href="https://api.market/store/neevcloud/whisper" rel="noopener noreferrer"&gt;https://api.market/store/neevcloud/whisper&lt;/a&gt;&lt;/p&gt;

</description>
      <category>whisper</category>
      <category>openai</category>
      <category>api</category>
      <category>ai</category>
    </item>
    <item>
      <title>Sell APIs? I made something that can help you!</title>
      <dc:creator>shashank agarwal</dc:creator>
      <pubDate>Wed, 11 Oct 2023 21:27:34 +0000</pubDate>
      <link>https://dev.to/itsshashank/sell-apis-i-made-something-that-can-help-you-5fod</link>
      <guid>https://dev.to/itsshashank/sell-apis-i-made-something-that-can-help-you-5fod</guid>
      <description>&lt;p&gt;Do you sell APIs or AI models? Or want to sell APIs and want to create an API store?&lt;/p&gt;

&lt;p&gt;Well, I had some APIs from a failed startup that I put on RapidAPI. It actually worked well and I was making over $2K/month. So naturally, I wanted to grow my business. &lt;br&gt;
Well, for that I needed a proper website. And a self-service platform that I could control. I know how to do sales and run ads. &lt;/p&gt;

&lt;p&gt;I started making a platform for my APIs and soon realized it was too much work and was sort of overkill for just one API seller i.e.me.&lt;/p&gt;

&lt;p&gt;So converted this to a platform that anyone can use to sell APIs. It just takes 10 minutes to create an API store.&lt;br&gt;
You can sign up here -&amp;gt; &lt;a href="https://MagicAPI.app"&gt;https://MagicAPI.app&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you want to create an API Store, just let me know. I can onboard you.&lt;/p&gt;

</description>
      <category>api</category>
      <category>platform</category>
      <category>developers</category>
      <category>indiehacker</category>
    </item>
    <item>
      <title>Redis is redefining itself</title>
      <dc:creator>shashank agarwal</dc:creator>
      <pubDate>Fri, 10 Jun 2022 05:16:45 +0000</pubDate>
      <link>https://dev.to/itsshashank/redis-is-redefining-itself-4jp0</link>
      <guid>https://dev.to/itsshashank/redis-is-redefining-itself-4jp0</guid>
      <description>&lt;p&gt;Redis is an amazing in memory #database. But that's all it used to be, a really amazing distributed hash table to get or set key value pairs. But recently while consulting for a startup I came across Redis Enterprise and it totally blew my mind away.&lt;/p&gt;

&lt;p&gt;I have never seen a big database company totally revamp their offerings. For example, MongoDb is still trying to find a way to monetize their DB by changing the license to Server Side Public License. ElasticSearch did something similar and that's why Amazon created OpenSearch(a fork of ElasticSearch).&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;What all can Redis Enterprise do?&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;They introduced bloom filter and cuckoo filter as first class citizens. Bloom filter is probably one of the most underrated yet one of the most widely used algorithm I know of. Google Chrome uses Bloom filter to check if a URL exists in their malicious URLs Dataset.&lt;/p&gt;

&lt;p&gt;Besides that, Redis also introduced a new JSON module that let's users save any JSON objects and then allows the users to run queries on any fields.&lt;/p&gt;

&lt;p&gt;Redis Enterprise has a lot more modules such as TimeSeries, Streams, AI and more.&lt;/p&gt;

&lt;p&gt;The entire ecosystem is really new but it totally has the capability to replace a whole suite of document databases, #caches and indexed search systems.&lt;/p&gt;

&lt;p&gt;The only "con" would be the pricing. It's a bit expensive and also it's not #opensource but has Redis source available License(RSAL).&lt;/p&gt;

&lt;p&gt;I am pretty sure some companies are already working on an open sourced alternative to Redis Enterprise and various modules.&lt;/p&gt;

&lt;p&gt;It's just amazing to see how databases are evolving. I would have never imagined someone using Redis as their main database but it's happening.&lt;/p&gt;

&lt;p&gt;What do you think? Would you trust #Redis with your Production load?&lt;/p&gt;

</description>
      <category>redis</category>
      <category>database</category>
      <category>enterprise</category>
      <category>discuss</category>
    </item>
    <item>
      <title>[Tutorial] Generate Embeddable HTML code for any URL using Pipfeed’s Extract API</title>
      <dc:creator>shashank agarwal</dc:creator>
      <pubDate>Tue, 10 Nov 2020 17:33:56 +0000</pubDate>
      <link>https://dev.to/itsshashank/tutorial-generate-embeddable-html-code-for-any-url-using-pipfeed-s-extract-api-2l9h</link>
      <guid>https://dev.to/itsshashank/tutorial-generate-embeddable-html-code-for-any-url-using-pipfeed-s-extract-api-2l9h</guid>
      <description>&lt;p&gt;Embeddable Cards provide a clean, responsive, and shareable card for any content on the web. Cards are the easiest way to leverage Pipfeed’s extract API for any media, Cards provide a responsive embed. 40% of Users will click, hover, or view Cards with videos, images, and rich media. Cards are responsive and adapt to automatically fit any site they are placed in.&lt;/p&gt;

&lt;p&gt;But a lot of these embed APIs aren’t very customizable and usually results in a longer load time. Using Pipfeed’s extract API, you can generate a pure HTML code in the framework and style of your choice. For this example, we will be using bootstrap cards to style the generated cards.&lt;/p&gt;

&lt;p&gt;Read the full article at-&amp;gt; &lt;a href="https://pipfeed.com/2020/11/10/generate-embeddable-html-code-for-any-url-using-pipfeeds-extract-api/"&gt;https://pipfeed.com/2020/11/10/generate-embeddable-html-code-for-any-url-using-pipfeeds-extract-api/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>api</category>
      <category>extract</category>
      <category>news</category>
    </item>
    <item>
      <title>How to parse Google Search result in Java?</title>
      <dc:creator>shashank agarwal</dc:creator>
      <pubDate>Mon, 05 Oct 2020 05:56:13 +0000</pubDate>
      <link>https://dev.to/itsshashank/how-to-parse-google-search-result-in-java-3303</link>
      <guid>https://dev.to/itsshashank/how-to-parse-google-search-result-in-java-3303</guid>
      <description>&lt;p&gt;Google is an amazing resource but there are no APIs to really parse google search results. This is the JAVA code that I wrote that will help you parse any google search results.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does Google Search work?
&lt;/h2&gt;

&lt;p&gt;For example, if you are searching for "How to parse Google Search result in Java" then this is the URL that you would want to hit: &lt;a href="https://www.google.com/search?q=How+to+parse+Google+Search+result+in+Java&amp;amp;num=10"&gt;https://www.google.com/search?q=How+to+parse+Google+Search+result+in+Java&amp;amp;num=10&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The part after "q" is used to pass the query and "num": This tells google how many results to return.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting HTML search results from Google
&lt;/h2&gt;

&lt;p&gt;This is a code that will search Google and return the HTML of the page.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/**
   * The method will return the search page result in a {@link String} object
   *
   * @param googleSearchQuery the google search query
   * @return the content as {@link String} object
   * @throws Exception
   */
  public static String getSearchContent(String googleSearchQuery) throws Exception {
    //URL encode string in JAVA to use with google search
    System.out.println("Searching for: " + googleSearchQuery);
    googleSearchQuery = googleSearchQuery.trim();
    googleSearchQuery = URLEncoder
        .encode(googleSearchQuery, StandardCharsets.UTF_8.toString());
    String queryUrl = "https://www.google.com/search?q=" + googleSearchQuery + "&amp;amp;num=10";
    System.out.println(queryUrl);
    final String agent = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)";
    URL url = new URL(queryUrl);
    final URLConnection connection = url.openConnection();
    /**
     * User-Agent is mandatory otherwise Google will return HTTP response
     * code: 403
     */
    connection.setRequestProperty("User-Agent", agent);
    final InputStream stream = connection.getInputStream();
    return getString(stream);
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above code will "URL" encode the given search term string and then call google with the given search string and return the results in JAVA using  URLConnection class. You can change the headers as well to prevent google from blocking you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Parsing results from google search result HTML
&lt;/h2&gt;

&lt;p&gt;We want to only find the real results from Google Search and for this we can use this simple Jsoup based HTML parser in JAVA:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/**
   * Parse all links
   *
   * @param html the page
   * @return the list with all URLSs
   * @throws Exception
   */
  public static List&amp;lt;String&amp;gt; parseLinks(final String html) throws Exception {
    List&amp;lt;String&amp;gt; result = new ArrayList&amp;lt;String&amp;gt;();
    Document doc = Jsoup.parse(html);
    Elements results = doc.select("a &amp;gt; h3");
    for (Element link : results) {
      Elements parent = link.parent().getAllElements();
      String relHref = parent.attr("href");
      if (relHref.startsWith("/url?q=")) {
        relHref = relHref.replace("/url?q=", "");
      }
      String[] splittedString = relHref.split("&amp;amp;sa=");
      if (splittedString.length &amp;gt; 1) {
        relHref = splittedString[0];
      }
      //System.out.println(relHref);
      result.add(relHref);
    }
    return result;
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above code is a bit tricky. So it is first finding "h3" elements inside "a". Then it looks at the parent element of the current node. From the parent node it then finds the URL.&lt;/p&gt;

&lt;p&gt;Google search result URL starts with "/url?q=", so we use regex to remove this String. Also, the URL is followed by "&amp;amp;sa=", so we split the string at this character and use the first part of the URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  The full code is available at &lt;a href="https://system.camp/searching-google-results-and-parsing-in-java/"&gt;https://system.camp/searching-google-results-and-parsing-in-java/&lt;/a&gt;
&lt;/h2&gt;

</description>
      <category>java</category>
      <category>google</category>
      <category>search</category>
      <category>api</category>
    </item>
    <item>
      <title>A.I. powered Article Extractor as an API</title>
      <dc:creator>shashank agarwal</dc:creator>
      <pubDate>Wed, 01 Jul 2020 06:11:16 +0000</pubDate>
      <link>https://dev.to/itsshashank/a-i-powered-article-extractor-as-an-api-laj</link>
      <guid>https://dev.to/itsshashank/a-i-powered-article-extractor-as-an-api-laj</guid>
      <description>&lt;p&gt;Check out the article extractor API here: &lt;a href="https://rapidapi.com/imshashank/api/a-i-powered-url-article-extractor/"&gt;https://rapidapi.com/imshashank/api/a-i-powered-url-article-extractor/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the same extractor that powers &lt;a href="https://pipfeed.com"&gt;https://pipfeed.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We use a combination of various A.I. models &amp;amp; services to create the most advanced Article extractor out there.&lt;/p&gt;

&lt;p&gt;Some of the fields returned from the API:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;contentURL: Html of the URL extracted and hosted on AWS CloudFront&lt;/li&gt;
&lt;li&gt;mainImage: The featured image of the article&lt;/li&gt;
&lt;li&gt;Category: A.I. model is used to predict the category of the article from over 70 categories.&lt;/li&gt;
&lt;li&gt;Summary: Summary generated using A.I. to highlight the most important sentenced of the article&lt;/li&gt;
&lt;li&gt;Images: List of all images relevant to the article.&lt;/li&gt;
&lt;li&gt;SourceLogoUrl: Logo of the blog&lt;/li&gt;
&lt;li&gt;SourceName: Name of the blog&lt;/li&gt;
&lt;li&gt;Title&lt;/li&gt;
&lt;li&gt;Authors&lt;/li&gt;
&lt;li&gt;Language&lt;/li&gt;
&lt;li&gt;Description&lt;/li&gt;
&lt;li&gt;Keywords&lt;/li&gt;
&lt;li&gt;Tags&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let me know what do you guys think?&lt;/p&gt;

</description>
      <category>aws</category>
      <category>saas</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>I will help your blog reach 5000+ readers</title>
      <dc:creator>shashank agarwal</dc:creator>
      <pubDate>Fri, 26 Jun 2020 10:14:16 +0000</pubDate>
      <link>https://dev.to/itsshashank/i-will-help-your-blog-reach-5000-readers-2ijm</link>
      <guid>https://dev.to/itsshashank/i-will-help-your-blog-reach-5000-readers-2ijm</guid>
      <description>&lt;p&gt;So I am looking to help 5 bloggers. I am the founder of pipfeed.&lt;/p&gt;

&lt;p&gt;My goal is to help 5 bloggers get over 5000 followers on pipfeed. Send me a message if you are interested. Anyone who gets 500+ followers will be eligible for sponsored articles on pipfeed. Which will be the first target.&lt;/p&gt;

&lt;p&gt;So I create a forum.&lt;/p&gt;

&lt;p&gt;Can you guys please add your blog here:&lt;br&gt;
&lt;a href="https://forum.pipfeed.com/d/2-please-introduce-yourself"&gt;https://forum.pipfeed.com/d/2-please-introduce-yourself&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I will review each blog and personally reply to what you can do to improve.&lt;/p&gt;

&lt;p&gt;You can also send me a message on this discord server: &lt;a href="https://discord.gg/PJDfqp8"&gt;https://discord.gg/PJDfqp8&lt;/a&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
    </item>
    <item>
      <title>8 lessons we learned building PipFeed mobile app</title>
      <dc:creator>shashank agarwal</dc:creator>
      <pubDate>Mon, 11 May 2020 04:35:23 +0000</pubDate>
      <link>https://dev.to/itsshashank/8-lessons-we-learned-building-pipfeed-mobile-app-2l5f</link>
      <guid>https://dev.to/itsshashank/8-lessons-we-learned-building-pipfeed-mobile-app-2l5f</guid>
      <description>&lt;p&gt;So I have spent my last 3 months building PipFeed.com. PipFeed is an A.I. powered curated reading app. Think of it as when Pocket met Medium. I am an ex-AWS engineer and my main language of choice is JAVA but I can code in PHP, python, js etc.&lt;/p&gt;

&lt;p&gt;The backend for PipFeed is in JAVA with a few services in python, node.js &amp;amp; PHP. In January 2020 I learned Flutter and built the mobile app for PipFeed using it. This is my first experience building a mobile app and here are some of the learnings that I would like to share with you all.&lt;/p&gt;

&lt;h2&gt;
  
  
  1) Have a CI/CD
&lt;/h2&gt;

&lt;p&gt;For mobile apps, it is extremely important to have a CI/CD. We use codemagic, it ties up nicely with our Flutter ecosystem. Mobile apps need a lot more work to release like signing, bundle, etc etc.&lt;/p&gt;

&lt;p&gt;P.S. I still don’t have a CI/CD for my backends and I deploy my AWS backend from my laptop using Cloudformation templates.&lt;/p&gt;

&lt;h2&gt;
  
  
  2) Mobile apps crash a lot
&lt;/h2&gt;

&lt;p&gt;As compared to websites, backend code, and stand-alone software, mobile apps fail and throw exceptions a lot more. There are all sorts of errors like network errors, some image fails to load etc.&lt;/p&gt;

&lt;p&gt;To make the app stable, we had to add a lot of exception handling, null checks, and mostly retries in almost all network calls.&lt;/p&gt;

&lt;h2&gt;
  
  
  3) Distributed logs
&lt;/h2&gt;

&lt;p&gt;We use Sentry &amp;amp; Crashlytics to manage and catch all our exceptions &amp;amp; logs. We really love the service and it has a nice pricing model. We have now integrated our backend in JAVA with Sentry.&lt;/p&gt;

&lt;h2&gt;
  
  
  4) Analytics is everything
&lt;/h2&gt;

&lt;p&gt;We use a mix of firebase, mixpanel &amp;amp; AWS cloudwatch for our analytics. Analytics on mobile is a bit harder as everything you want to track requires a code change. Also, that would mean a lot of network calls for each event.&lt;/p&gt;

&lt;p&gt;We found a way and moved the analytics to our backend system. So on an action like read, like, comment, etc when there is a database update, we trigger lambdas using AWS DDB stream and send metrics from there to other services. This helps us reduce the overall number of network requests and makes it easier to have the logic out of the mobile app.&lt;/p&gt;

&lt;h2&gt;
  
  
  5) It’s so hard to A/B test
&lt;/h2&gt;

&lt;p&gt;As compared to any other software A/B testing is really hard on mobile. With websites you can have a version that people will see when they visit your URL with mobile your users will have a whole mix of versions, devices, screen-sizes and a lot more variables. So we are still figuring out how to do this.&lt;/p&gt;

&lt;p&gt;Implementing A/B testing is harder in mobile as we need to create two separate code blocks and use firebase remote config or something similar to run once code block for some users and another for some other.&lt;/p&gt;

&lt;h2&gt;
  
  
  6) Login/SignUp is the most important screen in your app
&lt;/h2&gt;

&lt;p&gt;The most important piece of code in your mobile app is your login/signup page. We learned this the hard way. We never paid much attention to our sigun/login page but when we analyzed the analytics we saw that from all the people who “installed” the app only 60% were actually signing up.&lt;/p&gt;

&lt;p&gt;Hence we now do rigorous testing of our signup page. After so much work we still keep finding a lot of bugs/error in our login &amp;amp; signup flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  7) Updates are harder because of backward compatibility
&lt;/h2&gt;

&lt;p&gt;With AWS, I am used to pushing to Production almost every other day. But with mobile, you need to take care of backward compatibility a lot more.&lt;/p&gt;

&lt;p&gt;Like we have a bug in our app where a blog will show as being “unfollowed” even when the user is following it. This was caused by two bugs with one being in the mobile app and another in our backend. Now if I fix the backend bug the current mobile app will break. So what we do? We fixed the bug in the mobile app and after around 15 days or when 90% of users have updated to the latest app, we will push fix to the backend.&lt;/p&gt;

&lt;h2&gt;
  
  
  8) Have a clear 2-way communication channel with users
&lt;/h2&gt;

&lt;p&gt;It is very important to have some way in which users can reach out to you. At first, we thought just asking our users to email us would be enough but I think around 5% of all users ever emailed us. That’s when we found Instabug. This is a really amazing tool and they provide a 2-minute installation. I think in all the tools mentioned here, this was the easiest to setup. We run all sorts of surveys including Net promoter Score surveys, survey to nudge users to upgrade etc. Also, Instabug lets users submit bugs reports and even vote on feature requests.&lt;/p&gt;

&lt;p&gt;If you have a mobile app, it is very important to have a NPS survey. This is probably the one metrics VCs really care about.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
