michaelfox + organization 64
DocMgr | Download DocMgr software for free at SourceForge.net
may 2011 by michaelfox
PHP/Postgresql based document management system (DMS) with pdf and ocr-based indexing, and optional tsearch2 support. It also has access control lists, user permissions assignment, file discussion board, and multi-level file grouping.
document
organization
documentmanagement
may 2011 by michaelfox
StealJS - Script Manager - Jupiter JavaScript Consulting
december 2010 by michaelfox
There's a lot more to making JavaScript apps than writing JavaScript. StealJS is a collection of command and browser based JavaScript utilities that make building, packaging, sharing, and consuming JavaScript applications easy.
deployment
javascript
packaging
organization
require
december 2010 by michaelfox
A survey of playlist formats
december 2010 by michaelfox
Description: Every line in an M3U file is either a comment, a blank, or a resource to render. A comment line begins with the pound sign, #. Blanks are ignored. A resource is the address of a media file.
A resource address can be anything the M3U reader is capable of understanding. These include absolute filesystem paths, relative filesystem paths (with the base undefined by the file format), and URLs.
A resource can be anything the M3U reader is capable of rendering. To my knowledge these are always audio files, but there is no set reason for that to be true. However, it may not be wise to point to proprietary media formats like Real streaming audio in an M3U file, since many players will throw a user-visible error for media they cannot render.
The design philosophy of M3U is to let resource data types do the work. Players that don't understand an address or resource type usually skip the entry. The ability to reference URLs, in addition to filesystem paths, was added this way; some players (Winamp and XMMS, notably) simply added the ability to handle URLs to their M3U readers.
Support for M3U features varies wildly. iTunes, for example, will only render the first entry in an M3U file.
M3U is by far the most popular playlist format, probably due to its simplicity. It is an ad-hoc standard with no formal definition, no canonical source, and no owner.
Example:
# This is an absolute filesystem path
c:/music/foo.mp3
# This is a relative filesystem path
foo/fighters.mp3
# This is a URL
http://foofighters.com/somesong.mp3
Mime type:
audio/mpegurl (recommended)
audio/x-mpegurl
Distinguishing features: A simple list of files, one per line.
Definition URL: http://www.schworak.com/programming/music/playlist_m3u.asp
Originator: Winamp (?)
Implementations: Winamp, XMMS, many more
Metadata support: Before ID3 tags were widely supported by MP3 players, a flavor of M3U called Extended M3U was used to indicate audio metadata. Extended M3U is now obsolete. The following description of Extended M3U is copied in verbatim from Google's cache of the reverse-engineered documentation at http://hanna.pyxidis.org/tech/m3u.html, which is now a defunct URL.
audio
itunes
metadata
mp3
music
m3u
playlist
organization
A resource address can be anything the M3U reader is capable of understanding. These include absolute filesystem paths, relative filesystem paths (with the base undefined by the file format), and URLs.
A resource can be anything the M3U reader is capable of rendering. To my knowledge these are always audio files, but there is no set reason for that to be true. However, it may not be wise to point to proprietary media formats like Real streaming audio in an M3U file, since many players will throw a user-visible error for media they cannot render.
The design philosophy of M3U is to let resource data types do the work. Players that don't understand an address or resource type usually skip the entry. The ability to reference URLs, in addition to filesystem paths, was added this way; some players (Winamp and XMMS, notably) simply added the ability to handle URLs to their M3U readers.
Support for M3U features varies wildly. iTunes, for example, will only render the first entry in an M3U file.
M3U is by far the most popular playlist format, probably due to its simplicity. It is an ad-hoc standard with no formal definition, no canonical source, and no owner.
Example:
# This is an absolute filesystem path
c:/music/foo.mp3
# This is a relative filesystem path
foo/fighters.mp3
# This is a URL
http://foofighters.com/somesong.mp3
Mime type:
audio/mpegurl (recommended)
audio/x-mpegurl
Distinguishing features: A simple list of files, one per line.
Definition URL: http://www.schworak.com/programming/music/playlist_m3u.asp
Originator: Winamp (?)
Implementations: Winamp, XMMS, many more
Metadata support: Before ID3 tags were widely supported by MP3 players, a flavor of M3U called Extended M3U was used to indicate audio metadata. Extended M3U is now obsolete. The following description of Extended M3U is copied in verbatim from Google's cache of the reverse-engineered documentation at http://hanna.pyxidis.org/tech/m3u.html, which is now a defunct URL.
december 2010 by michaelfox
• How do you include external libraries like symfony components in your library repository? | test.ical.ly
september 2010 by michaelfox
Yesterday I had an idea for stunamis ImageTransform library. A simple yet powerful library to perform all kinds of image manipulation.
The idea was to make use of another library; a symfony component in fact: the EventDispatcher.
The immediate question that still puzzles me is: Where to put it?
When you’re developing a website or another application then integrating a library is easy. For example in symfony you would place it somewhere below /lib/vendor/ and you’re done with it.
As you are the end-user (developer) you have full control over everything.
However if you develop a library or a plugin or any other software component that other developers should use in their projects then simply including your dependencies won’t cut the mustard.
git
svn
dependencies
php
development
setup
structure
project
library
organization
external
submodules
The idea was to make use of another library; a symfony component in fact: the EventDispatcher.
The immediate question that still puzzles me is: Where to put it?
When you’re developing a website or another application then integrating a library is easy. For example in symfony you would place it somewhere below /lib/vendor/ and you’re done with it.
As you are the end-user (developer) you have full control over everything.
However if you develop a library or a plugin or any other software component that other developers should use in their projects then simply including your dependencies won’t cut the mustard.
september 2010 by michaelfox
CSS-Tricks Forums • View topic - Foldable TextMate CSS Groups (i.e. CSSEdit)
july 2010 by michaelfox
Sorry guys, this is an OSX TextMate only thing, although the concept can probably be applied elsewhere.
TextMate is my editor of choice. However, because it is so versatile, it sometimes lacks language-specific features that an IDE might have. In MacRabbit's CSSEdit, for example, you can group CSS declarations with the syntax:
Code: Select all
/* @group GroupName */
css declarations
/* @end */
Although CSSEdit is a great program, I hate having to use multiple editors, so I wanted this ability in TextMate. I found a way to do it using TextMate's language grammars and code-folding:
In TextMate, you can fold blocks of code, so it was simply a matter of convincing TextMate that everything between "/* @group */" and "/* @end */" is a foldable block of code. To do so:
1. Go to Bundles>Bundle Editor>Edit Languages...
2. Choose the CSS language. (It's in the CSS group with an L next to it)
3. Now you should see the language grammar file for CSS, starting with the line "{ scopeName = "source.css" "
find the line "foldingStartMarker = " (line 4)
delete that line and put the following in its place:
Code: Select all
foldingStartMarker = '/\*\*(?!\*)|\{\s*($|/\*(?!.*?\*/.*\S))|\/\*\s*@group\s*.*\s*\*\/';
4. do the same for the line "foldingStopMarker = " (line 5), replacing it with:
Code: Select all
foldingStopMarker = '(?<!\*)\*\*/|^\s*\}|\/*\s*@end\s*\*\/';
All this is doing is adding "/* @group GroupName */" to the foldingStartMarker regular expression and "/* @end */" to the foldingStopMarker regular expression. To change the syntax simply edit the regular expression.
Now, to make a foldable group, simply use the syntax above. Note: you don't have to supply a group name at all.
I hope this is useful :D
textmate
css
organization
tools
folding
programming
TextMate is my editor of choice. However, because it is so versatile, it sometimes lacks language-specific features that an IDE might have. In MacRabbit's CSSEdit, for example, you can group CSS declarations with the syntax:
Code: Select all
/* @group GroupName */
css declarations
/* @end */
Although CSSEdit is a great program, I hate having to use multiple editors, so I wanted this ability in TextMate. I found a way to do it using TextMate's language grammars and code-folding:
In TextMate, you can fold blocks of code, so it was simply a matter of convincing TextMate that everything between "/* @group */" and "/* @end */" is a foldable block of code. To do so:
1. Go to Bundles>Bundle Editor>Edit Languages...
2. Choose the CSS language. (It's in the CSS group with an L next to it)
3. Now you should see the language grammar file for CSS, starting with the line "{ scopeName = "source.css" "
find the line "foldingStartMarker = " (line 4)
delete that line and put the following in its place:
Code: Select all
foldingStartMarker = '/\*\*(?!\*)|\{\s*($|/\*(?!.*?\*/.*\S))|\/\*\s*@group\s*.*\s*\*\/';
4. do the same for the line "foldingStopMarker = " (line 5), replacing it with:
Code: Select all
foldingStopMarker = '(?<!\*)\*\*/|^\s*\}|\/*\s*@end\s*\*\/';
All this is doing is adding "/* @group GroupName */" to the foldingStartMarker regular expression and "/* @end */" to the foldingStopMarker regular expression. To change the syntax simply edit the regular expression.
Now, to make a foldable group, simply use the syntax above. Note: you don't have to supply a group name at all.
I hope this is useful :D
july 2010 by michaelfox
HVMC: an Introduction and Application | Nettuts+
may 2010 by michaelfox
This tutorial is an introduction to the Hierarchical Model View Controller(HMVC) pattern, and how it applies to web application development. For this tutorial, I will use examples provided from the CodeIgniter from Scratch series and demonstrate how HMVC can be a valuable modification to your development process. This introduction assumes you have an understanding of the Model View Controller (MVC) pattern. We suggest you read our introduction to MVC to get acquainted with the topic before tackling this tutorial.
codeigniter
mvc
hmvc
plugins
structure
project
organization
site
may 2010 by michaelfox
Managing Multiple Sized Copies of Movies in iTunes « Clark's Tech Blog
may 2010 by michaelfox
OK, I’ll confess upfront I’ve not tried this one yet although I hope to tomorrow. I got this info from Ars.
The basic problem is when you have a movie you’ve ripped but you want to watch it both on your Apple TV and your iPhone. Now ideally you’d want two different sizes. The iPhone doesn’t need the resolution you’d rip for the Apple TV plus you want the size to be as small as possible. Now if you’ve ever bought a show from iTunes you’ll note that Apple gives you both hi-res and low res versions. How do they do this? Well it turns out it’s just a tag on the MPEG-4 file. And there is a shell script to set those tags so you can do it with your own files.
First download and install mp4v2. Yes, you have to compile it. However if you have MacPorts you can also install it that way.
mac
osx
snow
applescript
python
scripting
automation
itunes
organization
mp4v2
multiple
track
video
movies
The basic problem is when you have a movie you’ve ripped but you want to watch it both on your Apple TV and your iPhone. Now ideally you’d want two different sizes. The iPhone doesn’t need the resolution you’d rip for the Apple TV plus you want the size to be as small as possible. Now if you’ve ever bought a show from iTunes you’ll note that Apple gives you both hi-res and low res versions. How do they do this? Well it turns out it’s just a tag on the MPEG-4 file. And there is a shell script to set those tags so you can do it with your own files.
First download and install mp4v2. Yes, you have to compile it. However if you have MacPorts you can also install it that way.
may 2010 by michaelfox
Cleaning iTunes Pt. 3: Album Names « Clark's Tech Blog
may 2010 by michaelfox
the trickiest part of cleaning ones iTunes library is looking up missing album information. There are a few applications that do this by mathematically analyzing the song’s music itself against a library. The problem is that this isn’t that accurate. There was an old app that did this (no longer available) called iEatzBrains or something like that. Unfortunately I made the mistake of running it against a bunch of tracks after testing it. Only then did I find that it’s accuracy was about 90%. So to be honest I am still finding tracks that had their artist and album names “revised” because of that. (I’d say that event caused about half of my library errors)
So I’m really leery of that sort of thing. However trying to find a script that could give a guess at album names was surprisingly hard. There weren’t any. There was a database of album information called discogs but it really didn’t let you search by track info. It was all oriented around correct album information. (Although it is useful for other metadata – as we’ll see in the future)
I did some pretty elaborate Google searching and remarkably this isn’t a problem that folks have solved. (Or at least they haven’t put solutions up online) Fortunately I found a solution from an unusual source: Apple.
Apple actually has a web API for searching the iTunes store. The documentation (oddly labeled “confidential” but publicly available) is quite helpful. What I did was to do an artist search returning just track information. Effectively getting a list of all songs by that artist. The returned data is even in JSON format rather than XML! This means I can make all the returned data into a Python dict with the simplejson module and a single call.
All I do then is just compare the selected song in iTunes (using Appscript) with the songs in the iTunes store. Now I could make this part a bit more intelligent by normalizing unicode characters and perhaps removing padding words like “a” or “the.” Thus far I’ve not had any trouble so I’ve not bothered making it “brighter.”
To avoid the problem of entering album information that is wrong and then never being able to find the changed files I put pretty extensive comments in each track. If the song could be from more than one album I put the other alternative albums in. Even if (as is typical) there’s only one album the track is on I put a note in the comments.
What’s surprising is how short the code is. (Take out all the comments in the code and there really isn’t much to it) My previous attempt using discog’s XML was at least 3 – 4 times as long and not nearly as accurate.
mac
osx
snow
applescript
python
scripting
automation
itunes
organization
So I’m really leery of that sort of thing. However trying to find a script that could give a guess at album names was surprisingly hard. There weren’t any. There was a database of album information called discogs but it really didn’t let you search by track info. It was all oriented around correct album information. (Although it is useful for other metadata – as we’ll see in the future)
I did some pretty elaborate Google searching and remarkably this isn’t a problem that folks have solved. (Or at least they haven’t put solutions up online) Fortunately I found a solution from an unusual source: Apple.
Apple actually has a web API for searching the iTunes store. The documentation (oddly labeled “confidential” but publicly available) is quite helpful. What I did was to do an artist search returning just track information. Effectively getting a list of all songs by that artist. The returned data is even in JSON format rather than XML! This means I can make all the returned data into a Python dict with the simplejson module and a single call.
All I do then is just compare the selected song in iTunes (using Appscript) with the songs in the iTunes store. Now I could make this part a bit more intelligent by normalizing unicode characters and perhaps removing padding words like “a” or “the.” Thus far I’ve not had any trouble so I’ve not bothered making it “brighter.”
To avoid the problem of entering album information that is wrong and then never being able to find the changed files I put pretty extensive comments in each track. If the song could be from more than one album I put the other alternative albums in. Even if (as is typical) there’s only one album the track is on I put a note in the comments.
What’s surprising is how short the code is. (Take out all the comments in the code and there really isn’t much to it) My previous attempt using discog’s XML was at least 3 – 4 times as long and not nearly as accurate.
may 2010 by michaelfox
Fix iTunes Names « Clark's Tech Blog
may 2010 by michaelfox
There are some amazing Python programmers out there who can do some pretty impressive and abstract stuff. However most of what I use Python for is as a quick and dirty scripting system. I’m rarely writing full elegant programs. Rather I just want to get something done and done quickly. Most of the time I’m not looking for every potential boundary problem. I’ll be able to tell if it doesn’t do what I want!
One thing I sometimes want to do it fix names in iTunes. That’s because I have some files where the name is mangled. (It’s all lower case, it has the track number prepended, or the like) While it’s possible to write a general case solution to this problem it’s much better to just have a script framework and modify a few lines for the particular problem.
Here’s how I do it using Appscript.
mac
osx
snow
applescript
python
scripting
automation
itunes
organization
One thing I sometimes want to do it fix names in iTunes. That’s because I have some files where the name is mangled. (It’s all lower case, it has the track number prepended, or the like) While it’s possible to write a general case solution to this problem it’s much better to just have a script framework and modify a few lines for the particular problem.
Here’s how I do it using Appscript.
may 2010 by michaelfox
Cleaning iTunes Pt. 1 « Clark's Tech Blog
may 2010 by michaelfox
I wanted to start with the finding of duplicates. Now you could use a program like fdupes or dupes.py (discussed a few weeks ago). Those aren’t ideal. In the past I’ve used Doug’s Applescripts. He has several useful scripts. One is Remove Dead Tracks which gets those entries where the file is long gone. (I don’t know how that happens – it’s usually stuff I don’t want anyway) His other famous script is Corral iTunes Dupes which I’ve used in the past to find duplicate tracks.
mac
osx
snow
applescript
python
scripting
automation
itunes
organization
duplicates
dupin
apps
may 2010 by michaelfox
Cleaning iTunes Pt. 4: Artist Names « Clark's Tech Blog
may 2010 by michaelfox
What this script does is look up the standardized spelling for artists. As ever I work on a playlist you create. In this case the playlist “__Fix Arists” (without the quotes) I’d suggest adding to this list manually rather than trying to automate it. Both for safety (because it’s easy to undo if you just have a single artist in there) but also it just keeps things simple. If you need you could easily add in a routine to work on a selection. I’ll put that in the script but comment it out.
mac
osx
snow
applescript
python
scripting
automation
itunes
organization
musicbrainz
metadata
may 2010 by michaelfox
Cleaning iTunes Pt. 2: Title Case « Clark's Tech Blog
may 2010 by michaelfox
This is the second in a series of posts on cleaning up my library in iTunes. Last time we discussed using Dupin to find duplicates. This week I want to focus on the problem of capitalization of song names. If you are like me you have a few songs in your library where the case is screwed up. (Sometimes even the database of CD song names has some mistakes – most of my bad titles were from ripped CDs) What I want to do is use TitleCase (discussed last week) to check to see if the titles are correct. Because some titles are supposed to be weird rather than just automatically fixing things I just add the files to a special playlist. To keep my “fix it” playlists separate from my regular ones I always prepend them with two underscore characters. (I usually then delete them when I’m done — although you don’t have to)
mac
osx
snow
applescript
python
scripting
automation
itunes
organization
may 2010 by michaelfox
Python on Snow Leopard « S T E P H E N H U C K E R . C O M
may 2010 by michaelfox
I have just installed Snow Leopard and came upon some excellent sites which have inspired me to learn the programming language Python
The first site is Clark’s Tech Blog
The articles listed below are excellent examples of using Python to manage your itunes library, well worth the read.
* Fix iTunes Names
* Cleaning iTunes Pt. 1
* Cleaning iTunes Pt. 2: Title Case
* Cleaning iTunes Pt. 3: Album Names
python
snow
itunes
scripting
automation
organization
osx
The first site is Clark’s Tech Blog
The articles listed below are excellent examples of using Python to manage your itunes library, well worth the read.
* Fix iTunes Names
* Cleaning iTunes Pt. 1
* Cleaning iTunes Pt. 2: Title Case
* Cleaning iTunes Pt. 3: Album Names
may 2010 by michaelfox
Inventive: iClip - a simply useful multiple clipboard/scrapbook for Mac OS X
december 2005 by michaelfox
iClip is a new multiple clipboard/scrapbook software application for Apple Macintosh computers with OS X.
apple
productivity
storage
organization
software
osx
december 2005 by michaelfox
related tags
*todo ⊕ addressbook ⊕ advanced ⊕ apache ⊕ apartment ⊕ apple ⊕ applescript ⊕ appletv ⊕ apps ⊕ apt ⊕ audio ⊕ automation ⊕ automator ⊕ bestpractices ⊕ boxee ⊕ bugtracking ⊕ business ⊕ cablemanagement ⊕ calendar ⊕ casemod ⊕ categorization ⊕ chapters ⊕ chat ⊕ code ⊕ codeigniter ⊕ codereview ⊕ collection ⊕ communication ⊕ css ⊕ css3 ⊕ dependencies ⊕ deployment ⊕ design ⊕ desk ⊕ development ⊕ diy ⊕ document ⊕ documentmanagement ⊕ dual ⊕ dualresolution ⊕ dupin ⊕ duplicates ⊕ editing ⊕ email ⊕ embed ⊕ enterprise ⊕ environment ⊕ external ⊕ facebook ⊕ familytree ⊕ file ⊕ filesystem ⊕ filing ⊕ filters ⊕ folding ⊕ format ⊕ freelance ⊕ furniture ⊕ geek ⊕ git ⊕ github ⊕ gmail ⊕ greasemonkey ⊕ gtd ⊕ hacks ⊕ hd ⊕ hierarchy ⊕ hmvc ⊕ home ⊕ howto ⊕ html ⊕ ical ⊕ id3 ⊕ interface ⊕ interiordesign ⊕ itunes ⊕ ituneslp ⊕ javascript ⊕ layout ⊕ library ⊕ lifehacker ⊕ lifehacks ⊕ linux ⊕ m3u ⊕ mac ⊕ management ⊕ manager ⊕ managment ⊕ media ⊕ mediagrabber ⊕ meeting ⊕ metadata ⊕ mindmapper ⊕ movies ⊕ mp3 ⊕ mp4 ⊕ mp4v2 ⊕ multiple ⊕ music ⊕ musicbrainz ⊕ mux ⊕ muxer ⊕ mvc ⊕ office ⊕ onlineos ⊕ openmeta ⊕ opensource ⊕ organization ⊖ osx ⊕ packaging ⊕ paper ⊕ paperless ⊕ parser ⊕ permissions ⊕ php ⊕ planning ⊕ playlist ⊕ plugins ⊕ presentation ⊕ productivity ⊕ programming ⊕ project ⊕ projectmanagement ⊕ python ⊕ quicksilver ⊕ renamer ⊕ repository ⊕ require ⊕ resolution ⊕ resources ⊕ ruby ⊕ scanner ⊕ scripting ⊕ sd ⊕ search ⊕ setup ⊕ site ⊕ snow ⊕ socialmedia ⊕ software ⊕ sourcecode ⊕ storage ⊕ structure ⊕ submodules ⊕ subtitles ⊕ support ⊕ svn ⊕ system ⊕ tagging ⊕ tags ⊕ tags.app ⊕ taxonomy ⊕ team ⊕ text ⊕ textmate ⊕ tools ⊕ track ⊕ tracking ⊕ tree ⊕ tutorial ⊕ tv ⊕ twitter ⊕ ultimatebuild ⊕ unclutter ⊕ unix ⊕ utility ⊕ versioncontrol ⊕ versioning ⊕ video ⊕ webapp ⊕ webdav ⊕ webdev ⊕ wiki ⊕ window ⊕ workflow ⊕ xbmc ⊕Copy this bookmark: