Win 10 OEI upgrade from Home to Prof
itjustme_tech

1. Create a text file on your desktop with the generic registration key for Windows 10 Pro(it is not totally necessary, but i found this to be easiest), namely VK7JG-NPHTM-C97JM-9MPGT-3V66T, and your new Windows 10 Pro registration key.

2. Once you have your text file, disable all network devices on your computer. The easiest way to do this is to right click on the windows icon in the lower left corner of the screen and select "Network Connections" and then right click on your ethernet connection and select "Disable". repeat this for your wireless connections.

3. Reboot your computer.

4. once your computer is back up and logged in, open the text file from step one and select the generic registration key, then press "CTRL-C" (or you can right click on the selected text and select "Copy").

5. Right click on the windows icon in the lower left corner of the screen and select "System" from the menu.

6. Once the system window opens, down at the bottom right, click on "Change Product Key"

7. Paste the generic registration key that you copied in step 4.

8. Click on the "Start Upgrade" button in the lower right corner. wait for the upgrade process to complete(your computer will reboot a couple of times during the process).

9. Once you have logged back into your computer, repeat step 5. This time, you should look near the top, and your "Windows Edition" should be "Windows 10 Pro".

10.  Open the text file from step one select your new Windows 10 Pro registration Key and copy it to the clipboard like you did in step 4.

11. Re-enable your network connections by following the instructions in step 2, but selecting "Enable" from the menu, instead of "Disable".

12. Repeat step 6. This time you should get a window with two buttons, one that says "Change Product Key" and the other says "Activate". click on the "Change Product Key" button.

13. Paste your new Windows 10 Pro registration Key into the  textbox, and click "Next".


Drop & create EM repository in Oracle
itjustme_tech
emca -deconfig dbcontrol db -repos drop
emca -config dbcontrol db -repos create


emca -config dbcontrol db -repos recreate

Windows 10, информация часть 1, не простить и не потерять
itjustme_tech
( You are about to view content that may only be appropriate for adults. )

Autorun for USB drive
itjustme_tech
In file /etc/udev/rules.d/90-usb.rules


ACTION=="add", KERNEL=="sd[a-z]1", SUBSYSTEM=="block", ATTRS{idVendor}=="1058", ATTRS{idProduct}=="0748", ATTRS{serial}=="575839314134335237393134", RUN+="/usr/bin/at -f /root/backup/backup2ext now"
ACTION=="add", KERNEL=="sd[a-z]1", SUBSYSTEM=="block", ATTRS{idVendor}=="1058", ATTRS{idProduct}=="0748", ATTRS{serial}=="575839314134334437353938", RUN+="/usr/bin/at -f /root/backup/backup2ext now"

#ACTION=="add", KERNEL=="sd[a-z]1", SUBSYSTEM=="block", ATTRS{idVendor}=="1058", ATTRS{idProduct}=="0748", ATTRS{serial}=="575839314134335237393134", RUN+="/root/1"
#ACTION=="add", KERNEL=="sd[a-z]1", SUBSYSTEM=="block", ATTRS{idVendor}=="1058", ATTRS{idProduct}=="0748", ATTRS{serial}=="575839314134334437353938", RUN+="/root/1"


As you see there can be different script for different devices.

Listing of all attributes of connected device (/dev/sdb ie):

