Saturday, September 26, 2009

IMF voting power to be altered

Will the dollar dissappear from the world market?
-2501

Read http://www.nation.co.ke/business/news/-/1006/663824/-/ifvbs2z/-/
http://www.imf.org/external/np/exr/facts/sdr.htm

The SDR is an international reserve asset, created by the IMF in 1969 to supplement its member countries’ official reserves. Its value is based on a basket of four key international currencies, and SDRs can be exchanged for freely usable currencies. With a general SDR allocation taking effect on August 28 and a special allocation on September 9, 2009, the amount of SDRs will increase from SDR 21.4 billion to SDR 204.1 billion (currently equivalent to about $317 billion).

Saturday, September 19, 2009

Create your own certificates with TinyCA

This is a must have...!
-2501

--
TinyCA is a simple graphical userinterface written in Perl/Gtk to manage a small CA (Certification Authority). TinyCA works as a frontend for openssl

Features:

Currently TinyCA supports the following features:

  • Unlimited CAs possible
  • Support for creating and managing SubCAs
  • Creation and Revocation of x509 - S/MIME certificates
  • PKCS#10 Requests can be imported and signed
  • RSA and DSA keys can be generated and used
  • ServerCertificates
    • Certificates can be exported as: PEM, DER, TXT and PKCS#12
    • Certificates may be used with e.g. Apache, Postfix, OpenLDAP, Cyrus, FreeS/WAN, OpenVPN, OpenSWAN, FreeRadius
  • ClientCertificates
    • Certificates can be exported as: PEM, DER, TXT and PKCS#12
    • Certificates may be used with e.g. Netscape, Konqueror, Opera, Internet Explorer, Outlook (Express) and FreeS/WAN
  • Certificate Revocation List
    • CRLs can be exported as: PEM, DER and TXT
  • Language Support:
    • English
    • German
    • Czech (Thanks to Robert Wolf )
    • Swedish (Thanks to Daniel Nylander )
    • Spanish (Thanks to Ramon Pons Vivanco )
    • French (Thanks to Thibault Le Meur )

News - TinyCA2

A new generation of TinyCA based on the perl-Gtk2 bindings - TinyCA2.

Friday, September 18, 2009

Problems with wicd

"I had unhidden my SSID about 2 weeks ago (so I could use wicd easier). Worked fine until the update last night. After a reboot, the SSID showed up as hidden again..... Hmm. I found a couple of wicd's conf files and the SSID was listed as hidden there. I manually replaced with my SSID but to no avail (didn't think it would work anyway). So I powered down the laptop, and double checked my wireless router to make sure I'm broadcasting SSID and forced a reboot. Rebooted the laptop, and so far so good."
-from the Arch Forums

Thursday, September 17, 2009

Pyramids of China

Coordinates:

* 34°20'18"N, 108°34'12"E
* 34°23'53"N, 108°42'46"E
* 34°21'42"N, 108°38'27"E

Tuesday, September 15, 2009

Books by Castaneda

1 The Teachings of Don Juan
2 A Separate Reality
3 Journey to Ixtlan
4 Tales of Power
5 The Second Ring of Power
6 The Eagle Gift
7 The Fire from Within
8 The Power of Silence
9 The Active Side of Infinity

Monday, September 14, 2009

Castaneda :: Point of No Return

Point of No Return = state of awareness where are no links to the past or any kind of attachment to the material world. A decision has been made and there is no way to go back. Whatever the objective is, it gets done.

Personaly, I went through a period like this in my life. I basically hit the wall and found myself
trapped for a second. But mysteriously and almost impossible to explain, I realized that I did not want to go back "home". I saw ghosts and they did not have a meaning for me. I kept walking forward and felt a very strong "pull" in my chest. Maybe it was the assemblage point but I felt free. My whole changed and I haven't looked back since then.

I went to my new home and fell asleep for a long time.

After my experience, I remembered Castaneda's books and realized that he was right on this. I continue looking for answers and for ways to save my energy in order to get ready to travel into the unknown. I know Death is always on my left shoulder waiting to show its existence but I am ready to fight back. It won't be easy.

-2501

Sunday, September 13, 2009

The Hidden Records / The Lost Symbol by Dan Brown

It seems that Wayne Herschel knew about this plot a loooooooonnnnnngggg time ago. I wonder
how secret societies are feeling about this. Maybe it means nothing right now for them since they are other mysteries to discover.



Four mysteries

In my opinion, these are the 4 mysteries explained to Judas by Christ. Judas was the most special of the disciples and got access to the mysteries.

1 A different human race in Orion.
2 Extraterrestrial DNA (ie Re-construction)
3 Pyramids in Mars
4 Atom/Nuclear technology (Ark of the Covenant)

Friday, September 11, 2009

Secret dimensions

from: CERN

In everyday life, we inhabit a space of three dimensions – a vast ‘cupboard’ with height, width and depth, well known for centuries. Less obviously, we can consider time as an additional, fourth dimension, as Einstein famously revealed. But just as we are becoming more used to the idea of four dimensions, some theorists have made predictions wilder than even Einstein had imagined.

String theory intriguingly suggests that six more dimensions exist, but are somehow hidden from our senses. They could be all around us, but curled up to be so tiny that we have never realized their existence.

Beyond the third dimension

Some string theorists have taken this idea further to explain a mystery of gravity that has perplexed physicists for some time – why is gravity so much weaker than the other fundamental forces? Does its carrier, the graviton, exist and where? The idea is that we do not feel gravity’s full effect in the everyday world. Gravity may appear weak only because its force is being shared with other spatial dimensions.

To find out whether these ideas are just products of wild imaginations or an incredible leap in understanding will require experimental evidence. But how?

High-energy experiments could prise open the inconspicuous dimensions just enough to allow particles to move between the normal 3D world and other dimensions. This could be manifest in the sudden disappearance of a particle into a hidden dimension, or the unexpected appearance of a particle in an experiment. Who knows where such a discovery could lead!

Dark secrets of the Universe

Dark secrets of the Universe

from: CERN

It’s perhaps natural that we don’t know much about how the Universe was created – after all, we were never there ourselves. But it’s surprising to realise that when it comes to the Universe today, we don’t necessarily have a much better knowledge of what is out there. In fact, astronomers and physicists have found that all we see in the Universe – planets, stars, galaxies – accounts for only a tiny 4% of it! In a way, it is not so much the visible things that define the Universe, but rather the void around them.

Cosmological and astrophysical observations indicate that most of the Universe is made up of invisible substances that do not emit electromagnetic radiation – that is, we cannot detect them directly through telescopes or similar instruments. We detect them only through their gravitational effects, which makes them very difficult to study. These mysterious substances are known as ‘dark matter’ and ‘dark energy’. What they are and what role they played in the evolution of the Universe are a mystery, but within this darkness lie intriguing possibilities of hitherto undiscovered physics beyond the established Standard Model.

