We'll create a simple sound player that exposes two functions: play and stop. It'll also call the JavaScript function on_play_complete when the current sound has finished playing.
soundplayer.mxml
Compile with mxmlc soundplayer.mxml
If it won't be simple, it simply won't be. [Hire me, source code] by Miki Tebeka, CEO, 353Solutions
<html>
<head>
<title>Dimmer</title>
<style>
.disabled {
filter: alpha(opacity=50);
-moz-opacity: 0.50;
opacity: 0.50;
}
</style>
</head>
<body>
<center>
<p>Show how to "dim" an image, marking it disabled</p>
<img src="image.png" id="image" /> <br />
<button onclick="disable();">Disable</button>
<button onclick="enable();">Enable</button>
</center>
</body>
<script src="jquery.js"></script>
<script>
function disable() {
$('#image').addClass('disabled');
}
function enable() {
$('#image').removeClass('disabled');
}
</script>
</html>

#!/usr/bin/env python
'''Find python module version'''
__author__ = "Miki Tebeka <miki.tebeka@gmail.com>"
def valueof(v):
if callable(v):
try:
return v()
except Exception:
return None
return v
def load_module(module_name):
module = __import__(module_name)
# __import__("a.b") will give us a
if ("." in module_name):
names = module_name.split(".")[1:]
while names:
name = names.pop(0)
module = getattr(module, name)
return module
def find_module_version(module_name):
module = load_module(module_name)
attrs = set(dir(module))
for known in ("__version__", "version"):
if known in attrs:
v = valueof(getattr(module, known))
if v:
return v
for attr in attrs:
if "version" in attr.lower():
v = getattr(module, attr)
if not v:
continue
v = valueof(v)
if v:
return v
def main(argv=None):
if argv is None:
import sys
argv = sys.argv
from optparse import OptionParser
parser = OptionParser("usage: %prog MODULE_NAME")
opts, args = parser.parse_args(argv[1:])
if len(args) != 1:
parser.error("wrong number of arguments") # Will exit
module_name = args[0]
try:
version = find_module_version(module_name)
except ImportError, e:
raise SystemExit("error: can't import %s (%s)" % (module_name, e))
if version:
print version
else:
raise SystemExit("error: can't find version for %s" % module_name)
if __name__ == "__main__":
main()
#!/usr/bin/env python
'''Place stuff in clipboard - multi platform'''
__author__ = "Miki Tebeka <miki.tebeka@gmail.com>"
from os import popen
from sys import platform
COMMDANDS = { # platform -> command
"darwin" : "pbcopy",
"linux2" : "xsel -i",
"cygwin" : "/bin/putclip",
}
def putclip(text):
command = COMMDANDS[platform]
popen(command, "w").write(text)
def main(argv=None):
if argv is None:
import sys
argv = sys.argv
from optparse import OptionParser
from sys import stdin
parser = OptionParser("%prog [PATH]")
opts, args = parser.parse_args(argv[1:])
if len(args) not in (0, 1):
parser.error("wrong number of arguments") # Will exit
if platform not in COMMDANDS:
message = "error: don't know how to handle clipboard on %s" % platform
raise SystemExit(message)
if (not args) or (args[0] == "-"):
info = stdin
else:
try:
infile = args[0]
info = open(infile)
except IOError, e:
raise SystemExit("error: can't open %s - %s" % (infile, e))
try:
putclip(info.read())
except OSError, e:
raise SystemExit("error: %s" % e)
if __name__ == "__main__":
main()
#!/usr/bin/env python
__author__ = "Miki Tebeka <miki.tebeka@gmail.com>"
def flatten(items):
'''Flatten a nested list.
>>> a = [[1], 2, [[[3]], 4]]
>>> list(flatten(a))
[1, 2, 3, 4]
>>>
'''
for item in items:
if getattr(item, "__iter__", None):
for subitem in flatten(item):
yield subitem
else:
yield item
if __name__ == "__main__":
from doctest import testmod
testmod()
'''Quick and dirty object "repr"'''
__author__ = "Miki Tebeka "
# FIXME: Find how to make doctest play with "regular" class definition
def printobj(obj):
'''
Quick and dirty object "repr"
>>> class Point: pass
>>> p = Point()
>>> p.x, p.y = 1, 2
>>> printobj(p)
('y', 2)
('x', 1)
>>>
'''
print "\n".join(map(str, obj.__dict__.items()))
if __name__ == "__main__":
from doctest import testmod
testmod()
#!/usr/bin/env python
'''Find under which SCM directory is'''
__author__ = "Miki Tebeka <miki.tebeka@gmail.com>"
from os import sep
from os.path import join, isdir, abspath
from itertools import ifilter, imap
def updirs(path):
parts = path.split(sep)
if not parts[0]:
parts[0] = sep # FIXME: Windows
while parts:
yield join(*parts)
parts.pop()
def scmdirs(path, scms):
for scmext in scms:
yield join(path, scmext)
def scm(dirname):
return dirname[-3:].lower()
def scms(path, scms):
return imap(scm, ifilter(isdir, scmdirs(path, scms)))
def whichscm(path):
path = abspath(path)
for scm in scms(path, (".svn", "CVS")):
return scm
scmdirs = (".bzr", ".hg", ".git")
for dirname in updirs(path):
for scm in scms(dirname, (".bzr", ".hg", ".git")):
return scm
def main(argv=None):
if argv is None:
import sys
argv = sys.argv
from optparse import OptionParser
parser = OptionParser("usage: %prog [DIRNAME]")
opts, args = parser.parse_args(argv[1:])
if len(args) not in (0, 1):
parser.error("wrong number of arguments") # Will exit
dirname = args[0] if args else "."
if not isdir(dirname):
raise SystemExit("error: %s is not a directory" % dirname)
scm = whichscm(dirname)
if not scm:
raise SystemExit("error: can't find scm for %s" % dirname)
print scm
if __name__ == "__main__":
main()
#!/usr/bin/env python
'''Find out who is listening on a port'''
from os import popen
from os.path import isdir
import re
is_int = re.compile("\d+").match
def find_pid(port):
for line in popen("netstat -nlp 2>&1"):
match = re.search(":(%s)\\s+" % port, line)
if not match:
continue
pidname = line.split()[-1].strip()
return pidname.split("/")[0]
return None
def find_cmdline(pid):
cmd = open("/proc/%s/cmdline" % pid, "rb").read()
return " ".join(cmd.split(chr(0)))
def find_pwd(pid):
data = open("/proc/%s/environ" % pid, "rb").read()
for line in data.split(chr(0)):
if line.startswith("PWD"):
return line.split("=")[1]
return None
def main(argv=None):
if argv is None:
import sys
argv = sys.argv
from optparse import OptionParser
parser = OptionParser("usage: %prog PORT")
opts, args = parser.parse_args(argv[1:])
if len(args) != 1:
parser.error("wrong number of arguments") # Will exit
port = args[0]
pid = find_pid(port)
if not (pid and is_int(pid)):
raise SystemExit(
"error: can't find who listens on port %s"
" [try again with sudo?] " % port)
if not isdir("/proc/%s" % pid):
raise SystemExit("error: can't find information on pid %s" % pid)
pwd = find_pwd(pid) or "<unknown>"
print "%s (pid=%s, pwd=%s)" % (find_cmdline(pid), pid, pwd)
if __name__ == "__main__":
main()

