{{error}}
{{(quickSearchResults.length>10)?'10+':(quickSearchResults.length)}} {{(quickSearchResults.length==1)?'result':'results'}}
{{result.title}} {{result.timeStamp | mysql2ymd }}
I am sorry, no such article was written yet.
My too-simple-to-be-true PBKDF2 one-way encryption and password checking
Configurables: the iteration count, salt size, and hash size lengths are hard-coded....
1 files attached: PBKDF2.cs
PBKDF2.cs
public static string Hash(string password)
        {
            using (var deriveBytes = new Rfc2898DeriveBytes(password, 16, 1000))
            {
                return Convert.ToBase64String(new byte[1].Concat(deriveBytes.Salt).Concat(deriveBytes.GetBytes(32)).ToArray());
            }
        }

        public static bool CheckHash(string hashBase64, string password)
        {
            var hash = Convert.FromBase64String(hashBase64);
            using (var deriveBytes = new Rfc2898DeriveBytes(password, hash.Skip(1).Take(16).ToArray(), 1000))
            {
                return hash.Skip(1).Skip(16).Take(32).SequenceEqual(deriveBytes.GetBytes(32));
            }
        }
Simple ZIP Archiver
My too-simple-to-be-true file archiver (basic options).
It just takes a list of files and returns the zip file contents as byte array (no optimization, and all is performed in memory).
1 files attached: Zip.groovy
Zip.groovy
def packFiles={List sources->
	def baos=new ByteArrayOutputStream()
	def zipOut = new java.util.zip.ZipOutputStream(baos)
	zipOut.setLevel(java.util.zip.Deflater.NO_COMPRESSION)
	for (def source : sources) {
		zipOut.putNextEntry(new java.util.zip.ZipEntry(source.name))
		zipOut.write(source.bytes)
		zipOut.closeEntry()
	}
	zipOut.flush()
	zipOut.close()
	return baos.toByteArray()
}
Zip dearchiver for JVM
My simple Zip dearchiver. It was written in Groovy, but intuitevely convertible to Java 8 with Lambdas.
Reason I wrote it: Windows Firewall refused dearchiving some sensitive files.
1 files attached: T.groovy
T.groovy
import groovy.transform.TypeChecked;
import sun.misc.IOUtils;

import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

@TypeChecked
class T {
    public static void main(String[] args) {
        def folder="C:\\Users\\dsorescu\\Documents\\My Received Files";
        ZipFile zip=new ZipFile(folder+"\\"+"MY_SECRET_ZIP_FILE_NAME.zip");
        zip.entries().each {ZipEntry entry->
            System.out.println(entry.name);
            File f=new File(folder+"\\"+entry.name);
            f.parentFile.mkdirs();
            if(entry.isDirectory()){
                f.mkdir();
            }else{
                f.createNewFile();
                FileOutputStream fos=new FileOutputStream(f);
                fos.write(IOUtils.readFully(zip.getInputStream(entry),-1,true));
                fos.close();
            }
        }
    }
}
Simple file-on-disk JSON db
1 files attached: Heap.java
Heap.java
package eu.sorescu.db;

import java.io.*;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.StandardOpenOption;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.UUID;

import groovy.json.JsonOutput;
import groovy.json.internal.JsonParserCharArray;


public class Heap {
    private static final long serialVersionUID = -5685880176240431312L;
    final File folder;
    private String joinedPath = "";

    public Heap(String... path) throws IOException {
        if (path.length == 1)
            if (path[0].length() == 0)
                path = new String[0];
        for (String aPath : path) this.joinedPath += "\\" + URLEncoder.encode(aPath, "UTF-8");
        folder = new File("heap" + this.joinedPath + "\\");
    }

    private File file(String arg0) {
        try {
            String encodedName = encode(arg0);
            return new File(folder, encodedName);
        } catch (IOException e) {
            throw new IllegalAccessError("heap://" + joinedPath + "/" + arg0);
        }
    }

    public Object[] list() {
        File[] files = folder.listFiles();
        ArrayList<String> result = new ArrayList<>();
        try {
            if (files != null)
                for (File file : files)
                    if (file.isFile())
                        result.add(decode(file.getName()));
        } catch (IOException e) {
            throw new NullPointerException(e.toString());
        }
        Object[] vector = result.toArray(new String[result.size()]);
        return vector;
    }

    public String[] listHeaps() throws IOException {
        File[] files = folder.listFiles();
        ArrayList<String> result = new ArrayList<>();
        if (files != null)
            for (File file : files)
                if (file.isDirectory())
                    result.add(decode(file.getName()));
        return result.toArray(new String[result.size()]);
    }

    // @Override
    public Object get(final Object arg0) {
        if (arg0 == null)
            throw new NullPointerException("d1012150913 Heap " + folder
                    + ": argument null");
        if (!(arg0 instanceof String))
            throw new NullPointerException("d1012150914 Heap " + folder + ": "
                    + arg0.getClass().getName() + " only String");
        return get((String) arg0);
    }

