1. Percona засветилась за пределами MySQL тусовки
http://www.theregister.co.uk/2013/10/07/percona_server_update/
http://www.pcworld.com/article/2054060/percona-challenges-oracle-with-alternate-mysql-release.html
Жаль они не делают сборок MySQL под Windows!
Почему Percona, а не MariaDB:
- несмотря на заявленные оптимизации, у меня локально (Windows 8, 8 CPU, 8GB RAM, slow HDD) показала результаты хуже, чем оригинальный MySQL
- субъективно MariaDB более серьезный уход от оригинального MySQL
- у знакомых (linux админ хороший, но MySQL знает слабо) не завелась после простой (drop-in) замены, а версия от Percona сразу заработала
Но если Google перейдет на MariaDB - это может представить дело в новом свете.
2. Шикарный онлайн ресурс! Поддерживает карточки-описания различных БД и позволяет разные БД между собой (формальные характеристики вроде поддержки SQL, ACID?, Database model, Developer, подборка свежих ссылок, к сожалению производительность никак не описана) http://db-engines.com/en/systems (пример сравнения http://db-engines.com/en/system/Microsoft+SQL+Server%3BMongoDB%3BMySQL%3BPercona+Server%3BPostgreSQL )
И ещё они сделали рейтинг разных БД (методика описана, напоминает http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html для языков программирования)
http://db-engines.com/en/ranking
2013-10-30
2013-10-16
~Online WireShark
Если нужно посмотреть снятый дамп сетевой активности, но нет времени/желания/возможности ставить wireshark, то можно воспользоваться сервисом cloudshark.org
2013-10-06
Памятка: Linux, Oracle Java, Tomcat
Как снести то, что ставится по умолчанию и установить свежую Oracle Java и свежий Tomcat:
http://howtofindsolution.blogspot.ru/2012/11/how-to-install-and-configure-tomcat7-on.html
http://askubuntu.com/questions/21131/how-to-correctly-remove-openjdk-openjre-and-set-sunjdk-sunjre-as-default
http://howtofindsolution.blogspot.ru/2012/11/how-to-install-and-configure-tomcat7-on.html
http://askubuntu.com/questions/21131/how-to-correctly-remove-openjdk-openjre-and-set-sunjdk-sunjre-as-default
2013-05-20
JMX через ssh-туннель: подключение JVisualVM к удаленному серверу
Примечания
* Иногда может хватить jmx shell console (один jar-ник, работает на сервере в консоли): http://wiki.cyclopsgroup.org/jmxterm.
* посмотреть слушают ли порты и кто:
linux: netstat -l -p -n
windows: netstat -a -b -n
Настраиваем (X=6 или 7)!
Источники
- JMX through a ssh tunnel - http://blog.markfeeney.com/2010/10/jmx-through-ssh-tunnel.html
- Connecting remote tomcat JMX instance using jConsole - http://stackoverflow.com/questions/1263991/connecting-remote-tomcat-jmx-instance-using-jconsole
- http://gabenell.blogspot.ru/2010/04/connecting-to-jmx-on-tomcat-6-through.html
* Иногда может хватить jmx shell console (один jar-ник, работает на сервере в консоли): http://wiki.cyclopsgroup.org/jmxterm.
* посмотреть слушают ли порты и кто:
linux: netstat -l -p -n
windows: netstat -a -b -n
Настраиваем (X=6 или 7)!
- скачать catalina-jmx-remote.jar из tomcat.apache.org/download-X0.cgi - Extras - JMX Remote jar в tomcat/lib
- в опциях запуска tomcat (tomcat/bin/catalina.sh или /etc/default/tomcatX) в ключ CATALINA_OPTS/JAVA_OPTS добавляем " -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=127.0.0.1 ". Для примера в итоге он может выглядеть так: JAVA_OPTS="-Djava.awt.headless=true -Xmx3400m -XX:+HeapDumpOnOutOfMemoryError -Duser.language=ru -Duser.region=RU -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -XX:+UseCompressedOops -Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=127.0.0.1"
- в conf/server.xml (там где правим
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443"/>) добавляем <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="9098" rmiServerPortPlatform="9099"/> - перезапускаем tomcat, проверяем чистоту логов, проверяем занятость портов
- в ssh клиенте для надежности настраиваем туннели на обоих портах ;-), проверяем что порты слушаются локально
- подключаемся JVisualVM/JConsole используя JMX url вида: service:jmx:rmi://127.0.0.1:9099/jndi/rmi://127.0.0.1:9098/jmxrmi
Источники
- JMX through a ssh tunnel - http://blog.markfeeney.com/2010/10/jmx-through-ssh-tunnel.html
- Connecting remote tomcat JMX instance using jConsole - http://stackoverflow.com/questions/1263991/connecting-remote-tomcat-jmx-instance-using-jconsole
- http://gabenell.blogspot.ru/2010/04/connecting-to-jmx-on-tomcat-6-through.html
2013-03-21
2013-03-12
Все опции java
# java -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -version [другие опции и аргументы]
http://q-redux.blogspot.ru/2011/01/inspecting-hotspot-jvm-options.html
http://javarevisited.blogspot.ru/2011/11/hotspot-jvm-options-java-examples.html
Версия попроще
# java -XX:+PrintCommandLineFlags -version [другие опции и аргументы]
http://q-redux.blogspot.ru/2011/01/inspecting-hotspot-jvm-options.html
http://javarevisited.blogspot.ru/2011/11/hotspot-jvm-options-java-examples.html
Версия попроще
# java -XX:+PrintCommandLineFlags -version [другие опции и аргументы]
2012-12-23
MSSQL и ошибки
Если вы работаете с MSSQL вообще или с MSSQL через jdbc, то от этих ссылок вы получите удовольствие!
Подробнейшее описание как обрабатывать ошибки в MSSQL:
http://www.sommarskog.se/error-handling-I.html
http://www.sommarskog.se/error-handling-II.html
кратенькая выжимка http://weblogs.sqlteam.com/dang/archive/2007/10/20/Use-Caution-with-Explicit-Transactions-in-Stored-Procedures.aspx
Ссылки которые я искал два дня. Вся порочная правда о MSSQL и jdbc (они об одном и том же)!
http://blogs.msdn.com/b/jdbcteam/archive/2008/08/04/why-doesn-t-executeupdate-give-me-the-exception-i-expected.aspx
http://blogs.msdn.com/b/jdbcteam/archive/2008/08/01/use-execute-and-getmoreresults-methods-for-those-pesky-complex-sql-queries.aspx
PS: если вы используете Java 6, MSSQL 2000 и jtds, то я сделал работающую с MSSQL2000 Java 6 версию jtds 1.3 http://sourceforge.net/p/jtds/bugs/683/
Подробнейшее описание как обрабатывать ошибки в MSSQL:
http://www.sommarskog.se/error-handling-I.html
http://www.sommarskog.se/error-handling-II.html
кратенькая выжимка http://weblogs.sqlteam.com/dang/archive/2007/10/20/Use-Caution-with-Explicit-Transactions-in-Stored-Procedures.aspx
Ссылки которые я искал два дня. Вся порочная правда о MSSQL и jdbc (они об одном и том же)!
http://blogs.msdn.com/b/jdbcteam/archive/2008/08/04/why-doesn-t-executeupdate-give-me-the-exception-i-expected.aspx
http://blogs.msdn.com/b/jdbcteam/archive/2008/08/01/use-execute-and-getmoreresults-methods-for-those-pesky-complex-sql-queries.aspx
PS: если вы используете Java 6, MSSQL 2000 и jtds, то я сделал работающую с MSSQL2000 Java 6 версию jtds 1.3 http://sourceforge.net/p/jtds/bugs/683/
Полезные ссылки и утилиты
- текстовый редактор Sublime Text 2 (хотя я, из-за его самобытной раскладки, пользуюсь http://www.jetbrains.com/idea и http://notepad-plus-plus.org)
- редактор различных диаграмм diagram.ly он же draw.io
- если нужна offline утилита: yEd описание и сайт производителя
- генератор UML схем (диаграмм) yuml.me
- доступ к удаленному ПК 2.0 LogMeIn
- скрипт анализирующий ваш MySQL и дающий советы по его лучшей настройке: mysqltuner.com
- утилита innotop для MySQL
1. Download latest TermReadKey? from CPAN: http://search.cpan.org/~stsi/ TermReadKey/ReadKey.pm
2. tar -zxvf TermReadKey-2.30.02.tar.gz
3. perl Makefile.PL
4. make test
5. make install
Innotop manual http://innotop.googlecode.com/svn/html/index.html, в частности:
innotop -u [username] -p [password] -h [hostname]
- редактор различных диаграмм diagram.ly он же draw.io
- если нужна offline утилита: yEd описание и сайт производителя
- генератор UML схем (диаграмм) yuml.me
- доступ к удаленному ПК 2.0 LogMeIn
- скрипт анализирующий ваш MySQL и дающий советы по его лучшей настройке: mysqltuner.com
- утилита innotop для MySQL
1. Download latest TermReadKey? from CPAN: http://search.cpan.org/~stsi/
2. tar -zxvf TermReadKey-2.30.02.tar.gz
3. perl Makefile.PL
4. make test
5. make install
Innotop manual http://innotop.googlecode.com/svn/html/index.html, в частности:
innotop -u [username] -p [password] -h [hostname]
2011-12-04
Памятка по установке JRebel
Прежде всего хочу сказать, что настраивать-то особо нечего ;-)
Можно посмотреть презентацию "для вдохновения" zeroturnaround.com/jrebel/presentations.
Я использую IntelliJ IDEA, для других IDE инструкция может слегка отличаться, см zeroturnaround.com/resources .
1. Идем в IDE settings | plugins и находим среди доступных JRebel Plugin, Download and Install, Apply (restart).
С сайта zeroturnaround.com/jrebel/current ничего качать не нужно, все включено в плагин.
2. В IDE settings появится пункт JRebel, там нажимаем Launch JRebel Configuration Wiazard...
Первый пункт активация - проще и дешевле начать с evolution.
Второй пункт license пропускаем - evolution сам сгенерирует и активизирует лицензию на 30 дней.
3. пункт Choose settings выбираем какая IDE используется, тогда следующие пункты будут показывать инструкции по мелкой оптимальной подстройке этой IDE.
Следует выставить три 'галочки' в IDE по инструкциям в последующих пунктах.
Закончили с установкой и конфигурированием.
4. В Project view проекта в pop-up menu выбираем Generate rebel.xml
Далее как сделал я и как удобно мне, возможно вам тоже понравится :-)
5. Сохраняем rebel.xml в [webroot]/WEB-INF/classess
Это единственный, довольно простой конфигурационный файл JRebel.
Основные настройки описаны в zeroturnaround.com/jrebel/how-to-configure-rebel-xml
На всякий случай ссылка на полное описание (скорее всего не понадобится): zeroturnaround.com/jrebel/configuration
Настройки по умолчанию мне не подошли т.к.
a. я использую Apache Click, который при старте достает некоторые ресурсы в [webroot], а так как по умолчанию используется [webroot] в исходниках, то система контроля версий обнаруживает кучу новых файлов.
b. в проекте много модулей, которые компилируются в jar-ы и кладутся в [webroot]/WEB-INF/lib
Поэтому пришлось прописать папку target/название_web_app - как [webroot],
и несколько target/production/название_модуля - как путь для поиска классов, где:
* target стандартное maven-название папки куда все компилируется,
* production - папка принудительно создаваемая IDEA,
* название_web_app - путь который вы прописали в Web Application exploded artifact, e.g. voip, smsrouter, etc,
* название_модуля - IDEA создает для каждого модуля свои подпапки в production.
Итоговый файл:
Готово!
Далее просто запускаем Tomcat не обычной зеленой стрелочкой, а стрелочкой с "jr".
Вносим изменения в код, компилируем (IDEA перед этим сохраняет) Ctrl+Shift-F9 или Ctrl-F9, F5 в браузере и видим обновление.
PS: если хочется ускорить первый старт Tomcat, то мой предыдущий совет "скопировать папку VAADIN из vaadin.jar в [webroot]" по прежнему применим.
Кроме того, возможно вам захочется избавиться от сериализации HTTP сессии между рестартами Tomcat (пользы от этой сериализации в случае Vaadin не очень много), для этого в [webroot]/META-INF нужно поместить файл context.xml вида:
Аттрибут antiJARLocking="true" опционален (можно убрать). Он нужен если web приложение не освобождает какие-то классы и не выгружается Tomcat (свой код лучше от такого чистить, но бывают такие библиотеки третьих сторон).
Можно посмотреть презентацию "для вдохновения" zeroturnaround.com/jrebel/presentations.
Я использую IntelliJ IDEA, для других IDE инструкция может слегка отличаться, см zeroturnaround.com/resources .
1. Идем в IDE settings | plugins и находим среди доступных JRebel Plugin, Download and Install, Apply (restart).
С сайта zeroturnaround.com/jrebel/current ничего качать не нужно, все включено в плагин.
2. В IDE settings появится пункт JRebel, там нажимаем Launch JRebel Configuration Wiazard...
Первый пункт активация - проще и дешевле начать с evolution.
Второй пункт license пропускаем - evolution сам сгенерирует и активизирует лицензию на 30 дней.
3. пункт Choose settings выбираем какая IDE используется, тогда следующие пункты будут показывать инструкции по мелкой оптимальной подстройке этой IDE.
Следует выставить три 'галочки' в IDE по инструкциям в последующих пунктах.
Закончили с установкой и конфигурированием.
4. В Project view проекта в pop-up menu выбираем Generate rebel.xml
Далее как сделал я и как удобно мне, возможно вам тоже понравится :-)
5. Сохраняем rebel.xml в [webroot]/WEB-INF/classess
Это единственный, довольно простой конфигурационный файл JRebel.
Основные настройки описаны в zeroturnaround.com/jrebel/how-to-configure-rebel-xml
На всякий случай ссылка на полное описание (скорее всего не понадобится): zeroturnaround.com/jrebel/configuration
Настройки по умолчанию мне не подошли т.к.
a. я использую Apache Click, который при старте достает некоторые ресурсы в [webroot], а так как по умолчанию используется [webroot] в исходниках, то система контроля версий обнаруживает кучу новых файлов.
b. в проекте много модулей, которые компилируются в jar-ы и кладутся в [webroot]/WEB-INF/lib
Поэтому пришлось прописать папку target/название_web_app - как [webroot],
и несколько target/production/название_модуля - как путь для поиска классов, где:
* target стандартное maven-название папки куда все компилируется,
* production - папка принудительно создаваемая IDEA,
* название_web_app - путь который вы прописали в Web Application exploded artifact, e.g. voip, smsrouter, etc,
* название_модуля - IDEA создает для каждого модуля свои подпапки в production.
Итоговый файл:
<?xml version="1.0" encoding="UTF-8"?> <application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd"> <classpath> <dir name="C:/j/voip.dev/bh/target/production/core"/> <dir name="C:/j/voip.dev/bh/target/production/demo"/> <dir name="C:/j/voip.dev/bh/target/production/mca"/> <dir name="C:/j/voip.dev/bh/target/production/tts"/> </classpath> <web> <link target="/"><!-- если эту папку zip-ануть, получится .war --> <dir name="C:/j/voip.dev/bh/target/voip" /> </link> </web> </application>
Готово!
Далее просто запускаем Tomcat не обычной зеленой стрелочкой, а стрелочкой с "jr".
Вносим изменения в код, компилируем (IDEA перед этим сохраняет) Ctrl+Shift-F9 или Ctrl-F9, F5 в браузере и видим обновление.
PS: если хочется ускорить первый старт Tomcat, то мой предыдущий совет "скопировать папку VAADIN из vaadin.jar в [webroot]" по прежнему применим.
Кроме того, возможно вам захочется избавиться от сериализации HTTP сессии между рестартами Tomcat (пользы от этой сериализации в случае Vaadin не очень много), для этого в [webroot]/META-INF нужно поместить файл context.xml вида:
<?xml version='1.0' encoding='utf-8'?> <Context antiJARLocking="true" > <!-- Default set of monitored resources --> <WatchedResource>WEB-INF/web.xml</WatchedResource> <!-- disable session persistence across Tomcat restarts --> <Manager pathname="" /> </Context>
Аттрибут antiJARLocking="true" опционален (можно убрать). Он нужен если web приложение не освобождает какие-то классы и не выгружается Tomcat (свой код лучше от такого чистить, но бывают такие библиотеки третьих сторон).
2011-12-02
Робот полотер
Читаю Робот-полотер Mint - обзор @ exler.ru/expromt/10-11-2011.htm и нахожусь в задумчивости.
Дома у меня нет ковров, везде ламинат т.е. пылесос не нужен, а вот полотер...
Дома у меня нет ковров, везде ламинат т.е. пылесос не нужен, а вот полотер...
2011-12-01
Разное про Java, Web и Vaadin
1. Для качественного ускорения web разработки на Java можно использовать замечательный продукт JRebel zeroturnaround.com/jrebel (кратко, что это). Он позволяет практически полностью отказаться от длительного re-deploy процесса.
Внес исправление в код, перекомпилировал - web приложение уже обновилось (вроде PHP,Python,Ruby). Продукт платный, но есть интересный способ использовать бесплатно: social.jrebel.com.
Кроме того они сделали вкусную zip java lib: новость repo.
2. Если не использовать JRebel и разрабатывать используя Vaadin, то можно обнаружить, что при первом запуске vaadin приложения после старта Tomcat, оно висит несколько секунд (примерно 10 на моём ПК). Исследование показало, что "висит" не сам Vaadin, а вызванный в com.vaadin.terminal.gwt.server.AbstractApplicationServlet#serveStaticResourcesInVAADIN Tomcat.
vaadin.jar довольно большой и чтение ресурсов из него длительная операция.
Чтобы избавится от этой задержки достаточно скопировать папку VAADIN из vaadin.jar в web app root (там где WEB-INF, META-INF, etc).
Если Вам помог этот совет проголосуйте за мой совет на stackoverflow.com/questions/3904735.
3. JavaScript is assembly language for the web ИЛИ кто ещё не написал свой веб-Си?
GWT (Google Web Toolkit) - золотой стандарт компиляции в JS, все знают, многим хочется повторить.
Ладно Google начал страдать NIH синдромом и решил изобрести JavaScript (его придумали/сделали не они) dartlang.org
Но так, чтобы ВСЕ бросились компилировать в JS (включая больных и убогих)...
На 20ом языке начинает пробивать смех:
github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS
Даже QBASIC не забыт!
4. Унифицированный способ запускать различные контейнеры e.g. Tomcat из своего кода
cargo.codehaus.org
5. Для копирования DTO между разными уровнями в web приложении пригодится
dozer.sf.net
Внес исправление в код, перекомпилировал - web приложение уже обновилось (вроде PHP,Python,Ruby). Продукт платный, но есть интересный способ использовать бесплатно: social.jrebel.com.
Кроме того они сделали вкусную zip java lib: новость repo.
2. Если не использовать JRebel и разрабатывать используя Vaadin, то можно обнаружить, что при первом запуске vaadin приложения после старта Tomcat, оно висит несколько секунд (примерно 10 на моём ПК). Исследование показало, что "висит" не сам Vaadin, а вызванный в com.vaadin.terminal.gwt.server.AbstractApplicationServlet#serveStaticResourcesInVAADIN Tomcat.
vaadin.jar довольно большой и чтение ресурсов из него длительная операция.
Чтобы избавится от этой задержки достаточно скопировать папку VAADIN из vaadin.jar в web app root (там где WEB-INF, META-INF, etc).
Если Вам помог этот совет проголосуйте за мой совет на stackoverflow.com/questions/3904735.
3. JavaScript is assembly language for the web ИЛИ кто ещё не написал свой веб-Си?
GWT (Google Web Toolkit) - золотой стандарт компиляции в JS, все знают, многим хочется повторить.
Ладно Google начал страдать NIH синдромом и решил изобрести JavaScript (его придумали/сделали не они) dartlang.org
Но так, чтобы ВСЕ бросились компилировать в JS (включая больных и убогих)...
На 20ом языке начинает пробивать смех:
github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS
Даже QBASIC не забыт!
4. Унифицированный способ запускать различные контейнеры e.g. Tomcat из своего кода
cargo.codehaus.org
5. Для копирования DTO между разными уровнями в web приложении пригодится
dozer.sf.net
2011-09-08
Java7 try-with-resources
Хорошее подробное описание try-with-resources в Java 7:
Better Resource Management with Java SE 7: Beyond Syntactic Sugar
Better Resource Management with Java SE 7: Beyond Syntactic Sugar
2011-07-07
Интересное про память и Java
javaspecialists.eu/archive/Issue193.html
Вообще имеет смысл прочитать все его выпуски.
В частности же:
на 64-bit серверах с 64-bit java полезно попробовать опцию
-XX:+UseCompressedOops
64bit архитектура == 64bit указатели (vs 32bit = в 2 раза больше).
С этой опцией JVM указатели (не все) оптимизирует ==
- жрет меньше памяти
- меньше байт прокачивать по шинам.
Вообще имеет смысл прочитать все его выпуски.
В частности же:
на 64-bit серверах с 64-bit java полезно попробовать опцию
-XX:+UseCompressedOops
64bit архитектура == 64bit указатели (vs 32bit = в 2 раза больше).
С этой опцией JVM указатели (не все) оптимизирует ==
- жрет меньше памяти
- меньше байт прокачивать по шинам.
В Java7 будет сексуально выглядящий Javadoc
http://download.java.net/jdk7/docs/api/
Хотя лично мне нравится chm версия: упакованная, быстрая, со сквозным индексом и поиском.
Хотя лично мне нравится chm версия: упакованная, быстрая, со сквозным индексом и поиском.
Работа территориально распределенных коллективов
Для удаленной работы одного GMail/GTalk бывает недостаточно.
Skype ~ GTalk только без архива на сервере и более распространненый.
JIRA (и другие аналогичные продукты), Wiki, Jing - уже почти всё что нужно.
Недавно наткнулся на интересный продукт:
Team Viewer
совместная работа, презентации, удаленное управление, тех поддержка и тд
Изучаю...
Skype ~ GTalk только без архива на сервере и более распространненый.
JIRA (и другие аналогичные продукты), Wiki, Jing - уже почти всё что нужно.
Недавно наткнулся на интересный продукт:
Team Viewer
совместная работа, презентации, удаленное управление, тех поддержка и тд
Изучаю...
fun
Стараюсь всякий нетехнический бред писать в ЖЖ.
Но убогость ЖЖ просто доканывает.
Картинку по простому нельзя разместить. Обязательно ритуал вида "найдите три китайских девственницы, поститесь с ними три года, на четверый в самую большую луну пойдите на..."
В blogger просто зашел и разместил!
В блог добавляется preview, при клике на картинке открывается полная версия.
Манул IKEA по сборке Стоунхенджа и говнотвиттер:


PS: ну и немного о технике...
Эта гребля с ЖЖ напомнила мне о книге, которую я рекомендую прочитать всем.
Жизнь внутри пузыря.
Она как бы историческая и про интернет, но работая в большой "реальной" корпорации "я плакалъ".
Но убогость ЖЖ просто доканывает.
Картинку по простому нельзя разместить. Обязательно ритуал вида "найдите три китайских девственницы, поститесь с ними три года, на четверый в самую большую луну пойдите на..."
В blogger просто зашел и разместил!
В блог добавляется preview, при клике на картинке открывается полная версия.
Манул IKEA по сборке Стоунхенджа и говнотвиттер:


PS: ну и немного о технике...
Эта гребля с ЖЖ напомнила мне о книге, которую я рекомендую прочитать всем.
Жизнь внутри пузыря.
Она как бы историческая и про интернет, но работая в большой "реальной" корпорации "я плакалъ".
2011-07-04
Сравнение схем БД
Я работаю с MSSQL и MySQL и часто приходится сравнивать изменения в БД.
* Делаю так: скриптую БД с разбивкой всех объектов на индивидуальные файлы, после чего сравниваю, используя diff tool с возможностью сравнения директорий.
Очень просто и удобно.
Сама папка находится под DVCS Mercurial/HG т.е. можно смотреть историю изменений.
* Знаю про другой способ (работает в т.ч. между серверами разных версий т.к., например, скрипты MSSQL 2008 и 2000 довольно сильно отличаются).
Для MySQL: devart.com/ru/dbforge/mysql/studio
Для MSSQL: devart.com/ru/dbforge/sql/datacompare
Сам активно не пользовал, но один знакомый активно использует и очень хвалит.
* Есть что-то ещё?...
* Делаю так: скриптую БД с разбивкой всех объектов на индивидуальные файлы, после чего сравниваю, используя diff tool с возможностью сравнения директорий.
Очень просто и удобно.
Сама папка находится под DVCS Mercurial/HG т.е. можно смотреть историю изменений.
* Знаю про другой способ (работает в т.ч. между серверами разных версий т.к., например, скрипты MSSQL 2008 и 2000 довольно сильно отличаются).
Для MySQL: devart.com/ru/dbforge/mysql/studio
Для MSSQL: devart.com/ru/dbforge/sql/datacompare
Сам активно не пользовал, но один знакомый активно использует и очень хвалит.
* Есть что-то ещё?...
2011-05-15
Скриншоты и скринкасты - просто и удобно
Потребовалось отправить в Jetbrains screen-cast бага (что он существует ;-).
Провел небольшое исследование: чем быстро и просто записать короткий screen-cast (изображение части экрана, курсор, звук с микрофона).
Нашел несколько вариантов, в итоге выбрал jing
Просто (ничего не надо настраивать), удобно.
Делает помимо видео, фотки куска экрана (PrtScn и последующее вырезание в редакторе достало).
Думаю о дальнейшем использовании.
PS: для скриншотов есть OpenSource sf.net/projects/greenshot - сегодня рассылка SF-ная принесла
UPD2: http://camstudio.org/ OpenSource утилита для записи скринкастов
Провел небольшое исследование: чем быстро и просто записать короткий screen-cast (изображение части экрана, курсор, звук с микрофона).
Нашел несколько вариантов, в итоге выбрал jing
Просто (ничего не надо настраивать), удобно.
Делает помимо видео, фотки куска экрана (PrtScn и последующее вырезание в редакторе достало).
Думаю о дальнейшем использовании.
PS: для скриншотов есть OpenSource sf.net/projects/greenshot - сегодня рассылка SF-ная принесла
UPD2: http://camstudio.org/ OpenSource утилита для записи скринкастов
2011-04-05
2011: Сменил default кодировку консоли cmd.exe на cp1251
Как известно default кодировка/codepage windows консоли cmd.exe DOS 866.
На дворе 2011 и я решился сменить её на кодировку остальной системы cp1251.
Узнать какая кодировка выставлена, можно набрав в cmd.exe команду chcp.
Сменить "на лету" можно chcp 1251.
С UTF-8 chcp 65001, как мы уже выяснили не работает.
Чтобы сменить на постоянной основе требуется:
После чего потребуется перезапуск.
Найдено здесь.
Пора избавляться от старого барахла.
Если очень захочется запустить что-то старое DOS-овское "chcp 866" в помощь.
Замеченые минусы:
давно надо было у архиваторов выставить кодировку файлов UTF-8, пришлось некоторые архивы пережать.
На дворе 2011 и я решился сменить её на кодировку остальной системы cp1251.
Узнать какая кодировка выставлена, можно набрав в cmd.exe команду chcp.
Сменить "на лету" можно chcp 1251.
С UTF-8 chcp 65001, как мы уже выяснили не работает.
Чтобы сменить на постоянной основе требуется:
Start->Run->regedit HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage сменить кодировку в OEMCP с 866 на 1251
После чего потребуется перезапуск.
Найдено здесь.
Пора избавляться от старого барахла.
Если очень захочется запустить что-то старое DOS-овское "chcp 866" в помощь.
Замеченые минусы:
давно надо было у архиваторов выставить кодировку файлов UTF-8, пришлось некоторые архивы пережать.
2011-03-22
Mercurial - Hg
Начал читать http://hginit.com
Читая раздел для SVNщиков утер слезу - до чего верно пишет.
После этого полезно mercurial.selenic.com/guide
В UTF-8 не работает (глюк windows). Поэтому не chcp 65001 (меняет кодировку консоли на UTF-8), а chcp 1251 - ваш друг.
Для работы удобнее всего оказался cmd.exe /X /K chcp 1251 && cd "путь"
Отличная утилита HgWin, вызывается из командной строки (hgwin cmd) и открывает GUI окошко. Если сразу в GUI, то TortoiseHG вполне.
Отличная короткая статья об организации процесса подходящего и для моих проектов: http://stevelosh.com/blog/ 2010/05/mercurial-workflows- stable-default/
Относительно коммитов решил, что буду коммитить часто. Как ограничение "вечером не должно оставаться незакоммиченной работы".
Чтобы не зафлудить репозитарий сырым кодом буду применять следующее соглашение:
1. закомичиваемый код должен компилироваться (этого можно достичь даже вечером, пустые методы с todo написать и тд)
2. если тесты не прошли или нет времени на все тесты, то commit message должен начинаться с "?": ?Обзвон нескольких телефонов в списке
3. если тесты проходят и по ощущениям код хороший, то commit message не начинается с ? и ! т.е. любые другие символы
4. если код отлично прошел тесты на DEV SERVER и его можно пытаться выкладывать на PRODUCTION, то commit message начинается с !
5. на бой выкладываются только ревизии с commit message начинающиеся на !
6. после выкладки на бой (вроде полетело, чуток поглядели - летит) тегируем версию "YYYY-MM-DD major.minor примечания"
7. после некого интервала (ничего не вылезло, клиенты не звонят с воплями) мержим default в stable
x. если вдруг потом обнаружен баг, переключаемся на "YYYY-MM-DD
major.minor примечания" в stable, правим / build, test, func/sys test, deploy / tag "ymd major.minor примечания"2, merge это исправление в default
y. если хочется надолго всё сломать - локальный feature clone. Из которого потом pull, merge в local#default и rm -rf feature clone
PS1:
Мучился вопросом: как бранчи случайно названные одинаково разными программистами не пересекаются?
Ответ: пересекаются! Рекомендуют именовать приватные бранчи "программист-название бранча".
http://nubyonrails.com/ articles/five-features-from- mercurial-that-would-make-git- suck-less
Про бранчи vs клоны общий совет такой:
для собственных нужно лучше делать локально клоны.
Именованые бранчи для длительных линий разработки, типа есть три версии программы 1.0, 2.0, 3.0. Переход на новую версию стоит денег и не все пользователи переходят, сидят на 1.0 и 2.0, однако баги, возможно какие-то вкусняшки им давать необходимо (они купили). Дескать это хорошее применение для бранчей.
PS2:
Разумеется все теоретики запада против хранения генерируемых файлов в репозитарии - их можно моментально создать, любой версии, когда понадобятся (class, jar, war, ear, javadoc).
Сгенерированные исходники (Google Protobuf, из WSDL) - нельзя менять, но хранить в VCS можно. Для анализа, что менялось или "почему всё сломалось". Но менять нельзя!
Если в сгенерированные исходники надо внести изменения - советуют от них наследоваться, либо использовать композицию, тогда сгенерированный код может следовать за обновлениями, а не останется на века в той версии где подправили.
Читая раздел для SVNщиков утер слезу - до чего верно пишет.
После этого полезно mercurial.selenic.com/guide
В UTF-8 не работает (глюк windows). Поэтому не chcp 65001 (меняет кодировку консоли на UTF-8), а chcp 1251 - ваш друг.
Для работы удобнее всего оказался cmd.exe /X /K chcp 1251 && cd "путь"
Отличная утилита HgWin, вызывается из командной строки (hgwin cmd) и открывает GUI окошко. Если сразу в GUI, то TortoiseHG вполне.
Отличная короткая статья об организации процесса подходящего и для моих проектов: http://stevelosh.com/blog/
Относительно коммитов решил, что буду коммитить часто. Как ограничение "вечером не должно оставаться незакоммиченной работы".
Чтобы не зафлудить репозитарий сырым кодом буду применять следующее соглашение:
1. закомичиваемый код должен компилироваться (этого можно достичь даже вечером, пустые методы с todo написать и тд)
2. если тесты не прошли или нет времени на все тесты, то commit message должен начинаться с "?": ?Обзвон нескольких телефонов в списке
3. если тесты проходят и по ощущениям код хороший, то commit message не начинается с ? и ! т.е. любые другие символы
4. если код отлично прошел тесты на DEV SERVER и его можно пытаться выкладывать на PRODUCTION, то commit message начинается с !
5. на бой выкладываются только ревизии с commit message начинающиеся на !
6. после выкладки на бой (вроде полетело, чуток поглядели - летит) тегируем версию "YYYY-MM-DD major.minor примечания"
7. после некого интервала (ничего не вылезло, клиенты не звонят с воплями) мержим default в stable
x. если вдруг потом обнаружен баг, переключаемся на "YYYY-MM-DD
major.minor примечания" в stable, правим / build, test, func/sys test, deploy / tag "ymd major.minor примечания"2, merge это исправление в default
y. если хочется надолго всё сломать - локальный feature clone. Из которого потом pull, merge в local#default и rm -rf feature clone
PS1:
Мучился вопросом: как бранчи случайно названные одинаково разными программистами не пересекаются?
Ответ: пересекаются! Рекомендуют именовать приватные бранчи "программист-название бранча".
http://nubyonrails.com/
Про бранчи vs клоны общий совет такой:
для собственных нужно лучше делать локально клоны.
Именованые бранчи для длительных линий разработки, типа есть три версии программы 1.0, 2.0, 3.0. Переход на новую версию стоит денег и не все пользователи переходят, сидят на 1.0 и 2.0, однако баги, возможно какие-то вкусняшки им давать необходимо (они купили). Дескать это хорошее применение для бранчей.
PS2:
Разумеется все теоретики запада против хранения генерируемых файлов в репозитарии - их можно моментально создать, любой версии, когда понадобятся (class, jar, war, ear, javadoc).
Сгенерированные исходники (Google Protobuf, из WSDL) - нельзя менять, но хранить в VCS можно. Для анализа, что менялось или "почему всё сломалось". Но менять нельзя!
Если в сгенерированные исходники надо внести изменения - советуют от них наследоваться, либо использовать композицию, тогда сгенерированный код может следовать за обновлениями, а не останется на века в той версии где подправили.
Подписаться на:
Сообщения (Atom)