четверг, 14 июня 2012 г.

Грустно и смешно

- Здравствуйте, дети. Тема сегодняшнего урока – «Откат». Кто мне скажет, что такое откат?
- Откат – это денежный эквивалент благодарности за то, что в тендере выбрали именно нашу фирму.
- А что такое тендер?
- Тендер – это чемпионат отрасли по откатам.
- Молодец, садись, шесть. Четыре тебе и два ты сам знаешь куда.

Записываем условие задачи. У Вани было 5 яблок. По документам. По факту 3, а по договору 7.
Вопрос: сколько яблок будет у того, кто проверяет Ванину хозяйственную деятельность?

Следующий вопрос. Влияние родственных связей на коррупцию. Санат.
- Я не выучил.
- Садись, пять.
- Спасибо папа.

- Кто приведет мне примеры коррупции в истории? Никто не знает? Гоголь «Мертвых душ» сколько томов написал по документам? Два. А сдал? Один. Где второй? Сгорел! Теперь вы понимаете, почему у нас новый компьютерный класс сгорел? И почему спортзал скоро сгорит?

И последний вопрос. Назовите мне идеальную отрасль.
- Нанотехнологии!
- Почему?
- Потому что деньги тратятся на результат, невидимый человеческому глазу!
- Молодец!
- Не забудьте сказать родителям сдать по 500 рублей на ремонт класса.
- Опять по 500!
- Мне сдадите по 300. Не бойтесь, если родители будут спрашивать, скажу, что собирал по 500. До свидания!

четверг, 24 мая 2012 г.

Фталаты - тератогены


Косметика содержащая фталаты:
"фталаты" (phthalate)
"дибутилфталат" (dibutyl phthalate, ДБФ, DBF)
"диэтилфталат" (diethyl phthalate)
"диметилфталат" (dimethyl phthalate)
Вызывает пороки половой системы у детей-мальчиков

Фталаты содержатся в 80% лаков для ногтей.
Их используют такие бренды как:
Chanel, Christian Dior, Cover Girl, Max Factor, Maybelline, Oil of Olay, Bon Bonz и другие.
Корпорации:
Procter & Gamble, L'Oreal, Maybelline, Colgate Palmoliv, Unilever, Henkel, Revlon, Shiseido, Akzo Nobel, Elizabeth Arden

Обзор книги "Расология" Авдеева В.Б.

Интересные моменты в книге:
-Подробное описание физиологических и биохимических различий между расами  (стало понятно почему поза лотоса так неудобна для меня :) )
-Раскрывается связь культурных особенностей с биологией
-Развенчиваются некоторые мифы, например о связи индейцев и монголоидов
и многое другое

Цитаты:


Примечательно, что распространение ислама в Средней Азии всецело связано с появлением более высокого процента монголоидной примеси, и границы ее распространения точно соответствуют границам распространения ислама. Таким образом, становится очевидным, что именно изменение концентрации тех или иных расовых признаков способствует ускорению или ослаблению продвижения любой идеологии, в том числе и религиозной


...количество связей между нейронами, как раз и служащих реальным отражением степени интеллектуального и культурного развития расовых и этнических групп, может различаться в пределах от 10 до 10000 (!). Кроме того, масса мозга, ответственная за те или иные функции, например, абстрактное мышление или математические способности, у представителей разных рас может различаться в пять раз (!). Это значит, что у представителя той или иной ''низшей'' расы никогда не будет возможности усвоить культуру ''высшей'' расы и понять ее, потому что сам процесс обучения не может увеличить массу тех или иных центров мозга и не может создать новые связи между нейронами. Нельзя развить то, к чему нет предпосылок.


