## Sunday, June 5, 2016

### Alexander Goldstein's Each! Pattern

```class Array
def each!
while count > 0
yield(shift)
end
end
end
```

## Thursday, October 22, 2015

### SelectionSort in Java

``` public static void selectionsort(int[] A) {
for (int i = 0; i < A.length; i++) {
int min = i;
for (int j = i+1; j < A.length; j++) {
if (A[j] < A[min]) {
min = j;
}
}
swap(A, i, min);
}
}

public static void swap(int[] A, int i, int j) {
int temp = A[j];
A[j] = A[i];
A[i] = temp;
}

```

### InsertionSort in Java

``` public static void insertionsort(int[] A) {
for (int i = 1; i < A.length; i++) {
for (int j = i; j > 0 && A[j] < A[j - 1]; j--) {
swap(A, j, j - 1);
}
}
}

public static void swap(int[] A, int i, int j) {
int temp = A[j];
A[j] = A[i];
A[i] = temp;
}

```

### MergeSort in Java

``` public static void mergesort(int[] A) {
int[] aux = new int[A.length];
mergesort(A, aux, 0, A.length-1);
}
private static void mergesort(int[] A, int[] aux, int lo, int hi) {
if (lo >= hi) return;
int m = (lo+hi) / 2;
mergesort(A, aux, lo, m);
mergesort(A, aux, m+1, hi);
merge(A, aux, lo, m, hi);
}
private static void merge(int[] A, int[] aux, int lo, int m, int hi) {
int i = lo;
int j = m+1;
for (int k=lo; k <= hi; k++) {
if (i > m) {
aux[k] = A[j];
j++;
} else if (j > hi) {
aux[k] = A[i];
i++;
} else if (A[j] < A[i]) {
aux[k] = A[j];
j++;
} else {
aux[k] = A[i];
i++;
}
}
for (int k=lo; k <= hi; k++) {
A[k] = aux[k];
}
}

```

### QuickSort in Java

``` public static void quicksort(int[] A) {
quicksort(A, 0, A.length-1);
}

private static void quicksort(int[] A, int lo, int hi) {
if (lo >= hi) return;
int p = partition(A, lo,hi);
quicksort(A, lo, p-1);
quicksort(A, p+1, hi);
}

private static int partition(int[] A, int lo, int hi) {
int i = lo+1;
int j = hi;
while (i <= j) {
while (A[i] < A[lo]) {
i++;
if (i > hi) break;
}
while (A[j] > A[lo]) {
j--;
}
if (i <= j) {
swap(A, i, j);
i++;
j--;
}
}
swap(A, lo, j);
return j;
}

public static void swap(int[] A, int i, int j) {
int temp = A[j];
A[j] = A[i];
A[i] = temp;
}

```

## Saturday, January 3, 2015

### Python socksipy: SFTP with Paramiko via SOCKS proxy

I use Paramiko library to access SFTP servers in Python. Paramiko is easy to use, provides programmer with rich functionality, but it does not support proxy servers out of the box. There is a small library socksipy that can be easily integrated with Paramiko.

## Wednesday, July 16, 2014

### Kerberos Windows configuration for Java 7

After migrating to Java 7, our Java client application was unable to authenticate via Kerberos on Windows. If you have the same problem, the following configuration may help you solve it. There is a key allowtgtsessionkey in Windows registry that allows client application to decrypt session key of Kerberos Ticket Granting Ticket (TGT).