среда, 19 августа 2015 г.

или я такой, или что то не так у Go

Имеем бинарный файл. надо оттуда считать структуру. час промучился, но вот такой код дает ошибку  "binary.Read: invalid type *main.Header"
package main

import(
    "fmt"
    "bytes"
    "encoding/binary"
)

type Header struct {
    IsFull        bool
}

func main(){
    a:=make([]byte,1024,1024)
    for i:=0;i<1024;i++{
        a[i]=byte(i)
    }
    var pi Header
    buf := bytes.NewReader(a)
    err := binary.Read(buf, binary.LittleEndian, &pi)
    fmt.Println(err)    
}
но! если заменить IsFull с bool на любой числовой тип (int например), то все работает отлично. я даже решил, что это бага в стандартной библиотеке го. но вот что ответили на багтрекере:

This is working as expected. The encoding/binary package, as the documentation says, "implements simple translation between numbers and byte sequences." The type bool is not a number.

среда, 12 августа 2015 г.

Visual Studio, C++ и утечка памяти. Часть 2

Visual Leak Detector for Visual C++- зачетная "обертка" над стандартным студийным детектором. показывает стектрейс приводящих к утечке кусков памяти, не надо загонять кучу макросов в код. 

Пишем #include<vdl.h>, 
 где нибудь в программе, запускаем, смотрим в output.

вторник, 24 апреля 2012 г.

ArcLinux64 + AndroidSDK

Для нормальной работы AndroidSDK (в частности программы emulator) необходимы следующие пакеты: lib32-alsa-lib lib32-openal lib32-libstdc++5 lib32-libxv lib32-ncurses lib32-sdl lib32-zlib 
ставятся они из репозитория multiib.

воскресенье, 1 апреля 2012 г.

Visual Studio, C++ и утечка памяти

Если уж случилось такое горе, то вот краткая инструкция:
1) До подключения первого хедера пишем:

#define _CRTDBG_MAP_ALLOC
#include
#include
#ifndef DBG_NEW
      #define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
      #define new DBG_NEW
#endif

Тут мы подключаем необходимое, а именно замену для стандартного malloc и компании, которые будут вести учет выделений и освобождений памяти.
2) Первой инструкцией программы ставим: 
_CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_ALWAYS_DF);

Это задает параметры работы профилировщика памяти. параметров там куча, поэтому читаем их сами.
3) запускаем. После закрытия программы в окне Visual Studio "Output" будет выведено примерно следующее:
Programm.cpp(2532) : {29721} normal block at 0x00000000040812E0, 193168 bytes long.
 Data: <                > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Programm.cpp(1713) : {29714} normal block at 0x0000000003F06460, 48292 bytes long.
 Data: <                > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Это имя файла, строка, адрес и прочее. при двойном клике по строке студия сама переключится на это место.


четверг, 11 августа 2011 г.

Список программ, которые не надо писать.