    public Object get(final String arg0, Object defaultValue) {
        Object result = get(arg0);
        if (result == null)
            result = defaultValue;
        return result;
    }

    private Object get(final String arg0) {
        try {
            File f = file(arg0);
            byte[] data = Files.readAllBytes(f.toPath());
            return new JsonParserCharArray().parse(data);
        } catch (Throwable ignored) {
        }
        return null;
    }

    public long getSize(String arg0) {
        try {
            return file(arg0).length();
        } catch (Throwable t) {
            return 0;
        }
    }

    public boolean has(String arg0) {
        if (arg0 == null)
            return false;
        File file = file(arg0);
        return file != null && file(arg0).exists();
    }

    public String put(Object value) {
        return put(null, value);
    }

    private static SimpleDateFormat TIME_STAMP = new SimpleDateFormat(
            "yyMMddhhmmssSSS");

    public String put(String key, Object value) {
        if ((key == null) || (key.length() == 0))
            key = UUID.randomUUID().toString() + "_"
                    + TIME_STAMP.format(new Date());
        write(file(key), value);
        return key;
    }

    public void delete(String arg0) {
        file(arg0).delete();
    }

    private static void write(File file, Object value)
             {
        String ser = JsonOutput.prettyPrint(JsonOutput.toJson(value));
        try {
            file.getParentFile().mkdirs();
            file.createNewFile();
            Files.write(file.toPath(), ser.getBytes(), StandardOpenOption.CREATE);
        } catch (Throwable t) {
            t.printStackTrace();
            throw new RuntimeException(t);
        }
    }

    private static String encode(String k) throws UnsupportedEncodingException {
        return URLEncoder.encode(k, "UTF-8");
    }

    private static String decode(String k) throws UnsupportedEncodingException {
        return URLDecoder.decode(k, "UTF-8");
    }
}
How I am looking for classes that extend a base class
1 files attached: Classes.java
Classes.java
public static Class[] classes(Class scope) throws IOException, URISyntaxException {
        Path root = new File(JUnitExecutor.class.getResource("/").toURI()).toPath();
        return Files.walk(root, FileVisitOption.FOLLOW_LINKS).map(path -> root.relativize(path))
                .filter(path -> path.toString().endsWith(".class"))
                .map(path -> path.toString())
                .map(path -> path.toString().substring(0, path.length() - 6).replace('\\', '.'))
                .map(path -> getClass(path))
                .filter(clazz -> scope.isAssignableFrom(clazz))
                .filter(clazz -> clazz != scope)
                .toArray(c -> new Class[c]);
    }

    private static Class getClass(String className) {
        try {
            return Class.forName(className);
        } catch (ClassNotFoundException e) {
            throw new ClassFormatError(className);
        }
    }
Simple stream copy function
Simple function to copy a stream to another.
1 files attached: CopyStream.java
CopyStream.java
public static void copyStream(InputStream is, OutputStream os) throws IOException {
        try (
                ReadableByteChannel input = Channels.newChannel(is);
                WritableByteChannel output = Channels.newChannel(os)
        ) {
            final ByteBuffer buffer = ByteBuffer.allocateDirect(65536);
            while (input.read(buffer) != -1) {
                buffer.flip();
                output.write(buffer);
                buffer.compact();
            }
            buffer.flip();
            while (buffer.hasRemaining())
                output.write(buffer);
        }
    }
My SSH URL Handler for Java
How I implemented my own SSH protocol handler in Java, to write code like in attached sample.
3 files attached: Sample.java Handler.java SSHURLConnection.java
Sample.java
new java.net.URL("ssh://user:password@host/?ls ~/desktop/").openConnection().getInputStream();
Handler.java SSHURLConnection.java
How much do you know about .NET?
1 files attached: Program.cs
Program.cs
namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            float nan = float.NaN;
            Console.WriteLine(Object.Equals(nan, nan));//true
            Console.WriteLine(Object.ReferenceEquals(nan, nan));//false
            Console.WriteLine(nan == nan);//false
            Console.WriteLine(nan.GetType());//System.single
            
            Object nano = float.NaN;
            Console.WriteLine(Object.Equals(nano, nano));//true
            Console.WriteLine(Object.ReferenceEquals(nano, nano));//true
            Console.WriteLine(nano == nano);//true
            Console.WriteLine(nano.GetType());//System.single
            Console.ReadKey();
        }
    }
}
Ranorex C# automation for MFC Windows GUI
The following code supposes you have Ranorex linked to your C# solution.
3 files attached: Main.script Repository.properties Program.cs
Main.script
rem call main
kill
start
type @login.password schilling
click @login.ok
click title=Schilling;text=Firmavalg
click title=Schilling;innertext=SPS.UK$,href=4$
doubleClick title=Schilling;text=Main.menu
doubleClick title=Schilling;text=Publisher
doubleClick title=Schilling;text=Product.management
REM Step 1
click title=Schilling;*=Product.management.project

rem ocr_click Project 3 0.5
type /form[@title~'^Product\smanagement\s-\sedit']/?/?/container[@caption~'^Product\smanagement\s-\sedit']/element/element[6]/text[@class='Edit'] 21321131231

