Бесплатные online ресурсы для самообразования

UPDATE 21.03.2015
https://sfera-mail.ru/video/learn – лекции от ВМК МГУ и мейл.ру посвященные движущей силе современных веб-проектов – Hadoop, Data Mining, поиск.
http://shad.yandex.ru/lectures/ – добротная выжимка практического computer scince – алгоритмы, машинное обучение, параллельные вычисления и старый добрый тервер.
https://www.youtube.com/playlist?list=PLnDbcXCpYZ8lCKExMs8k4PtIbani9ESX3 – популярный ныне deep learning от мастодонтов индустрии
http://habrahabr.ru/post/253477/ – хабра подборка вменяемых конференций, которые не жадничают выкладывать видео

UPDATE 27.04.2013
Codecademy – интерактивная среда для обучения Web-программированию
Hack Design.org/ – курсы по web-дизайну
EdX – каталог курсов от MIT, Harvard и других университетов
Coursera – если вы ленитесь просто смотреть лекции, то, возможно, вам будут полезны учебные программы курсеры – упражнения нужно делать к сроку, а в конце вас ждет экзамен. предоставляют онлайн сертификаты об окончании.
Udacity – если курсера – это все-таки академический подход, то на удасити многие курсы ведут практикующие эксперты

Видео-курсы лекций американских университетов:

от Йельского Университетаhttp://oyc.yale.edu/ и http://www.youtube.com/yalecourses

от Гарвардского Университетаhttp://www.extension.harvard.edu/courses, в частности любопытная подборка на тему Computer Science есть здесь – http://computerscience1.tv/

от Университета Берклиhttp://webcast.berkeley.edu/series.html и http://www.youtube.com/UCBerkeley

от Массачусетского Университетаhttp://ocw.mit.edu/index.htm

от Стенфордского Университетаhttp://ecorner.stanford.edu/ и тут

от Открытого Университета Великобритании –  лекции в свободном доступе – http://www.open.ac.uk/openlearn/

Интересная коллекция ссылок на лекции из разных источников собраны там http://lecturefox.com/ и там http://www.openculture.com/freeonlinecourses

На http://www.academicearth.org для просмотра определенных разделов необходимо регистрироваться, но тоже заслуживает внимания.

Любопытная подборка материалов на русском языке, нацеленных на бизнес-образование – http://businesslearning.ru/

Математические дисциплины, а также полезные курсы по программированию из лучших вузов, на русском языке освещены в лекториуме – http://www.lektorium.tv

Ну и для самостоятельного копания:

Широкий выбор видео-лекций на канале education от youtube – http://www.youtube.com/education

Его русско-язычный аналог – http://univertv.ru/

На iTunes, есть бесплатный образовательный подраздел iTunes U, просмотреть который можно не только c i-устройств, но и с обычного ПК, уставновив на него бесплатную программу iTunes.

UPDATE списка свободных онлайн курсов от 18.08.2012:

поиск по курсам университетов (MIT,Stanford, Yale, Бостонский, Токийский, Мадридский и некоторых других):
http://www.ocwsearch.com/

Поиск по курсам всех университетов учавствующих в программе дистанционного обучения – http://www.ocwconsortium.org/en/courses есть поиск не только по теме но и по языку.

www.khanacademy.org – интерактивная система онлайн обучения, содержащая не только лекции и задачи, но и позволяющая управлять процессом своего обучения

Викиверситет – http://ru.wikiversity.org/

http://videolectures.net/ – содержит видео-материалы с семинаров и лекций, посвященным различным областям науки

www.cosmolearning.com – обширная коллекция видео-лекций разной тематики

Бесплатные online-курсы университетов:

Stanford Class Central – полный список доступных бесплатно курсов от Stanford, Harvard, Mit и Udacity
www.class-central.com

facultyproject.com – проект позиционируется как лучшие лекции от лучших профессоров

http://www.academicearth.org/ – еще один агрегатор свободно доступных курсов от ведущих американских университетов

