Thursday, December 29, 2016

Dummy Email Server For Developers

Dummy Email Servers for Developers, Testers for Testing purpose </br>
These test emails will not go outside the network, but provide basic functionality for testing purpose.
I have tested PaperCut and FakeSMTP Server, both are working fine.

PaperCut
https://github.com/ChangemakerStudios/Papercut/releases


FakeSMTP Server
https://nilhcem.github.io/FakeSMTP/
https://nilhcem.github.io/FakeSMTP/download.html


Wednesday, November 2, 2016

Metadata from mp3 files, Apache TIKA


Today's Discussion: Get Metadata ()Artist, Album, Creator) from MP3 files for Android Music Player

This Java program will retrieve all mp3 files from the given directory (inside nested directories or files) and display Album, Artist, 
Creator etc metadata (tags). The same can be used in sorting and display in Android Music Player for playing mp3 files. The same program 
will list out if there are Duplicate Files too in other directories. This uses "Apache Tika" Framework. 
Apache TIKA is used for:  Language detection mechanism and MIME detection mechanism. So it requires input as video (mp4, mkv etc), 
audio (mp3), pdf. It provides parser libraries which parses the input files and provides Metadata Extracts like:

mp3: Artist, Album, Title, Name, Creator etc.
mp4: FileTypes
pdf: Language (ge- german) etc.


   
//DEMO_AudioParser.java
package dmodi.mp3;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

//Jars required: tika-core-1.3.jar, tika-parsers-1.3.jar
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.parser.mp3.Mp3Parser;
import org.xml.sax.ContentHandler;
import org.xml.sax.helpers.DefaultHandler;

public class DEMO_AudioParser {
    static String temp="";
    static int fileCount=1;
    static String fileLocation = "E:\\Personal\\Audio Songs";  //Provide your directory location
    static Set<String> albumSet = new HashSet<String>();
    static Map<String, Integer> fileMap = new HashMap<String, Integer>();

    public static void main(String[] args) {
        File folder = new File(fileLocation);
        listFilesForFolder(folder);
    }

    public static void listFilesForFolder(final File folder) {
        String fileName = "";
        String albumName = "";

        InputStream input = null;
        ContentHandler handler = new DefaultHandler();
        Metadata metadata = new Metadata();
        Parser parser = new Mp3Parser();
        ParseContext parseCtx=new ParseContext();


        for (final File fileEntry : folder.listFiles()) {  //File[] listOfFiles = folder.listFiles();
            if (fileEntry.isDirectory()) {
                //System.out.println("*************Reading files under the Directory: "+fileEntry);
                listFilesForFolder(fileEntry);
            } else {
                if(fileEntry.isFile()) {
                    temp = fileEntry.getName();
                    if((temp.substring(temp.lastIndexOf('.') + 1, temp.length()).toLowerCase()).equals("mp3")) {  //Will take only mp3 files
                        fileName = fileEntry.getName();
                        if(fileMap.containsKey(fileName)){   //Duplicate File Check
                            fileMap.put(fileName, fileMap.get(fileName)+1);
                            System.out.println("Duplicate folder: "+fileEntry+", fileName: "+fileName);
                        }
                        else
                            fileMap.put(fileName, 1);

                        try {
                            input = new FileInputStream(fileEntry);
                            parser.parse(input, handler, metadata, parseCtx);
                            input.close();

                            /*String[] metadataNames = metadata.names();
                            for(String name : metadataNames){
                                System.out.println(name + ": " + metadata.get(name));  //audioCompressor, releaseDate, title, author, album, creator, audio/mpeg etc.
                            }*/
                            albumName = metadata.get("xmpDM:album");    //This you can get from above metadata for loop
                            if(albumName!=null){
                                albumName = albumName.trim();
                            }
                            System.out.println("FileName: "+fileEntry+", Album : "+albumName+", Count: "+fileCount);
                            fileCount++;
                            albumSet.add(albumName);
                        }
                        catch(Exception e){
                            e.printStackTrace();
                            System.out.println("ERROR: fileName: "+fileName);
                        }
                    }
                }
            }
        }
    }
}