Dark matter

Dark matter makes up about 26% of the Universe. The first hint of its existence came in 1933, when astronomical observations and calculations of gravitational effects revealed that there must be more 'stuff' present in the Universe than telescopes could see.

Researchers now believe that the gravitational effect of dark matter makes galaxies spin faster than expected, and that its gravitational field deviates the light of objects behind it. Measurements of these effects show that dark matter exists, and they can be used to estimate the density of dark matter even though we cannot directly observe it.

But what is dark matter? One idea is that it could contain ‘supersymmetric particles’ - hypothesized particles that are partners to those already known in the Standard Model. Experiments at the Large Hadron Collider may be able to find them.

Dark energy

Dark energy makes up approximately 70% of the Universe and appears to be associated with the vacuum in space. It is homogenously distributed throughout the Universe, not only in space but also in time - in other words, its effect is not diluted as the Universe expands.

The even distribution means that dark energy does not have any local gravitational effects, but rather a global effect on the Universe as a whole. This leads to a repulsive force, which tends to accelerate the expansion of the Universe. The rate of expansion and its acceleration can be measured by observations based on the Hubble law. These measurements, together with other scientific data, have confirmed the existence of dark energy and provide an estimate of just how much of this mysterious substance exists.

Tuesday, September 08, 2009

The 7 Rules Of The Illicit Economy

The seven rules of the illicit global economy :

  1. Perfectly legitimate forms of demand can produce perfectly deviant forms of supply.
  2. Uneven global regulatory structures create arbitrage opportunities for deviant entrepreneurs.
  3. Pathways for legitimate globalization are always also pathways for deviant globalization.
  4. Once a deviant industry professionalizes, crackdowns merely promote innovation.
  5. States themselves undermine the distinction between legitimate and deviant economics.
  6. Unchecked, deviant entrepreneurs will overtake the legitimate economy.
  7. Deviant globalization presents an existential challenge to state legitimacy.

Sunday, September 06, 2009

Castaneda Lessons

The Spirit does not accept volunteers.

A man of knowledge lives by acting, not by thinking about acting.

On the Path of Knowledge there are four natural enemies: fear, clarity, power and old age.

When the Knock of the Spirit sounds we follow or perish.
A path without a heart is never enjoyable. On the other hand, a path with heart is easy— it does not make a warrior work at liking it; it makes for a joyful journey; as long as a man follows it, he is one with it.

A rule of thumb for a warrior is that he makes his decisions so carefully that nothing that may happen as a result of them can surprise him, much less drain his power.

A warrior acts as if he knows what he is doing, when in effect he knows nothing.

A warrior chooses a path with heart, any path with heart, and follows it; and then he rejoices and laughs. He knows because he sees that his life will be over altogether too soon. He sees that nothing is more important than anything else.

A warrior considers himself already dead, so there is nothing to lose. The worst has already happened to him, therefore he’s clear and calm; judging him by his acts or by his words, one would never suspect that he has witnessed everything.

A warrior doesn’t know remorse for anything he has done, because to isolate one’s acts as being mean, or ugly, or evil is to place an unwarranted importance on the self.

A warrior is a hunter. He calculates everything. That’s control. Once his calculations are over, he acts. He lets go. That’s abandon. A warrior is not a leaf at the mercy of the wind. No one can push him; no one can make him do things against himself or against his better judgment. A warrior is tuned to survive, and he survives in the best of all possible fashions.

A warrior lives by acting, not by thinking about acting, nor by thinking about what he will think when he has finished acting.

A warrior must cultivate the feeling that he has everything needed for the extravagant journey that is his life. What counts for a warrior is being alive. Life in itself is sufficient, self-explanatory and complete. Therefore, one may say without being presumptuous that the experience of experiences is being alive.

A warrior must learn to make every act count, since he is going to be here in this world for only a short while, in fact, too short for witnessing all the marvels of it.

A warrior is never concerned about his fear.

A warrior seeks to act rather than talk.

A warrior takes responsibility for his acts, for the most trivial of acts. An average man acts out his thoughts, and never takes responsibility for what he does.

A warrior takes responsibility for his acts; for the most trivial of his acts. He waits patiently, knowing that he is waiting, and knowing what he is waiting for. That is the warrior's way.

A warrior thinks of death when things become unclear. The idea of death is the only thing that tempers our spirit.

A warrior-hunter knows that his death is waiting, and the very act he is performing now may well be his last battle on earth. He calls it a battle because it is a struggle. Most people move from act to act without any struggle or thought. A warrior-hunter, on the contrary, assesses every act; and since he has intimate knowledge of his death, he proceeds judiciously, as if every act were his last battle. Only a fool would fail to notice the advantage a warrior-hunter has over his fellow men. A warrior-hunter gives his last battle its due respect. It’s only natural that his last act on earth should be the best of himself. It’s pleasurable that way. It dulls the edge of his fright.
An average man is too concerned with liking people or with being liked himself. A warrior likes, that’s all. He likes whatever or whomever he wants, for the hell of it.

Anything is one of a million paths. Therefore, a warrior must always keep in mind that a path is only a path; if he feels that he should not follow it, he must not stay with it under any conditions. His decision to keep on that path or to leave it must be free of fear or ambition. He must look at every path closely and deliberately. There is a question that a warrior has to ask: 'Does this path have a heart?'

Death is our eternal companion. It is always to our left, an arm’s length behind us. Death is the only wise adviser that a warrior has. Whenever he feels that everything is going wrong and he’s about to be annihilated, he can turn to his death and ask if that is so. His death will tell him that he is wrong, that nothing really matters outside its touch. His death will tell him, ‘I haven’t touched you yet.’

Do you know at this very moment you are surrounded by eternity? And do you know that you can use that eternity if you so desire?

Feeling important makes one heavy, clumsy and vain. To be a warrior one needs to be light and fluid.
For a warrior, to be inaccessible means that he touches the world around him sparingly. And above all, he deliberately avoids exhausting himself and others. He doesn’t use and squeeze people until they have shriveled to nothing, especially the people he loves.

If a warrior is to succeed at anything, the success must come gently, with a great deal of effort but with no stress or obsession.

If his spirit is distorted he should simply fix it—purge it, make it perfect—because there is no other task in our entire lives which is more worthwhile…To seek the perfection of the warrior’s spirit is the only task worthy of our temporariness, our humanity.

Impeccability is nothing else but the proper use of energy.

Inner silence works from the moment you begin to accrue it. What the old sorcerers were after was the final dramatic end result of reaching that individual threshold of silence. Some very talented practitioners need only a few minutes of silence to reach that coveted goal. Others, less talented, need long periods of silence, perhaps more than one hour of quietude,before they reach the desired result. The desired result is what the old sorcerers called "stopping the world", the moment when everything around us ceases to be what it's always been. This is the moment when sorcerers return to the TRUE nature of man. The old sorcerers always called it "total freedom"