Johns Hopkins University – ocw.jhsph.edu – свободно доступные материалы медицинской тематики

Kaplan University – ocw.kaplan.edu – выложены для общего доступа несколько курсов по всем значимым для университета тематикикам – юрисприденция, предпринимательство, информационные технологии и другие.

Notre Dame ocw.nd.edu – данный университет открыл для общего доступа лекции преимущественно гуманитарного направления – архитектура, история, философия и т.п.

Институт Принстона (Princeton’s Institute for Advanced Study) предлагает всем желающим обширную медиатеку на тему истории, математики, естественных наук – video.ias.edu

На сайте университета Tufts – ocw.tufts.edu – доступны курсы, в основном, на тему генетики, медицины, биологии.

Utah State – ocw.usu.edu – материалы на тему агро-технологий и смежных наук.

University of Washington – Computer Science & Engineering – есть очень любопытные курсы – http://www.cs.washington.edu/education/multimedia/

Огромная коллекция подкастов – записи лекций и семинаров всевозможных тематики университета Вержинии (University of Virginia)
www.virginia.edu/uvapodcast/

Подкасты от университета Сиднея (University of Sydney) – социология, история – http://sydney.edu.au/podcasts

Немного курсов в свободном доступе есть у университета Южного Квинсленда – ocw.usq.edu.au

Хорошая большая подборка курсов доступна на сайте университета Мичигана – (University of Michigan) – http://open.umich.edu/education

Гуманитарные курсы Массачусетского университета – ocw.umb.edu

Открытые для всех желающих курсы университета Карнеги-Мелонн (Carnegie Mellon) http://oli.cmu.edu/

Видео подкасты лекций по конфликтологии и переговором – Чикагского университета – http://news.uchicago.edu/multimedia

Технический университет Дельфт (некоторые лекции не на английском – я натыкался и на голландский) http://ocw.tudelft.nl/courses

Некоторые курсы университета Capilano доступны всем тут – http://ocw.capilanou.ca/

Лекции калифорнийского университета (UC Irvine) – http://ocw.uci.edu/

Лекции в аудио-видео формате от университета Сан-Диего (UC San Diego) – http://podcast.ucsd.edu/

лекции Индийского университета удаленного обучения (NPTEL) на ютубе – www.youtube.com/user/nptelhrd

лекции университета Нового Южного Уэльса (New South Wales) на ютубе – www.youtube.com/user/UNSWelearning

Сайты посвященные бесплатному самообразованию

Коллекция видео-пособий от About.com – http://u.about.com/

www.uopeople.org (University of the People) – университет предлагающий официальные дипломы на основе онлайн курсов

http://www.openculture.com/freeonlinecourses – список 500 бесплатных онлайн-курсов для самообразования

дочерний проект reddit.com посвященный самообразованию – http://ureddit.com/

www.google.com/edu – Google in Education – программы обучения и конкурсы для студентов и школьников

http://cnx.org/ – здесь нет записей целых курсов или лекций, вместо этого выбран другой подход к обучению – вы выбираете интересующую вас тему и получаете список видео-материалов по ней

Дополнения всячески приветствуются.

UPDATE 29.12.2012
http://habrahabr.ru/post/156241/ – интересный пост на Хабре посвященный ресурсам самообразования по профилю IT.

UPDATE 26.10.2013

http://htmlacademy.ru/ – интерактивные курсы по html/css на русском

Команда source – как выполнить bash-скрипт не запуская второй процесс bash

В линукс-системах, в консоли, каждый скрипт запускается следующим образом:

1) определяется необходимый интерпретатор для его выполнения (на основе указания-подсказки внутри самого файла, по расширению, и т.п.)
2) запускается новый процесс командного интерпретатора, в рамках которого и выполняются инструкции из скрипта
3) процесс-родитель, из которого была запущена новая копия интерпретатора приостанавливает свою работу
4) по выполнении всех инструкций дочерний процесс интерпретатора завершает свою работу
5) процесс-родитель возобновляет свою работу

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

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

В результате, если у вас есть скрипт test_export.sh следующего содержания
#!/bin/sh
export MYVAR=”some value”;
то результатом следующей последовательности команд:

1)  ./test_export.sh
2)  echo $MYVAR

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

Для того чтобы команды скрипта выполнялись в контексте текущего экземпляра интерпретатора необходимо
использовать команду “source” или его аналог команду “.” – да, команда точка.

1) . ./test_export.sh или source ./test_export.sh
2) echo $MYVAR

Таким образом мы указываем интерпретатору не запускать дополнительный экземпляр для обработки комманд скрипта,а заняться им самому.

А вообще, по-хорошему, переменные окружения должны устанавливаться специальными startup или pre-load-скриптами, выполняющимися при загрузке самой системы, x-window или нового экземпляра консоли – в зависимост от наших конкретных задач. Есть специальные утилиты для управления скриптами, выполняемыми при загрузке системы – update-rc.d, file-rc. Но, при острой необходимости управлять скриптами можно и голыми руками: гуглить “.bashrc”, “.bash_profile”, “.profile”, /etc/rc?.d/rc.N ).

Java – как доверять всем ssl сертификатам

Оставим за пределами данной заметки рассуждения касательно безнравственности поставленной задачи и перейдем непосредственно к рассмотрению возможных способов ее решения на java (для android-приложений также вполне актуально).

1 cпособ – Как доверять всем ssl-сертификатам, используя HttpsURLConnection:

Создадим класс описывающий интерфейс для управления сертификатами безопасности стандарта X509 (вот тут описано в деталях что это такое):

private class X509_Trust_Manager implements X509TrustManager
{
    @Override
    public void checkClientTrusted(X509Certificate[] chain, String authType)
    throws CertificateException {}
    @Override
    public void checkServerTrusted(X509Certificate[] chain, String authType)
    throws CertificateException {}
    @Override
    public X509Certificate[] getAcceptedIssuers()
    {
        return null;
    }
};

Создадим экземпляр класса для проверки (а вернее ее отсутствии) для любых соединений:

HostnameVerifier TRUST_ALL_CERTIFICATES = new HostnameVerifier()
{
    public boolean verify(String hostname, SSLSession session)
    {
        return true;
    }
};

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

SSLContext Cur_SSL_Context = null;
try
{
    Cur_SSL_Context = SSLContext.getInstance("TLS");
    Cur_SSL_Context.init(null, new TrustManager[] { new X509_Trust_Manager() }, new SecureRandom());
}
catch (Exception e)
{
    e.printStackTrace();
}

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

HttpsURLConnection.setDefaultHostnameVerifier(TRUST_ALL_CERTIFICATES);
HttpsURLConnection.setDefaultSSLSocketFactory(Cur_SSL_Context.getSocketFactory());

2 способ – Как доверять всем ssl-сертификатам, используя HttpClient

Для начала, нам необходимо расширить стандартную фабрику – SSLSocketFactory, так, чтобы она использовала наш менеджер для управления доверенными соединениями (X509_Trust_Manager).

Перво-наперво: есть две имплементации класса SSLSocketFactory:  javax.net.ssl.SSLSocketFactory и org.apache.http.conn.ssl.SSLSocketFactory. Использовать надо именно апачевскую (org.apache.http.conn.ssl.SSLSocketFactory). И да, это критично.

В примере ниже используется класс X509_Trust_Manager, определенный в примере для HttpsURLConnection, описывающий интерфейс для управления сертификатами безопасности стандарта X509.

public class Naive_SSLSocketFactory extends SSLSocketFactory
{
    protected SSLContext Cur_SSL_Context = SSLContext.getInstance("TLS");
    public Naive_SSLSocketFactory()
    throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException
    {
        super(null, null, null, null, null, null);
        Cur_SSL_Context.init(null, new TrustManager[]{new X509_Trust_Manager()}, null);
    }
    @Override
    public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException
    {
        return Cur_SSL_Context.getSocketFactory().createSocket(socket, host, port, autoClose);
    }
    @Override
    public Socket createSocket() throws IOException
    {
        return Cur_SSL_Context.getSocketFactory().createSocket();
    }
}

После чего задаем параметры нашего будущего соединения, указывая, что для построения защищенного канала необходимо использовать нашу, определенную выше, фабрику SSLSocketFactory. При проверке сертификатов безопасности она вызывает методы единственного доступного менеджера для управления сертификатами (X509_Trust_Manager), который одобряет все сертификаты не глядя. На основе этих параметров мы получаем HttpClient, который можно использовать для организации обмена данными между клентом и сервером по защищенному соединению.

HttpClient client = null;
try
{
    SchemeRegistry Current_Scheme = new SchemeRegistry();
    Current_Scheme.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
    Current_Scheme.register(new Scheme("https", new Naive_SSLSocketFactory(), 443));
    HttpParams Current_Params = new BasicHttpParams();
    ThreadSafeClientConnManager Current_Manager = new ThreadSafeClientConnManager(Current_Params,Current_Scheme);
    client = new DefaultHttpClient(Current_Manager, Current_Params);
}
catch(Exception e)
{
    e.printStackTrace();
}

Преимущество варианта с HttpClient в возможности реализовать действительно многопоточное взаимодействие клиента с сервером на основе MultiThreadedHttpConnectionManager (о чем можно почитать тут и тут), тогда как при использовании HttpsURLConnection передача данных осуществляется по принципу “пока не получил ответа на предыдущий запрос – больше ничего спрашивать и не стану”. Да, данные снипеты вполне могут использоваться и под android.

Ссылки по теме “Работа с ssl-сертификатами и httpClient в java“:

http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html
http://stackoverflow.com/questions/2642777/trusting-all-certificates-using-httpclient-over-https
http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html
http://stackoverflow.com/questions/995514/https-connection-android#1000205
http://homepage.mac.com/kelleherk/iblog/C149402102/E773353034/index.html

Как получить текущую дату в Java

Используя класс Calendar:

Calendar Current_Calendar = Calendar.getInstance();

Date Current_Date = Current_Calendar.getTime();

Используя класс Date:

Date Current_Date = new Date();

Android – работа с ssl-сертификатами (как организовать передачу данных через HTTPS)

Что делать, если необходимо получать данные в андроиде через защищенное https-соединение? Почему генерируется ошибка SSLException: Not trusted server certificate ? Как добавить сертификат с сервера в локальное хранилище ключей на андроид-устройстве? Если вас волнуют эти вопросы – вам будет полезна инструкция для установки ssl сертификатов и сниппет кода для их загрузки в ваше андроид-приложение.

1. Как узнать, что за сертификат используется сервером (На Linux/Mac Os – как правило, пакет openssl предустановлен, для  Windows – актуальные ссылки в разделе бинарниики там):

openssl s_client -connect <server-ip>:<server-port>

для самоподписанных сертификатов выведется нечто вроде:

Certificate chain
0 s:/CN=localhost
i:/CN=localhost
— Server certificate
—–BEGIN CERTIFICATE—–

—–END CERTIFICATE—–

если используется сертификат, подписанный сторонней компанией – будут отображены координаты, по которым можно раздобыть публичный сертификат

2. Создаем файл сертификата

А). Для самоподписанного сертификата:

1. создать пустой файл my-certificate-file.pem

2. скопировать в новый файл закодированные данные сертификата:

—–BEGIN CERTIFICATE—–

—–END CERTIFICATE—–

да, открывающий\закрывающий теги должны быть.

Если сертификат самоподписанный можно использовать данный bash-script

echo | openssl s_client -connect <server-ip>:<port> 2>/dev/null | sed -ne ‘/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p’ > my-certificate-file.pem

Б). Если сертификат используемый сервером подписан сторонней организацией, на предыдущем шаге мы увидим ее контакты по которым его можно запросить. Почитать про разные типы сертификатов и попробовать онлайн-конвертер из одного типа в другой можно тут – https://www.sslshopper.com/ssl-converter.html

3. Создаем файл-хранилище с этим единственным ключом:

keytool -import -v -trustcacerts -alias myalias -file <(openssl x509 -in my-certificate-file.pem) -keystore mystore.bks -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath /<full-path>/bcprov-jdk16-146.jar -storepass <initial-password-for-storage>

-alias myalias – псевдоним для работы с сертификатом

-keystore mystore.bks – говорим какой файл создать для хранения этого сертификата

-storetype BKS – android поддерживает такой тип хранилища, для того чтобы сгенерировать, его мы должны добавить в наш java CLASSPATH соответствующий jar-файл, последнюю версию которого можно взять отсюда – http://www.bouncycastle.org/latest_releases.html

для создания хранилища необходимо отдельно указать поставщика данного типа хранилища, а также путь к java-классу его реализующего.

-provider org.bouncycastle.jce.provider.BouncyCastleProvider

-providerpath /<full-path>/bcprov-jdk16-146.jar

(если этого не сделать появляется ошибка: keytool error: java.security.KeyStoreException: BKS not found)

4. Файл-хранилище мы можем добавить себе в проект чтобы использовать на этапе тестирования – например в папку assets. В обычном режиме работы, очевидно, его необходимо считывать из определенной директории для того чтобы работать с актуальной версией сертификата.

5. В android-приложении пригодится следующий сниппет кода:

1 этап – загружаем файл-хранилище с нашим сертификатом:

KeyStore ks = null;
try
{
    ks = KeyStore.getInstance("BKS");
    final InputStream in = this.getResources().getAssets().open("mystore.bks");
    try
    {
        String pass = "input-your-password-here";
        ks.load(in, pass.toCharArray());
    }
    finally
    {
        in.close();
    }
 }
 catch( Exception e )
 {
     Log.i("Your_Function_Name","Exception - "+e.toString());
 }

В реальном приложении, очевидно, файл необходимо будет считывать из предопределенной директории.

2 этап – создаем фабрику управления доверительными соединениями, она будет использоваться для проверки сертифкатов всех https соединений (я еще раз подчеркиваю – ВСЕХ)

TrustManagerFactory Main_TMF= null;
try
{
    Main_TMF= TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    Main_TMF.init(ks);
}
catch(Exception e)
{
    Log.i("Your_Function_Name","Exception - "+e.toString());
}

X509TrustManager Main_Trust_Manager = null;

for( TrustManager tm : Main_TMF.getTrustManagers() )
if (tm instanceof X509TrustManager)
{
    Main_Trust_Manager = (X509TrustManager) tm;
    break;
}

final X509TrustManager Cur_Trust_Manager = Main_Trust_Manager;
SSLContext sslContext = null;
try
{
    sslContext = SSLContext.getInstance("TLS");
    sslContext.init(null, new TrustManager[]{Cur_Trust_Manager}, new SecureRandom());
}
catch (NoSuchAlgorithmException e)
{
    Log.i("Your_Function_Name","NoSuchAlgorithmException - "+e.toString());
}
catch (KeyManagementException e)
{
    Log.i("Your_Function_Name","KeyManagementException - "+e.toString());
}
catch (Exception e)
{
    Log.i("Your_Function_Name","Exception - "+e.toString());
}

После загрузки нашего хранилища ключей мы создаем фабрику для управления доверенными соединениями на основе этого хранилища. С помощью этой фабрики получаем экземпляр менеджера соединений специфичного для ssl (X509TrustManager) и инициализируем объект SSLContext, который будет использоваться для создания защищенного соединения.

3 этап – указываем какие настройки будут использоваться при установлении защищенных соединений:

HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier()
{
    @Override
    public boolean verify(String hostname, SSLSession session)
    {
        try
        {
            Cur_Trust_Manager.checkServerTrusted((X509Certificate[]) session.getPeerCertificates(),session.getCipherSuite());
            return true;
        }
        catch( CertificateException e )
        {
            Log.i("HostnameVerifier- checkServerTrusted","CertificateException - "+e.toString());
        }
        catch (Exception e)
        {
            Log.i("HostnameVerifier- checkServerTrusted","Exception - "+e.toString());
        }
        return false;
   }
});

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

