Как выковырять из Visual Studio компилятор

Предположим вам понадобился компилятор Visual C++, но по каким-то причинам вам не нужна сама студия. Просто так компилятор не скачать, Micrоsоft не предоставлять такой опции. Поэтому попытаемся получить его самостоятельно, чисто в исследовательских интересах.

Нам понадобится дистрибутив какой-нибудь студии. Пусть это будет Express, т.к. ее можно для личных целей скачать с официального сайта.

Далее нам потребуются следующие msi из дистрибутива

  1. vc_compilerCore86.msi – инструментарий MSVC
  2. vc_compilerCore86res.msi – MUI ресурсы инструментария MSVC
  3. vc_librarycore86.msi – библиотеки MSVC
  4. vc_LibraryDesktopX86.msi – дополнение к библиотекам MSVC
  5. Windows Software Development Kit-x86_en-us.msi – разное из Windows SDK (например, WinSock2.h, WS2_32.lib, может быть что-то еще).

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

1
msiexec /a *.msi TARGETDIR=C:\compiler\...

Скрипт запуска сервера WildFly для FreeBSD

После компиляции java с исправлением бага, дошла очередь до установки WildFly. Однако, все встало без проблем вообще и сразу заработало. Оставалась одна проблема – автозапуск сервера при рестарте сервера (пардон за каламбур). Прошерстив мануалы FreeBSD набросал небольшой скрипт, может кому будет полезен:

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/sh
 
. /etc/rc.subr
 
name=wildfly
rcvar=wildfly_enable
 
start_cmd="/usr/local/wildfly/bin/standalone.sh &"
stop_cmd="/usr/local/wildfly/bin/jboss-cli.sh --connect controller=127.0.0.1 command=:shutdown"
 
load_rc_config $name
run_rc_command "$1"

Боремся с «Translet class loaded, but unable to create translet instance.»

При работе с XSLT преобразованиями на сервере приложений WildFly возникает такой Exception

Caused by: javax.xml.transform.TransformerConfigurationException:
  Translet class loaded, but unable to create translet instance.

Судя по всему, пока в WildFly эту проблему не поправили, существует такой Workaround:

1
2
3
4
5
6
7
8
9
10
11
12
<!-- Workaround for: "Translet class loaded, but unable to create translet instance." -->
<dependency>
	<groupid>xalan</groupid>
	<artifactid>xalan</artifactid>
	<version>2.7.2</version>
	<exclusions>
		<exclusion>
			<groupid>xml-apis</groupid>
			<artifactid>xml-apis</artifactid>
		</exclusion>
	</exclusions>
</dependency>

Git Orphan Branch

Иногда необходимо в GIT создать ветку, не имеющую ничего общего с уже существующими (orphan branch). Как правило, такая необходимость возникает при размещении в одном репозитории нескольких проектов.

Делается это так

1
2
3
4
5
git checkout --orphan newbranch
git rm -rf .
# do work
git add your files
git commit -m 'Initial commit'

Сброс состояния репозиториев в Ubuntu

Когда бубунта начинает выдавать что-то вроде «software has no installation candidate» сие означает, что у нее что-то не так с репозиториями, чтобы сие поправить делаем так:

1
2
3
4
5
6
7
8
sudo -i
apt-get clean
cd /var/lib/apt
mv lists lists.old
mkdir -p lists/partial
apt-get clean
apt-key update
apt-get update

Интересный момент

Сразу скажу – не моё – взял тут https://closedcircles.com/ тут для того, чтоб не забыть.

На ARM (который ARM cannot into integer division) операция

1
hash = key % array.GetSize( )

Лучше сделать размер – степень двойки и заменить код на

1
hash = key & ( array.GetSize( ) - 1 );

Так как из-за того, что ARM cannot into integer division компилятор вставляет интринсик, который делает деление софтварно

IGMPv3 на Windows 7, 8.1

Для работы с биржей ММВБ по протоколу FAST потребовалось использовать протокол IGMPv3 (биржа с v2 не работает), однако винда хоть убей посылает IGMPv2 и все.

Единственное что можно сделать, прописать в реестре здесь:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Params

ключ

IGMPVersion DWORD 4

и тогда вроде должно заработать

mongodb, обновить запись на основе её же полей

Случилась тут необходимость, обновить в mongodb некоторые записи, на основе их же полей – фактически разбить одно поле на два. StackOverflow дал одну идею, которую я решил законспектировать на будущее

1
2
3
4
5
6
7
8
9
10
11
12
13
db.person.find().forEach( function (elem) 
{
    db.person.update(
    {
        _id: elem._id
    },
    {
        $set: 
        {
            name: elem.firstname + ' ' + elem.lastname
        }
    } );
} );