Intent is not a thought, or an object, or a wish. Intent is what can make a man succeed when his thoughts tell him that he is defeated. It operates in spite of the warrior’s indulgence. Intent is what makes him invulnerable. Intent is what sends a shaman through a wall, through space, to infinity.

It doesn’t matter how one was brought up. What determines the way one does anything is personal power.

Look at every path closely and deliberately, then ask ourselves this crucial question: Does this path have a heart? If it does, then the path is good. If it doesn't, it is of no use.

No person is important enough to make me angry.

Nothing in this world is a gift. Whatever must be learned must be learned the hard way.

Once a man worries, he clings to anything out of desperation; and once he clings he is bound to get exhausted or to exhaust whomever or whatever he is clinging to. A warrior-hunter, on the other hand, knows he will lure game into his traps over and over again, so he doesn’t worry.

Only as a warrior can one withstand the path of knowledge. A warrior cannot complain or regret anything. His life is an endless challenge, and challenges cannot possibly be good or bad. Challenges are simply challenges.

Only the idea of death makes a warrior sufficiently detached so that he is capable of abandoning himself to anything.

He knows his death is stalking him and won’t give him time to cling to anything so he tries, without craving, all of everything.

Personal history must be constantly renewed by telling parents, relatives, and friends everything one does. On the other hand, for the warrior who has no personal history, no explanations are needed; nobody is angry or disillusioned with his acts. And above all, no one pins him down with their thoughts and their expectations.

The basic difference between an ordinary man and a warrior is that a warrior takes everything as a challenge, while an ordinary man takes everything as a blessing or a curse.

The hardest thing in the world is to assume the mood of a warrior. It is of no use to be sad and complain and feel justified in doing so, believing that someone is always doing something to us. Nobody is doing anything to anybody, much less to a warrior.

The humbleness of a warrior is not the humbleness of the beggar. The warrior lowers his head to no one, but at the same time, he doesn’t permit anyone to lower his head to him. The beggar, on the other hand, falls to his knees at the drop of a hat and scrapes the floor for anyone he deems to be higher; but at the same time, he demands that someone lower than him scrape the floor for him.

The internal dialogue is what grounds people in the daily world. The world is such and such or so and so, only because we talk to ourselves about its being such and such and so and so. The passageway into the world of shamans opens up after the warrior has learned to shut off his internal dialogue.

The most effective way to live is as a warrior. A warrior may worry and think before making any decision, but once he makes it, he goes his way, free from worries or thoughts; there will be a million other decisions still awaiting him. That’s the warrior’s way.

The self-confidence of the warrior is not the self-confidence of the average man. The average man seeks certainty in the eyes of the onlooker and calls that self-confidence. The warrior seeks impeccability in his own eyes and calls that humbleness. The average man is hooked to his fellow men, while the warrior is hooked only to infinity.

The spirit of a warrior is not geared to indulging and complaining, nor is it geared to winning or losing. The spirit of a warrior is geared only to struggle, and every struggle is a warrior’s last battle on earth. Thus the outcome matters very little to him. In his last battle on earth a warrior lets his spirit flow free and clear. And as he wages his battle, knowing that his intent is impeccable, a warrior laughs and laughs.

The trick is in what one emphasizes. We either make ourselves miserable, or we make ourselves strong. The amount of work is the same.

The warrior: silent in his struggle, undetainable because he has nothing to lose, functional and efficacious because he has everything to gain.

The world is incomprehensible. We won’t ever understand it; we won’t ever unravel its secrets. Thus we must treat the world as it is: a sheer mystery.

There are lots of things a warrior can do at a certain time which he couldn’t do years before. Those things themselves did not change; what changed was his idea of himself.

There is a flaw with words, they always force us to feel enlightened, but when we turn around to face the world they always fail us and we end up facing the world as we always have, without enlightenment
There’s no emptiness in the life of a warrior. Everything is filled to the brim.

To achieve the mood of a warrior is not a simple matter. It is a revolution. To regard the lion and the water rats and our fellow men as equals is a magnificent act of a warrior's spirit. It takes power to do that.

To be a warrior is not a simple matter of wishing to be one. It is rather an endless struggle that will go on to the very last moment of our lives. Nobody is born a warrior, in exactly the same way that nobody is born an average man. We make ourselves into one or the other.

To seek freedom is the only driving force I know. Freedom to fly off into that infinity out there. Freedom to dissolve; to lift off; to be like the flame of a candle, which, in spite of being up against the light of a billion stars, remains intact, because it never pretended to be more than what it is: a mere candle.

Warriors do not win victories by beating their heads against walls, but by overtaking the walls. Warriors jump over walls; they don’t demolish them.

We hardly ever realize that we can cut anything out of our lives, anytime, in the blink of an eye.

We talk to ourselves incessantly about our world. In fact we maintain our world with our internal talk. And whenever we finish talking to ourselves about ourselves and our world, the world is always as it should be. We renew it, we rekindle it with life, we uphold it with our internal talk. Not only that, but we also choose our paths as we talk to ourselves. Thus we repeat the same choices over and over until the day we die, because we keep on repeating the same internal talk over and over until the day we die. A warrior is aware of this and strives to stop his internal talk.

When a man has fulfilled all four of these requisites— to be wide awake, to have fear, respect, and absolute assurance— there are no mistakes for which he will have to account; under such conditions his actions lose the blundering quality of the acts of a fool. If such a man fails, or suffers a defeat, he will have lost only a battle, and there will be no pitiful regrets over that.

When a warrior learns to stop the internal dialogue, everything becomes possible; the most far-fetched schemes become attainable.

Whenever a warrior decides to do something, he must go all the way, but he must take responsibility for what he does.

No matter what he does, he must know first why he is doing it, and then he must proceed with his actions without having doubts or remorse about them.

An immortal being has all the time in the world for doubts and bewilderment and fears. A warrior, on the other hand, cannot…because he knows for a fact that the totality of himself has but a little time on this earth.

The things that people do cannot under any conditions be more important than the world.

Saturday, September 05, 2009

Arch :: my rc.local

#!/bin/bash
#
# /etc/rc.local: Local multi-user startup script.
#
#
/etc/rc.d/rc.firewall
#

# no spoofing
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $f
done

Arch :: rc.firewall v2

#!/bin/sh