UPDATE 26.09.2012:

Хорошая статья по теме использования собственных сертификатов безопасности:

http://nelenkov.blogspot.com/2011/12/using-custom-certificate-trust-store-on.html

UPDATE 04.10.2012:

С помощью одной целеустремленной читательницы удалось приоткрыть завесу тайны над ошибкой: “SSL handshake terminated: ssl=0x1fcf30: Failure in SSL library, usually a protocol error” возникающей при попытке использовать двусторонюю аутентификацию – т.е. если не только клиент проверяет подлинность сервера но и сервер, проверяет что за клиент к нему лезет.

//client's KeyStore init
File f = new File(path);
final InputStream in = new FileInputStream(f);
KeyManagerFactory mgrFact = KeyManagerFactory.getInstance("X509");
KeyStore clientStore = KeyStore.getInstance("PKCS12");
clientStore.load(in, PASSWORD.toCharArray());
mgrFact.init(clientStore, PASSWORD.toCharArray());

// server's KeyStore init
KeyStore ks = null;
try
{
    ks = KeyStore.getInstance("BKS");
    final InputStream in = this.getResources().getAssets().open("mystore.bks");
    try
    {
        String pass = "input-your-password-here";
        ks.load(in, pass.toCharArray());
    }
    finally
    {
        in.close();
    }
 }
 catch( Exception e )
 {
     Log.i("Your_Function_Name","Exception - "+e.toString());
 }
/*
load server's truststorage 
*/
TrustManagerFactory Main_TMF= null;
try
{
    Main_TMF= TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    Main_TMF.init(ks);
}
catch(Exception e)
{
    Log.i("Your_Function_Name","Exception - "+e.toString());
}

X509TrustManager Main_Trust_Manager = null;

for( TrustManager tm : Main_TMF.getTrustManagers() )
if (tm instanceof X509TrustManager)
{
    Main_Trust_Manager = (X509TrustManager) tm;
    break;
}
final X509TrustManager Cur_Trust_Manager = Main_Trust_Manager;

// init ssl context for future usage
SSLContext sslContext = null;
try
{
    sslContext = SSLContext.getInstance("TLS");
}
catch (NoSuchAlgorithmException e)
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}

try
{
    sslContext.init( mgrFact.getKeyManagers(), new TrustManager[]{Cur_Trust_Manager}, new java.security.SecureRandom());
}
catch (KeyManagementException e)
{
    // TODO Auto-generated catch block
    e.printStackTrace();
} 

по мотивам:
http://www.javadocexamples.com/java_source/chapter10 – https аутентификация сервером клиента
http://www.devdaily.com/java/jwarehouse/android/core/java/android/net/http/CertificateChainValidator.java.shtml – приятственный класс для валидации сертификатов

Поучительные однострочники на bash

Скрипты на bash (или любом другом скриптовом языке) – одна из тех вещей, что делают линукс линуксом. Бесконечный набор возможностей для автоматизации рутинных операций и экономии времени. Здесь собраны полезные однострочники на bash, которые могут оказаться весьма кстати в повседневной работе или подсказать идею для новых однострочников.

1. Как вывести информацию об используемых процессом файлах:

ps -ef | grep example |awk ‘{print $2}’ | xargs -n 1 pfiles

ps -ef | grep example – Все процесс(ы) по имени example выбираются из списка запущенных

awk ‘{print $2}’ | xargs -n 1 pfiles – Из полученной результатирующей таблицы, для каждой записи, второй столбец  – значение PID процессса передается в качестве параметра для команды pfiles  с помощью xargs

2. Как посмотреть какие файлы используются запущенными процессами:

find /proc | grep “^/proc/[1234567890]*/fd/[1234567890]*$” | sort -u | wc -l

