Having error while trying use jqFileUpload with RequireJS?

Once upon a time, I needed to use jqFileUPload plugin (actually modified version which provides Angular’s directive around native jqFileUpload plugin).
In the same time, my Angular-base project was configured to be used together with RequireJS.
I spend few ours trying to figure out what I was doing wrong — why I was getting errors in my browser’s console.
Those errors were about something weird… Something in `load-image-exif` and `load-image` files.

My require.js main config file looked like this:

require.config({
  paths: {
    'semantic': '../../bower_components/semantic-ui/build/packaged/javascript/semantic.min',
    'jquery': '../../bower_components/jquery/dist/jquery.min',
    'domReady': '../../bower_components/requirejs-domready/domReady',
    'angular': '../../bower_components/angular/angular.min',
    'angular-route': '../../bower_components/angular-route/angular-route.min',
    'angular-resource': '../../bower_components/angular-resource/angular-resource.min',
    'jquery.fileupload': '../../bower_components/angular-jqfile-upload/js/jquery.fileupload',
    'jquery.fileupload-angular': '../../bower_components/angular-jqfile-upload/js/jquery.fileupload-angular',
    'jquery.ui.widget': '../../bower_components/angular-jqfile-upload/js/vendor/jquery.ui.widget',
    'jquery.fileupload-image': '../../bower_components/angular-jqfile-upload/js/jquery.fileupload-image',
    'jquery.fileupload-process': '../../bower_components/angular-jqfile-upload/js/jquery.fileupload-process',
    'jquery.fileupload-audio': '../../bower_components/angular-jqfile-upload/js/jquery.fileupload-audio',
    'jquery.fileupload-video': '../../bower_components/angular-jqfile-upload/js/jquery.fileupload-video',
    'jquery.fileupload-validate': '../../bower_components/angular-jqfile-upload/js/jquery.fileupload-validate',
    'jquery.fileupload-ui': '../../bower_components/angular-jqfile-upload/js/jquery.fileupload-ui',
    'jquery.iframe-transport': '../../bower_components/angular-jqfile-upload/js/jquery.iframe-transport',
    'canvas-to-blob': '../../bower_components/blueimp-canvas-to-blob/js/canvas-to-blob.min',
    'load-image': '../../bower_components/blueimp-load-image/js/load-image.min',
    'load-image-exif': '../../bower_components/blueimp-load-image/js/load-image-exif',
    'load-image-ios': '../../bower_components/blueimp-load-image/js/load-image-ios',
    'load-image-meta': '../../bower_components/blueimp-load-image/js/load-image-meta',
    'load-image-orientation': '../../bower_components/blueimp-load-image/js/load-image-orientation'
  },
 
  // angular does not support AMD out of the box, put it in shim
  shim: {
	  'semantic': {
		  exports: 'semantic',
		  deps: ['jquery']
	  },
    'angular': {
      exports: 'angular'
    }
  },
 
  // kick start application
  deps: ['./bootstrap']
});

Those errors made me crazy so I even decided to get rid of using RequireJS with Angular app at all!
Next day, I decided Google for a bit and I was extremly lucky to get to this answer — http://stackoverflow.com/a/20734214.
No votes for it, but that is correct answer and helps resolve the issue.

To recall here, the reason is — I used minified version of `load-image` script, which includes all dependencies in it…
So, all I had to do is replace this line with a path to not minified version:

    .....
    'load-image': '../../bower_components/blueimp-load-image/js/load-image<span style="text-decoration: line-through;">.min</span>',
    .....

After had that done everything started up.

Как скачать аудио из ВКонтакте

Небольшой скриптец, который поможет вам создать список URL адресов mp3 файлов, который можно затем «скормить» какому-нибудь Download Master.
Сей скриптец нужно запускать в консоли FireBug (расширение к броузеру FireFox, ориентированное на программистов), находясь при этом на странице «Мои аудиозаписи».
В результате выполнения в консоль будет выведен список адресов аудифайлов вашего плейлиста. Копируете список в текстовый файл, который потом импортируете в Download Master через пункт меню File -> Import. Вуаля! Файлы качаются! Единственная проблемка — названия. Это уникальные идентификаторы файлов, а не понятные человеку слова. Хотите — переименуйте вручную, а хотите — потом можно написать скриптец, скажем на PHP, который прочитает ID3-тэги файлов и переименует файлы с использованием нормальных названий.
Собственно, сам скрипт:

var hiddenFields = document.getElementsByTagName("input");
var mp3s = [];
function getHiddenField(elem, index, collection){
    if(elem.getAttribute("type") == "hidden" && (/audio_info\d+_\d+/).test(elem.getAttribute("id"))){
        mp3s.push(elem.getAttribute("value").split(",")[0]);
    }
}
for(var i=0; i < hiddenFields.length; i++){
    getHiddenField(hiddenFields[i], i, hiddenFields);
}
console.log(mp3s.join("\n"));

JavaScript — как удалить пробелы в начале и конце строки (trim)

Уже миллионы раз написано, но вставлю и я свои «5 копеек» в тему.
В javascript нет встроенной функции для обрезания лишних пробелов в начале и конце строки.
Чтобы реализовать такую возможность можно добавить необходимый метод в объект String javascript:

String.prototype.trim = function(str) { return str.replace(/^\s+|\s+$/g, ""); }

Установка сервера приложений Myna

Myna — это серверный javascript. Детальнее можно узнать здесь.
Установка возможна двумя способами:
1. как обычный сервлет на любом Java сервере (Tomcat, JBoss, Glassfish, WebSphere, etc)
2. как отдельное приложение (в данном случае Tomcat уже включен в поставку).
На момент написания статьи последним выпущенными релизом была версия myna-1.0_beta_9. Пусть вас не пугает приставка beta — авторы заявляют, что приложение очень стабильно и успешно работает на многих серверах в боевом режиме.

Для себя я выбрал установку как standalone приложение. Для этого скачал архивчик myna-1.0_beta_9.war.
.
Установка происходит следующим образом:

java -jar /path/to/myna-1.0_beta_9.war -m install

и далее идет ряд дополнительных параметров, узнать о которых вы можете выполнив команду

java -jar /path/to/myna-1.0_beta_9.war --help

но! При запуске этой команды под своим пользователем unix (если вы не root) вы получите такие сообщения:

Installing/upgrading Myna in '/var/www/myna'...
Done unpacking.
Install mode must be run as root.

Не знаю почему, но мне не помогло то, что я добавил sudo в начало команды. Успеха я не добился.
Весь секрет оказался оказался в том, что нужно явно запускать установку из-под пользователя root.
И, да, помимо этого я указал полный путь к war-файлу myna. Далее установка прошла без проблем.
Видимо, всё дело в том, что установщик пытается прописать скрипт запуска для myna в директорию /etc/init.d/

После установки сервер запускается автоматически и вы можете увидеть результат по адресу
http://localhost:8180/ (8180 — порт для myna по-умолчанию).
Когда вы настроили и запустили сервер, можете углубиться в документацию, чтобы узнать как писать серверные приложения с помощью Myna и чистого JavaScript.
Удачи!