firewall_start() {
iptables -F
iptables -t nat -F
iptables -t mangle -F

# Setting default policies
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

# Basic Firewall
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow SSH
iptables -A INPUT -i eth+ -p tcp -m tcp --dport 22 -j ACCEPT

# (link 3) throw everything else away
iptables -A INPUT -j DROP

# Allow myself to be a non-passive FTP client
iptables -A INPUT -p tcp --dport ftp-data --jump ACCEPT

# No Telnet!
iptables -A OUTPUT -p tcp --dport telnet --jump REJECT

# Otherwise, drop inbound TCP packets with ICMP messages
iptables -A INPUT -p tcp --jump REJECT
iptables -A INPUT -p udp --jump REJECT

# Report what happened
echo 'Firewall rules installed:'
iptables -L

}


> then run

/etc/rc.d/rc.firewall >> /etc/rc.local

Arch :: Pyburn

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import sys, os, signal, re
import pygtk
pygtk.require('2.0')
import gtk, gobject
import ConfigParser, tempfile
from subprocess import *

#
# TODO:
# - needs error checking everywhere
#

# CONFIG
TEMP_DIR = "/var/tmp"
CDRW_DEV = "/dev/cdrw"
DUMMY_MODE = False

# IF you want to manually set the speed of your burner, use this
#os.environ["CDR_SPEED"]="6"

class Burn:
# burn modes
MODE_DATA = 1
MODE_AUDIO = 2
MODE_ISO = 3
MODE_ERASE = 4
# our working directory
tempdir = None
# sub processes
p1, p2 = None, None
int_watch, ext_watch = None, None
# function to use to report errors
errfunc = None

def __init__(self, mode, files, callback, errfunc):
self.mode = mode
self.files = files
self.callback = callback
self.errfunc = errfunc

def start(self):
self.tempdir = tempfile.mkdtemp(dir=TEMP_DIR, prefix="pyburn-")
if self.mode == Burn.MODE_DATA:
self.prepare_data()
if self.mode == Burn.MODE_AUDIO:
self.filenum = 1
self.prepare_audio()
if self.mode == Burn.MODE_ISO:
self.burn_iso()
if self.mode == Burn.MODE_ERASE:
self.erase_disc()

def cancel(self):
if self.ext_watch:
gobject.source_remove(self.ext_watch)
self.ext_watch = None
if self.int_watch:
gobject.source_remove(self.int_watch)
self.int_watch = None
if self.p1 and self.p1.returncode == None:
os.kill(self.p1.pid, signal.SIGTERM)
self.p1.wait()
if self.p2 and self.p2.returncode == None:
os.kill(self.p2.pid, signal.SIGTERM)
self.p2.wait()
self.cleanup()

def cleanup(self):
if self.tempdir:
# remove all our temp files
for root, dirs, files in os.walk(self.tempdir, topdown=False):
for name in files:
os.remove(os.path.join(root, name))
for name in dirs:
# might be a symlink -- if so, treat it like a file, not a dir
if os.path.islink(os.path.join(root, name)):
os.remove(os.path.join(root, name))
else:
os.rmdir(os.path.join(root, name))
os.rmdir(self.tempdir)

def get_output(self):
if self.p2:
return self.p2.stdout.read(1)
elif self.p1:
return self.p1.stdout.read(1)
return None

def prepare_data(self):
for src in self.files:
dst = self.tempdir + "/" + src.split("/")[-1]
os.symlink(src, dst)
self.burn_data()

def burn_data(self):
# Pipe mkisofs into cdrecord
cmd1 = ["mkisofs", "-J", "-r", "-follow-links", self.tempdir]
dev = "dev=%s" % (CDRW_DEV)
if DUMMY_MODE:
cmd2 = ["cdrecord", "-v", "-eject", "-dummy", "driveropts=burnfree", dev, "-data", "-"]
else:
cmd2 = ["cdrecord", "-v", "-eject", "driveropts=burnfree", dev, "-data", "-"]
print "cmd1: %s" % (cmd1)
print "cmd2: %s" % (cmd2)
self.p1 = Popen(cmd1, stdout=PIPE)
self.p2 = Popen(cmd2, stdin=self.p1.stdout, stdout=PIPE, stderr=STDOUT)
self.ext_watch = gobject.io_add_watch(self.p2.stdout, gobject.IO_IN | gobject.IO_HUP, self.callback)

def burn_iso(self):
# we should only have one file in the list
isofn = self.files[0]
dev = "dev=%s" % (CDRW_DEV)
if DUMMY_MODE:
cmd = ["cdrecord", "-v", "-eject", "-dummy", "driveropts=burnfree", dev, "-data", isofn]
else:
cmd = ["cdrecord", "-v", "-eject", "driveropts=burnfree", dev, "-data", isofn]
print "cmd: %s" % (cmd)
self.p1 = Popen(cmd, stdout=PIPE, stderr=STDOUT)
self.ext_watch = gobject.io_add_watch(self.p1.stdout, gobject.IO_IN | gobject.IO_HUP, self.callback)

def erase_disc(self):
dev = "dev=%s" % (CDRW_DEV)
if DUMMY_MODE:
cmd = ["cdrecord", "-v", "-eject", "-dummy", "driveropts=burnfree", dev, "blank=fast"]
else:
cmd = ["cdrecord", "-v", "-eject", "driveropts=burnfree", dev, "blank=fast"]
print "cmd: %s" % (cmd)
self.p1 = Popen(cmd, stdout=PIPE, stderr=STDOUT)
self.ext_watch = gobject.io_add_watch(self.p1.stdout, gobject.IO_IN | gobject.IO_HUP, self.callback)

def prepare_audio(self):
fn = self.files[self.filenum-1]
wavfn = "%s/%d.wav" % (self.tempdir, self.filenum)
if fn.endswith(".wav") or fn.endswith(".WAV"):
# a symlink should suffice
cmd = ["ln", "-s", fn, wavfn]
elif fn.endswith(".mp3") or fn.endswith(".MP3"):
cmd = ["mpg123", "-w", wavfn, fn]
elif fn.endswith(".ogg") or fn.endswith(".OGG"):
cmd = ["oggdec", "-o", wavfn, fn]
else:
self.errfunc("Unrecognized file extension: %s" % (fn))
return
print "cmd: %s" % (cmd)
self.p1 = Popen(cmd, stdout=PIPE, stderr=STDOUT)
self.ext_watch = gobject.io_add_watch(self.p1.stdout, gobject.IO_IN, self.callback)
# additional callback, so we know when the decode process is finished
self.int_watch = gobject.io_add_watch(self.p1.stdout, gobject.IO_HUP, self.pcallback)

def burn_audio(self):
dev = "dev=%s" % (CDRW_DEV)
if DUMMY_MODE:
cmd = ["cdrecord", "-v", "-eject", "-dummy", "driveropts=burnfree", dev, "-pad", "-audio"]
else:
cmd = ["cdrecord", "-v", "-eject", "driveropts=burnfree", dev, "-pad", "-audio"]
for i in range(1,len(self.files)+1):
fn = "%s/%d.wav" % (self.tempdir, i)
cmd.append(fn)
print "cmd: %s" % (cmd)
self.p1 = Popen(cmd, stdout=PIPE, stderr=STDOUT)
gobject.io_add_watch(self.p1.stdout, gobject.IO_IN | gobject.IO_HUP, self.callback)

