Java >> Tutoriel Java >  >> Java

La bibliothèque des revenus passifs

En tant que passionné de technologie, entrepreneur en série et codeur renégat, je suis toujours à la recherche d'un projet potentiel générateur de revenus. Malheureusement, parfois, mes idées prennent trop de temps ou d'efforts à mettre en œuvre, de sorte qu'elles ne dépassent jamais le stade initial. L'une de ces idées était la bibliothèque de revenus passifs.

Le concept

Il y a environ deux ans, ma petite amie, Morgan, était enseignante étudiante. Pendant ce temps, elle a découvert que l'un des enseignants de son école avait une bibliothèque numérique qui lui permettait de gérer tous ses propres livres. Bien sûr, Morgan s'y était beaucoup intéressé, alors j'ai pensé que j'essaierais d'en faire un moi-même.

Mon idée initiale était de créer une application de bureau de base qui utiliserait un scanner de codes-barres pour suivre les livres entrant et sortant. À l'époque, cela semblait assez facile, alors je me suis mis au travail.

Prototype 1

Depuis que nous avons décidé de faire de la bibliothèque une application Windows, j'ai suivi la voie Visual Studios avec mon vieil ami C#. Au début, nous pensions que ce serait cool de pouvoir utiliser un lecteur de codes-barres, alors j'ai commencé à développer ce logiciel. Au moins j'ai essayé. Le problème était que nous avions acheté un scanner de clavier qui imite essentiellement un clavier. Naturellement, j'étais un peu frustré par l'achat, mais nous avons décidé de contourner le problème.

Autant que je sache, il n'y avait vraiment aucun moyen d'extraire facilement des données de code-barres, j'ai donc conçu l'application autour d'une zone de texte. Au moins de cette façon, nous pourrions toujours saisir les codes-barres manuellement si nécessaire.

using System;
using System.Collections.Generic;
using System.Text;

namespace PopLibrary.Devices
{
    /// <summary>
    /// Represents a barcode scanner device
    /// Some advice: Do not purchase this scanner unless
    /// you literally only want to enter barcodes into a spreadsheet
    /// Using this thing as been a complete and total nightmare because
    /// it is not HID-Scanner compliant
    /// The computer thinks its a keyboard and it uses pages that
    /// are blocked in the HIDDevice library in .NET
    /// As a result, you have to use RawInput to handle it which
    /// basically means writing threads at near C level code to 
    /// handle the keyboard data stream and the barcode data stream 
    /// </summary>
    class CortexScanner
    {
        public const UInt16 Vid = 0x05FE;
        public const UInt16 Pid = 0x1010;
        public const UInt16 UsagePage = 0x0001;
        public const UInt16 UsageId = 0x0006;
    }
}

Avec le scanner de code-barres en marche, j'étais prêt à développer le backend. Cependant, nous nous sommes heurtés à un autre défi de taille. Comment l'application saurait-elle à quel livre nous faisions référence ? De toute évidence, nous avions besoin d'un moyen d'envoyer un ping à une base de données et d'obtenir le livre correspondant au code-barres. Je n'avais pas l'intention de créer cette ressource moi-même. Au lieu de cela, j'ai consulté des ressources gratuites en ligne.

J'ai eu la chance de trouver quelques ressources, mais elles avaient leurs limites. La plupart des ressources gratuites avaient des limites sur le nombre de recherches par mois, et beaucoup d'entre elles n'avaient même pas de catalogue complet de livres. À ce moment-là, j'étais un peu frustré et coincé, alors je me suis un peu éloigné du projet.

Prototype n° 2

Plusieurs mois plus tard, je me suis remis à penser à cette bibliothèque. C'est alors que l'idée de la bibliothèque de revenus passifs est née. J'ai pensé que nous pourrions peut-être utiliser la base de données d'Amazon pour récupérer tous nos livres. En même temps, nous pourrions recommander des livres à nos utilisateurs. S'ils utilisaient l'un de nos liens pour acheter des livres, nous aurions une petite réduction. Cela semblait parfait, alors j'ai décidé de me remettre au travail.

Bien sûr, la première pierre d'achoppement était la navigation dans l'API Product Advertising d'Amazon. La plupart de leur documentation était inutilisable, j'ai donc passé beaucoup de temps à me faire une idée de la bibliothèque. À ce stade, j'ai décidé de recommencer le projet en utilisant Java et JavaFX.