[root@taora rules.d]# udevadm info --query all --name=/dev/sdb --attribute-walk

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/pci0000:00/0000:00:1d.7/usb1/1-6/1-6:1.0/host4/target4:0:0/4:0:0:0/block/sdb':
    KERNEL=="sdb"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{range}=="16"
    ATTR{ext_range}=="256"
    ATTR{removable}=="0"
    ATTR{ro}=="0"
    ATTR{size}=="3906963456"
    ATTR{alignment_offset}=="0"
    ATTR{capability}=="52"
    ATTR{stat}=="  143974      169  1152994  1813453  4558505 122902868 1019691896 2980294762        0 21791609 2982107006"
    ATTR{inflight}=="       0        0"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-6/1-6:1.0/host4/target4:0:0/4:0:0:0':
    KERNELS=="4:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{device_blocked}=="0"
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="3"
    ATTRS{vendor}=="WD      "
    ATTRS{model}=="My Passport 0748"
    ATTRS{rev}=="1022"
    ATTRS{state}=="running"
    ATTRS{timeout}=="30"
    ATTRS{iocounterbits}=="32"
    ATTRS{iorequest_cnt}=="0x47c147"
    ATTRS{iodone_cnt}=="0x47c147"
    ATTRS{ioerr_cnt}=="0x0"
    ATTRS{modalias}=="scsi:t-0x00"
    ATTRS{evt_media_change}=="0"
    ATTRS{dh_state}=="detached"
    ATTRS{queue_depth}=="1"
    ATTRS{queue_type}=="none"
    ATTRS{max_sectors}=="240"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-6/1-6:1.0/host4/target4:0:0':
    KERNELS=="target4:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-6/1-6:1.0/host4':
    KERNELS=="host4"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-6/1-6:1.0':
    KERNELS=="1-6:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb-storage"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bNumEndpoints}=="02"
    ATTRS{bInterfaceClass}=="08"
    ATTRS{bInterfaceSubClass}=="06"
    ATTRS{bInterfaceProtocol}=="50"
    ATTRS{modalias}=="usb:v1058p0748d1022dc00dsc00dp00ic08isc06ip50"
    ATTRS{supports_autosuspend}=="0"
    ATTRS{interface}=="MSC Bulk-Only Transport"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-6':
    KERNELS=="1-6"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}=="USB Mass Storage"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="80"
    ATTRS{bMaxPower}=="500mA"
    ATTRS{urbnum}=="134816484"
    ATTRS{idVendor}=="1058"
    ATTRS{idProduct}=="0748"
    ATTRS{bcdDevice}=="1022"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="5"
    ATTRS{version}==" 2.10"
    ATTRS{maxchild}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Western Digital"
    ATTRS{product}=="My Passport 0748"
    ATTRS{serial}=="575839314134335237393134"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1':
    KERNELS=="usb1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  0mA"
    ATTRS{urbnum}=="120"
    ATTRS{idVendor}=="1d6b"
    ATTRS{idProduct}=="0002"
    ATTRS{bcdDevice}=="0206"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="1"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="8"
    ATTRS{quirks}=="0x0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Linux 2.6.32-300.3.1.el6uek.x86_64 ehci_hcd"
    ATTRS{product}=="EHCI Host Controller"
    ATTRS{serial}=="0000:00:1d.7"
    ATTRS{authorized_default}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7':
    KERNELS=="0000:00:1d.7"
    SUBSYSTEMS=="pci"
    DRIVERS=="ehci_hcd"
    ATTRS{vendor}=="0x8086"
    ATTRS{device}=="0x3a3a"
    ATTRS{subsystem_vendor}=="0x103c"
    ATTRS{subsystem_device}=="0x330d"
    ATTRS{class}=="0x0c0320"
    ATTRS{irq}=="20"
    ATTRS{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,0000ffff"
    ATTRS{local_cpulist}=="0-15"
    ATTRS{modalias}=="pci:v00008086d00003A3Asv0000103Csd0000330Dbc0Csc03i20"
    ATTRS{numa_node}=="-1"
    ATTRS{enable}=="1"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}==""
    ATTRS{msi_irqs}==""
    ATTRS{companion}==""

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

[root@taora rules.d]#


I am not sure that all of this attrs can be used in 90-usb.rules but attrs mentioned in example above working well.

In script you have some environment variables. For test purposes you can simple output it to file:

#!/bin/sh

fn=/root/`date | sed "s/ /_/g" | sed "s/:/_/g"`

echo $* > $fn
echo _______________________ >> $fn
set >> $fn


The full example ouput:

_______________________
ACTION=add
BASH=/bin/sh
BASHOPTS=cmdhist:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=([0]="0")
BASH_SOURCE=([0]="/root/1")
BASH_VERSINFO=([0]="4" [1]="1" [2]="2" [3]="1" [4]="release" [5]="x86_64-unknown-linux-gnu")
BASH_VERSION='4.1.2(1)-release'
DEVLINKS='/dev/block/8:17 /dev/disk/by-id/usb-WD_My_Passport_0748_575839314134335237393134-0:0-part1 /dev/disk/by-path/pci-0000:00:1d.7-usb-0:6:1.0-scsi-0:0:0:0-part1 /dev/disk/by-uuid/869edf34-c196-4b8e-a9bb-8a95331f8784'
DEVNAME=/dev/sdb1
DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-6/1-6:1.0/host5/target5:0:0/5:0:0:0/block/sdb/sdb1
DEVTYPE=partition
DIRSTACK=()
EUID=0
GROUPS=()
HOSTNAME=taora.pakatz
HOSTTYPE=x86_64
ID_BUS=usb
ID_FS_SEC_TYPE=ext2
ID_FS_TYPE=ext3
ID_FS_USAGE=filesystem
ID_FS_UUID=869edf34-c196-4b8e-a9bb-8a95331f8784
ID_FS_UUID_ENC=869edf34-c196-4b8e-a9bb-8a95331f8784
ID_FS_VERSION=1.0
ID_INSTANCE=0:0
ID_MODEL=My_Passport_0748
ID_MODEL_ENC='My\x20Passport\x200748'
ID_MODEL_ID=0748
ID_PART_TABLE_TYPE=dos
ID_PATH=pci-0000:00:1d.7-usb-0:6:1.0-scsi-0:0:0:0
ID_REVISION=1022
ID_SERIAL=WD_My_Passport_0748_575839314134335237393134-0:0
ID_SERIAL_SHORT=575839314134335237393134
ID_TYPE=disk
ID_USB_DRIVER=usb-storage
ID_USB_INTERFACES=:080650:
ID_USB_INTERFACE_NUM=00
ID_VENDOR=WD
ID_VENDOR_ENC='WD\x20\x20\x20\x20\x20\x20'
ID_VENDOR_ID=1058
IFS='
'
MACHTYPE=x86_64-unknown-linux-gnu
MAJOR=8
MINOR=17
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/bin:/bin:/usr/bin
PIPESTATUS=([0]="0")
POSIXLY_CORRECT=y
PPID=12122
PS4='+ '
PWD=/
SEQNUM=2482
SHELL=/bin/bash
SHELLOPTS=braceexpand:hashall:interactive-comments:posix
SHLVL=1
SUBSYSTEM=block
TERM=dumb
UDEV_LOG=3
UDISKS_PARTITION=1
UDISKS_PARTITION_ALIGNMENT_OFFSET=0
UDISKS_PARTITION_NUMBER=1
UDISKS_PARTITION_OFFSET=1048576
UDISKS_PARTITION_SCHEME=mbr
UDISKS_PARTITION_SIZE=2000364240896
UDISKS_PARTITION_SLAVE=/sys/devices/pci0000:00/0000:00:1d.7/usb1/1-6/1-6:1.0/host5/target5:0:0/5:0:0:0/block/sdb
UDISKS_PARTITION_TYPE=0x07
UDISKS_PRESENTATION_NOPOLICY=0
UID=0
_=_______________________
fn=/root/Mon_Oct__7_20_17_42_XXX_2013

Диски в VMWare
itjustme_tech
Создавал большие диски в VMWare, гостевая операционка - линукс.
Ну и сделал как предлагало по умолчанию - не "Allocate all disk space now".
При копировании на этот диск (копировал с сети) мало того, что скорость достаточно низкая
(примерно 20 мб/с), так еще и глюки в самом линуксе, вроде зависания одного из процессоров,
с выдачей логов прямо на консоль.

Во второй раз галочку "Allocate all disk space now" установил.
Скорость выросла до 80-90 мб/с с того же источника, ошибок не выдаёт.
Из недостатков - диски достаточно долго создаются.
Tags: ,

GNU Crypto for Oracle 10g
itjustme_tech
При моём не знании Java удалось за несколько часов прикрутить GNU Crypto к Oracle 10g.
Зачем это надо? Мне надо было получать sha256 для blob'ов.
Всё, естественно, под Linux.

Из GNU Crypto берем скомпилированный вариант, файлы - gnu-crypto.jar, javax-crypto.jar, javax-security.jar.
Закидываем их на сервер. Пользователю, которому всё это понадобится, выдаём права:

grant javauserpriv to user1;