def pcallback(self, source, condition):
# remove the other io watch callback
gobject.source_remove(self.ext_watch)
self.ext_watch = None
# if there's a zombie kicking around, wait 'em out
if self.p1:
self.p1.wait()
if self.filenum == len(self.files):
# finished decoding, start the cdrecord process
self.burn_audio()
else:
# decode the next file
self.filenum = self.filenum + 1
self.prepare_audio()
return False


class PyBurn:
def __init__(self):
# Initialization
self.burndlg = None
# Main window
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect("destroy", gtk.main_quit, "WM destroy")
self.window.set_title("PyBurn 0.1")

#
# Menu bar
#
menubar = gtk.MenuBar()
# File Menu
file_menu = gtk.Menu()
file = gtk.MenuItem("_File")
file.set_submenu(file_menu)
menubar.append(file)
# Help Menu
help_menu = gtk.Menu()
help = gtk.MenuItem("_Help")
help.set_submenu(help_menu)
menubar.append(help)

menuit = gtk.MenuItem("_About...")
menuit.connect_object("activate", self.menu_callback, "about")
help_menu.append(menuit)
menuit = gtk.MenuItem("_Load Playlist...")
menuit.connect_object("activate", self.menu_callback, "loadplaylist")
file_menu.append(menuit)
menuit = gtk.MenuItem("_Blank CD-RW...")
menuit.connect_object("activate", self.menu_callback, "erasedisc")
file_menu.append(menuit)
menuit = gtk.MenuItem("Burn _ISO Image...")
menuit.connect_object("activate", self.menu_callback, "burniso")
file_menu.append(menuit)
menuit = gtk.MenuItem("_Quit")
menuit.connect_object("activate", gtk.main_quit, "WM destroy")
file_menu.append(menuit)

#
# Radio Buttons
#
label1 = gtk.Label("Burn Mode:")
self.mode_audio = gtk.RadioButton(None, "Audio", False)
self.mode_data = gtk.RadioButton(self.mode_audio, "Data", False)

#
# File list
#
self.flist = gtk.ListStore(gobject.TYPE_STRING)
self.ftree = gtk.TreeView(self.flist)
self.ftree.set_reorderable(True)
fcol = gtk.TreeViewColumn('Files to Burn:')
self.ftree.append_column(fcol)
cell = gtk.CellRendererText()
fcol.pack_start(cell, True)
fcol.add_attribute(cell, 'text', 0)

#
# Buttons
#
# Helper function to add buttons
def new_button(icon, label, callbackstr):
btn = gtk.Button(label=None)
hbox = gtk.HBox(False, 0)
btn.add(hbox)
s = gtk.Style()
icon = s.lookup_icon_set(icon).render_icon(
s, gtk.TEXT_DIR_LTR, gtk.STATE_NORMAL, gtk.ICON_SIZE_BUTTON,
hbox, None)
img = gtk.Image()
img.set_from_pixbuf(icon)
hbox.add(img)
label = gtk.Label(label)
label.set_use_underline(True)
hbox.add(label)
btn.connect("clicked", self.button_callback, callbackstr)
return btn
# The Add/Add/Remove buttons
btn_add = new_button(gtk.STOCK_FILE, "Add _Files", "addfiles")
btn_adddir = new_button(gtk.STOCK_DIRECTORY, "Add _Directory", "adddirs")
btn_del = new_button(gtk.STOCK_REMOVE, "_Remove", "removefiles")
# The "Start Burn" button
btn_burn = new_button(gtk.STOCK_MEDIA_RECORD, "_Start Burn", "burncd")

# Assemble the main window and all its components
vbox = gtk.VBox(False, 0)
vbox.set_border_width(1)
self.window.add(vbox)

hbox = gtk.HBox(False, 0)
hbox.set_border_width(1)

scrollwin = gtk.ScrolledWindow()
scrollwin.add(self.ftree)

btnbox = gtk.HBox(False, 0)
btnbox_l = gtk.HButtonBox()
btnbox_l.set_spacing(5)
btnbox_l.pack_start(btn_add, False, True, 0)
btnbox_l.pack_start(btn_adddir, False, True, 0)
btnbox_l.pack_start(btn_del, False, True, 0)
btnbox_r = gtk.HButtonBox()
btnbox_r.set_spacing(5)
btnbox_r.pack_start(btn_burn, False, True, 0)
btnbox_r.set_layout(gtk.BUTTONBOX_END)

# Main VBox
vbox.pack_start(menubar, False, True, 0)
vbox.pack_start(hbox, False, True, 0)
vbox.pack_start(scrollwin, True, True, 0)
vbox.pack_start(btnbox, False, True, 0)
# Radio Button HBox
hbox.pack_end(self.mode_data, False, True, 0)
hbox.pack_end(self.mode_audio, False, True, 0)
hbox.pack_end(label1, False, True, 0)
# Button HBox
btnbox.pack_start(btnbox_l, False, True, 0)
btnbox.pack_start(btnbox_r, True, True, 0)

# Drag n' Drop
self.ftree.enable_model_drag_dest([
('MY_TREE_MODEL_ROW', gtk.TARGET_SAME_WIDGET, 0),
('text/plain', 0, 1), ('TEXT', 0, 2), ('STRING', 0, 3)],
gtk.gdk.ACTION_DEFAULT)
self.ftree.enable_model_drag_source(gtk.gdk.BUTTON1_MASK,
[('MY_TREE_MODEL_ROW', gtk.TARGET_SAME_WIDGET, 0)], gtk.gdk.ACTION_MOVE)
self.ftree.connect("drag_data_get", self.dnd_get_data)
self.ftree.connect("drag_data_received", self.dnd_received_data)

# and.... show it!
self.window.set_default_size(640, 350)
self.window.show_all()

def show_burn_dialog(self):
self.burndlg = gtk.Dialog("Burn Progress", self.window, gtk.DIALOG_MODAL)
self.burnbtn1 = self.burndlg.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT)
self.burnbtn1.connect("clicked", self.button_callback, "cancelburn")
self.burnbtn2 = self.burndlg.add_button(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)
self.burnbtn2.connect("clicked", self.button_callback, "closeburn")

self.buffer = gtk.TextBuffer()
scrollwin = gtk.ScrolledWindow()
self.outputw = gtk.TextView(self.buffer)
self.outputw.set_editable(False)
self.outputw.set_cursor_visible(False)
self.outputw.set_wrap_mode(gtk.WRAP_NONE)

