Без темы...

Творчество, творчество...
Без музы - не хочется.
Ваше высочество,
Теплая ночь -
Вроде зима уже,
И снега хочется,
А его все нету,
Ешкина мать...
Пива стакан,
Сигаретная пачка,
Да, истукан.
И пельмени еще...
Бляха!
Хочется.
Ночью.
Творчества?
А может снега?
А может спать?..
А может сурком,
Непробудным
До вечера,
Завтра продрыхнуть?
Или все же встать?
Скажем, к обеду?
А может к полднику?
А может быть ну его на фиг?
Как знать?
И тишина...
С балкона зодчество
Столичное видится.
Благодать...
Пиво выпито,
Все искурено.
Тишина первозданная.
...
Пойду-ка спать...


get.coursehunters.net.py

Набросал очередной python скрипт для загрузки курсов с сайта https://coursehunters.net/.
Сайт представляет возможность пройти обучение по какой-либо IT-дисциплине путём просмотра тематических видео. К курсам иногда прилагается дополнительный материал (например, исходные коды ПО).

Что делает скрипт?
1. Извлекает название курса (это название служит для имени под-папки, куда потом будет загружаться контент курса;
2. Извлекает описание курса (сохраняет его в файле description.txt);
3. Скачивает все найденные видео курса;
4. Если имеется дополнительный материал, скачивает и его.


Скрипт можно взять здесь

dns-domain-expiration-checker version 0.2.3

Добавил поддержку стоимости продления домена.

Брать тут: https://github.com/ak545/dns-domain-expiration-checker

Вкратце:
Теперь в списке доменных имён можно для каждого домена опционально прописать стоимость его продления.  Стоимость всех доменов, попавших под критерий «пора продлевать» и/или «скоро пора продлевать» суммируется, давая таким образом понять системного администратору, сколько денег необходимо зарезервировать для продления доменов.


NBG ClØck & CØmbats RadiØ Player [BASS 2.4.14] for Windows x64

Пока суть да дело, немного обновил плеер свой.

  • Адаптирован разбор метаданных со станции Space Travel Radio
  • BASSHLS обновлён до версии 2.4.2.

    Версия для Microsoft Windows 7/8/10 64-разрядная платформа, x64
    Брать здесь.
NBG ClØck & CØmbats RadiØ Player [BASS 2.4.14] for Windows x64
NBG ClØck & CØmbats RadiØ Player [BASS 2.4.14] for Windows x64


Как научиться программировать за час?

Некоторые люди меня спрашивают о том, как можно быстро научиться программировать.
Что ж, вот вам подробный рассказ о том, как научиться программировать за час.

Read more...Collapse )

Теперь, когда вы познакомились с основами программирования, давайте подведём итог.
Как научиться программировать за час?

Ответ...Collapse )

Web Audio Player with Audio Visualizer

Вотъ.
Понадобилось тут для одного моего сайта встроенный мини веб аудио плеер сделать.
Простенький.
Ну я так не умею.
Добавил Audio Visualizer.
А пусть тоже будет ;)

Гармоника рисуется на канве (canvas).



var IS_RADIO = false;

var analyzer;
var canvas;
var ctx;
var audio;
var source;
var audioContext;


audio = document.getElementById("player");
audio.volume = 0.1;
audio.addEventListener('ended', AudioEnded, false);
audio.addEventListener('playing', AudioPlaying, false);
audio.crossOrigin="anonymous";


audioContext = new AudioContext();
source = audioContext.createMediaElementSource(audio);


function av() {
 canvas = document.getElementById('canvas');
 canvas.width = window.innerWidth;
 canvas.height = 250; //window.innerHeight;
 ctx = canvas.getContext('2d');

 analyzer = audioContext.createAnalyser();
 analyzer.fftSize = 4096; //2048;
 source.connect(analyzer);
 analyzer.connect(audioContext.destination);
 draw();
};

function draw() {
 requestAnimationFrame(draw);
 var spectrum = new Uint8Array(analyzer.frequencyBinCount);
 analyzer.getByteFrequencyData(spectrum);
 ctx.clearRect(0,0,canvas.width, canvas.height);
 var prev = {
      x: 0,
      y: 0
    };
 var w = 20;
 ctx.beginPath();
 ctx.moveTo(0, canvas.height);
 ctx.lineTo(0,canvas.height - spectrum[0]);

 for(var i = 0; i < spectrum.length; i += w) {
   var curr = {
      x: i,
      y: canvas.height - spectrum[i]
   };
   
   var next = {
      x: i + w,
      y: canvas.height - spectrum[i + w]
   };
   
   var xc = (curr.x + next.x) / 2;
   var yc = (curr.y + next.y) / 2;
   ctx.quadraticCurveTo(curr.x, curr.y, xc, yc);
   
   prev = {
      x: curr.x,
      y: curr.y
   };
   
 };
 
 ctx.quadraticCurveTo(prev.x, prev.y, canvas.width, canvas.height);
 ctx.fillStyle = '#212121';
 ctx.closePath();  
 ctx.shadowColor = 'rgba(0,0,0,.2)';
 ctx.shadowBlur = 20;
 ctx.shadowOffsetX = 2;
 ctx.shadowOffsetY = -5;
 ctx.fill();
};

function AudioEnded() {
 if (IS_RADIO) {
  NewRSrc();
 } else {
  NewSrc();
 }
}
function AudioPlaying() {
 av();
}
// Запрос URL для нового встроенного в сайт трека
function NewSrc() {
 $.ajax({
  url: "/get.php?newmp3=1",
  cache: false,
  success: function(doc) {
    IS_RADIO = false;
    audio.src = doc;
    audio.load();
    audio.play();
    $("#rt").html('');
    $("#mt").html('');
    delete doc;
  }
 });
}
// Запрос URL для новой радиостанции
function NewRSrc() {
 $.ajax({
  url: "/get.php?newrt=1",
  cache: false,
  success: function(doc) {
    IS_RADIO = true;
    var res = JSON.parse(doc);
    audio.src = res.src;
    audio.load();
    audio.play();
    $("#rt").html(' ' + res.name);
    $("#mt").html('');
    delete doc;
  }
 });
}




Что из этого вышло:


Согласитесь - ничего сложного ;)