Thursday, October 22, 2015

How to search and replace in multiple files

In Mac OSX, recursively using sed, from foo into bar:

find . -type f -exec sed -i '' -e 's/foo/bar/g' {} \;

Wednesday, October 7, 2015

How to convert Japanese character set to UTF-8

Using iconv, try one of these below:

iconv -f SHIFT-JIS -t UTF-8 input_file.txt > output_file.txt

or

iconv -f ISO-2022-JP -t UTF-8 input_file.txt > output_file.txt


Tuesday, September 1, 2015

Saturday, November 29, 2014

Convert AVI to MP4 with ffmpeg

Use this command:

ffmpeg -i input_file.avi -c:v libx264 -preset slow -crf 22 -c:a libfaac -b:a 128k output_file.mp4

Monday, January 13, 2014

How to clean up svn repo from ._* (dot underscore) files on mac


This is how I do that:

$ find . -name ".svn" -prune -o -name "._*" -exec svn del {} \;
$ svn ci






Friday, April 12, 2013

How to setup svn repository

I use Linux Ubuntu 11.04, as root:

First, make sure you have svn installed or you can install it with command:
# apt-get install subversion
mine already installed version 1.6.12

Step 1, create svn repository directory:
# cd /your/repo
# svnadmin create dir

Step 2, edit server configuration:
# vi /your/repo/dir/conf/svnserve.conf
Edit/uncomment following:
anon-access = read
auth-access = write
and uncomment below:
password-db = passwd

Step 3, edit passwd file in the same directory
# vi /your/repo/dir/conf/passwd
edit:
[users]
user = password


Step 4, to run the svn server at boot (from init.d), you need to create a script:
# cd /etc/init.d
# vi mysvn
Then paste code below into the script:
#! /bin/sh
### BEGIN INIT INFO
# Provides:          svnserve
# Required-Start:    $local_fs $syslog $remote_fs
# Required-Stop:     $local_fs $syslog $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start svnserve
### END INIT INFO


# Author: Michal Wojciechowski <odyniec@odyniec.net>


PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="svnserve"
NAME=svnserve
DAEMON=/usr/bin/$NAME
DAEMON_ARGS="-d -r
/your/repo/dir"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

[ -x "$DAEMON" ] || exit 0

[ -r /etc/default/$NAME ] && . /etc/default/$NAME

. /lib/init/vars.sh

. /lib/lsb/init-functions

do_start()
{
   start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
      || return 1
   start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
      $DAEMON_ARGS \
      || return 2
}


do_stop()
{
   start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
   RETVAL="$?"
   [ "$RETVAL" = 2 ] && return 2
   start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
   [ "$?" = 2 ] && return 2
   rm -f $PIDFILE 
   return "$RETVAL"
}


case "$1" in
  start)
   [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
   do_start
   case "$?" in
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
   esac
   ;;
  stop)
   [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
   do_stop
   case "$?" in
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
   esac
   ;;  
  restart|force-reload)
   log_daemon_msg "Restarting $DESC" "$NAME"
   do_stop
   case "$?" in
     0|1)
      do_start
      case "$?" in
         0) log_end_msg 0 ;;
         1) log_end_msg 1 ;; # Old process is still running
         *) log_end_msg 1 ;; # Failed to start
      esac
      ;;
     *)
      # Failed to stop
      log_end_msg 1
      ;;
   esac
   ;;
  *)
   echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
   exit 3
   ;;
esac

exit 0


Step 5, make the script executable and starts on default runlevel:
# chmod +x mysvn
# update-rc.d mysvn defaults

Step 6, import your project into svn repository:
# svn import project_dir file:///your/repo/dir/project -m "First"

Done.

You can start working on your project by checking out:
$ svn co svn://user@hostname/project myworkingdir

Enjoy.

Thanks to Michal Wojciechowski for the boot script.

Sunday, March 24, 2013

Setup chroot jail for ssh / sftp in Ubuntu

Using Ubuntu 10.04.2 LTS.

Step by step:

Read here for more complete and original information (thanks for the script).

Or follow instruction below:

You must be root.

Get the script from the above link:
# cd /usr/local/sbin
# wget http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/make_chroot_jail.sh
# chmod 700 /usr/local/sbin/make_chroot_jail.sh