# set a mark for auto-scrolling
self.buffer.create_mark("tail", self.buffer.get_end_iter(), False)

scrollwin.add(self.outputw)
self.burndlg.vbox.pack_start(scrollwin, True, True, 0)
scrollwin.show()
self.outputw.show()
self.burndlg.set_default_size(600, 300)
self.burndlg.vbox.show_all()
self.burnbtn1.show()
self.burnbtn2.hide()
self.burndlg.show()

def button_callback(self, widget, data):
if data == "adddirs":
chooser = gtk.FileChooserDialog(title="Select a Directory",action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK))
chooser.set_select_multiple(True)

response = chooser.run()
if response == gtk.RESPONSE_OK:
for fn in chooser.get_filenames():
self.flist.append((fn,))
chooser.destroy()

if data == "addfiles":
chooser = gtk.FileChooserDialog(title="Select a File",action=gtk.FILE_CHOOSER_ACTION_OPEN,
buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK))
chooser.set_select_multiple(True)

filter = gtk.FileFilter()
filter.set_name("All files")
filter.add_pattern("*")
chooser.add_filter(filter)

filter = gtk.FileFilter()
filter.set_name("Music files (*.mp3,*.ogg,*.wav)")
filter.add_pattern("*.mp3")
filter.add_pattern("*.ogg")
filter.add_pattern("*.wav")
chooser.add_filter(filter)

response = chooser.run()
if response == gtk.RESPONSE_OK:
for fn in chooser.get_filenames():
self.flist.append((fn,))
chooser.destroy()

if data == "removefiles":
sel = self.ftree.get_selection()
model, iter = sel.get_selected()
if iter:
model.remove(iter)

if data == "burncd":
filelist = [i[0].strip() for i in self.ftree.get_model()]
if len(filelist) == 0:
self.error("Add some files first!")
return
if self.mode_audio.get_active():
mode = Burn.MODE_AUDIO
else:
mode = Burn.MODE_DATA
self.burn = Burn(mode, filelist, self.burn_callback, self.error)
# Start the burn process
self.show_burn_dialog()
self.burn.start()

if data == "cancelburn":
self.burn.cancel()
self.burndlg.destroy()

if data == "closeburn":
self.burndlg.destroy()

def burn_callback(self, source, condition):
if condition == gobject.IO_IN:
self.buffer.insert_at_cursor(self.burn.get_output())
# scroll down to the last line in the text window
self.buffer.move_mark_by_name("tail", self.buffer.get_end_iter())
self.outputw.scroll_mark_onscreen(self.buffer.get_mark("tail"))
return True
if condition == gobject.IO_HUP:
self.burn.cancel()
self.burnbtn1.hide()
self.burnbtn2.show()
self.burndlg.set_title("Burn Finished")
self.buffer.insert_at_cursor("\nBURN FINISHED.\n")
# scroll down to the last line in the text window
self.buffer.move_mark_by_name("tail", self.buffer.get_end_iter())
self.outputw.scroll_mark_onscreen(self.buffer.get_mark("tail"))
return False

def dnd_received_data(self, treeview, context, x, y, selection,
info, etime):
model = treeview.get_model()
data = selection.data.strip(chr(0)).strip("\r\n")
for fn in data.split("\r\n"):
if fn.startswith("file:"):
# trim off the "file:" prefix
fn = fn[5:]
# trim out consecutive slashes
fn = re.sub("//+", "/", fn)
drop_info = treeview.get_dest_row_at_pos(x, y)
if drop_info:
path, position = drop_info
iter = model.get_iter(path)
if (position == gtk.TREE_VIEW_DROP_BEFORE
or position == gtk.TREE_VIEW_DROP_INTO_OR_BEFORE):
model.insert_before(iter, [fn])
else:
model.insert_after(iter, [fn])
else:
model.append([fn])
if context.action == gtk.gdk.ACTION_MOVE:
context.finish(True, True, etime)

def dnd_get_data(self, treeview, context, selection, target_id, etime):
treeselection = treeview.get_selection()
model, iter = treeselection.get_selected()
data = model.get_value(iter, 0)
selection.set(selection.target, 8, data)
model.remove(iter)

def menu_callback(self, data):
if data == "about":
dlg = gtk.AboutDialog()
dlg.set_name("PyBurn")
dlg.set_comments("A frontend application for burning CDs with the cdrecord utility")
dlg.set_version("0.1")
dlg.set_copyright(u"Copyright ©2005 Judd Vinet")
dlg.set_license("""Copyright (C)2005 Judd Vinet

This is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

This software is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with program; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA.""")
dlg.run()
dlg.destroy()

if data == "erasedisc":
msgdlg = gtk.MessageDialog(self.window, gtk.DIALOG_MODAL,
gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO, "Are you sure?")
response = msgdlg.run()
msgdlg.destroy()
if response != gtk.RESPONSE_YES:
return

self.burn = Burn(Burn.MODE_ERASE, [], self.burn_callback, self.error)
self.show_burn_dialog()
self.burn.start()

if data == "burniso":
chooser = gtk.FileChooserDialog(title="Select an ISO Image",action=gtk.FILE_CHOOSER_ACTION_OPEN,
buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK))

filter = gtk.FileFilter()
filter.set_name("ISO images (*.iso)")
filter.add_pattern("*.iso")
chooser.add_filter(filter)
filter = gtk.FileFilter()
filter.set_name("All files")
filter.add_pattern("*")
chooser.add_filter(filter)

response = chooser.run()
if response != gtk.RESPONSE_OK:
chooser.destroy()
return
isofn = chooser.get_filename()
chooser.destroy()

self.burn = Burn(Burn.MODE_ISO, [isofn], self.burn_callback, self.error)
# Start the burn process
self.show_burn_dialog()
self.burn.start()

if data == "loadplaylist":
chooser = gtk.FileChooserDialog(title="Select a Playlist File",action=gtk.FILE_CHOOSER_ACTION_OPEN,
buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK))

filter = gtk.FileFilter()
filter.set_name("pls files (*.pls)")
filter.add_pattern("*.pls")
chooser.add_filter(filter)
filter = gtk.FileFilter()
filter.set_name("plain-text file list (*.lst)")
filter.add_pattern("*.lst")
chooser.add_filter(filter)
filter = gtk.FileFilter()
filter.set_name("All files")
filter.add_pattern("*")
chooser.add_filter(filter)

response = chooser.run()
if response != gtk.RESPONSE_OK:
chooser.destroy()
return
plsfn = chooser.get_filename()
chooser.destroy()