Расовые различия легко обнаруживаются в темпе, размахе и ритме движений. Так, например, длительность раскачиваний при ходьбе у негров совершенно иная, чем у китайцев или индейцев. Различная физическая утомляемость, мышечная сила, вариации в расположении мягких частей тела и центра тяжести делают движения представителей одних рас совершенно не похожими на движения представителей других. Эйкштедт конкретизировал: ''Негры ступают твердо, нордические люди вышагивают, веддоиды семенят, старые люди ориентальной расы ходят вперевалочку, а нилоты – как на ходулях. Европеец сидит со свисающими ногами, восточный человек подкладывает ноги под себя, малаец сидит на корточках, негритянка стоит на коленях. Одно дело – северный европеец, другое – гибкий негритос. Европеец вообще не может правильно сидеть на корточках – это невозможно из-за массивных связок, толстых костей и распределения мускулов. Можно к этому привыкнуть, научиться более или менее искусно подражать сидящим на корточках или какое-то время сидеть ''по-турецки'', но автор на собственном опыте убедился, какая это тяжелая работа, по несколько часов присутствовать на ночных праздниках первобытных лесных народов. Сохраняя надлежащую позу. Известно, что у разных народов есть и разные формы плавания, что у них разные формы ног, и что плоскостопие является групповой особенностью (у негров и евреев)''.


Культурный и социальный тип общества, алгоритм поведения в нем, стилистика психического переживания индивида задается расой. Не среда формирует расы, но раса формирует среду. И расовые признаки – это не податливый пластический материал, подверженный изменениям извне, но, напротив, первооснова всех социокультурных трансформаций общества. Расовые признаки – это не глина, послушная руке ваятеля, это острие резца, созидающее контуры бытия сообразно своей механической прочности.


...возникновение и распространение самой идеи Единого Бога прежде всего связано с патологическими факторами строения нервной системы, предопределяющими развитие бреда мономании, а также с повышенной агрессивностью и дальтонизмом. Именно сочетание этих негативных признаков и способствует созданию пирамиды монотеистической философии. Бессознательная и беспричинная жестокость вкупе с генетической неспособностью различать цвета и оттенки автоматически толкает людей в лоно концепции Единых Бога, Истины, дьявола или абсолюта. До всякой единственности нужно не дорасти, но опуститься, в том числе и в смысле идеологического убожества. Проблема арийского политеизма и семитического монотеизма – это не проблема свободы религиозного выбора, но прежде всего расово-архетипической конструкции мозга.


Именно различная концентрация левых и правых форм молекул в строении организмов дает в конечном счете то разнообразие рас, которое мы имеем сегодня. Различие культур как следствие различия врожденных психических стилей их создателей также имеет молекулярную

---------------------
Содержание книги:

РАСОЛОГИЯ И АНТРОПОЛОГИЯ: К ВОПРОСУ О РАЗЛИЧИЯХ

БЕЛОКУРАЯ РАСА: ИСТОРИОГРАФИЯ И АНТРОПОЛОГИЯ
1. Возникновение науки о белом человеке
2. Русская классическая школа антропологии
3. Создание расовой теории
4. Антропосоциология
5. Немецкая расология
6. Оформление нордической идеи
7. Советская и постсоветская наука на службе у расовой теории

БИОЛОГИЧЕСКАЯ ОСНОВА НОРДИЧЕСКОГО МИРОВОЗЗРЕНИЯ

РАССУЖДЕНИЯ О РАСОВЫХ ПРЕДРАССУДКАХ
1. Естественная природа расовых предрассудков
2. Антропоэстетика
3. Основы расовой морали
4. Краниологические признаки эволюционной ценности рас
5. Физические критерии умственного превосходства
6. Социальная проекция срастания швов черепа
7. Расовые различия в строении таза
8. Расовые различия в строении мозга
9. Основы биологической иерархии культур
10. Расовая одонтология
11. Пигментация кожи и «монгольское» пятно
12. Волосы как расовый признак
13. Расовая соматология
14. Атавистические (обезьяньи) признаки в морфологии рас
15. Глаза как расовый признак
16. Расовые запахи и пристрастия людоедов
17. Главные различия в строении внутренних и половых органов
18. Главные различия в физиологии рас
19. Мода на уродование у различных рас
20. Расовые предрассудки как основная движущая сила эволюции

НОВАЯ ПАРАДИГМА В РАСОЛОГИИ
АНТИРАСОВЫЙ МИФ О «ПЛАВИЛЬНОМ КОТЛЕ»
1. «Чернокожая лысенковщина»
2. Эволюционная устойчивость расовых признаков
3. Наследственный полиморфизм
4. Проблема расы в современной русской науке
5. Раса как высшая ценность
6. Расы против вида
7. Полигенизм
8. Проблема «границы» между человеком и животным
9. Единое человечество как фикция