REM Step 3
click *=Product.management;text=Create.project$
REM Step 4
click *=Product.management;*=Create.project;*=Other.projects..F7.
REM 5
click *=Product.management;text=Get.serial.number
REM 6
click *=Product.management;text=Accept$
rem ocr_click @Name: 0.5 0.5
REM 10
rem type *=Product.management;*=Save.project.as CrashCourseCardiology\t\t\t\t\t\t\t\tCrash
type @pm.edit.saveas.new-project-number {ts}
type @pm.edit.saveas.name "Crash Course Cardiology"
type @pm.edit.saveas.title "Crash Course Cardiology"
rem click on title
type @pm.edit.saveas.main-group 07
type @pm.edit.saveas.sub-group 021
type @pm.edit.saveas.dimension-1 002

click @pm.edit.saveas.new-project-number
click @pm.edit.saveas.name
click @pm.edit.saveas.new-project-number
click @pm.edit.saveas.name


click "*=Product.management;text=Create project$"
rem click "/form[@title='Error']/button[@text='OK']"
rem click "*=Product.management;text=Create project$"	
click "/form[@title='Question']/button[@text='&Yes']"

click @pm.edit.details.tab

wait 1000
clickAt @pm.edit.details.stackholders 100 20
clickAt @pm.edit.details.stackholders 10 20
clickAt @pm.edit.details.stackholders 100 20
wait 1000
type "/form[@title~'^Product\ management\ -\ edit']/?/?/container[@caption~'^Product\ management\ -\ edit']/?/?/container[@caption='Details']/?/?/container[@caption='Stakeholders']/?/?/element[@class='OaseGrid']/element/element[4]/text[@class='Edit']" "R"
wait 1000
clickAt @pm.edit.details.stackholders 200 20
wait 200
clickAt @pm.edit.details.stackholders 200 20
type "/form[@title~'^Product\ management\ -\ edit']/?/?/container[@caption~'^Product\ management\ -\ edit']/?/?/container[@caption='Details']/?/?/container[@caption='Stakeholders']/?/?/element[@class='OaseGrid']/element/element[31]/text[@class='Edit']" "Aut"
rem wait 1000
rem clickAt @pm.edit.details.stackholders 300 20
rem clickAt @pm.edit.details.stackholders 10 20
rem clickAt @pm.edit.details.stackholders 300 20
rem type "/form[@title~'^Product\ management\ -\ edit']/?/?/container[@caption~'^Product\ management\ -\ edit']/?/?/container[@caption='Details']/?/?/container[@caption='Stakeholders']/?/?/element[@class='OaseGrid']/element/element[4]/text[@class='Edit']" "Author	"
wait 1000
clickAt @pm.edit.details.stackholders 700 20
wait 200
clickAt @pm.edit.details.stackholders 700 20
type "/form[@title~'^Product\ management\ -\ edit']/?/?/container[@caption~'^Product\ management\ -\ edit']/?/?/container[@caption='Details']/?/?/container[@caption='Stakeholders']/?/?/element[@class='OaseGrid']/element/element[22]/text[@class='Edit']" "p2012-009"
rem Aut	Author	p2012-009	

click @pm.edit.texts.tab


click @pm.edit.calculation.tab

type @pm.edit.calculation.version 3
type @pm.edit.calculation.price 9
click @pm.edit.calculation.version
click @pm.edit.calculation.price
click *=Product.management;text=Accept$
Repository.properties Program.cs
Basic image recognition function in Java
Simple algorithm to find the (first) position of a smaller image in a larger one. Tip: to run faster, you may check for diagonal or few random points inside the small image before comparing all the other pixels.
1 files attached: ImageDetector.java
ImageDetector.java
package eu.sorescu.mmx;

import java.awt.Rectangle;
import java.awt.image.BufferedImage;

public class ImageDetector {
	public static Rectangle getImagePosition(BufferedImage bigImage,
			BufferedImage smallImage) {
		int w1 = bigImage.getWidth();
		int h1 = bigImage.getHeight();
		int w2 = smallImage.getWidth();
		int h2 = smallImage.getHeight();
		int[] bigPixels = bigImage.getRGB(0, 0, w1, h1, null, 0, w1);
		int[] smallPixels = smallImage.getRGB(0, 0, w2, h2, null, 0, w2);
		for (int x1 = 0; x1 <= w1 - w2; x1++)
			imageLoop: for (int y1 = 0; y1 <= h1 - h2; y1++) {
				for (int y2 = 0; y2 < h2; y2++)
					if (!compare(bigPixels, smallPixels, w1 * (y1 + y2) + x1,
							w2 * y2, w2))
						continue imageLoop;
				return new Rectangle(x1, y1, w2, h2);
			}
		return null;
	}

	private static boolean compare(int[] array1, int[] array2, int a1, int a2,
			int length) {
		for (int i = 0; i < length; i++)
			if (array1[a1 + i] != array2[a2 + i])
				return false;
		return true;
	}
}