find /proc | grep “^/proc/[1234567890]*/fd/[1234567890]*$”  – Выбираем для каждого процесса используемые им файлы – список файловых дескрипторов.

sort -u | wc -l – полученный список сортируется по уникальности и подсчитывается число открытых файлов

3. Как найти все файлы определенного типа содержащие заданную строку:

find . -name “*.doc”|while read i;do catdoc “$i”|grep -H –label=”$i” -n “подстрока для поиска”;done

find . -name “*.doc” – выбираем все файлы с расширением doc в текущей папке

while read i;do catdoc “$i”|grep -H –label=”$i” -n “подстрока для поиска”;done – ищем вхождение подстроки для поиска подавая на вход команды grep содержимое файла с помощью утилиты catdoc

4. Как показать командную строку запуска всех запущенных процессов:

pstree -Aaclpu | less

5. Как узнать сколько файлов с каким расширением находятся в папке:

find /target/folder -type f | sed -r ‘s/^.*\.([^.]+)$/\1/’ | tr “[:upper:]” “[:lower:]” | awk ‘{ ext[$1]++ } END { for (e in ext) print ext[e], e }’ | sort -nr|head -n 20

find /target/folder -type f – выбираем все файлы из заданной папки

sed -r ‘s/^.*\.([^.]+)$/\1/’ | tr “[:upper:]” “[:lower:]”  – из списка их имен формируем список всех расширений

awk ‘{ ext[$1]++ } END { for (e in ext) print ext[e], e }’ – производим подсчет всех расширений

sort -nr|head -n 20 – выводим первые двадцать позиций из отсортированного списка расширений, в порядке убывания найденных с таким определением файлов

6. Как вывести список всех процессов в порядке возрастания использования процессора:

ps -e  -o pcpu,cpu,nice,state,cputime,args –sort pcpu

7. Что еще умеет export:

не только умеет экспортировать переменные в текущий экземпляр консоли но также функции (используя флаг -f) а если указать флажок export -p то выводит список как и env – всех переменных среды.

8. Поиск минимума максимума: 

echo “14, 35, -7, 46, 98″|tr ‘,’ ‘\n’ | awk ‘min==”” || $1 < min {min=$1} END {print min}’
echo “14, 35, -7, 46, 98″|tr ‘,’ ‘\n’ | awk ‘max==”” || $1 > max {max=$1} END {print max}’

9. eval – как вычислять и выполнять выражения

Подробно разжевано – тут

Примеры использования здесь и здесь

UPDATE: 26.09.2012

10. как удалить файлы и(или) директории рекурсивно начиная с текущей директории в глубь

rm -rf `find . -type f -name ‘*.class’`

например, для удаления всех папок .svn:

rm -rf `find . -type d -name .svn`

11. как заменить строку во всех файлах (применимо если не содержит управляющих символов)

sed -i ‘s/old-text/new-text/’ *.txt

UPDATE: 11.02.2013

12. как выбрать все файлы по дате

линукс, выбираем все .txt файлы в текущей папке измененные за последние 30 дней:

find . -iname “*.txt” -atime -30 -type -f

по мотивам http://www.cyberciti.biz/faq/linux-unix-osxfind-files-by-date/

солярис, вывести все файлы старше заданного:

touch /tmp/timeref
find . ! -newer /tmp/timeref -exec ls -l {} \; | more

вывести все файлы новее заданного:

find . -newer /tmp/timeref -exec ls -l {} \; | more

подчерпнуто вот отседа – http://www.tech-recipes.com/rx/441/delete-solaris-files-older-than-a-certain-date-and-time/
т.е. с помощью touch мы создаем файл с текущим временем и ищем/выводим остальные файлы сравнивая их время изменения. в exec можно и что-нибудь более интересное чем ls добавить.

И пара ссылок:

Интересные однострочники на awkhttp://www.pement.org/awk/awk1line.txt

Интересные однострочники на sedhttp://sed.sourceforge.net/sed1line.txt