//Sample output:
FileName: E:\Personal\Audio Songs\MixSongs5\Kaddu Kaddu.mp3, Album : title, Count: 1
FileName: E:\Personal\Audio Songs\MixSongs5\Kagaz Ki Kashti.mp3, Album : Unknown Album (9/17/2005 10:26:39 PM), Count: 2
FileName: E:\Personal\Audio Songs\MixSongs5\KAHIN DEP JALE.mp3, Album : null, Count: 3
FileName: E:\Personal\Audio Songs\MixSongs5\Khalbali (Papuyaar[1].com).mp3, Album : Rang De Basanti @ Papuyaar.com, Count: 4
FileName: E:\Personal\Audio Songs\MixSongs5\khamoshi3(www.songs.pk).mp3, Album : Khamoshi, Count: 5
FileName: E:\Personal\Audio Songs\MixSongs5\khattameetha01(www.songs.pk).mp3, Album : Khatta Meetha, Count: 6

==============================END=============================

Tuesday, September 27, 2016

Android Applications: Contacts, Calculator, Email App

Android DEMO_Contact App
DEMO_Contact App

Android DEMO_Calculator App
DEMO_Calculator App

Android Email App
DEMO_Email App


End..

Tuesday, September 6, 2016

Change Date in Ubuntu

Change Date in Ubuntu:
root@XXX:/home/dmodi# sudo date --set="2016-09-06 15:02:30"
Tue Sep 6 15:02:30 IST 2016

Monday, August 22, 2016

JBOSS Security Password Generator

Ever struggling to generate Encrypted password using JBOSS Security Login Module ??
Here is how you can do it, go to JBOSS_INSTALLATION directory.

Run below command in Unix (some jars are required, locate that and give proper path in below command):
dmodi__Jboss$ java -cp ./DEPLOY_NAME/lib/jboss-common.jar:./DEPLOY_NAME/lib/jboss-jca.jar:./DEPLOY_NAME/lib/jbosssx.jar org.jboss.resource.security.SecureIdentityLoginModule PASSWORD
Encoded password: 5f78dc15b9a559cbdf8592078de921bc


//That's it. You are done with. But do you see any problem here, yes people KNOW what is PASSWORD, when you set this in PRODUCTION environment, where many people were present.
To hide that, you need to write a Shell Script, assume file name is "HidePassword.sh"

vi HidePassword.sh
echo "Enter Password to Encrypt for followed by Enter:"
stty -echo
read pass
stty echo
java -cp ./DEPLOY_NAME/lib/jboss-common.jar:./DEPLOY_NAME/lib/jboss-jca.jar:./DEPLOY_NAME/lib/jbosssx.jar  org.jboss.resource.security.SecureIdentityLoginModule $pass
echo 'Done'

//EXIT now=>   :wq

Run Now:

dmodi__Jboss$    sh HidePassword.sh
Enter Password to Encrypt for followed by Enter:   ( I entered same PASSWORD, but it will not be visible in console)
Encoded password: 5f78dc15b9a559cbdf8592078de921bc
Done


//Now this password you need to put into Databse security Domain files. That you can see in many links. 
For reference:    https://docs.jboss.org/jbosssecurity/docs/6.0/security_guide/html/Encrypting_Data_Source_Passwords.html
=======================END============================


Thursday, August 4, 2016

Search a string in a file or recursively in a directory in windows. For Unix, shell scripting is awesome but windows
we always curse Microsoft. But we too have command prompt too.

Below program will search a string in a directory (all files recursively). Copy the code in a file called "LogSearch.bat".
And run as below, this will give all the file names where WARNING_MESSAGE is present.

LogSearch.bat WARNING_MESSAGE D:\server_logs\

-------------------------------------------------------------
@echo off
echo 'Enter_String_To_Search Directory_Name_To_Search'
set arg1=%1
set arg2=%2
setlocal
pushd %arg2%
findstr /s /m %arg1% *
popd
endlocal
-------------------------------------------------------------