РАСОВО-ИДЕОЛОГИЧЕСКАЯ НЕВРОЛОГИЯ
1. Мозг как седалище души
2. Причины неравенства идей
3. Новая концепция интеллекта
4. Культура как биологическое оружие
5. Фикционализм
6. Диагноз: наследственная агрессивность
7. Биохимия идеологии
8. Психопатология монотеизма
9. «Правые» и «левые» расы
10. Профилактика дегенерации и противостояние распаду


РАСОВАЯ ТЕОРИЯ ВРЕМЕНИ






вторник, 22 мая 2012 г.

FLV и YouTube

Недавно исследовал сабж, выношу результаты в своего рода FAQ:

Где быстро и просто узнать о FLV?
На сайте Xuggler есть 4 коротких обучающих видео по 5 минут. Покрывают все основы, единственный вопрос который там остается без внимания, это кодеки в видеопотоке FLV.

Какие кодеки можно использовать в FLV видеостриме?
Написано в этой статье:
Flash Player versionReleasedFile formatVideo compression formatsAudio compression formats
62002SWFSorenson Spark, Screen videoMP3, ADPCM, Nellymoser
72003SWF, FLVSorenson Spark, Screen videoMP3, ADPCM, Nellymoser
82005SWF, FLVOn2 VP6, Sorenson Spark, Screen video, Screen video 2MP3, ADPCM, Nellymoser
92007SWF, FLVOn2 VP6, Sorenson Spark, Screen video, Screen video 2, H.264MP3, ADPCM, Nellymoser, AAC
SWF, F4V, ISO base media file formatH.264AAC, MP3
102008SWF, FLVOn2 VP6, Sorenson Spark, Screen video, Screen video 2, H.264MP3, ADPCM, Nellymoser, Speex, AAC
SWF, F4V, ISO base media file formatH.264AAC, MP3
Можно ли скачивать видео с YouTube с помощью YouTube Java API?
Нельзя. TOS хоть прямо и не говорит, но намекает что ютубу нет смысла публично заявлять о возможности это делать.

Можно ли скачивать видео с YouTube?
Можно, для этого надо использовать REST апи ютуба (вот они, двойные стандарты!). Это API нещадно меняют время от времени, но суть остается:
1) Первым запросом получаем мета-инфу о видео
2) Вторым запросом (где используем инфу из ответа на первый) запрашиваем файл.

В данный момент это делается с использованием таких методов REST api:
get_video_info, в ответе которого хранится интересующее нас поле url_encoded_fmt_stream_map.
В этом поле содержится несколько ссылок на различные качества видео, а чтобы ссылка была дееспособна, надо отсекать от неё все что идет после "fallback_host" включительно.

Ну и немаловажный момент: первый запрос и второй должны иметь общий http контекст, так как в первом запросе в контексте создается кука, без которой второй запрос получит 403 от сервера.

Вот proof-of-concept код, достаточно корявый но рабочий:


import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLDecoder;


import java.util.*;


import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.client.utils.URIUtils;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;


public class D {


    private static final String scheme = "http";
    private static final String host = "www.youtube.com";


    public static void main(String[] args) {
        try {
            String videoId = null;
            String outdir = ".";
            if (args.length == 1) {
                videoId = args[0];
            } else if (args.length == 2) {
                videoId = args[0];
                outdir = args[1];
            }


            int format = 18; // http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs
            String encoding = "UTF-8";
            String userAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
            File outputDir = new File(outdir);
            play(videoId, format, encoding, userAgent, outputDir);


        } catch (Throwable t) {
            t.printStackTrace();
        }
    }


    static HttpContext localContext = new BasicHttpContext();
    private static void play(String videoId, int format, String encoding, String userAgent, File outputdir) throws Throwable {
        System.out.println("Retrieving " + videoId);
        List qparams = new ArrayList();
        qparams.add(new BasicNameValuePair("video_id", videoId));
        qparams.add(new BasicNameValuePair("fmt", "" + format));
        URI uri = getUri("get_video_info", qparams);


        CookieStore cookieStore = new BasicCookieStore();
        localContext = new BasicHttpContext();
        localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);


