Про термобельё
Пара ссылок, отбрасываем фирмы получается более-менее внятно:
Пост со временем будет дополняться.
Пара ссылок, отбрасываем фирмы получается более-менее внятно:
Пост со временем будет дополняться.
Цикл статей про источники питания: http://naf-st.ru/articles/ip/
В составе Apache Commons есть чудная библиотечка Lang в которой есть класс WordUtils который и поможет нам решить поставленную задачу, примерно следующим образом:
package test;
import java.io.IOException;
import org.apache.commons.lang.WordUtils;
public class WordWrap
{
public static void main(String[] args) throws IOException
{
String str = "This is a sentence that we're using to test the wrap method";
System.out.println("Original String 1:<br/>n" + str);
System.out.println("<br/>nWrap length of 10:<br/>n" + WordUtils.wrap(str, 10));
System.out.println("<br/>nWrap length of 20:<br/>n" + WordUtils.wrap(str, 20));
System.out.println("<br/>nWrap length of 30:<br/>n" + WordUtils.wrap(str, 30));
String str2 = "This is a sentence that we're using to test the wrap method and hereisaveryveryveryverylongword";
System.out.println("<br/>nOriginal String 2:<br/>n" + str2);
System.out.println("<br/>nWrap length of 10, <br/><br/><br/>n newline, wrap long words:<br/>n"
+ WordUtils.wrap(str2, 10, "<br/><br/>n", true));
System.out.println("<br/>nWrap length of 20, <br/><br/>n newline, don't wrap long words:<br/>n"
+ WordUtils.wrap(str2, 20, "<br/>n", false));
}
}
Для сортировки массивов в Java есть Arrays.sort(array)
. Есть так же форма с указанием своего компаратора.
Задача: нужно отсортировать строки, в которых содержатся цифровые значения, вроде:
bg1
bg3
bg20
bg10
После классический сортировки получим такой результат:
bg1
bg10
bg20
bg3
Не всегда это нужно, и не всегда есть возможность выравнивать нулями до формы bg01,bg03,bg30
По ссылке ниже вариант компаратора, выполняющего данную задачу: http://sanjaal.com/java/206/java-data-structure/alphanumeric-string-sorting-in-java-implementation/
Некоторое время я поднимал тему связки Qt Creator и CMake, тогда всё показалось не очень хорошо.
В общем, собрался и сделал несколько лучше: малость допилил плагин CMakeProjectManager, реализовав следующие фичи:
Изменения оформлены в виде отдельного плагина (основано на GIT версии Qt Creator, 2.2.81) - CMakeProjectManager2 доступного на Gitorious: http://gitorious.org/hatred-qt-creator-plugins/cmakeprojectmanager2, как устанавливать - читать README.txt, написано моим дряным английским, но, в общем, должно быть понятно.
Кроме того, в основное дерево Qt Creator я подал мёрж-реквест: http://qt.gitorious.org/qt-creator/qt-creator/merge_requests/280
Кроме того, случайно наткнулся мастера новых проектов на CMake: http://apachelog.wordpress.com/2010/09/27/qt-creator-cmake-wizards/ устанавливаются просто.
Про SMTP протокол знают все: текстовый, простой, можно почту отослать и при помощи telnet. Собственно, при помощи оного и сделан скрипт ниже.
Иногда в скриптах нужно мало-мало добраться до внутрянки XML файлов – к тегам или свойствам тегов. Для сих целей бывает удобно использовать XPath . Вопрос: а как это делать-то из скриптов?
На помощь приходит утилитка xmllint из состава libxml2. Начиная с версии 2.7.7 или 2.7.8 там появилась опция --xpath
которая задаёт выражение для выборки. В более ранних версиях (2.7.6, к примеру) этой опции нет, но есть (в последних тоже) возможность вызова “консоли” и интерактивного разбора XML.
В общем два варианта:
xmllint --xpath '//File/@Name' test.xml
и
echo 'cat //File/@Name' | xmllint --shell test.xml
Остальное - фантазия.
Пакость: Qt Creator умеет импортировать CMake проекты, проблема в том, что в дереве далеко не все файлы отображаются.
Причина: делается этот импорт через откровенную задницу: вызывает cmake с генератором “-G’CodeBlocks - Unix Makefiles’”, генерируя тем самым XML-файл проекта формата CodeBlocks. Но тут накладывается вторая задница: сам генератор обрабатывает файлы только для таргетов: executable, static_library, shared_library, module_library, всё остальное он забывает запихнуть в результирующий ‘.cbp’.
Для начала накладываем патч на CMake и пересобираем его:
--- cmExtraCodeBlocksGenerator.cxx.orig 2011-03-15 14:28:30.692010962 +1000
@@ -410,12 +410,14 @@
for (cmTargets::iterator ti = targets.begin();
ti != targets.end(); ti++)
{
+ //std::cout << "Type: " << ti->second.GetType() << std::endl;
switch(ti->second.GetType())
{
case cmTarget::EXECUTABLE:
case cmTarget::STATIC_LIBRARY:
case cmTarget::SHARED_LIBRARY:
case cmTarget::MODULE_LIBRARY:
+ case cmTarget::UTILITY:
{
const std::vector<cmSourceFile*>&sources=ti->second.GetSourceFiles();
for (std::vector<cmSourceFile*>::const_iterator si=sources.begin();
Потом, для тех файлов, которые хотим видеть в дереве создаём фейковый таргет, примерно так:
set(script-files
process-filelist.sh
)
# hack for display in Qt Creator (with patch for CMake)
add_custom_target(scripts true SOURCES ${script-files})
Всё, после регенерации файлы появятся в списке.
Решение костыльное, но время переписывать импортёр CMake в Qt Creator просто нет, будем надеяться, что разработчики обратят на это внимание.
Всегда мучался вопросом: как сделать так, что бы блок между фигурными скобками в сишном файле с исходным кодом оставался подсвеченным пока я делаю скролинг - визуально посмотреть его границы размеры и прочее. Проблем в том, что курсор в Emacs может находиться только в видимой части, соответственно, если блок большой, он никак на экран поместиться не может, значит курсор перескочит с начал/конца блока и подсветка исчезнет.
Сегодня случайно нашел небольшой хак, частично решающий эту проблему: http://www.physics.utah.edu/~detar/lessons/emacs/emacs/node7.html, процитирую:
Parenthesis checking can also be done with the mouse. Double left click on any parenthesis, brace, or bracket. Emacs then shows the matching symbol and highlights the code between them.
Краткий перевод: двойным щелчком мыши по скобке - блок между ней и парной подсветится, выделение будет динамическим от скобки до второй парной или до курсора на экране. Мышкой можно скролить, выделение останется.
Добавил поиск от Google, а то встроенный в DokuWiki не всегда отрабатывает должным образом, а, судя по логам, робот гугла почти не покидает мой сайт :)
Для поиска сделал кастомный: http://www.google.com/cse/. С рекламой даётся бесплатно.
Что бы разделить запрос и результаты, пользовался этим хинтом: http://googleajaxsearchapi.blogspot.com/2010/03/search-form-and-results-on-two.html
Для поиска нужен JavaScript, поэтому пользователям NoScript, хотя бы временно, его нужно отключить для сайта.