Про bash, на русском: http://www.opennet.ru/docs/RUS/bash_scripting_guide/

Про bash для новичков, на английском: http://tldp.org/LDP/Bash-Beginners-Guide/html/index.html

Как подключить android-телефон для разработки в Eclipse

1. На самом телефоне идем по пунктам меню: Настройка -> Приложения -> Разработка ставим галочку напротив пункта “Отладка по USB”

2. Подключаем в режиме “Только зарядка”

3. На всякий случай из консоли/командной строки перезапускаем утилиту для работы с подключенными android-устройствами:

1) перейдем в директорию:

        cd <full-path-to-android-sdk-mac>/platform-tools/

2) перезапустим сервис:

        ./adb kill-server

        ./adb start-server

3) выведем список распознанных устройств:

        ./adb devices

4) если в полученном списке телефон отсутствует – значит нет драйверов под вашу ОС – рыдаем, ищем, ставим и повторяем все начиная с первого пункта

Как конвертировать интерфейс на Java SWT в java-script

Подробная видео-инструкция как конвертировать интерфейс на Java SWT в java-script код в eclipse.

Остальные лекции там:
http://showmedo.com/videotutorials/video?fromSeriesID=35&name=javaDevijverJ2Spart3
Как из XCode интерфейс (*.xib) можно перевести в java-script:
http://blog.frogonmobile.com/apps/xib2js

Где искать красивые шрифты

Как то спонадобились мне шрифты рукописного русского, самой что ни на есть кириллицы.
Отыскал я их там:
http://www.abstractfonts.com/language/9/Cyrillic
в частности, приглянулся мне
Pushkin, Regular  by Unknown
и
Jellyka's Handwriting, Back to 2008, Regular  by Jellyka Nerevan external
(хотя судя по названию я сейчас крепко сомневаюсь что он русский)

Как сгенировать ключ для использования google maps api в Android

Для того, чтобы использовать в своих android-приложениях пакет классов для работы с  google-maps, необходимо получить от google бесплатный ключ – чтобы вставить его в файл-layout для отображения карты (поле android:apiKey для элемента com.google.android.maps.MapView). Для этого используется утилита keytool. Утилита keytool управляет хранилищем ключей (закрытых и публичных), а также их сертификатами. Хранилище ключй по умолчанию – файл специального формата.

Как получить ключ для google-maps MapView в Android:

1. Создаем новую пару ключей в хранилище (если хранилища не существует оно будет создано)

keytool -genkey -alias <имя ключа> -keystore <имя файла-хранилища ключей и сертификатов>

где:

  • genkey – указывает, что мы хотим создать в хранилище ключей новую пару ключей – открытый и закрытый
  • alias – указывает имя для наших ключей
  • keystore – указывает имя файла-хранилища ключей

 

2. Создаем и подписываем для ключей сертификат безопасности

keytool -selfcert -alias <имя ключа> -keystore <имя файла-хранилища ключей и сертификатов>

где:

  • selfcert – указывает что мы хотим создать сертифкат безопасности для нашей пары ключей
  • alias – указывает имя для наших ключей
  • keystore – указывает имя файла-хранилища ключей

 

3. Выводим сгенерированные ключи

keytool -list -alias <имя ключа> -keystore <имя файла-хранилища ключей и сертификатов> -storepass <пароль на хранилище> -keypass <пароль для ключа>

где:

  • list – используется для отображения сгенерированных ключей с псевдонимом заданным после флага alias в хранилище указанном после флага keystore

В результате вы должны получать запись вида:

  • Certificate fingerprint (MD5): 94:1E:43:49:87:73:BB:E6:A6:88:D7:20:F1:8E:B5:98

4. Скопировав полученное значение мы вставим его в специальную строку запроса на страничке google получения кодов, на его основе, в ответ, нам сгенерируется ключ, который мы должны вставить в наш код.

Пример для debug mode:

  • keytool -list -alias androiddebugkey -keystore $HOME/.android/debug.keystore -storepass android -keypass android