По мотивам http://www.linux.org.ru/forum/talks/6596877
Если есть время и/или чешутся руки, то их надо... Ну ясен пень почесать. А если у программиста чешутся руки, то от зуда избавляются кодингом. И тут возникает проблема, на что обратить свое драгоценное внимание. Или кому приятно разгребать чужой код, или не дает покоя слава Торвальдса, но по какой то причине мало кто хочет присоединяться к существующим проектам. Все создают свои, новые.
Даже если очень хочется, то вот что писать не надо:
  1. Операционная система. Осилить проект размером с ядро  "Linux" мало кому под силу (да никому уже и не подсилу, ввиду размеров онного.). Если не верите, то взгляните на GNU HURD. или Minix. Второй живет и процветает, но не больше чем ОС для обучения студентов. А сколько напилено всяких "дискетных" операционок (Menuet OS, Kolibri OS). Такие вещи, как *BSD системы тоже никуда не делись. Только  с дровами проблема: они есть, но не под все железо и не всегда новые (привет владельцам видео от ATI и USB GSM  модемов).
  2. VCS. Если ОС не так много (большинство из которых сборки на базе существующих), то тут вообще зоопарк. git,mercurial,bazaar,cvs,svn,darcs... а про платные я и упоминать не стану.
  3. Офисные пакеты. Ну что тут сказать... их не так много, но ничего нового в это отрасли не открыли и все они являются неполными клонами продукта от MS.
  4. текстовый редактор. тут альтернатив, хоть закушайся. от sed до gedit и kate. А сколько клонов у emacs и vim? и это альтернативы не самых простых редакторов. Аналогами notepad можно печь топить. Для каждого "уважающего себя языка программирования" есть редактор написанный на нем самим.
  5. переписыванием существующего на python/ruby/javascript... в последнее время мания какая то: то git на c# или javascript перепишут, то grep на ruby, то pdf читалку на javascript (секта какая то). Зачем? Зачем все это, если можно сделать привязку к существующим библиотекам на с/с++ (за исключением javascript. тут неувязочка выходит)?
  6. Браузеры. Их не так много, если сравнивать с текстовыми редакторами, но куча уже образовалась. Я не говорю про те, что со своим движком и "инфраструктурой". Я про те, что на WebKit. Самой главное, что друг от друга они не различаются.
  7. файловый менеджер а-ля "commander". Их не так много, как текстовых редакторов, но принципиально нового тут открыть нельзя(ну или практически нельзя), а клепать очередной Total только хуже не стоит.
  8. IDE для java. В одиночку такое не осилить. Взгляните на Eclipse и компанию и поймете о чем я.
  9. IM (ICQ,Jabber....). Сотни альтернатив, даже если не считать проприетарные.
  10. mp3 плеер. Есть такие монстры как Banshe и Amarok, есть легкие Deadbeef и mpd. Есть пара-тройка WinAmpов.
  11. Photoshop. Тут альтернатив такого уровня мало. почти нет (если Gimp не рассматривать), а для простых смертных подойдет и то, что есть в DigiKam и его гномьем аналоге.
  12. torrent клиент. Ну тут их сколь угодно. И почти все написаны с использованием одной библиотеки.
Это, конечно, все мое имхо. Но я думаю, что писать очередной "мега ****, такой же, как  **, только другой" не стоит.

    вторник, 2 августа 2011 г.

    double2string

    Варианты конвертации double в string:

     
    String.Format("{0:0.00}", 123.4567);      // "123.46"
    String.Format("{0:0.00}", 123.4);         // "123.40"
    String.Format("{0:0.00}", 123.0);         // "123.00" 
    String.Format("{0:0.##}", 123.4567);      // "123.46"
    String.Format("{0:0.##}", 123.4);         // "123.4"
    String.Format("{0:0.##}", 123.0);         // "123"
    String.Format("{0:0.0}", 0.0);            // "0.0"
    String.Format("{0:0.#}", 0.0);            // "0"
    String.Format("{0:#.0}", 0.0);            // ".0"
    String.Format("{0:#.#}", 0.0);            // "" 

    воскресенье, 24 июля 2011 г.

    Android приложения

    Вот список программ, которые юзаю в своем телефоне. Записал сюда, чтобы не забыть.


    1. AppMonster - Программа для резервного копирования приложений.
    2. Я.Карты - собственно  карты, но отечественные
    3. DroidStats - Позволяет отследить длительность звонков, с кем больше всего велись разговоры, или смс. Можно установить месячные лимиты на звонки/смс и длительность разговоров
    4. FBreader - читалка книг. очень удобная.
    5. ES-Проводник - встроенного проводника в моем HTC Wildfire S нет, поэтому юзаю этот.
    6. Dropbox - в представлении не нуждается
    7. AdobeReader - в представлении не нуждается
    8. QuickOffice - читалка файлов офиса.
    9. RealCalc - калькулятор. неплохой такой калькулятор.
    10. OperaMobile - Opera но для ведройда.
    11. AnryBirds - игрушка - убийца времени.
    12. Google Reader - клиент к одноименному сервису.
    13. ArmySniper - очередная убийца времени.
    14. aFirewall - Блокирование нежелательных входящих звонков.
    15. Springpad - клиент к одноименному сервису
    16. Я.Маркет - клиент к Яндекс.Маркет со встроенным сканером штрих-кодов
    17. QRDroid - сканер qr-кодов.