I was trying to solve a problem of resetting a focus if the parent changes. I had different buttons that show the same .mxml-form but with different data. The problem was that I needed the focus to be on the first date-field whenever the form is shown so that the user can begin typing data right away.
<mx:HBox>
<mx:Button id="noData" click="showPanelWithNoData()" />
<mx:Button id="someData" click="showPanelWithSomeData()" />
<mx:Button id="withData" click="showPanelWithData()" />
<myCustomForm:DataForm width="100%" />
</mx:HBox>
So for each time one of the buttons is pushed I need the focus to be on myDate-field. To solve the problem I used “updateComplete“-property of the field.
DataForm.mxml
<?xml version="1.0" encoding="utf-8"?>
<DataForm
xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.managers.FocusManager;
private function resetFocus():void {
if (focusManager != null && myDate.focusManager != null) {
focusManager.setFocus(myDate);
}
}
]]>
</mx:Script>
<mx:FormItem>
<mx:TextField id="myDate"
updateComplete="resetFocus()"/>
</mx:FormItem>
</DataForm>
If you need to update a column in a table than you can use different approaches:
1) To modify a datatype of the column:
alter table Person modify COLUMN_A char(2) null
2) To make a column required:
First look if the column has some constraints:
sp_helpconstraint Person
If the column has constraints than you need to drop them first:
alter table Person drop constraint FK_PERSON_REF_ADRESS
Then if you can specify a default value for the column you can drop the column and create it again:
alter table Person drop COLUMN_A
alter table Person add COLUMN_A char(2) default 0 not null
But there is not the way we always need it. In such a case we need to drop the hole table and create it again:
drop table Person
create table Person(
COLUMN_B numeric(9,0) null,
COLUMN_C char(2) not null,
COLUMN_D date not null,
COLUMN_A numeric(9,0) identity,
constraint PK_PERSON primary key (COLUMN_A),
constraint FK_PERSON_REF_ADRESS foreign key (COLUMN_B)
references Adress (COLUMN_ADRESS_A)
)
I’ve recently come to a heuristic called the Law of Demeter (LoD) or Principle of Least Knowledge that says a module should not know about the innards of the objects it manipulates. More precisely, the method of a particular class should call:
- other methods of the same class
- objects created by the method itself
- objects passed as arguments to the method
- objects held in an instance variable of the same class
And that”s all!
So the following code appears to violate the Law:
String output = obj.getContext().getOptions().getDir().getPath();
It’s easy to forget something around such a structure. This one can solve the issue:
String output = obj.getPathFromContext();
This little macro prints out user warnings to the output window in a format the “Error List” within Visual Studio will understand and parse. Taken from Stack Overflow and modified a little.
#define STRINGISE_IMPL(x) #x
#define STRINGISE(x) STRINGISE_IMPL(x)
// Use: #pragma message WARN("My message")
#if _MSC_VER
# define FILE_LINE_LINK __FILE__ "(" STRINGISE(__LINE__) ") : "
# define WARN(exp) (FILE_LINE_LINK "warning: " exp)
#else//__GNUC__ - may need other defines for different compilers
# define WARN(exp) ("WARNING: " exp)
#endif
It will produce output like this:
1>.\src\bug.cpp(82) : warning: check me
When this line is present in the source file.
#pragma message WARN("check me")
The book by Robert C. Martin “Clean Code” is a really very useful material for all programmers. You can disagree with him sometimes (as I do), but it still provides some useful notes that helped me to place my programmer experience and knowledge where they belong. Here I’ll provide some key notes that I did while reading the book and that I’d like to memorize.
What you as a programmer SHOULD DO:
1. Give everything meaningful, searchable and pronounceable names.
2. Use names that other programmers can understand. Remember that the code is for programmers, not customers.
3. Functions should be small and smaller than that.
4. Functions should do one thing. They should do it well. They should do it only.
5. The ideal number of arguments for a function is zero. Max 3.
6. Prefer exceptions to returning error codes. Create informative error messages.
7. Prefer meaningful names to comments.
8. Write JavaDoc only for public API’s.
9. Format your code. While working in a team use a single formatting style.
10. Test your code with clean tests. Remember that test code is just as important as production code.
11. Test just one concept per test.
12. Test should follow the FIRST rule:
Fast - tests should be fast.
Independent - tests should not depend on each other
Repeatable - tests should be repeatable in any environment
Self-validating – the test should have a boolean output
Timely - write unit tests before the production code.
What you as a programmer should AVOID:
1. Avoid encoding
2. Avoid duplicate code. Watch out not only duplicate functions but also duplicate functionality.
3. Avoid noisy, redundant, uninformative comments. Remember that one of the more common motivations for writing comments is bad code.
Open Visual Studio command prompt.
Go to the folder you installed the source files in.
Execute configure with the wanted options.
S:\Qt\2009.04\qt>configure -debug-and-release -fast -no-webkit -opensource
This is the Qt for Windows Open Source Edition.
You are licensed to use this software under the terms of
the GNU General Public License (GPL) version 3
or the GNU Lesser General Public License (LGPL) version 2.1.
Type '3' to view the GNU General Public License version 3 (GPLv3).
Type 'L' to view the Lesser GNU General Public License version 2.1 (LGPLv2.1).
Type 'y' to accept this license offer.
Type 'n' to decline this license offer.
Do you accept the terms of the license?
Wait.
Then execute nmake and wait.
Usage: configure [-buildkey <key>]
[-release] [-debug] [-debug-and-release] [-shared] [-static]
[-no-fast] [-fast] [-no-exceptions] [-exceptions]
[-no-accessibility] [-accessibility] [-no-rtti] [-rtti]
[-no-stl] [-stl] [-no-sql-<driver>] [-qt-sql-<driver>]
[-plugin-sql-<driver>] [-system-sqlite] [-arch <arch>]
[-D <define>] [-I <includepath>] [-L <librarypath>]
[-help] [-no-dsp] [-dsp] [-no-vcproj] [-vcproj]
[-no-qmake] [-qmake] [-dont-process] [-process]
[-no-style-<style>] [-qt-style-<style>] [-redo]
[-saveconfig <config>] [-loadconfig <config>]
[-qt-zlib] [-system-zlib] [-no-gif] [-qt-gif] [-no-libpng]
[-qt-libpng] [-system-libpng] [-no-libtiff] [-qt-libtiff]
[-system-libtiff] [-no-libjpeg] [-qt-libjpeg] [-system-libjpeg]
[-no-libmng] [-qt-libmng] [-system-libmng] [-no-qt3support] [-mmx]
[-no-mmx] [-3dnow] [-no-3dnow] [-sse] [-no-sse] [-sse2] [-no-sse2]
[-no-iwmmxt] [-iwmmxt] [-direct3d] [-openssl] [-openssl-linked]
[-no-openssl] [-no-dbus] [-dbus] [-dbus-linked] [-platform <spec>]
[-qtnamespace <namespace>] [-qtlibinfix <infix>] [-no-phonon]
[-phonon] [-no-phonon-backend] [-phonon-backend]
[-no-webkit] [-webkit]
[-no-scripttools] [-scripttools]
[-graphicssystem raster|opengl]
Installation options:
You may use these options to turn on strict plugin loading:
-buildkey <key> .... Build the Qt library and plugins using the specified
<key>. When the library loads plugins, it will only
load those that have a matching <key>.
Configure options:
The defaults (*) are usually acceptable. A plus (+) denotes a default value
that needs to be evaluated. If the evaluation succeeds, the feature is
included. Here is a short explanation of each option:
-release ........... Compile and link Qt with debugging turned off.
* -debug ............. Compile and link Qt with debugging turned on.
+ -debug-and-release . Compile and link two Qt libraries, with and without
debugging turned on.
-opensource ........ Compile and link the Open-Source Edition of Qt.
-commercial ........ Compile and link the Commercial Edition of Qt.
-developer-build ... Compile and link Qt with Qt developer options
(including auto-tests exporting)
* -shared ............ Create and use shared Qt libraries.
-static ............ Create and use static Qt libraries.
-ltcg .............. Use Link Time Code Generation. (Release builds only)
* -no-ltcg ........... Do not use Link Time Code Generation.
* -no-fast ........... Configure Qt normally by generating Makefiles for all
project files.
-fast .............. Configure Qt quickly by generating Makefiles only for
library and subdirectory targets. All other Makefiles
are created as wrappers which will in turn run qmake
-no-exceptions ..... Disable exceptions on platforms that support it.
* -exceptions ........ Enable exceptions on platforms that support it.
-no-accessibility .. Do not compile Windows Active Accessibility support.
* -accessibility ..... Compile Windows Active Accessibility support.
-no-stl ............ Do not compile STL support.
* -stl ............... Compile STL support.
-no-sql-<driver> ... Disable SQL <driver> entirely, by default none are
turned on.
-qt-sql-<driver> ... Enable a SQL <driver> in the Qt Library.
-plugin-sql-<driver> Enable SQL <driver> as a plugin to be linked to at run
time.
Available values for <driver>:
mysql
psql
oci
odbc
tds
db2
+ sqlite
sqlite2
ibase
(drivers marked with a '+' have been detected as
available on this system)
-system-sqlite ..... Use sqlite from the operating system.
-no-qt3support ..... Disables the Qt 3 support functionality.
-no-opengl ......... Disables OpenGL functionality
-platform <spec> ... The operating system and compiler you are building on.
(default %QMAKESPEC%)
-xplatform <spec> .. The operating system and compiler you are cross
compiling to.
See the README file for a list of supported operating
systems and compilers.
-qtnamespace <namespace> Wraps all Qt library code in 'namespace name {...}
-qtlibinfix <infix> Renames all Qt* libs to Qt*<infix>
-D <define> ........ Add an explicit define to the preprocessor.
-I <includepath> ... Add an explicit include path.
-L <librarypath> ... Add an explicit library path.
-l <libraryname> ... Add an explicit library name, residing in a
librarypath.
-graphicssystem <sys> Specify which graphicssystem should be used.
Available values for <sys>:
* raster - Software rasterizer
opengl - Using OpenGL accelleration, experimental!
-help, -h, -? ...... Display this information.
Third Party Libraries:
-qt-zlib ........... Use the zlib bundled with Qt.
+ -system-zlib ....... Use zlib from the operating system.
See http://www.gzip.org/zlib
-no-gif ............ Do not compile the plugin for GIF reading support.
+ -qt-gif ............ Compile the plugin for GIF reading support.
See also src/plugins/imageformats/gif/qgifhandler.h
-no-libpng ......... Do not compile in PNG support.
-qt-libpng ......... Use the libpng bundled with Qt.
+ -system-libpng ..... Use libpng from the operating system.
See http://www.libpng.org/pub/png
-no-libmng ......... Do not compile in MNG support.
-qt-libmng ......... Use the libmng bundled with Qt.
+ -system-libmng ..... Use libmng from the operating system.
See See http://www.libmng.com
-no-libtiff ........ Do not compile the plugin for TIFF support.
-qt-libtiff ........ Use the libtiff bundled with Qt.
+ -system-libtiff .... Use libtiff from the operating system.
See http://www.libtiff.org
-no-libjpeg ........ Do not compile the plugin for JPEG support.
-qt-libjpeg ........ Use the libjpeg bundled with Qt.
+ -system-libjpeg .... Use libjpeg from the operating system.
See http://www.ijg.org
Qt for Windows only:
-no-dsp ............ Do not generate VC++ .dsp files.
* -dsp ............... Generate VC++ .dsp files, only if spec "win32-msvc".
-no-vcproj ......... Do not generate VC++ .vcproj files.
* -vcproj ............ Generate VC++ .vcproj files, only if platform
"win32-msvc.net".
-no-incredibuild-xge Do not add IncrediBuild XGE distribution commands to
custom build steps.
+ -incredibuild-xge .. Add IncrediBuild XGE distribution commands to custom
build steps. This will distribute MOC and UIC steps,
and other custom buildsteps which are added to the
INCREDIBUILD_XGE variable.
(The IncrediBuild distribution commands are only added
to Visual Studio projects)
-no-plugin-manifests Do not embed manifests in plugins.
* -plugin-manifests .. Embed manifests in plugins.
-no-qmake .......... Do not compile qmake.
* -qmake ............. Compile qmake.
-dont-process ...... Do not generate Makefiles/Project files. This will
override -no-fast if specified.
* -process ........... Generate Makefiles/Project files.
-no-rtti ........... Do not compile runtime type information.
* -rtti .............. Compile runtime type information.
-no-mmx ............ Do not compile with use of MMX instructions
+ -mmx ............... Compile with use of MMX instructions
-no-3dnow .......... Do not compile with use of 3DNOW instructions
+ -3dnow ............. Compile with use of 3DNOW instructions
-no-sse ............ Do not compile with use of SSE instructions
+ -sse ............... Compile with use of SSE instructions
-no-sse2 ........... Do not compile with use of SSE2 instructions
+ -sse2 .............. Compile with use of SSE2 instructions
+ -direct3d .......... Compile in Direct3D support (experimental - see
INSTALL for more info)
-no-openssl ........ Do not compile in OpenSSL support
+ -openssl ........... Compile in run-time OpenSSL support
-openssl-linked .... Compile in linked OpenSSL support
-no-dbus ........... Do not compile in D-Bus support
+ -dbus .............. Compile in D-Bus support and load libdbus-1 dynamicall
y
-dbus-linked ....... Compile in D-Bus support and link to libdbus-1
-no-phonon ......... Do not compile in the Phonon module
+ -phonon ............ Compile the Phonon module (Phonon is built if a decent
C++ compiler is used.)
-no-phonon-backend . Do not compile the platform-specific Phonon backend-pl
ugin
* -phonon-backend .... Compile in the platform-specific Phonon backend-plugin
-no-webkit ......... Do not compile in the WebKit module
+ -webkit ............ Compile in the WebKit module (WebKit is built if a
decent C++ compiler is used.)
-no-scripttools .... Do not build the QtScriptTools module.
* -scripttools ....... Build the QtScriptTools module.
-arch <arch> ....... Specify an architecture.
Available values for <arch>:
* windows
windowsce
boundschecker
generic
-no-style-<style> .. Disable <style> entirely.
-qt-style-<style> .. Enable <style> in the Qt Library.
Available styles:
* windows
+ windowsxp
+ windowsvista
* plastique
* cleanlooks
* motif
* cde
windowsce
windowsmobile
-loadconfig <config> Run configure with the parameters from file configure_
<config>.cache.
-saveconfig <config> Run configure and save the parameters in file
configure_<config>.cache.
-redo .............. Run configure with the same parameters as last time.
Qt for Windows CE only:
-no-iwmmxt ......... Do not compile with use of IWMMXT instructions
+ -iwmmxt ............ Do compile with use of IWMMXT instructions (Qt for
Windows CE on Arm only)
* -no-crt ............ Do not add the C runtime to default deployment rules
-qt-crt ............ Qt identifies C runtime during project generation
-crt <path> ........ Specify path to C runtime used for project generation.
-no-cetest ......... Do not compile Windows CE remote test application
+ -cetest ............ Compile Windows CE remote test application
-signature <file> .. Use file for signing the target project
-opengl-es-cm ...... Enable support for OpenGL ES Common
-opengl-es-cl ...... Enable support for OpenGL ES Common Lite
-opengl-es-2 ....... Enable support for OpenGL ES 2.0
* -phonon-wince-ds9 .. Enable Phonon Direct Show 9 backend for Windows CE
mdadm --assemble /dev/md0 /dev/sd[abcd]1
If you’re on a system as a user and with no means of installing custom libraries or updating libraries for your custom program, you can load your own libraries with this simple command.
$ ./executable
./executable: error while loading shared libraries: libcurl.so.4: cannot open shared object file: No such file or directory
Use ldd to find out what missing libraries you have:
$ ldd executable
linux-gate.so.1 => (0xa942d000)
libncursesw.so.5 => /lib/libncursesw.so.5 (0xa93e9000)
libcurl.so.4 => not found
librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xa93df000)
libssl.so.0.9.8 => /usr/lib/i686/cmov/libssl.so.0.9.8 (0xa939d000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xa9399000)
libz.so.1 => /usr/lib/libz.so.1 (0xa9384000)
libcrypto.so.0.9.8 => /usr/lib/i686/cmov/libcrypto.so.0.9.8 (0xa9241000)
libsigc-2.0.so.0 => /usr/lib/libsigc-2.0.so.0 (0xa923b000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xa9148000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xa9123000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xa9118000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xa8fc9000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xa8fb0000)
/lib/ld-linux.so.2 (0xa942e000)
Copy over your libcurl.so.4 to the system and invoke your custom executable with:
$ LD_PRELOAD=./libcurl.so.4:./libexecutable.so.11 ./executable
Separate different libraries with a colon (:).
After being puzzled by this error for some time, I finally was able to solve it with lots of help from my friend Simeon. GTK+ ./configure failed both on emerge gtk+ and on a manual source build with these errors.
configure:33559: gcc -o conftest -g -O2 -Wall -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/pixman-1 conftest.c -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 >&5
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../libcairo.so: undefined reference to `XRenderFindStandardFormat'
/opt/blackdown-jdk-1.4.2.03/jre/lib/i386/libXrender.so.1: undefined reference to `XMissingExtension'
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../libcairo.so: undefined reference to `XRenderQuerySubpixelOrder'
/opt/blackdown-jdk-1.4.2.03/jre/lib/i386/libXrender.so.1: undefined reference to `XextRemoveDisplay'
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../libcairo.so: undefined reference to `XRenderSetPictureFilter'
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../libcairo.so: undefined reference to `XRenderCompositeTrapezoids'
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../libcairo.so: undefined reference to `XRenderCompositeText32'
/opt/blackdown-jdk-1.4.2.03/jre/lib/i386/libXrender.so.1: undefined reference to `XextFindDisplay'
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../libcairo.so: undefined reference to `XRenderCompositeText16'
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../libcairo.so: undefined reference to `XRenderCompositeText8'
/opt/blackdown-jdk-1.4.2.03/jre/lib/i386/libXrender.so.1: undefined reference to `XextAddDisplay'
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../libcairo.so: undefined reference to `XRenderSetPictureTransform'
collect2: ld returned 1 exit status
configure:33566: $? = 1
While installing cairo, I got these warnings:
/sbin/ldconfig: /opt/blackdown-jdk-1.4.2.03/jre/lib/i386/libXxf86vm.so.1 is not a symbolic link
/sbin/ldconfig: /opt/blackdown-jdk-1.4.2.03/jre/lib/i386/libXxf86misc.so.1 is not a symbolic link
/sbin/ldconfig: /opt/blackdown-jdk-1.4.2.03/jre/lib/i386/libXxf86dga.so.1 is not a symbolic link
/sbin/ldconfig: /opt/blackdown-jdk-1.4.2.03/jre/lib/i386/libXv.so.1 is not a symbolic link
...
I found this:
grep -R VMHANDLE /etc/
/etc/csh.env:setenv VMHANDLE 'blackdown-jdk-1.4.2'
/etc/env.d/20java:VMHANDLE=blackdown-jdk-1.4.2
/etc/profile.env:export VMHANDLE='blackdown-jdk-1.4.2'
/etc/profile.csh:setenv VMHANDLE 'blackdown-jdk-1.4.2'
Opened up /etc/env.d/20java and commented everything. Then I did:
env-update
source /etc/profile
And I did:
emerge -av cairo gtk+
Which resulted in GTK+ being correctly configured, compiled, linked and installed!