Edit the script (make_chroot_jail.sh):
# vi /usr/local/sbin/make_chroot_jail.sh
change first line, from:
#!/bin/sh
into:
#!/bin/bash
because it will be error if we use sh on Ubuntu 10.04.2 LTS.
Then add line after these below:
[...]
else
  APPS="/bin/bash /bin/cp /usr/bin/dircolors /bin/ls /bin/mkdir /bin/mv /bin/rm /bin/rmdir /bin/sh /bin/su /usr/bin/groups /usr/bin/id /usr/bin/rsync /usr/bin/ssh /usr/bin/scp /usr/sbin/unix_chkpwd"
fi


Add this line below, some program that we might want to add to the APPS variable:
APPS+=" /bin/cat /usr/bin/vi"
The /bin/cat is mandatory since .bashrc using it.

Create jail directory:
# mkdir /path/to/jail

Create will be jailed user account:
# adduser jailed_username

Run the script:
# make_chroot_jail.sh jailed_username /bin/bash /path/to/jail
Edit sshd_config:
# vi /etc/ssh/sshd_config
Change from:
Subsystem sftp /usr/lib/openssh/sftp-server
into:

Subsystem sftp internal-sftp 
And add these to the end of the file:
Match User jailed_username
   ChrootDirectory /path/to/jail
   AllowTCPForwarding no
   X11Forwarding no

Restart sshd:
# /etc/init.d/ssh restart

We need to edit /etc/passwd and change from:
jailed_username:x:1001:1001:,,,:/path/to/jail/home/jailed_username:/bin/bash
into:
jailed_username:x:1001:1001:,,,:/home/jailed_username:/bin/bash
because it will not see /path/to/jail anymore, but /

Finish.

Friday, November 25, 2011

Tuesday, March 1, 2011

How to run process in background then logout

In linux, if you want to run a process in the background without stopping when you logout then you can do it with this command:

# nohup [program_name] [arguments] &

Don't forget the ampersand.

Sunday, February 20, 2011

How to truncate video using command line

Here are two method, using ffmpeg and mencoder. Choose which one you want:

$ ffmpeg -vcodec copy -acodec copy -i [inputfile] -ss [start] -t [duration] [outputfile]

or

$ mencoder -ss [start] -endpos [duration] -oac copy -ovc copy [inputfile] -o [outputfile]

Friday, February 11, 2011

How to unix touch recursively

Since unix touch utility cannot operate recursively, so if you want to unix touch recursively:

# find . -exec touch {} \;

Wednesday, February 9, 2011

How to setup unoconv in Ubuntu Lucid

If you want to convert between any document format that OpenOffice understands especially for non-interactive conversion of documents.

You will need openoffice.org:
# apt-get install openoffice.org
# apt-get install openoffice.org-writer2latex

Install unoconv:
# apt-get install unoconv

Running unoconv:
# unoconv --listener &

Test:
# unoconv -f pdf myfile.ppt

Done.

Monday, February 7, 2011

How to set up tesseract-ocr from Google

You need the following library (Ubuntu):

# apt-get install libpng12-dev
# apt-get install libjpeg62-dev
# apt-get install libtiff4-dev
# apt-get install zlib1g-dev

Set up leptonica:

# wget http://www.leptonica.com/source/leptonlib-1.67.tar.gz
# tar xfz leptonlib-1.67.tar.gz
# cd leptonlib-1.67
# ./configure
# make
# make install

Setup tesseract-ocr (version 3.0):

# svn checkout http://tesseract-ocr.googlecode.com/svn/trunk/ tesseract
# cd tesseract
# ./configure
# make
# make install
# ldconfig -v

Testing tesseract-ocr:

# tesseract eurotext.tiff result

Check result:

# cat result.txt

Done.

How to set up or adding alias to network interface in Ubuntu

Edit /etc/network/interfaces:

# vi /etc/network/interfaces

Append text below:

auto eth0:1
iface eth0:1 inet static
address 192.168.1.7
netmask 255.255.255.0
broadcast 192.168.1.255
network 192.168.1.0

Restart networking:

# /etc/init.d/networking restart

Tuesday, February 1, 2011

How to resume broken download with .part file in Firefox

Here is how to resume broken download with .part file in Firefox:
  1. You must already have two files from the broken download. One is the filename and the other with extra .part extension. Move both of these files to other directory (please do not copy).
  2. Start download again from the beginning, but you have to make sure that it must have exactly the same name.
  3. Let it download for a few bytes just to have those files created again. Now pause this download.
  4. Go to the folder where you backed up those old files. Copy both of these files to your download folder and replace the new created files when asked.
  5. Now go to Firefox's Downloads and resume the download.
This solution come from this forum. Thanks to orion188.

Enjoy :)