# try to figure out what type of list we have...
# default to a plain-text list of files, but use the INI parser if
# the file starts with "[playlist]"
pls = open(plsfn, "r")
if pls.readline().startswith("[playlist]"):
# INI format
pls.close()
pls = ConfigParser.ConfigParser()
try:
pls.read([plsfn])
except:
self.error("Error parsing %s" % (plsfn))
return
num = pls.get("playlist", "NumberOfEntries")
for i in range(0,int(num)):
fn = pls.get("playlist", "File%d" % (i+1))
self.flist.append((fn,))
else:
# TXT format
pls.seek(0)
for fn in pls:
self.flist.append((fn.strip(),))

def error(self, msg):
dlg = gtk.MessageDialog(self.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR,
gtk.BUTTONS_OK, msg)
dlg.run()
dlg.destroy()
if self.burndlg:
self.burn.cancel()
self.burndlg.destroy()

def main(self):
gtk.main()


if __name__ == "__main__":
pyb = PyBurn()
pyb.main()

Arch :: dvd rip

#!/bin/bash

#CONFIGURATION
DIN="/dev/dvd" #input
DOUT="/home/$USER/" #output
VBTR="4000" #bitrate
ABTR="192" #bitrate
FFRM="mp4" #file format: mp4/avi/ogm/mkv
VLE="x264" #video encoder: ffmpeg/xvid/x264/theora
CUP="1" #clean files when finished (DOUT/.rdvdpseries not removed)

discinfo(){
TITLE[INDEX]=`dvdbackup -i ${DIN} -I | grep information | cut -c44-56`
TNUM[INDEX]=`dvdbackup -i ${DIN} -I | grep containing | cut -c43-45`
}

discchange(){
let INDEXA=DISC-1
if [ "$INDEX" -ne "$INDEXA" ]; then
echo "...ejecting disc..."
eject
read -p "please insert the next disc [enter]" CHNG
fi
}

dvdbkup(){
while [ $INDEX -lt $DISC ]; do
discinfo
dvdbackup -i ${DIN} -o ${DOUT} -M
discchange
let INDEX=INDEX+1
done

INDEX=0
while [ $INDEX -lt $DISC ]; do
handbrake -i ${DOUT}/${TITLE[INDEX]}VIDEO_TS -o ${DOUT}/${TITLE[INDEX]}.${FFRM} -t ${TNUM[INDEX]} -U -F -f ${FFRM} -e ${VLE} -b ${VBTR} -B ${ABTR}
if [ $CUP = "1" ]; then
rm -rf ${DOUT}/${TITLE[INDEX]}
fi
let INDEX=INDEX+1
done
exit
}

hndbrk(){
while [ $INDEX -lt $DISC ]; do
discinfo
handbrake -i ${DIN} -o ${DOUT}/${TITLE[INDEX]}.${FFRM} -t ${TNUM[INDEX]} -U -F -f ${FFRM} -e ${VLE} -b ${VBTR} -B ${ABTR}
discchange
let INDEX=INDEX+1
done
exit
}