На сервере в консоли пользователем, который владеет базой, делаем:

 loadjava -u user1/*** -v -resolve *.jar


Вместо *** - пароль (я тут совсем недавно узнал, что если в начале строки пробел, то команда не попадает в историю).

Заходим в оракл пользователем user1, выполняем:

CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "GnuSha256" as
import java.io.*;
import java.sql.*;
import gnu.crypto.hash.Sha256;

public class GnuSha256
{
  final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();
  
  private static String bytesToHex(byte[] bytes) {
      char[] hexChars = new char[bytes.length * 2];
      int v;
      for ( int j = 0; j < bytes.length; j++ ) {
          v = bytes[j] & 0xFF;
          hexChars[j * 2] = hexArray[v >>> 4];
          hexChars[j * 2 + 1] = hexArray[v & 0x0F];
      }
      return new String(hexChars);
  }

  public static String Sha256(oracle.sql.BLOB srcBlob) {
    try {
      InputStream inBuffer = srcBlob.getBinaryStream();
      Sha256 sha = new Sha256();
      byte[] tmpBuffer = new byte[1024];
      int n;
      while ((n = inBuffer.read(tmpBuffer)) >= 0) {
          sha.update(tmpBuffer, 0, n);
      }
      return bytesToHex(sha.digest());
    }
    catch (SQLException e) {
      System.err.println(e);
    }
    catch (IOException e) {
      System.err.println(e);
    }
    return "";
  }
};
/


и

create or replace function gnusha256(string in blob) return varchar2 as
language java name 'GnuSha256.Sha256(oracle.sql.BLOB) return String';
/


Теперь sha256 для blob'а может быть полученно так:

select gnusha256(a.data) from a where rownum = 1;


Результат был проверен с помощью QCryptographicHash из библиотеки Qt 5.1.1.
Tags: , ,

Как я вступил в Qt (5.1 уже, между прочим)
itjustme_tech
Где-то с полгода я начал неспешно программировать на Qt (4.8 еще была, doesn't matter).
В том смысле, что использую и Qt Creator (но это, кажется, не принципиально).
И вот надысь оно мне понадобилось. Понадобилось попрограммировать на Qt - ведь
вроде и красиво всё, много написано. Под Виндовс, само собой.

И вот на что я наткнулся:
http://qt-project.org/doc/qt-4.8/object.html#qt-objects-identity-vs-value

[Вот копия текста со ссылки]
Qt Objects: Identity vs Value

Some of the added features listed above for the Qt Object Model, require that we think of Qt Objects as identities, not values. Values are copied or assigned; identities are cloned. Cloning means to create a new identity, not an exact copy of the old one. For example, twins have different identities. They may look identical, but they have different names, different locations, and may have completely different social networks.

Then cloning an identity is a more complex operation than copying or assigning a value. We can see what this means in the Qt Object Model.

A Qt Object...

  • might have a unique QObject::objectName(). If we copy a Qt Object, what name should we give the copy?
  • has a location in an object hierarchy. If we copy a Qt Object, where should the copy be located?
  • can be connected to other Qt Objects to emit signals to them or to receive signals emitted by them. If we copy a Qt Object, how should we transfer these connections to the copy?
  • can have new properties added to it at runtime that are not declared in the C++ class. If we copy a Qt Object, should the copy include the properties that were added to the original?

    For these reasons, Qt Objects should be treated as identities, not as values. Identities are cloned, not copied or assigned, and cloning an identity is a more complex operation than copying or assigning a value. Therefore, QObject and all subclasses of QObject (direct or indirect) have their copy constructor and assignment operator disabled.

    отвечаю на эти... хм... "доводы", что ли... по пунктам.
    1. QObject::objectName() - By default, this property contains an empty string - из их же документации.
    2. Ведь parent может быть указан пустой? Пусть будет пустой, пусть копирующая программа думает о его заполнении.
    3. Тоже что и предыдущее - пусть не коннектяться, пусть копирующая программа думает об их connection.
    4. Не использовал. Ссылка крайне не убедительная,там написано, что
    "To declare a property, use the Q_PROPERTY() macro in a class that inherits QObject".
    Ну допустим, допустим, я плохо это понимаю, и кому-то это надо - пусть будет отдельным параметром,
    копировать проперти добавленные в рантайме или нет.

    Я не просто так привел ответы на "доводы".
    Просто это накладывает некоторые невъебенные ограничения:
    1. Я хочу сделать потомка от QHeaderView. У меня есть предустановленный QHeaderView,
    который я создал в Qt Creator'е, с которого я хотел бы снять копию. Скопировать все свойства,
    не задумываясь. Я этого сделать не могу. Я должен все свойства перечислять вручную (а не забуду ли я
    их все перечислить?).
    2. Есть некая "модель". Потомок от QAbstractItemModel. Если подробнее - QTreeItemModel. Не описанный
    в документации тип (об этом я вообще уже умолчу; такой стиль называется - "шаг влево, шаг вправо - расстрел").
    Допустим, я хотел бы скопировать его данные. Зачем? Ну очень просто - я заполнил её из БД (что
    было не очень быстро), но они очень-очень редко обновляются - мне достаточно заполнить их один раз,
    при запуске программы... Ну так вот, я заполнил эту модель, далее, я сохранил бы глобальную её копию,
    а потом вместо чтобы перечитывать из БД - я бы просто копировал эту копию в модель QTreeWidget'а.
    (Да, тут опять же - его setModel(...) - private, а не protected ).
    В каком месте я не прав? Нет, слабо было так сделать, да?
    Хранить всё вместе с созданным окном я не хочу - допустим, у меня мало памяти, я хочу это окно
    каждый раз пересоздавать, да и вообще зачем я буду постоянно держать созданным в памяти окно.
    И второй мой вариант - читать всё не в модель, а в промежуточную структуру, а потом всё
    восстанавливать из неё. Но нахуа такие сложности?

    Tags:

  • Время с ntp сервера
    itjustme_tech
    Microsoft Visual C++ 2005


    void PrintNtp() {
        int lResult;
        WSADATA wsaData;
        lResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
        if (lResult != NO_ERROR) {
            //acutPrintf(L"\nWSAStartup failed with error: %d\n",lResult);
            return;
        };

        hostent *pHE = gethostbyname("0.europe.pool.ntp.org");
        if (!pHE || !pHE->h_length) {
            //acutPrintf(L"\ngethostbyname failed with error: %d\n", WSAGetLastError());
            WSACleanup();
            return;
        };

        SOCKET SendSocket = INVALID_SOCKET;
        SendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
        if (SendSocket == INVALID_SOCKET) {
            //acutPrintf(L"\nsocket failed with error: %d\n", WSAGetLastError());
            WSACleanup();
            return;
        };

        sockaddr_in RecvAddr;

        RecvAddr.sin_family = AF_INET;
        RecvAddr.sin_port = htons(123); // ntp motherfucker

        // пример подстановки адреса напрямую
        //RecvAddr.sin_addr.s_addr = inet_addr("91.206.8.36");
        RecvAddr.sin_addr.s_addr = *(u_long *) pHE->h_addr_list[0];

        char SendBuf[48];
        memset(SendBuf, 0, sizeof(SendBuf));
        SendBuf[0] = 0x1b; // version? anyway - some magic number

        //USES_CONVERSION;
        //acutPrintf(L"\n%s\n", A2CW(inet_ntoa(RecvAddr.sin_addr)));
        lResult = sendto(SendSocket, SendBuf, sizeof(SendBuf), 0, (SOCKADDR *) & RecvAddr, sizeof (RecvAddr));
        if (lResult != SOCKET_ERROR) {
            timeval lTimeout;
            lTimeout.tv_sec = 15; // does not matter, long enough
            lTimeout.tv_usec = 0;

            fd_set lReadSet;
            lReadSet.fd_count = 1;
            lReadSet.fd_array[0] = SendSocket;

            if (select(0, &lReadSet, NULL, NULL, &lTimeout) == 1) {
                // get the data back
                ULONG buf[124];    // the buffer we get back
                lResult = recv(SendSocket, (char *) &buf, sizeof(buf), 0);
                if (lResult != SOCKET_ERROR) {
                    time_t lTimeFromServer = ntohl((time_t)buf[10]) - 2208988800U;    //# get time
                    // lTimeFromServer is now near time(NULL)
                    acutPrintf(L"\nNTP Time: %s %i\n", _wctime(&lTimeFromServer), time(NULL));
                //} else {
                    //acutPrintf(L"\nrecv failed with error: %d\n", WSAGetLastError());
                };
            };
        //} else {
            //acutPrintf(L"\nsendto failed with error: %d\n", WSAGetLastError());
        };

        closesocket(SendSocket);
        WSACleanup();
    };


    сообщения об ошибках закомментированы, мне не нужны.
    иногда подзависает на выставленные 15 секунд и ничего не возвращает, но в моём случае не принципиально.
    gethostbyname возвращает список, но я беру первый. он, как положено, разный.
    полученное lTimeFromServer - по смыслу тоже самое, что time(NULL).

    Спасибо
    itjustme_tech
    очередное спасибо фирме майкрософт.
    нельзя находясь за границей поставить корпоративную версию Windows XP.
    ну, вот, например, поехал я в командировку, и у меня на ноуте слетела винда.
    вернее, поставить можно.
    и даже в сети есть инструкция, как активировать через телефон.
    но сейчас с активацией проблем нет, видимо на старую версию винды просто забили.
    а вот признать её подлинной - нет. "нельзя использовать этот номер лицензии в этой стране".
    и как следствие - автоматически обновиться с инета тоже нельзя.

    ObjectARX rotateTo
    itjustme_tech
    накололся на проблемы получения матрицы через rotateTo
    второй параметр равен AcGeVector3d::kIdentity
    если вектора направлены строго в разные стороны, то матрица строится не правильно
    вторым параметром пришлось поставить AcGeVector3d(0, 0, 1)
    это именно ошибка была найдена, а не просто мне в голову взбрело.
    в других местах, где по тексту у меня rotateTo, побоялся исправить, пока оставил так.
    Tags:

    ?

    Log in