public void search() {
    // create and load default properties
    Properties defaultProps = new Properties();
          
    try (FileInputStream in = new FileInputStream("src/com/cybrotronics/poplibrary/secret.key")){
        defaultProps.load(in);  
    } catch (IOException e) {
        e.printStackTrace();
    }
            
    String awsAccessKey = defaultProps.getProperty("awsAccessKey");
    String awsSecretAccessKey = defaultProps.getProperty("awsSecretAccessKey");
    String awsAssociateTag = defaultProps.getProperty("awsAssociateTag");
        
    // Set the service:
    AWSECommerceService service = new AWSECommerceService();

    service.setHandlerResolver(new AwsHandlerResolver(awsSecretAccessKey));
        
    // Set the service port:
    com.ECS.client.jax.AWSECommerceServicePortType port = service.getAWSECommerceServicePort();

    // Get the operation object:
    ItemSearchRequest itemRequest = new ItemSearchRequest();

    // Fill in the request object:
    itemRequest.setSearchIndex("Books");
    itemRequest.setKeywords(searchBar.getText());
    itemRequest.getResponseGroup().add("Large");
    ItemSearch ItemElement= new ItemSearch();
    ItemElement.setAWSAccessKeyId(awsAccessKey);
    ItemElement.setAssociateTag(awsAssociateTag);
    ItemElement.getRequest().add(itemRequest);

    // Call the Web service operation and store the response in the response object:
    bookList.getItems().clear();
    ItemSearchResponse response = port.itemSearch(ItemElement);
    response.getItems()
        .forEach(itemList -> itemList.getItem()
            .forEach(item -> bookList.getItems().add(item)));
}

Tout allait bien jusqu'à ce que j'ai accidentellement engagé mes clés Amazon sur GitHub. Presque immédiatement, j'ai reçu un e-mail m'avertissant de mon erreur. C'est alors que j'ai réalisé que ces clés allaient poser problème.

J'ai cherché partout sur Internet un moyen de cacher ces clés sur le client. La plupart des gens ont juste dit de ne pas le faire car il serait presque impossible de les cacher, alors je me suis retrouvé à nouveau au point mort. Je n'avais aucune idée de comment j'allais faire tout ce travail, alors je me suis à nouveau éloigné du projet.

Prototype n° 3

Le troisième et dernier prototype est arrivé quelques mois plus tard, alors que je m'intéressais à WordPress. J'ai pensé qu'il serait peut-être possible d'utiliser WordPress pour créer une bibliothèque de revenus passifs sécurisée sur le Web. Après quelques recherches, cela semblait un peu trop difficile, alors j'ai recommencé à zéro.

Cette fois, j'ai récupéré mon premier framework web :Laravel. A l'époque, je ne connaissais effectivement rien à la programmation web, et je ne peux pas dire que j'en comprenne beaucoup plus maintenant. Quoi qu'il en soit, j'ai décidé de suivre de près les Laracasts tout en ajoutant mes propres petites fonctionnalités.

<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/books', 'BooksController@index');
Route::get('/books/{book}', 'BooksController@show')->where('book', '[0-9]+');
Route::get('/books/create', 'BooksController@create');
Route::post('/books', 'BooksController@store');
Route::get('/', 'HomeController@index');
Auth::routes();
Route::get('/home', 'HomeController@index');

À ce stade, je rêvais de bien plus de fonctionnalités qu'auparavant. Je voulais que le site Web soit presque un réseau social de partage de livres, j'ai donc utilisé Laravel pour construire l'infrastructure sur le backend. Les utilisateurs pouvaient avoir leurs propres livres, mais ils pouvaient aussi prêter leurs livres et emprunter des livres à d'autres. Cela allait être un énorme réseau de partage de livres qui stimulerait essentiellement les ventes à Amazon. À partir de là, je toucherais une commission.

Je me souviens avoir mis en place une grande partie de l'infrastructure, mais j'étais à nouveau frustré par la nouvelle portée et mon incapacité à comprendre la programmation Web. Il y avait tout simplement trop de lacunes dans mes compétences pour que je puisse réaliser ce projet par moi-même, alors j'ai finalement jeté l'éponge.

Aller de l'avant

Je n'avais aucune intention d'abandonner ce projet, mais c'est le genre de chose pour laquelle j'aurais probablement besoin d'être vraiment passionné pour être fait. Même si j'aime l'idée du revenu passif, je ne pourrais jamais surmonter tous les défis lors de la mise en œuvre.

C'est pourquoi j'ai décidé de partager mon idée avec le monde. Peut-être qu'un projet comme celui-ci existe déjà et que quelqu'un en tire de l'argent. Ce serait un énorme soulagement, et je pourrais mettre le projet derrière moi.

Cependant, si ce projet n'existe pas, peut-être qu'un de mes lecteurs pourra m'aider à le concrétiser. En fait, j'ai déjà acheté quelques domaines pour héberger l'outil si quelqu'un veut juste m'aider à faire décoller la bibliothèque. Le code source n'est pas caché du tout. Vous pouvez retrouver tous mes efforts dans le dépôt PopLibrary sur mon GitHub.

Poursuivre! Fourchez le dépôt. J'aimerais voir si quelqu'un peut faire fonctionner cela.


Balise Java