series(){
echo "...displaying info..."; sleep 2
dvdbackup -i ${DIN} -I > ${DOUT}/file
cat ${DOUT}/file 2>/dev/null

sleep 2
read -p "number of episodes: " NUME
title

INDEX=0
while [ $INDEX -lt $NUME ]; do
let INDEXA=INDEX+1
read -p "Episode [${INDEXA} / ${NUME}] name: " SNME[INDEX]
SNME[$INDEX]=${SNME[$INDEX]// /_} #replace ' ' with '_'
read -p "Episode [${INDEXA} / ${NUME}] title: " STTL[INDEX]
read -p "Episode [${INDEXA} / ${NUME}] chapter(s): " SCHP[INDEX]
echo
let INDEX=INDEX+1
done

title
echo "verify the following: "; sleep 1
INDEX=0
while [ $INDEX -lt $NUME ]; do
let INDEXA=INDEX+1
echo "=============================================="
echo "Episode [${INDEXA} / ${NUME}] name: ${SNME[INDEX]}"
echo "Episode [${INDEXA} / ${NUME}] title: ${STTL[INDEX]}"
echo "Episode [${INDEXA} / ${NUME}] chapter(s): ${SCHP[INDEX]}"
echo
let INDEX=INDEX+1
done

read -p "proceed [Y\n]: " PROC
if [ -n $PROC ]; then
if [ $PROC = "n" ]; then
series
fi
fi

if [ $CUP = "1" ]; then
rm ${DOUT}/file
fi
echo "...dump to ${DOUT}/.rdvdpseries..."; sleep 1

INDEX=0
touch ${DOUT}/.rdvdpseries
while [ $INDEX -lt $NUME ]; do
echo "handbrake -i ${DIN} -o ${DOUT}/${SNME[INDEX]}.${FFRM} -t ${STTL[INDEX]} -c ${SCHP[INDEX]} -U -F -f ${FFRM} -e ${VLE} -b ${VBTR} -B ${ABTR}" >> ${DOUT}/.rdvdpseries
let INDEX=INDEX+1
done

title
echo "about to start series mode"
sleep 3

INDEX=0
while [ $INDEX -lt $NUME ]; do
handbrake -i ${DIN} -o ${DOUT}/${SNME[INDEX]}.${FFRM} -t ${STTL[INDEX]} -c ${SCHP[INDEX]} -U -F -f ${FFRM} -e ${VLE} -b ${VBTR} -B ${ABTR}
let INDEX=INDEX+1
done
exit
}

title(){
clear
echo
echo " _ _ "
echo " | | | | "
echo " _ __ __| |_ ____| |_ __ "
echo " | __/ _ \ \ / / _ | _ \ "
echo " | | | (_| |\ V / (_| | |_) |"
echo " |_| \__ _| \_/ \__ _| __/ "
echo " | | "
echo " |_| "
echo
echo " It's Automatic! version: 0.2.1"
echo
}

run(){
if [ $RUN = "1" ]; then
dvdbkup
else
hndbrk
fi
}

main(){
RUN=0
INDEX=0
DISC=1
title
read -p "dvdbackup mode [N/y]: " DBP
read -p "multi-disc mode [N/y]: " MDM
read -p "series mode [N/y]: " SSM

if [ -n "$DBP" ]; then
if [ $DBP = "y" ]; then
RUN=1
fi
fi

if [ -n "$MDM" ]; then
if [ $MDM = "y" ]; then
echo
read -p "enter the number of discs: " DISC
run
fi
fi

if [ -n "$SSM" ]; then
if [ $SSM = "y" ]; then
series
fi
fi

run
}

main

Arch :: rdvdp.py

#!/bin/bash

#CONFIGURATION
DIN="/dev/dvd" #input
DOUT="/home/$USER/" #output
VBTR="4000" #bitrate
ABTR="192" #bitrate
FFRM="mp4" #file format: mp4/avi/ogm/mkv
VLE="x264" #video encoder: ffmpeg/xvid/x264/theora
CUP="1" #clean files when finished (DOUT/.rdvdpseries not removed)

discinfo(){
TITLE[INDEX]=`dvdbackup -i ${DIN} -I | grep information | cut -c44-56`
TNUM[INDEX]=`dvdbackup -i ${DIN} -I | grep containing | cut -c43-45`
}

discchange(){
let INDEXA=DISC-1
if [ "$INDEX" -ne "$INDEXA" ]; then
echo "...ejecting disc..."
eject
read -p "please insert the next disc [enter]" CHNG
fi
}

dvdbkup(){
while [ $INDEX -lt $DISC ]; do
discinfo
dvdbackup -i ${DIN} -o ${DOUT} -M
discchange
let INDEX=INDEX+1
done

INDEX=0
while [ $INDEX -lt $DISC ]; do
handbrake -i ${DOUT}/${TITLE[INDEX]}VIDEO_TS -o ${DOUT}/${TITLE[INDEX]}.${FFRM} -t ${TNUM[INDEX]} -U -F -f ${FFRM} -e ${VLE} -b ${VBTR} -B ${ABTR}
if [ $CUP = "1" ]; then
rm -rf ${DOUT}/${TITLE[INDEX]}
fi
let INDEX=INDEX+1
done
exit
}

hndbrk(){
while [ $INDEX -lt $DISC ]; do
discinfo
handbrake -i ${DIN} -o ${DOUT}/${TITLE[INDEX]}.${FFRM} -t ${TNUM[INDEX]} -U -F -f ${FFRM} -e ${VLE} -b ${VBTR} -B ${ABTR}
discchange
let INDEX=INDEX+1
done
exit
}

series(){
echo "...displaying info..."; sleep 2
dvdbackup -i ${DIN} -I > ${DOUT}/file
cat ${DOUT}/file 2>/dev/null

sleep 2
read -p "number of episodes: " NUME
title

INDEX=0
while [ $INDEX -lt $NUME ]; do
let INDEXA=INDEX+1
read -p "Episode [${INDEXA} / ${NUME}] name: " SNME[INDEX]
SNME[$INDEX]=${SNME[$INDEX]// /_} #replace ' ' with '_'
read -p "Episode [${INDEXA} / ${NUME}] title: " STTL[INDEX]
read -p "Episode [${INDEXA} / ${NUME}] chapter(s): " SCHP[INDEX]
echo
let INDEX=INDEX+1
done

title
echo "verify the following: "; sleep 1
INDEX=0
while [ $INDEX -lt $NUME ]; do
let INDEXA=INDEX+1
echo "=============================================="
echo "Episode [${INDEXA} / ${NUME}] name: ${SNME[INDEX]}"
echo "Episode [${INDEXA} / ${NUME}] title: ${STTL[INDEX]}"
echo "Episode [${INDEXA} / ${NUME}] chapter(s): ${SCHP[INDEX]}"
echo
let INDEX=INDEX+1
done

read -p "proceed [Y\n]: " PROC
if [ -n $PROC ]; then
if [ $PROC = "n" ]; then
series
fi
fi

if [ $CUP = "1" ]; then
rm ${DOUT}/file
fi
echo "...dump to ${DOUT}/.rdvdpseries..."; sleep 1

INDEX=0
touch ${DOUT}/.rdvdpseries
while [ $INDEX -lt $NUME ]; do
echo "handbrake -i ${DIN} -o ${DOUT}/${SNME[INDEX]}.${FFRM} -t ${STTL[INDEX]} -c ${SCHP[INDEX]} -U -F -f ${FFRM} -e ${VLE} -b ${VBTR} -B ${ABTR}" >> ${DOUT}/.rdvdpseries
let INDEX=INDEX+1
done

title
echo "about to start series mode"
sleep 3

INDEX=0
while [ $INDEX -lt $NUME ]; do
handbrake -i ${DIN} -o ${DOUT}/${SNME[INDEX]}.${FFRM} -t ${STTL[INDEX]} -c ${SCHP[INDEX]} -U -F -f ${FFRM} -e ${VLE} -b ${VBTR} -B ${ABTR}
let INDEX=INDEX+1
done
exit
}

title(){
clear
echo
echo " _ _ "
echo " | | | | "
echo " _ __ __| |_ ____| |_ __ "
echo " | __/ _ \ \ / / _ | _ \ "
echo " | | | (_| |\ V / (_| | |_) |"
echo " |_| \__ _| \_/ \__ _| __/ "
echo " | | "
echo " |_| "
echo
echo " It's Automatic! version: 0.2.1"
echo
}

run(){
if [ $RUN = "1" ]; then
dvdbkup
else
hndbrk
fi
}

main(){
RUN=0
INDEX=0
DISC=1
title
read -p "dvdbackup mode [N/y]: " DBP
read -p "multi-disc mode [N/y]: " MDM
read -p "series mode [N/y]: " SSM

if [ -n "$DBP" ]; then
if [ $DBP = "y" ]; then
RUN=1
fi
fi

if [ -n "$MDM" ]; then
if [ $MDM = "y" ]; then
echo
read -p "enter the number of discs: " DISC
run
fi
fi

if [ -n "$SSM" ]; then
if [ $SSM = "y" ]; then
series
fi
fi

run
}

main

Arch :: Blowfish in Perl

use Crypt::Blowfish;
my $cipher = new Crypt::Blowfish $key;
my $ciphertext = $cipher->encrypt($plaintext);
my $plaintext = $cipher->decrypt($ciphertext);

Arch :: rc.conf

#
# /etc/rc.conf - Main Configuration for Arch Linux

LOCALE=en_US.utf8
HARDWARECLOCK=""
TIMEZONE=""
KEYMAP="us"

USECOLOR="yes"
MOD_AUTOLOAD="yes"

MODULES=("psmouse proto=imps" "vboxdrv")

HOSTNAME="arch-live"

eth0="dhcp"
INTERFACES=(eth0)

#TODO add more auto-daemons here, especially the live-cd specific stuff
DAEMONS=(!chakra-hwdetect syslog-ng polkitparser hal @iptables @firewall @network !crond !portmap @fam !gamin @alsa @wicd archlive slim)
#DAEMONS=(addmods chakra-hwdetect syslog-ng @network @hal @fam !sshd !vbox @wicd chakra-xorg-detect chakra-xorg-config @chakra-alsa archlive slim)
#TODO: auto-network find-disks find-user-home

Arch :: Chrome Linux Installation

I was able to install Chrome Linux on Arch Linux using the following command:

> yaourt --aur -S chromium-continuos-latest

Make sure you have installed jre instead of openjdk.

-2501

Darker than Black

Research investigation regarding new sources of energy based on frequencies and magnetics fields
still unknown to science. It has been discovered regions of the human brain that can actually transmit low radio frequencies but it is totally encrypted. The encryption algorithm is based on
chemical reactions in the central region of the brain. Binary representation is not possible yet.
-2501