Archive for December, 2009

LightRoom Presets

How to add presets – here.

PS and LightRoom tutorials

Screen Capture in Snow Leopard

When Screen Capture command is issued the SystemUIServer runs a program named “screencapture”. This program is located at   “/usr/sbin/screencapture”. This utility has various options for taking pictures of the screen.
 

We can alter the default  ScreenCapture File Name and format in Snow Leopard by issuing the following commands in Terminal.

A. To Change default file format to jpg

    defaults write com.apple.screencapture type jpg
    killall SystemUIServer


B. To Change screen capture file name to the format [current date] at [time]

    defaults write com.apple.screencapture name “”
    killall SystemUIServer

Instead of empty string a specific name can also be given. In both the cases the second command is uses to restart the screencapture program era only then the changes made will be  effective.

Screen Capture Options:

  1. Pressing cmd+ shift+ 3 will capture the screen to a jpg file (if the default file format is jpg)
  2. Pressing cmd +ctrl +shift +3 will capture the screen to clipboard
  3. Pressing cmd+ shift +4 will give a cross-hair. Drag the cross-hair cover the desired area of the screen using left click pressed before releasing the left click will capture to  and release to capture a specific area. Pressing ctrl before releasing the mouse will capture to clipboard.
  4. Pressing cmd+ shift +4 and then the spacebar will turn the cursor to a camera which can be used to capture a specific open window from multiple open windows on the screen.

Apple Video Formats

Article on Apple Video Formats

Smart Pointers in C++

There are a number of “smart pointer” implementations in C++. Each one has a different set of features and it seems hard to pick one that satisfies scenarios.

auto_ptr: Available as part of the standard C++ library (#include ). Has the several useful features and shortcomings:

  1. Pointer initializes itself to 0 if not explicitly initialized
  2. Pointer automatically deletes itself when it goes out of scope
  3. Only one auto_ptr can point to an object at a given time (so no question of reference counting). If you do x=y auto_ptr x will now point to what was pointed to by y. But y will now point to NULL!!
  4. Does not work for arrays because it deletes its pointer with delete and not delete []
  5. Does not work with STL. Warning: May appear to work but reportedly results in subtle devastating bugs
  6. It is not thread safe

Feature 3 limits its usefulness IMHO. This article – Using auto_ptr Effectively – summarizes auto_ptr features.

shared_ptr: This pointer from  the BOOST C++ library uses reference counting. So a shared_ptr that is assigned to another will point at the same object in memory and will increment a reference count to that object. When either of the pointers is deleted the object reference count is decremented. If the object reference count is zero the object is truely deleted from memory.

  1. Reference counted
  2. Does NOT do copy on write. If shared_ptr x is assigned to y and later *x (or *y) is changed then the memory location pointed to is changed (just like a regular pointer)
  3. Cycling references may lead to memory leaks – this is a problem with reference counting itself and not this specific implementation
  4. Thread safety – some operations seem atomic. See BOOST docs.
  5. Cannot hold a pointer to an array (see shared_array)
  6. Pointer automatically deletes itself (or reduces reference count) when it goes out of scope

This may be already added to C++ standard library in the near future (already in?).

Const in C++

Const declaration:

const int* x; //constant data (*x); non-constant pointer
int const *x; //same as above
int * const x; //constant pointer; non-constant data
const int * const x; //const data; const pointer

Const member functions:
Function values can be declared const. Helps specifically in operator overloading.

const Foo operator*(const Foo& lhs, const Foo& rhs);

Foo a,b,c; 

a = b*c; //legal
(a*b) = c; //This will work if return value is not const

It is not useful to assign any value to the product of two variables but it can happen accidentally. Example, using = instead of ==

if(a*b = c) {
}

Const member functions in a class cannot modify the contents of the class. They make it possible to work with const objects. Member functions differing only in their “constness” can be overloaded.

class Foo {
public:
    const int& value() const;
       int& value();

private:
    int x;
};

main() {
    Foo x(1);
    cout<<x.value(); //Non-const function is called

    const Foo y(2);
    cout<<y.value(); //const function is called
}

Bitwise Constness:
C++ gives only bitwise constness. This means const member functions cannot modify pointers in a class. But they can modify the data the pointer points to.

Mutable:
Mutable type modifier allows variables to be modified even by const functions.

Class Foo {
public:
    void test() const; //can modify x but nor y
private:
    mutable int x;
    int y;
};

Tags: , ,

Photoshop Tips

Photoshop Tips