        HttpClient httpclient = new DefaultHttpClient();
        HttpGet httpget = new HttpGet(uri);
        httpget.setHeader("User-Agent", userAgent);


        System.out.println("Executing " + uri);
        HttpResponse response = httpclient.execute(httpget, localContext);
        HttpEntity entity = response.getEntity();
        if (entity != null && response.getStatusLine().getStatusCode() == 200) {
            InputStream instream = entity.getContent();
            String videoInfo = getStringFromInputStream(encoding, instream);
            if (videoInfo != null && videoInfo.length() > 0) {
                List infoMap = new ArrayList();
                URLEncodedUtils.parse(infoMap, new Scanner(videoInfo), encoding);
                String downloadUrl = null;
                String filename = videoId;
                String urlMap = null;


                for (NameValuePair pair : infoMap) {
                    String key = pair.getName();
                    String val = pair.getValue();
                    System.out.println(key + "=" + val);
                    if (key.equals("title")) {
                        filename = val;
                    } else if (key.equals("url_encoded_fmt_stream_map")) {
                        urlMap = val;
                        String[] urls = urlMap.split("url=");
                        String[] decodedUrls = new String[urls.length];
                        for (int i = 0; i < urls.length; i++) {
                            decodedUrls[i] = URLDecoder.decode(URLDecoder.decode(urls[i], "UTF-8"), "UTF-8").replaceAll(",$", "");
                        }
                        //we use first available quality
                        downloadUrl = decodedUrls[1].replaceAll("&fallback_host.*", "");
                    }
                }
                File outputfile = new File(outputdir, "out.flv");
                if (downloadUrl != null) {
                    downloadWithHttpClient(userAgent, downloadUrl, outputfile);
                }
            }
        }


    }


    private static void downloadWithHttpClient(String userAgent, String downloadUrl, File outputfile) throws Throwable {
        HttpGet httpget2 = new HttpGet(downloadUrl);
        httpget2.setHeader("User-Agent", userAgent);
        System.out.println("Executing " + httpget2.getURI());
        HttpClient httpclient2 = new DefaultHttpClient();
        HttpResponse response2 = httpclient2.execute(httpget2, localContext);
        HttpEntity entity2 = response2.getEntity();
        if (entity2 != null && response2.getStatusLine().getStatusCode() == 200) {
            long length = entity2.getContentLength();
            InputStream instream2 = entity2.getContent();
            System.out.println("Writing " + length + " bytes to " + outputfile);
            if (outputfile.exists()) {
                outputfile.delete();
            }
            FileOutputStream outstream = new FileOutputStream(outputfile);
            try {
                byte[] buffer = new byte[2048];
                int count = -1;
                while ((count = instream2.read(buffer)) != -1) {
                    outstream.write(buffer, 0, count);
                }
                outstream.flush();
            } finally {
                outstream.close();
            }
        }
    }


    private static URI getUri(String path, List qparams) throws URISyntaxException {
        URI uri = URIUtils.createURI(scheme, host, -1, "/" + path, URLEncodedUtils.format(qparams, "UTF-8"), null);
        return uri;
    }


    private static String getStringFromInputStream(String encoding, InputStream instream) throws UnsupportedEncodingException, IOException {
        Writer writer = new StringWriter();


        char[] buffer = new char[1024];
        try {
            Reader reader = new BufferedReader(new InputStreamReader(instream, encoding));
            int n;
            while ((n = reader.read(buffer)) != -1) {
                writer.write(buffer, 0, n);
            }
        } finally {
            instream.close();
        }
        String result = writer.toString();
        return result;
    }
}




понедельник, 21 мая 2012 г.

Правильно о детях

Не могу обойти вниманием эту статью http://vicsrg.ho.com.ua/stat/child/child.htm

О беременности, рождении, уходе, кормлении. Прекрасно и подробно оформлено. Полностью конгруэнтно моим идеям и правильном подходе.

Для людей с незасранными матрицей мозгами.

Кстати, остальные статьи этого автора также стоят прочтения.

четверг, 17 мая 2012 г.

Паттерны проектирования: Object Pool

В данном выпуске рассмотрим паттерн Object Pool, который является частным случаем фабрики. Данный паттерн позволяет увеличить производительность при необходимости частого использования дорогостоящих в создании объектов.