tag:blogger.com,1999:blog-64766441385653672152024-03-14T17:39:48.635+06:00Precious C++О C++, Великом и Могучем, и о программированииРусланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.comBlogger36125tag:blogger.com,1999:blog-6476644138565367215.post-76301542947188258122014-05-31T22:13:00.000+07:002014-05-31T22:13:31.405+07:00Видео уроки по C# и Cakewalk Sonar X3Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com2tag:blogger.com,1999:blog-6476644138565367215.post-73728135995092370252014-04-28T16:35:00.001+07:002014-05-11T15:44:50.212+07:00Converting png to icns programmatically
To solve it we need to get next libs:
libicns
libpng
jasper
zlib
I've attached the prepared solution, so use it and enjoy
Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com0tag:blogger.com,1999:blog-6476644138565367215.post-32676585736299891562014-04-08T14:50:00.003+07:002014-04-09T17:45:10.153+07:00Pointers cheat sheet
Creating simple pointers
int* ptr = nullptr; // creating a null pointer
int val = 0;
int* ptr = &val;// creating a pointer referencing to a variable
*ptr = 90; // dereferencing pointer
int* ptr2 = new int; // allocation for 1 uninitialized int variable
*ptr2 = 100; // assign a value to address stored in ptr2
ptr2[0] = 100; // valid syntax but never do it this way :)
int* arptr = new int; Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com0tag:blogger.com,1999:blog-6476644138565367215.post-5359245732910801412014-03-29T09:51:00.000+07:002014-04-08T12:56:34.312+07:00Automatical prompting admin privileges launching an application on Mac os
If your application requires admin privileges and you don't want the user run it from command line with sudo then you can use Apple script to achieve it
First create an apple dropplet with the code below
on run
on run
set appAlias to POSIX path of (path to resource "CamelAudioInstaller.app")
set cmnd to appAlias & "Contents/MacOS/CamelAudioInstaller"
#display dialog "You're going to launchРусланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com0tag:blogger.com,1999:blog-6476644138565367215.post-51944069602229083852013-11-01T21:37:00.001+07:002014-04-08T12:56:48.132+07:00Adding an additional path for finding dll in Visual Studio
Imagine that your application requires any dll. If the dll path is not in the $(PATH) or system32 or the application folder then you get the error right after starting:
To point out where to search the dll go to Project Properties->Debugging->Enviroment and change this values as
PATH=MySpecialDirectory/To/Search/Dll/$(PATH)
Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com0tag:blogger.com,1999:blog-6476644138565367215.post-82539480590852418572013-10-17T00:58:00.000+07:002014-04-08T12:57:20.304+07:00Getting current user's desktop path on Mac OS
The simplest solution is
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES );
NSString* theDesktopPath = [paths objectAtIndex:0];
But in the case of running the application in sudo mode it gives us the root's desktop path. To fix it use
NSString* home = [[[NSProcessInfo processInfo] environment] objectForKey:@"HOME"];
NSString *pathToDesktop = Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com0tag:blogger.com,1999:blog-6476644138565367215.post-16520952124869287462013-08-24T16:23:00.001+07:002014-04-08T12:57:53.398+07:00How to build 32-bit curl and openssl on 64-bit Mac OS X
First let's donwload and build openssl:
OPENSSL_VERSION="1.0.1e"
mkdir -p ~/packages/tmp_src
cd ~/packages/tmp_src
curl http://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz > openssl-$OPENSSL_VERSION.tar.gz
tar -xvzf openssl-$OPENSSL_VERSION.tar.gz
mv openssl-$OPENSSL_VERSION openssl_i386
cd openssl_i386
./Configure darwin-i386-cc
make -j 8
make install
cd ../
To make sure that we Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com0tag:blogger.com,1999:blog-6476644138565367215.post-74607618705260373732013-04-04T00:57:00.001+07:002014-04-08T12:58:25.106+07:00Using alternative tokens in Visual Studio
There's an interesting thing in C++ called alternative tokens
For using tokens in Visual Studio you should:
- For the tokens from 1st column compile with /Za flag (Configuration properties->C/C++->Language->Disable language Extensions = Yes)
- For the tokens from 2nd and 3rd columns include <iso646.h>
Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com2tag:blogger.com,1999:blog-6476644138565367215.post-17374059099259721192013-03-23T21:03:00.001+07:002014-04-08T12:55:51.284+07:00Libcurl and linker errors
If you were to install libcurl on Windows you could come across a bulk of linker errors such as
Error 1176 error C2065: '_SH_DENYNO' : undeclared identifier c:\program files (x86)\microsoft visual studio 10.0\vc\include\xiosbase
How to fix it? Go to curl sources, rename share.h to share_curl.h for instance and replace all occurences of
#include "share.h"
with
#include "share_curl.h
Then Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com0tag:blogger.com,1999:blog-6476644138565367215.post-77796495862239221242012-11-18T02:33:00.002+07:002014-04-08T12:58:43.509+07:00How to install Homebrew on Mac OS
Homebrew is the missing package manager for OS X
To install it type:
ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com0tag:blogger.com,1999:blog-6476644138565367215.post-15936319393106890912011-02-27T23:29:00.001+06:002011-02-27T23:29:28.476+06:00Отличия ADDR и OFFSETПроясним момент насчет различия операторов ADDR и OFFSET в программах, написанных на Ассемблере.
Первоочередное назначение данных операторов - это получение адреса переменной в памяти.
В программах на ассемблере могут присутствовать как локальные так и глобальные переменные.
Глобальные переменные существуют в памяти на протяжении всего времени выполнения программы, локальные - только во время Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com1tag:blogger.com,1999:blog-6476644138565367215.post-62763294834855948052011-01-26T00:13:00.002+06:002011-01-26T00:18:56.916+06:00EFLAGS. Перенос (CF) и переполнение (OF)Есть в процессоре (будем говорить об архитектуре Intel) такой замечательный регистр - EFLAGS или регистр флагов. Данный 32-битный регистр содержит группу статусных флагов, группу флагов контроля и группу системных флагов. Как правило, в учебниках по архитектуре компьютера или ассемблеру присутствует довольно сухое описание, для чего определенный флаг предназначен, и еще чаще отсутствуют примеры, Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com0tag:blogger.com,1999:blog-6476644138565367215.post-30279857456798258922011-01-14T00:08:00.011+06:002012-03-11T17:27:19.225+07:00Многопоточное программирование. 3. Проблема производителя и потребителяПроблема производителя и потребителя, известная так же как проблема ограниченного буфера, является одной из классических задач многопроцессной синхронизации.
Рассмотрим упрощенный случай с двумя процессами. Первый процесс - Производитель (Producer), второй - Потребитель (Consumer).
Процессы используют общий буфер: Производитель помещает информацию в буфер, в то время как Потребитель извлекает ееРусланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com0tag:blogger.com,1999:blog-6476644138565367215.post-71971002786232028572010-10-21T01:32:00.003+07:002011-01-20T22:28:06.666+06:00Многопоточное программирование. 2. Алгоритм Петерсона... чуть более подробно. ч.2. Случай N процессовВ прошлый раз был рассмотрен алгоритм Петерсона для взаимного исключения двух процессов. На этот раз рассмотрим алгоритм Петерсона, обощенный на N параллельно выполняющихся процессов.
Код алгоритма:
#define FALSE 0
#define N 10
int turn[N];
int stage[N + 1];
void enterRegion(int process)
{
for (int i = 1; i <= N - 1; i++) // перебор стадий
{
stage[process] = i;
turn[i]Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com0tag:blogger.com,1999:blog-6476644138565367215.post-21271468137295935302010-10-02T00:00:00.003+07:002011-01-20T22:28:24.836+06:00Многопоточное программирование. 1. Алгоритм Петерсона... чуть более подробно
#alsample tr
{
text-align: center;
}
Разберем сегодня алгоритм Петерсона. Посвящается всем начинающим, продолжающим,
прогулявшим пары по операционным системам и тем, до кого не дошло сразу. Алгоритм
Петерсона позволяет добиться взаимного исключения двух процессов. Рассмотрим 3 варианта поведения двух процессов при возникновении прерываний в трех Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com2tag:blogger.com,1999:blog-6476644138565367215.post-79022876970063869842010-09-29T01:39:00.017+07:002013-08-24T15:57:40.796+07:00Особенности выравнивания данных в структурах
#alsample tr {text-align:center;}
#alsample tr td{width:20px;}
Начинающим да и продолжающим программистам порой непонятно, почему в некоторых случаях размер структуры может быть больше, чем суммарный размер входящих в нее членов. Например:
struct Test
{
char var1; // 1 байт
short var2; // 2 байта
};
Как видно, суммарный размер структуры должен быть равен 3 байтам, на деле же оказывается вовсеРусланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com2tag:blogger.com,1999:blog-6476644138565367215.post-43521299996189562362010-08-10T23:19:00.006+07:002014-04-09T17:05:24.786+07:00Array name != pointer to the first array element?
from the standard (4.2.1):
An lvalue or rvalue of type 'array of N T' or 'array of unknown bound of T' can be converted to an rvalue of type 'pointer to T'. The result is a pointer to the first element of the array.
I.e.:
An Array variable, defined as
T ar[N]; //array of N T
or
T ar[] = {val1, val2, val3}; //array of unknown bound of T
can be converted to an rvalue of type 'pointer to T'Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com2tag:blogger.com,1999:blog-6476644138565367215.post-54593438948169661732010-06-10T01:45:00.001+07:002014-02-18T18:54:16.156+07:00Include guards is not all-healingOnce upon a time a got a linker error:
//файл testing.h
#ifndef TESTING_H
#define TESTING_H
class MyClass
{
private:
int classData;
public:
MyClass();
~MyClass();
};
namespace TestNS
{
int namespaceData;
};
#endif
//файл testing.cpp
#include "Testing.h"
MyClass::MyClass()
{
//........
}
MyClass::~MyClass()
{
//........
};
//файл mainfile.cpp
#include "Testing.h"
int main()
{
Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com2tag:blogger.com,1999:blog-6476644138565367215.post-51664470595046041202010-05-29T02:10:00.003+07:002010-08-09T14:11:28.232+07:00C++ и StaticРассмотрим употребление ключевого static в языке С++. Думаю кому-то это сообщение будет полезно.
Рассмотрим следующие обасти видимости, имеющиеся в С++:
Local scope (область видимости - блок)
Function scope (область видимости - функция)
File scope (область видимости - файл)
Class scope (область видимости - класс/структура)
Начнем с самого простого.
Допустим в блоке находится локальная Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com0tag:blogger.com,1999:blog-6476644138565367215.post-6750857767659623502010-05-23T18:48:00.001+07:002010-05-26T22:27:50.710+07:00Qt и условная сборка qmakeПопытаюсь сэкономить кому-нибудь время,силы и нервы.
В одном из Qt проектов (.lib) нужно было сделать так, чтобы при сборке в режиме debug сгенерированная dll помещалась в дерикторию debug, а при сборке в режиме release - в директорию release.
Решение состояло в том, чтобы прописать в pro-файле следующее:
CONFIG += designer plugin debug
TEMPLATE = lib
TARGET = $$qtLibraryTarget($$Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com2tag:blogger.com,1999:blog-6476644138565367215.post-90956056079943126682010-05-17T23:17:00.004+07:002014-04-08T13:00:23.392+07:00C++ и указатели на...
С++ необъятен. На нем можно порой такие конструкции написать, что не сразу поймешь в чем тут дело. Хотелось затронуть тему указателей. Опытные программисты знают подобные конструкции, поэтому будет больше полезно для сведения (но не для использования) начинающим и продолжающим.
Начнем от простого к сложному.
char *ch; // указатель на символьный тип
int (*arrayPointer)[10]; // указатель на Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com0tag:blogger.com,1999:blog-6476644138565367215.post-39096684772785639352010-03-28T00:40:00.002+06:002010-03-28T00:41:10.901+06:00QLabel & QPainter. Рисование на картинкеСлучилась как-то задача. Нужно было загружать картинку и потом рисовать на ней всякой разное мышкой.
В роли виджета для загрузки картинки я сделал унаследованный от QLabel виджет с переопределенным событием
void RenderingLabel::paintEvent(QPaintEvent* pe){}
Мышка отлично рисовала, но проблема была в том, что фоновая картинка не отображалась. Как позже выяснилось, нужно было вызвать базовое Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com0tag:blogger.com,1999:blog-6476644138565367215.post-43948970230928490272010-03-07T01:54:00.024+06:002010-06-24T17:44:04.534+07:00Создание собственных виджетов с интеграцией в Qt Designer (Custom widget plugin)В данном посте я создам виджет,а именно, в нем будет присутствовать QListWidget, кнопки перемещения элемента списка на позицию вверх и вниз, кнопка удаления. Так же в нем присутствует метод привязки данных и добавления отдельного элемента (QString). Такой элемент управления мне понадобился на одном из проектов, причем в нескольких местах, поэтому, я решил оформить его именно как отдельный элементРусланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com5tag:blogger.com,1999:blog-6476644138565367215.post-85718254126857301522010-03-01T00:37:00.002+06:002010-03-07T16:13:31.133+06:00Ogre3D. Сборка из исходников под Microsoft Visual Studio 2008Сегодня будем собирать Ogre из исходников. Можно конечно скачать уже готовые сборки, но из исходников-то интереснее, да и при разработке можно посмотреть реализацию то или иного метода, чтобы лучше понять механизм работы без документации.
Качаем и устанавливаем DirectX, если не установлен.
Качаем библиотеки для Ogre
Качаем сам Ogre, либо можно скачать из SVN
Качаем CMake
Извлекаем папку ogreРусланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com2tag:blogger.com,1999:blog-6476644138565367215.post-3758512998052287792010-01-17T02:18:00.008+06:002011-12-01T00:49:32.565+07:00Некоторые особенности QScrollAreaСтолкнулся с таким интересным виджетом как QScrollArea. С помощью него можно отображать прокручивающееся содержимое, допустим, картинку или текст, или список виджетов.
Для того, чтобы вовнутрь QScrollArea добавить другой виджет нужно сделать примерно следующее:
// Заранее созданная в setupUi() scrollArea
QLabel *l1 = new QLabel("label1");
scrollArea->setWidget(l1);
Метод QScrollArea::setWidget Русланhttp://www.blogger.com/profile/17480671233254585553noreply@blogger.com4