Adobe Audition Project Cleanup Helper

Adobe Audition is a great software for audio recording and editing. While recording it creates more and more uncompressed .wav files and never cares to clean them up even though they may not be used in the project any more. As far as I know, the software doesn’t provide a built-in tool for quick cleaning-up either. With this tool I can quickly delete all the files except those that are actually used in my projects.

check out at my Github

This program scans the given Adobe Audition project directories and deletes unused files. Please make sure to backup your data and only delete your backup after verifying the clean up was successful.

Install

Greenkeeper badge

$ npm install @xch/audition-cleanup

Example

Suppose there is a project folder at /some/path/foobar and the project file at /some/path/foobar/foobar.sesx.

$ audition-cleanup /some/path/foobar

Running the above command would delete all the files under sub-folders of the project folder that are not used by the project file.

You can cleanup multiple project folders together by appending all the paths to the command, such as:

$ audition-cleanup /some/path/proj_1 /some/path/proj_2 /some/path/proj_3

Material Design Lite for Meteor

check out at my Github

Material Design Lite lets you add a Material Design look and feel to your websites. It doesn’t rely on any JavaScript frameworks and aims to optimize for cross-device use, gracefully degrade in older browsers, and offer an experience that is immediately accessible. - getmdl.io

Visit MDL's website to learn how to get started with MDL.

Build Status

Features

  • Theme color customization (See details below.)

  • Full access to SASS source code (See details below.)

  • Exports componentHandler globally (Client Only).

  • It auto-upgrades everything for you by default, so you can sit back and relax.

  • Exports MDl globally on the client for changing settings in runtime.

    • MDl.componentHandler mirrors componentHandler.

    • MDl.settings stores a copy of the loaded settings. You should not modify it. Treat this as readonly.

    • MDl.autoUpgrade stores the instance of the autoUpgrader. Read more about it below.

Install

$ meteor add zodiase:mdl

How to Use

After installing, create an empty settings file zodiase-mdl.json under the root of your app. Without it most functions will be disabled.

Other than that, there is nothing special to do. Enjoy! 😀

If you want to pick your own theme, like what the MDL team have here, here's how:

  1. First pick your theme colors from that page. You would have to pick both the primary color and the accent color.

  2. Note that on the lower part of that page, there's a link that basically tells you what colors you have picked.

    • The link is always composed by material.{primary}-{accent}.min.css. I picked deep_orange and blue for example, and that link looks like material.deep_orange-blue.min.css.
  3. Now create a zodiase-mdl.json file under the root of your app if you haven't already. This file stores the settings.

  4. In that setting file, compose a JSON document that looks similar to this:

    {
    "theme": {
    "primary": "deep_orange",
    "accent": "blue"
    }
    }
    
  5. This will tell the package to load the corresponding theme file.

If you want more than pre-built themes:

You can load up the SASS source code and define your own colors!

  1. First you'd need to tell the package not to load any theme file.

    {
    "theme": false
    }
    
  2. Define your own theme colors and load MDL's SASS code.

    // mdl-theme.scss
    $color-primary: "0,0,0";
    $color-accent: "255,255,255";
    @import '{zodiase:mdl}/theme';
    
  3. There you go!

  4. There's a full range of variables you can customize. Check out MDL's variables to learn more.

If you want to import SASS files from MDL's source code:

They are all under {zodiase:mdl-assets}/src so have fun!

Auto Upgrade

One big thing this package does for you is auto-upgrading everything.

This feature is enabled by default. You can disable it within the settings file:

{
"patches": {
"autoUpgrade": false
}
}

Doing so would turn off the entire auto-upgrader to save memory. However, this also means that you can NOT use it later in runtime. When auto-upgrader is turned off, MDl.autoUpgrade === null.

Aside from false, autoUpgrade can take one of the three other values: ["fullUpgrade"|"mutationOnly"|"none"], with "fullUpgrade" being the default.

  • "fullUpgrade" uses componentHandler.upgradeAllRegistered() when any mutation is observed.

  • "mutationOnly" uses componentHandler.upgradeElements(mutation.target) on mutations when any mutation is observed.

  • "none" does nothing. However the observer still stays in the memory.