#!/usr/bin/env python
'''Server to show computer load'''
import re
from os import popen
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
from socket import gethostname
def load():
'''Very fancy computer load :)'''
output = popen("uptime").read()
match = re.search("load average(s)?:\\s+(\\d+\\.\\d+)", output)
return float(match.groups()[1]) * 100
HTML = '''
<html>
<head>
<script src="jquery.js"></script>
<script src="jquery.flot.js"></script>
<title>%s load</title>
</head>
<body>
<center>
<h1>%s load</h1>
<div id="chart" style="width:600px;height:400px;">
Loading ...
</div>
</center>
</body>
<script>
var samples = [];
var options = {
yaxis: {
min: 0,
max: 100
},
xaxis: {
ticks: []
}
};
function get_data() {
$.getJSON("/data", function(data) {
samples.push(data);
if (samples.length > 120) {
samples.shift();
}
var xy = [];
for (var i = 0; i < samples.length; ++i) {
xy.push([i, samples[i]]);
}
$.plot($('#chart'), [xy], options);
});
}
$(document).ready(function() {
setInterval(get_data, 1000);
});
</script>
</html>
''' % (gethostname(), gethostname())
class RequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
if self.path == "/":
self.wfile.write(HTML)
elif self.path.endswith(".js"):
self.wfile.write(open(".%s" % self.path).read())
else:
self.wfile.write("%.2f" % load())
if __name__ == "__main__":
server = HTTPServer(("", 8888), RequestHandler)
server.serve_forever()
[09:19] $time hg --version > /dev/null
real 0m0.060s
user 0m0.048s
sys 0m0.012s
[09:20] fattoc $time bzr --version > /dev/null
real 0m0.191s
user 0m0.144s
sys 0m0.048s
[09:21] $