While at runtime and the auto-upgrader is not turned off in the settings, MDl.autoUpgrade is the instance of the auto-upgrader with the following interfaces:

  • MDl.autoUpgrade.getUpgradeStyle() returns the current auto-upgrading style.

  • MDl.autoUpgrade.setUpgradeStyle("fullUpgrade" | "mutationOnly" | "none") sets the auto-upgrade style.

Note that at this point in runtime it is impossible to turn off auto-upgrader any more. So false is not an acceptable value for .setUpgradeStyle().

Known Issues

  • Do not use MDL components at the top level of any templates or template event handlers may not work correctly.

  • Understand how MDL upgrades components and do not separate the necessary elements of a component into different templates unless you want to turn off auto-upgrading and do it manually.

Versioning

The version of this package matches MDL's version to make it easy to perceive what version of MDL it contains. In addition, it has a fourth version number indicating revisions not related to MDL.

License

(MDL source is owned by Google and licensed under an Apache-2 license.)

© Xingchen Hong, 2016. Licensed under an Apache-2 license.

Javascript Process Queue

check out at my Github

Originally I wrote this to use with jQuery for better flow control over asynchronous tasks.

Let me use an example to illustrate the problems I encountered and how this library fixs them.

One could use chaining in jQuery to create a series of animations on a single object, and they get executed one by one because jQuery creates an internal animation queue.

In many cases, however, I'd like to execute an animation on another object right after this one finishes. One simple code clip would look something like this:

obj1.animate({someProperty}, 300, function () {
obj2.animate({someOtherProperty}, 300);
});

It's not bad for now, but things get uglier soon after I decided to add a third phase:

obj1.animate({someProperty}, 300, function () {
obj2.animate({someOtherProperty}, 300, function () {
obj3.animate({someExtraProperty}, 300);
});
});

And it only gets worse as I make the thing more complex.

I thought I could do something like this:

function animateObj1 () {
obj1.animate({someProperty}, 300, animateObj2);
}
function animateObj2 () {
obj2.animate({someOtherProperty}, 300, animateObj3);
}
function animateObj3 () {
obj3.animate({someExtraProperty}, 300);
}
animateObj1();

It's tidier now, but still I find it a little confusing when I want to make some adjustments.

Then I wrote this library, PQUEUE, and now the code looks like this:

var aQueue = PQUEUE([
function animateObj1 (queue) {
queue.pause();
obj1.animate({someProperty}, 300, queue.resume);
},
function animateObj2 (queue) {
queue.pause();
obj2.animate({someOtherProperty}, 300, queue.resume);
},
function animateObj3 (queue) {
queue.pause();
obj3.animate({someExtraProperty}, 300, queue.resume);
},
PQUEUE_HALT
]);
aQueue.boot();

It might look no different but there's more:

var aQueue = PQUEUE([
function animateObj2 (queue) {
queue.pause();
queue.pc.goto(queue.pc.locate('animateObj3'));
obj2.animate({someOtherProperty}, 300, queue.resume);
},
function animateObj1 (queue) {
queue.pause();
queue.pc.goto(queue.pc.locate('animateObj2'));
obj1.animate({someProperty}, 300, queue.resume);
},
function animateObj3 (queue) {
queue.pause();
obj3.animate({someExtraProperty}, 300, queue.resume);
},
PQUEUE_HALT
], 1);
aQueue.boot();

Now I have more freedom in the way of organizing my code.

For more detail please read the API document.

If you have any questions feel free to contact me

Hope you find this usefull! 🙂

HTML5 Responsive Digital Clock

Full-Screen Clock was made to meet my own need; I wanted to use one of my monitors as a clock that was easily customizable and nice-looking. The basic idea was that it would auto-adjust to fit windows with any size.

Previews

Live Preview (Open in new window)

Stable releases will always be here: https://zodiase.github.io/Full-Screen-Clock/.