text:
Difference between revisions of "AMD Catalyst"
(→Xorg-server repositories: : xorg111 update)
(→Radeon HD 6870 and fglrx 10.10)
|Line 717:
|Line 717:
Also see [https://bbs.archlinux.org/viewtopic.php?pid=1008216#p1008216 this post] if the above doesn't work for you.
Also see [https://bbs.archlinux.org/viewtopic.php?pid=1008216#p1008216 this post] if the above doesn't work for you.
===Radeon HD 6870 and fglrx 10.10===
===Radeon HD 6870 and fglrx 10.10 ===
{{Accuracy|This issue may not exist any more, please confirm.}}
{{Accuracy|This issue may not exist any more, please confirm.}}
When running
When running
Revision as of 18:59, 9 July 2012
Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary heading Template:Article summary link Template:Article summary link Template:Article summary end
Owners of ATI/AMD video cards have a choice between ATI's proprietary driver (catalystAUR) and the open source driver (xf86-video-ati). This article covers the proprietary driver.
ATI's Linux driver package fglrx (FireGL and Radeon X) is now known as Catalyst to fall in line with the naming scheme of the Windows driver. Only the package name has changed, while the kernel module retains its original fglrx.ko filename. Therefore, any mention of fglrx below is specifically in reference to the kernel module, not the package.
Catalyst was once a precompiled package offered by Arch in the [extra] repository, but as of March 2009, official Arch support has been dropped because of dissatisfaction with the quality and speed of development.
Compared to the open source driver, Catalyst performs worse in 2D graphics, but has a better support for 3D rendering. Supported devices are ATI/AMD Radeon video cards with chipset R600 and newer (as of Catalyst 9.4). See this table, or the Xorg "Decoder ring", to translate model names (X1900, HD4850) to/from chip names (R580, RV770 respectively).
- 1 Installation
- 1.1 Installing from AUR
- 1.2 Unofficial repositories
- 1.3 Tools
- 1.4 Official ATI/AMD Installer
- 2 Configuration
- 3 Features
- 4 Troubleshooting
- 4.1 Problems with video colours
- 4.2 KWin and composite
- 4.3 Black screen with complete lockups / hangs after reboot or startx
- 4.4 KDM disappears after logout
- 4.5 Direct Rendering does not work
- 4.6 Hibernate/Sleep Issues
- 4.7 System Freezes/Hard locks
- 4.8 Hardware Conflicts
- 4.9 Temporary hangs when playing video
- 4.10 Catalyst 10.6/10.7/10.8/10.9 : black/grey/white boxes/artifacts in firefox/thunderbird
- 4.11 Radeon HD 6870 and fglrx 10.10 or AMD APU and fglrx 12.6
- 4.12 WebGL support in Chromium
- 4.13 Laggs/freezes when watching flash videos via Adobe's flashplugin
- 4.14 Laggs/slow windows movement in GNOME3
SInce catalyst 12.4 AMD will provide only important updates of it's catalyst driver for Radeon HD < 5xxx graphic cards...
All Radeon HD 2xxx 3xxx 4xxx owners please switch to the new repository:
Server = http://catalyst.apocalypsus.net/repo/catalyst-hd234k/$arch
There you can find catalyst 12.6 legacy beta driver which will work with your cards.
On AUR there's catalyst-total-hd234k package with mentioned legacy driver.
Catalyst 12.6 legacy beta news:
- supports Radeons HD 2xxx 3xxx 4xxx ONLY
- supports 3.4 kernel;
- supports xorg-server 1.12
- it includes OpenCL binaries for the SDK;
Catalyst 12.6 stable news:
- supports Radeons HD >= 5xxx
- supports 3.4 kernel (through patches);
- supports xorg-server 1.12
- it includes OpenCL binaries for the SDK;
- GNOME3 support does look good;
- KDE's direct rendering does work without tearing;
Almost[*] all catalyst's packages mentioned below (like catalyst-utils) are available on AUR (read Installing from AUR for more details) and on unofficial [catalyst] repository.
To install AMD's fglrx driver for the
linux package, you need to install either catalyst (driver for stock kernel) + catalyst-utils (required libraries/utilities) packages or catalyst-total package.
[*]catalyst-total is available only on AUR, as it was designed to be the fastest way of building catalyst drivers for AUR users
If you are using x86_64 architecture and want 32-bit OpenGL support - install lib32-catalyst-utils, just make sure that you did uncomment [multilib] repository in /etc/pacman.conf before installing this package - note: if you are using catalyst-total then you do not need this package.
Please note that there are some additional packages which can be useful, every one of them can replace catalyst package and provide fglrx modules for multiple kernels installed on your system, these packages are:
- catalyst-generator - able to generate fglrx modules packed into pacman's packages - most secure and KISS-compatible package in this side-note, althought it has to be operated manually;
- catalyst-hook - mkinitcpio' hook which will automatically update fglrx modules with every kernel's update;
- catalyst-daemon - that delivers 'automatic update of fglrx modules with every kernel's update' functionality done by init script.
You will find more details about those packages in Tools section.
After installing you need to ensure xorg.conf is created and/or configured before rebooting.
If you are using x86_64 architecture and want 32-bit OpenGL support - install AUR's lib32-catalyst-utils, just make sure that you have uncommented [multilib] repository in /etc/pacman.conf. Note: if you are using catalyst-total then you do not need this package.
/etc/ati/amdpcsdb, start your X/DE, and then run
amdcccle - otherwise you may experience bad catalyst's versioning in amdcccle.
- Make sure that you own a R6xx (HD2xxx) or newer card or the driver won't be enabled. You will encounter an error if you try to enable your display using Catalyst and a card older than the R6xx series.
- It appears that Catalyst 9.10-10.11 does not support nForce4 motherboard chipsets.
If you need more information on catalyst, visit this thread.
Installing from AUR
Addresses of AUR packages mentioned on the top of Installation section:
- catalystAUR - driver for stock kernel
- catalyst-utilsAUR - required libraries/utilities
- lib32-catalyst-utilsAUR - 32-bit OpenGL support for x86_64 systems
- catalyst-totalAUR - catalyst-hook + catalyst-utils + lib32-catalyst-utils
- catalyst-generatorAUR - Generator of catalyst-{kernver} packages with fglrx module inside
- catalyst-hookAUR - Auto re-compile the fglrx module when kernel update (mkinitcpio's hook)
- catalyst-daemonAUR - Auto re-compile the fglrx module if kernel was updated (init script)
Custom Kernels
{{Note| catalyst-generator is able to build catalyst-{kernver} packages for you so you do not actually need to perform all those steps manually, although this section should stay because it can be useful}}
To install catalyst for a custom kernel, you'll need to build your own
catalyst-$kernel package.
If you are at all uncomfortable or inexperienced making packages, read up the ABS wiki page first so things go smoothly.
Obtaining PKGBUILD
Obtain the
PKGBUILD and
catalyst.install files from AUR.
Editing the PKGBUILD and Building
Three changes need to be made here:
1. Change:
pkgname=catalyst to
where KERNEL_NAME is whatever you want (e.g. custom, mm, themostawesomekernelever)
2. Remove
linux from the dependencies list.
3. Build and install the package. (
makepkg -i or
makepkg followed by
pacman -U pkgname.pkg.tar.gz)
Unofficial repositories
There are some unofficial repositories containing the newest (or older) catalyst packages along with the appropriate libs and software in order to use the driver. If you want to know what packages are inside any given repository you need to first add repository to pacman.conf, perform pacman -Sy command and then list repository with pacman -Sl command:
# pacman -Sl catalyst
[catalyst] repository
It contains newest stable catalyst driver and some additional packages. This repository should always work with the stock kernel from [core] and it is updated most frequently.
To use it you need:
1.) Edit /etc/pacman.conf and add those lines above all other repositories (so also above [core] and [extra]):
[catalyst] Server = http://catalyst.apocalypsus.net/repo/catalyst/$arch
2.) Update with:
# pacman -Syu
3.) Install catalyst:
# pacman -S catalyst catalyst-utils
Note: If you are updating from catalyst =< 10.8 steps 2 and 3 look like this:
# pacman -Sy # pacman -Rdd catalyst # pacman -S catalyst catalyst-utils
4.) Don't forget to prepare your /etc/X11/xorg.conf for catalyst! Use aticonfig --initial if it doesn't exist.
5.) Reboot.
For x86_64 users [catalyst] provides lib32-catalyst-utils package needed to run 32-bit opengl applications and wine games.
Repository also contains xvba-video package so you may easily use video acceleration described below, plus catalyst-daemon, catalyst-hook and catalyst-generator packages.
[catalyst] repository contains xorg-server-catalyst-maximize-fix package. This package is fixing problems with maximizing/resizing, use it mainly if you have disabled ATi 2D Acceleration Architecture. To remove xorg-server and install xorg-server-catalyst-maximize-fix just type:
# pacman -Rdd xorg-server xorg-server-common # pacman -S xorg-server-catalyst-maximize-fix
Archived repositories
There are some archived repositories placed in http://catalyst.apocalypsus.net/repo/catalyst or http://catalyst.apocalypsus.net/repo/catalyst-hd234k, please browse this site and look for files with *.db extension, if you have found interesting catalyst repository tell pacman to use it. For catalyst-hd234k-12.4 pacman.conf entry looks like:
[catalyst-hd234k-12.4] Server = http://catalyst.apocalypsus.net/repo/catalyst-hd234k/$arch
You can also view archive catalyst PKGBUILDs and use them to build catalyst package which fit your needs, you can find it inside tar.gz archives here.
Xorg-server repositories
catalyst < 12.6 isn't supporting xorg-server 1.12, that's why this repo appeared.
To use this repo you need to edit /etc/pacman.conf and add those lines above all other repositories:
[xorg111] Server = http://catalyst.apocalypsus.net/repo/xorg111/$arch
This repository contains xorg-server packages of 1.10 line - catalyst driver in version < 11.11 was not supporting xorg-server 1.11.
To use this repo you need to edit /etc/pacman.conf and add those lines above all other repositories:
[xorg110] Server = http://catalyst.apocalypsus.net/repo/xorg110/$arch
Catalyst <= 11.3 isn't supporting xorg-server >= 1.10 (checked also with IgnoreAbi flag) - that's the reason why [xorg19] repo with xserver 1.9 and some additional packages arrived.
To use it you need edit /etc/pacman.conf and add those lines above all other repositories:
[xorg19] Server = http://catalyst.apocalypsus.net/repo/xorg19/$arch
Catalyst < 10.10 isn't working with xorg-server >= 1.9 (checked also with IgnoreAbi flag). To use it you need edit /etc/pacman.conf and add those lines above all other repositories:
[xorg18] Server = http://catalyst.apocalypsus.net/repo/xorg18/$arch
Supported since catalyst 10.4
[xorg17] repository contains xserver 1.7 packages, use it only if you are experiencing problems with newer xservers.
Repository contains xorg-server-backclear (patched with backclear patch) and xorg-server-1.7-catalyst-maximize-fix (patched with fedora patch) packages. Both this patches fix problems with maximizing/resizing but they are doing it in different way - you may choose which patched xserver is best for you. To remove xorg-server and install xorg-server-backclear just type:
# pacman -Rdd xorg-server # pacman -S xorg-server-backclear
Similar with xorg-server-1.7-catalyst-maximize-fix
To use [xorg17] repo please put those lines at the top of all other repositories in /etc/pacman.conf:
[xorg17] Server = http://catalyst.apocalypsus.net/repo/xorg17/$arch
[xorg16] repository contains xserver 1.6 packages, use it only if you are experiencing problems with newer xservers.
[xorg16] Server = http://catalyst.apocalypsus.net/repo/xorg16/$arch
catalyst-generator is a package able to build and install fglrx modules packed into nice catalyst-{kernver} pacman's packages.
It creates catalyst-{kernver} packages using makepkg and installs them with pacman. {kernver} is the kernel version for which each package was built (e.g. catalyst-2.6.35-ARCH package was built for 2.6.35-ARCH kernel).
To build and install catalyst-{kernver} package for booted kernel as an unprivileged user (safer way) type this:
You will be asked for root's password to proceed to package installation.
It is important to run this command after installing catalyst-generator.
This package doesn't support auto re-compilation functionality so after kernel updates you will have to manually update catalyst-{kernver} package. Do it in this way (without rebooting):
1.) As root:
# catalyst_build_module remove
This will remove all unused
catalyst-{kernver} packages
2.) As unprivileged user:
# catalyst_build_module new_kernel_version
Where new_kernel_version is a version of kernel which you just updated/installed. e.g.:
catalyst_build_module 2.6.36-ARCH
catalyst_build_module all
which will built catalyst-{kernver} packages for all kernels.
If you want to remove
catalyst-generator - it's best to run this as root before removing catalyst-generator:
catalyst_build_module remove_all
(This will remove all catalyst-{kernver} packages from the system.)
catalyst-generator isn't able to remove all those catalyst-{kernver} packages automatically while being removed because there can not be more than one instance of pacman running. If you forget to type `catalyst_build_module remove_all` before typing `pacman -R catalyst-generator` - catalyst-generator will tell you which catalyst-{kernver} packages you will have to remove after removing catalyst-generator.
{{Note| If you see those warnings:
WARNING: Package contains reference to $srcdir
WARNING: '.pkg' is not a valid archive extension.
while building catalyst-{kernver} package - do not be concerned, it's normal. }}
Automatic re-compilation of fglrx module with every kernel update
Most of catalyst_build_module script options mentioned in catalyst-generator section is supported, type catalyst_build_module help to check which ones exactly.
Since catalyst 10.9 that funcionality has been removed from catalyst package mainly because of this and that.
Still it can be very useful if you are using more than one stock kernel, or you do not like to rebuild catalyst package with every kernel update. Known mkinitcpio's hook functionality has been moved to AUR's catalyst-hook.
Also there is a new package able to provide similar functionality called catalyst-daemon.
Please note that those packages provides only re-building scripts and source files needed to build fglrx module, and they depend on catalyst-utils package.
Auto re-compilation is enabled by default after installing selected package, if you want to turn it off just run this command as root:
# catalyst_build_module autooff
You can also turn it on with:
# catalyst_build_module auto
catalyst_build_module is storing all informations about compilling/installig fglrx module in log file placed in /var/log/catalys-install.log. But you do not need to remember it, you will be informed about that fact whenever installation fails.
In catalyst-hook 'automatic re-compilation' functionality is done by a fglrx hook on mkinitcpio with combination of forcing to update package linux-headers in first place.
The hook will call catalyst_build_module command to update fglrx module for the version of your new kernel, and additionally it will call catalyst_build_module remove command to remove unneeded flgrx module(s).
In catalyst-daemon 'automatic re-compilation' functionality is done by init script called autofglrx which runs with every system boot and checks if kernel was updated. If kernel was updated - it's rebuilding fglrx module. If kernel wasn't updated - it's loading previously built fglrx module (this whole operation is taking only 20ms on 2.4 GHz CPU).
Autofglrx's check function is comparing built time of just booted kernel (provided by `uname -v`) with built time of a kernel for which fglrx module was built. It's able to do such a comparison because it adds `uname -v` information to the fglrx module's description while module's compilation.
While rebuilding autofglrx will call 'catalyst_build_module' to build a module and 'catalyst_build_module remove' to remove unneeded, older fglrx module.
It doesn't remain in memory.
Official ATI/AMD Installer
1.) Download the installer from AMD or elsewhere (whereas *-* will be the version):
2.) Make sure it's executable:
# chmod +x ati-driver*
3.) Ensure you're using a basic video driver like vesa, and remove conflicting drivers (i.e. xf86-video-ati, radeon) with pacman and from /etc/rc.conf
4.) Symlink
/usr/src/linux to
/usr/src/{kernelsource}. 64-bit users also symlink
/usr/lib64 to
5.) Be sure to have your build environment setup:
# pacman -Syu base-devel linux-headers
6.) As root:
# ./ati-driver-installer-*-*-x86.86_64.run (Files will extract to a temporary folder and scripts will run...)
Assuming nothing went horribly wrong...
7.) Check
/usr/share/ati/fglrx-install.log for issues. There should also be a
8.) Finally, try
# aticonfig As of Catalyst 11.7, it still assumes
/etc/X11/xorg.conf should exist.
aticonfig string with --output so that you can adapt the Device section to /etc/X11/xorg.conf.d/20-radeon.conf The drawback of this is that many
aticonfig options rely on an xorg.conf, and thus will be unavailable.
Three things to check in Arch before rebooting, otherwise X can break:
- /etc/X11/xorg.conf
- /etc/rc.conf
- /boot/grub/menu.lst
AMD provides the
aticonfig tool to create/modify
xorg.conf file. It also can configure virtually every aspect of the card for it also accesses the
amdpcsdb file. For a complete list of
aticonfig options, run:
# aticonfig --help | less
Simple examples from
1. Setting up fglrx for the first time. Single head : aticonfig --initial --input=/etc/X11/xorg.conf Dual head : aticonfig --initial=dual-head --screen-layout=above This command will generate a dual head configuration file with the second screen located above the first screen.
If you do not already have an
xorg.conf file, you can compare the generated file to one of the Sample Xorg.conf examples listed on the Xorg page.
Although most options are now automatically detected in current Xorg, you may want to specify some in case the defaults change between versions.
Here is an example(with notes) for reference. Entries with '#' should be required, add entries with '##' as needed:
Section "ServerLayout" Identifier "Arch" Screen 0 "Screen0" 0 0 # 0's are necessary. EndSection Section "Module" Load ... ... EndSection Section "Monitor" Identifier "Monitor0" ... EndSection Section "Device" Identifier "Card0" Driver "fglrx" # Essential. BusID "PCI:1:0:0" # Recommended if autodetect fails. Option "OpenGLOverlay" "0" ## Option "XAANoOffscreenPixmaps" "false" ## Option "UseInternalAGPGart" "no" ## Deprecated since Catalyst 8.24.18/ Option "KernelModuleParm" "agplock=0" ## as AGP GART support was removed EndSection Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 24 # Should not change from '24' Modes "1280x1024" "2048x1536" ## 1st value=default resolution, 2nd=maximum. Virtual 1664 1200 ## (x+64, y) to workaround potential OGL rect. artifacts/ EndSubSection ## fixed in Catalyst 9.8 EndSection Section "DRI" Mode 0666 # May help enable direct rendering. EndSection
On to
- Remove radeon from MODULES and blacklist it in
blacklist-fglrx.confdoes not exist.
- Adding fglrx to MODULES appears to be optional if added instead to
/etc/mkinitcpio.conf(boot image would be rebuilt before reboot).
- Remove radeon from MODULES and blacklist it in
- Clear modesetting options as the driver doesn't appear to take advantage of KMS yet. Add
- For example:
kernel /boot/vmlinuz-linux root=/dev/sda1 ro nomodeset
- Clear modesetting options as the driver doesn't appear to take advantage of KMS yet. Add
Checking operation
Assuming reboot to your login was successful, otherwise #Troubleshooting. Commands to check that fglrx is up and running:
lsmod | grep fglrx fglrxinfo
Finally, run Xorg with
startx or by using GDM/KDM and verify that direct rendering is enabled by running the following command in a terminal:
$ glxinfo | grep direct
If it says "direct rendering: yes" then you're good to go! If the glxinfo command is not found, you may need to install the mesa-demos package as well.
libGL.so cannot be correctly loaded even if it's installed. Check this if your GL is not working. Please read "Troubleshooting" section for details.
Double Screen (Dual Head / Dual Screen / Xinerama)
- In this part, we will describe the installation of 2 differend sized screens on only one graphic cad with 2 different output ports (DVI + HDMI) using a "BIG Desktop" configuration.
- The Xinerama solution has some inconveniences, especially because it is not compatible with XrandR. For that very reason, you should not use this solution, because XrandR is just a must for our later configuration.
- The Dual Head solution would allow you to have 2 different sessions (one for each screen). It could be your wish but you will not be able to move windows from one screen to another. If you have only one screen, you will have to define the mouse inside your xorg for the 2 sessions inside the Server Layout section.
ATI Catalyst Control Center
The GUI tool shiped by ATI is very useful and we will try to use it as much as we can. To launch it, open a terminal and use the following command line:
Here, it is easy but important : make sure that your hardware is plugged in correctly, power is on, and that you know your hardware caracteristics (screen dimensions, sizes, refresment rates ...) Normally, both screens are recognize during boot time but not necessarly identified properly, especially if you are not using any xorg base configuration file but instead relying on the hot-plugging feature.
The first step is to make sure they will be recognized by your DE / xorg. For this, you need to generate a basic xorg file for your 2 screens :
aticonfig --initial --desktop-setup=horizontal --overlay-on=1
aticonfig --initial=dual-head --screen-layout=left
Normally, you have now a basic file that you can now edit to add your screen resolutions. It is important to precise the working resolution especially if you have screens of different sizes. To be added insithe the "Screen" section:
SubSection "Display" Depth 24 Modes "1200x800" EndSubSection
Well, from now on, instead of editing the xorg.conf file manually, let us use the ATI gui tool. Reboot X to be sure that your 2 screens are well supported and that the resolution are well recognized. (Screens must be independant).
Here, you only have to launch the ATI control center with root privileges, go inside the display menu and choose how you would like to set your configuration (small arrow of the drop down menu). A last reboot of X and you will be done !
Before you reboot, do not hesitate to verify your new xorg.conf file. At this stage, inside the "Display" sub-section of the "Screen" section, you should see a "Virtual" command line, of which the resolution should be the sum of both screens. The "Server Layout" section says all the rest.
Video acceleration
Video Acceleration API (VA API) is an open source software library ("libVA") and API specification which enables and provides access to graphics hardware (GPU) acceleration for video processing on Linux and UNIX based operating systems. The main motivation for VA API is to enable hardware accelerated video decode at various entry-points (VLD, IDCT, Motion Compensation, deblocking) for the prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, and VC-1/WMV3).
In November 2009, VA-API gained a new proprietary xvba-video backend which allows VA-API powered applications to take advantage of AMD Radeon's UVD2 chipsets via the XvBA (X-Video Bitstream Acceleration API designed by AMD) library.
XvBA support and xvba-video is still under development, however in nowadays it is working very well in most cases and with mplayer (and mplayer front-ends), so feel free to check it. You have to build xvba-video package and install mplayer-vaapi (available in community repository) & libva (available in extra repository) packages. Then just set your video player to use vaapi:gl as video output.
Ie. for mplayer:
$ mplayer -vo vaapi:gl -va vaapi movie.avi
Ie. for smplayer:
Options -> Preferences -> General -> Video (tab) -> Output driver: User Defined : vaapi:gl Options -> Preferences -> General -> Video (tab) -> Double buffering on Options -> Preferences -> Advanced -> Options for MPlayer -> Options: -va vaapi Options -> Preferences -> General -> General -> Screenshots -> Turn screenshots off Options -> Preferences -> Performance -> Threads for decoding (Set your CPU(s) number)
Options -> Preferences -> General -> Video (tab) -> Output driver: vaapi
vaapi, vaapi:gl2 or simply xv(0 - AMD Radeon AVIVO Video).
Ie. for vlc:
Tools -> Preferences -> Input & Codecs -> Use GPU acceleration
Don't forget to enable v-sync in amdcccle:
3D -> More Settings -> Wait for vertical refresh = Always On
Note: If you are using compiz/kwin please note that the only way to avoid video flickering is to watch videos in full-screen, and only when Unredirect Fullscreen is off.
In compiz you need to set Redirected Direct Rendering in General Options of ccsm. If its still flickering try to disable this option in ccsm.
Its off by default in kwin, but if you see flickering try to turn option "Suspend desktop effects for fullscreen windows" on or off in System Settings -> Desktop Effects -> Advanced.
Tear Free Rendering
Presented in Catalyst 11.1 'Tear Free Desktop' feature reduces tearing in 2D, 3D and video applications. This likely adds triple-buffering and v-sync. Please note that it requires additional GPU processing.
To enable 'Tear Free Desktop' run
amdcccle and go to: [Display Options] -> [Tear Free]
or as root run:
aticonfig --set-pcs-u32=DDX,EnableTearFreeDesktop,1
To disable use amdcccle or as root run:
aticonfig --del-pcs-key=DDX,EnableTearFreeDesktop
GPU/Mem frequency, Temperature, Fan speed, Overclocking utilities
You can get GPU/Mem clocks with:
$ aticonfig --od-getclocks
Fan speed:
$ aticonfig --pplib-cmd "get fanspeed 0"
$ aticonfig --odgt
To overclock/underclock it's easier to use some GUI software, like ATi Overclocking Utility, which is very simple and requires qt to work.
i686 version is available here while x86_64 - here. Just download it and run.
Other, more complex utility to perform such operations is AMDOverdriveCtrl. It's homepage is here, you can get arch package from AUR or from [catalyst] repository.
If you can still boot to command-line, then the problem probably lies in
You can parse the whole
/var/log/Xorg.0.log or
grep '(EE)' /var/log/Xorg.0.log grep '(WW)' /var/log/Xorg.0.log
For clues.
Problems with video colours
You may still use vaapi:gl to avoid video flickering, but without video acceleration
Run mplayer without -va vaapi switch.
For smplayer remove -va vaapi from Options -> Preferences -> Advanced -> Options for MPlayer -> Options: -va vaapi
Plus for smplayer you may now safely turn screenshots on.
KWin and composite
You may use XRender if the rendering with OpenGL is slow. However, XRender might also be slower than OpenGL depending on your card. XRender also solves artifact issues in some cases.
Black screen with complete lockups / hangs after reboot or startx
Ensure you have added the nomodeset option to the kernel options line in your bootloader (see end of #Configuration).
Faulty ACPI hardware calls
It is possible that fglrx doesn't cooperate well with the system's ACPI hardware calls, so it autodisables itself and there is no screen output.
So try to run this:
aticonfig --acpi-services=off
KDM disappears after logout
If you are running Catalyst proprietary driver and you get a console (tty1) instead of the expected KDM greeting when you log out, you must instruct KDM to restart the X server after each logout:
$ sudo nano /usr/share/config/kdm/kdmrc
Uncomment the following line under the section titled [X-:*-Core]:
KDM should now appear when you log out of KDE.
Direct Rendering does not work
This problem may occur when using the proprietary catalyst driver.
If you have problem with direct rendering, run:
$ LIBGL_DEBUG=verbose glxinfo > /dev/null
at the command prompt. At the very start of the output, it'll usually give you a nice error message saying why you do not have direct rendering.
Common errors, and their solutions, are:
libGL error: XF86DRIQueryDirectRenderingCapable returned false
- Ensure that you are loading the correct agp modules for your AGP chipset before you load the fglrx kernel module. To determine which agp modules you'll need, run
hwdetect --show-agp, then ensure that all modules listed from that command are in the
MODULES=array in rc.conf, before fglrx.
libGL error: failed to open DRM: Operation not permitted libGL error: reverting to (slow) indirect rendering
libGL: OpenDriver: trying /usr/lib/xorg/modules/dri//fglrx_dri.so libGL error: dlopen /usr/lib/xorg/modules/dri//fglrx_dri.so failed (/usr/lib/xorg/modules/dri//fglrx_dri.so: cannot open shared object file: No such file or directory) libGL error: unable to find driver: fglrx_dri.so
- Something has not been installed correctly. If the paths in the error message are
/usr/X11R6/lib/modules/dri/fglrx_dri.so, then ensure you've logged completely out of your system, then back in. If you're using a graphical login manager (gdm, kdm, xdm), ensure that /etc/profile is sourced every time you log in. This is usually accomplished by adding
source /etc/profileinto
~/.xinitrc, but may vary between login managers.
- If the paths above in your error message are
/usr/lib/xorg/modules/dri/fglrx_dri.so, then something has not been correctly installed. Try reinstalling the
Errors such as:
fglrx: libGL version undetermined - OpenGL module is using glapi fallback
could be caused by having multiple versions of
libGL.so on your system. Run:
$ sudo updatedb $ locate libGL.so
This should return the following output:
$ locate libGL.so /usr/lib/libGL.so /usr/lib/libGL.so.1 /usr/lib/libGL.so.1.2 $
These are the only three libGL.so files you should have on your system. If you have any more (e.g.
/usr/X11R6/lib/libGL.so.1.2), then remove them. This should fix your problem.
You might not get any error to indicate that this is a problem. If you are using X11R7, make sure you do not have these files on your system:
/usr/X11R6/lib/libGL.so.1.2 /usr/X11R6/lib/libGL.so.1
Hibernate/Sleep Issues
Video fails to resume from suspend2ram
ATI's proprietary
catalyst driver cannot resume from suspend if the framebuffer is enabled. To disable the framebuffer, add vga=0 to your kernel options in
/boot/grub/menu.lst, for example:
kernel /vmlinuz-linux root=/dev/sda3 resume=/dev/sda2 ro quiet vga=0
System Freezes/Hard locks
- The
radeonfbframebuffer drivers have been known in the past to cause problems of this nature. If your kernel has radeonfb support compiled in, you may want to try a different kernel and see if this helps.
Hardware Conflicts
Radeon cards used in conjunction with some versions of the nForce3 chipset (e.g. nForce 3 250Gb) won't have 3D acceleration. Currently the cause of this issue is unknown, but some sources indicate that it may be possible to get acceleration with this combination of hardware by booting Windows with the drivers from nVIDIA and then rebooting the system. This can be verified by issuing in a root console the following command:
dmesg | grep agp
If you get something similar to this (using an nForce3-based system)
agpgart: Detected AGP bridge 0 agpgart: Setting up Nforce3 AGP. agpgart: aperture base > 4G
and also if issuing this command...
tail -n 100 /var/log/Xorg.0.log | grep agp
...gets something similar to:
(EE) fglrx(0): [agp] unable to acquire AGP, error "xf86_ENODEV"
Then you have this bug.
Some sources indicate that in some situations, downgrading the motherboard BIOS may help, but this cannot be verified in all cases. Also, a bad BIOS downgrade can render your hardware useless, so beware.
See bug http://bugzilla.kernel.org/show_bug.cgi?id=6350 for more information and a potential fix.
Temporary hangs when playing video
This problem may occur when using the proprietary Catalyst.
If you experience temporary hangs lasting from a few seconds to several minutes occuring randomly during playback with mplayer, check /var/log/messages.log for output like:
Nov 28 18:31:56 pandemonium [<c01c64a6>] ? proc_get_sb+0xc6/0x160 Nov 28 18:31:56 pandemonium [<c01c64a6>] ? proc_get_sb+0xc6/0x160 Nov 28 18:31:56 pandemonium [<f8bc628c>] ? ip_firegl_ioctl+0x1c/0x30 [fglrx] Nov 28 18:31:56 pandemonium [<c01c64a6>] ? proc_get_sb+0xc6/0x160 Nov 28 18:31:56 pandemonium [<c0197038>] ? vfs_ioctl+0x78/0x90 Nov 28 18:31:56 pandemonium [<c01970b7>] ? do_vfs_ioctl+0x67/0x2f0 Nov 28 18:31:56 pandemonium [<c01973a6>] ? sys_ioctl+0x66/0x70 Nov 28 18:31:56 pandemonium [<c0103ef3>] ? sysenter_do_call+0x12/0x33 Nov 28 18:31:56 pandemonium [<c01c64a6>] ? proc_get_sb+0xc6/0x160 Nov 28 18:31:56 pandemonium =======================
Adding the nopat kerneloption to /boot/grub/menu.lst and rebooting fixed the problem at least for me.
Catalyst 10.6/10.7/10.8/10.9 : black/grey/white boxes/artifacts in firefox/thunderbird
With catalyst 10.6 AMD/ATi announced a new method of 2D acceleration for radeons, unfortunately this step causes bugs for some users. To turn on old (slower xaa) method of 2d rendering please kill your desktop environment and Xserver and type this command as root:
aticonfig --set-pcs-str=DDX,ForceXAA,TRUE
Now you'll probably need patched xorg-server to fix problems with resizing/maximizing windows, read about it ie. here.
Also see this post if the above doesn't work for you.
Radeon HD 6870 and fglrx 10.10 or AMD APU and fglrx 12.6
When running
#sudo aticonfig --initial
you will get
aticonfig: No supported adaptaters detected
That's because HD6870 is not supported by fglrx 10.10
However you can create xorg.conf yourself :
Section "Device" Identifier "ATI radeon 6870" Driver "fglrx" EndSection
Xorg will start and it is possible to use amdcccle instead of aticonfig. There will be a "AMD Unsupported hardware" watermark.
You can remove this watermark using the following script :
#!/bin/sh DRIVER=/usr/lib/xorg/modules/drivers/fglrx_drv.so for x in $(objdump -d $DRIVER|awk '/call/&&/EnableLogo/{print "\\x"$2"\\x"$3"\\x"$4"\\x"$5"\\x"$6}'); do sed -i "s/$x/\x90\x90\x90\x90\x90/g" $DRIVER done
WebGL support in Chromium
Google has blacklisted linux's catalyst driver from supporting webGL in their Chromium/Chrome browsers.
You can turn webGL on by editing /usr/share/applications/chromium.desktop file and adding --ignore-gpu-blacklist flag into Exec line so it could look like this:
Exec=chromium %U --ignore-gpu-blacklist
You can also run chromium from console with that --ignore-gpu-blacklist flag:
$ chromium --ignore-gpu-blacklist
Laggs/freezes when watching flash videos via Adobe's flashplugin
Edit /etc/adobe/mms.cfg file and make it looks like this:
#EnableLinuxHWVideoDecode=1 OverrideGPUValidation=true
Laggs/slow windows movement in GNOME3
You can try this solution out, it's working for many people.
Add this line:
export CLUTTER_VBLANK=none
into ~/.profile or into /etc/profile file. Restart X server or reboot system.


text:
Odds: Thurman Will Likely Defeat Pacquiao on July 20
June 25, 2019
Keith Thurman is the favored boxer to win the Welterweight title, but many expect a competitive match. The question now is can Manny Pacquiao pull an upset?
Looking for more articles about Danielle Rose Collins? You've come to the right place! Here's our list of all published content related to Danielle Rose Collins.

subset: commoncrawl


text:
Refine your search
Add to shortlist button.
Your Basket
Museum - Science, £4-£8.50
Llwyngwern Quarry,
The Centre for Alternative Technology (CAT) located in the heart of the Dyfi Biosphere, is a pioneering eco-centre with exciting interactive displays that demonstrate the incredible power of wind, water and sun. It has working examples of sustainable living, environmentally responsible buildings, energy conservation, organic growing and composting.
The Centre for Alternative Technology is a great place for children, with an eco-adventure playground and a programme of holiday activities which are both fun and educational. During term-time visitors can enjoy the tranquil surroundings: experiencing the flora and fauna that flourishes around the site, taking a stroll around the fascinating organic gardens or enjoying a leisurely meal in our wholefood restaurant. The CAT Café offers vegetarian menus with vegan and gluten-free options. Our chefs aim to use seasonal produce, much of which is grown on site.
Making a trip to CAT is well worth it. Come to the Centre to gain practical tips on sustainable building techniques, gardening, alternative energy sources and land management all while entertaining the kids.
CAT works hard to devise positive and practical solutions to the climate change challenge and we believe that giving helpful advice for free on all matters of sustainability will encourage people to make green living a part of their everyday lives.
WISE Centre and Residential Courses
CAT's award winning WISE building is home to a variety of exciting activities that feed into the visitor experience. CAT offers a selection of MSc courses for postgraduates looking to specialise in sustainable industries, and unique short courses in a wide variety of green activities.
A wide choice of variety of short residential courses covering a range of sustainability issues are offered including courses on renewable energy, environmentally friendly building techniques, and water and sanitation solutions can help you learn more about sustainable ways of living, and allow you to put your ideas into practice. Check website for details.
Assisted Access, Coach Access. Group Rates available. Dogs Welcome
Opening Details
Open all the time
CAT summer season starts on Monday 25th March 2019
Access via the water balanced Cliff Railway resumes on Monday 1st April.
Open 10am – 5pm daily including Shop and Cafe.
Last entry one hour before closing time. The restaurant closes half an hour before the visitor centre.
2019 Summer Season Prices:
Adult: £8.50, Concessions: £7.50, Child: £4.00 (under 4 free)
Llwyngwern Quarry,
Location and nearby places
The Centre for Alternative technology is ideally situated right in the heart of Mid Wales, just two hours by train from Birmingham International Airport and Train Station.
CAT is located three miles north of Machynlleth on the A487, look out for the brown signs.
By Public Transport
Travel Planner - https://www.traveline.cymru/
Bus services run from Machynlleth and other major towns. The T2 runs regular routes from Aberystwyth to Bangor. The T2 also passes the centre as well. It's worth looking online if you're planning to travel by bus and ask the driver about the best place to alight for the centre.
National Cycle Network Route 8 passes via CAT's entrance and the road from Mach to CAT is quiet and safe (see map above).
Trains are frequent and it doesn't take long to get from the Midlands to Machynlleth
By Car:
Free car parking at Visitor Centre.
EV Car Charging point: Free to Cat Visitors - notify reception on arrival and they will assist you with the charging facilities.
: 3 miles from Machynlleth station
- Baby changing facilities
- Coach parties accepted
- Credit cards accepted (no fee)
- Disabled toilets
- Education/study area
- Facilities for groups
- Facilities for educational visits
- Gift shop
- On-site catering
- On-site light refreshments
- Picnic site
- Public toilets
- Pushchairs available
- Regional Tourist Board Member
- Telephone (public)
- Welcome Host
- Wheelchairs available
- Accepts groups
- Facilities for conferencing
- Facilities for corporate hospitality
- Electric car charging point
- Children welcome
- Disabled access
- Dogs accepted
- Smoking not allowed
Assisted Access, Coach Access. Group Rates available. Dogs Welcome
Self-Assessed Accessibility Details
- Designated parking for guests with disabilities
- Within 50 metres approx. of entrance
- The surface of the car park and pathway leading to entrance:
- is gravel
- Drop-off point for guests outside entrance
- The route from the parking area to the entrance:
- Has a ramp
Public Areas
- Level access (no steps/thresholds) or access by ramp or lift:
- From the entrance to reception / ticket area
- To a specially adapted public toilet suitable for wheelchair users
- To the gift shop
- Good contrast between the floor and walls
- Contrast markings on clear surfaces such as glass doors
- Baby changing facilities
- Visitor information available in large print (14pt and over)
- Seating available for visitors with limited mobility
- Clear signage
- Good colour/tonal contrast for visually impaired visitors
- Wheelchairs provided
- Free
- Routes/pathways suitable for wheelchair users or visitors with limited mobility
- Displays at suitable height for wheelchair users / children
- Audible alarm system
- Steps to the main entrance
- 30Number of steps to entrance
- Handrail by steps
- Ramp to entrance
- Handrail by ramp
- Entrance is well lit
- Level access (no steps/thresholds) or access by ramp or lift to cafeteria
- Good contrast between the floor and walls
- Menus available in large print (14pt and over)
- Restaurant / cafe provide meals for visitors with special dietary requirements:
- Sugar free (diabetic)
- Gluten free (coeliacs)
- Lactose free (dairy free)
- Nut free
- Additive free
- Organic
- Vegetarian
- Vegan
- Seating suitable for wheelchair users, ie moveable and good height for person sitting in a wheelchair
- High chairs for children
- Children's menu
There is disabled parking at the top of both driveways. Please don't hesitate to call us on 01654 705989 for more information.


text:
Catherine Van Why, 83, of Stroudsburg, passed away early Saturday morning, Dec. 29, 2012, at Pocono Medical Center, East Stroudsburg.
Born in Marshalls Creek on Aug. 5, 1929, she was a daughter to the late Norris and Lily (Avery) Fish and attended Middle Smithfield School in Marshalls Creek. Upon graduating high school, she was employed at Malmesburg Investment Co. in Milford as a sewing machine operator for 18 years. Catherine enjoyed sewing clothes for her children and crocheting. She will be greatly missed but never forgotten by her loving family.
Preceding her in death, in addition to her parents, was her husband, Russell C. Van Why Sr., whom she married in November 1950. They shared 45 years of marriage until his passing in July 1996. And a son, Russell Van Why Jr., passed away in February 2005.
Surviving are her children: Kathy Jensen and her husband, Darren, of Gouldsboro; William Van Why and his wife, Mary, of York; and Steven Van Why and his wife, Eileen, of Scranton; grandchildren: April Van Why, Jackie Jensen, Robin Shuler, Steven Keyes Jr. and Nichole Van Why; and nine great-grandchildren.
A memorial service will be held at a later date at Westgate Apartments in Stroudsburg.
Lanterman & Allen Funeral Home
27 Washington St., East Stroudsburg
Catherine Van Why
Catherine Van Why, 83, of Stroudsburg, passed away early Saturday morning, Dec. 29, 2012, at Pocono Medical Center, East Stroudsburg.


text:
Black British Literature: Novels of Transformation
Ohio State University Press, 2004 - Literary Criticism - 243 pages
In this fascinating book, Mark Stein examines black British literature, centering on a body of work created by British-based writers with African, South Asian, or Caribbean cultural backgrounds. Linking black British literature to the bildungsroman genre, this study examines the transformative potential inscribed in and induced by a heterogeneous body of texts. Capitalizing on their plural cultural attachments, these texts portray and purvey the transformation of post-imperial Britain. Stein locates his wide-ranging analysis in both a historical and a literary context. He argues that a cross-cultural and interdisciplinary approach is essential to understanding post-colonial culture and society. The book relates black British literature to ongoing debates about cultural diversity, and thereby offers a way of reading a highly popular but as yet relatively uncharted field of cultural production. With the collapse of its empire, with large-scale immigration from former colonies, and with ever-increasing cultural diversity, Britain underwent a fundamental makeover in the second half of the twentieth century. This volume cogently argues that black British literature is not only a commentator on and a reflector of this makeover, but that it is simultaneously an agent that is integral to the processes of cultural and social change. Conceptualizing the novel of transformation, this comprehensive study of British black literature provides a compelling analytic framework for charting these processes.
What people are saying - Write a review
We haven't found any reviews in the usual places.
Performative Functions of the Black British Novel
Of Aunties and ElephantsKureishis Aesthetics
6 other sections not shown
Other editions - View all
Common terms and phrases
Adebayo affiliations African Albion Village background Beautiful Laundrette become belonging bildungsroman Black Album black and Asian black British literature black British novel black British writers born Britain British cultural Buddha of Suburbia Caribbean Caryl Phillips chapter character colonial concept context critic Dabydeen 1991a David Dabydeen diaspora Diran Adebayo Dottie Empire England English Equiano ethnic Evaristo example experience father feels fiction film genre Guyana Hanif Kureishi hybridity identity immigrant Intimacy Jamaica Janet Karim Amir Lara's Lemon Levy Levy's literary London Kills long memoried woman marked Meena memory migrants narrative narrator narrator's Nigeria novel of formation novel of transformation novelist Oxford parents poem poetry political position post-colonial postethnic Prize protagonist racism reading relationship Rushdie Selected Bibliography Selvon Shahid skin slave social society suggests Syal texts tion tradition travels V. S. Naipaul voice West Indian White Teeth Windrush Zadie Smith
References to this book
The Cambridge Introduction to Postcolonial Literatures in English
C. L. Innes
Limited preview - 2007
Black France: Colonialism, Immigration, and Transnationalism
Dominic Richard David Thomas
Limited preview - 2007


text:
Free Download: 2012 Semi-Auto Pistol Roundup
You're one quick step away from getting your FREE DIGITAL PDF Semi-Auto Pistols Roundup from Gun Digest! Simply submit your e-mail in the form below and you'll get instant access to…Tons of New Semi-Auto Handguns in this Compilation!
– New autoloaders for concealed carry
– The latest handguns for target shooters
– The hottest pistols for gun collectors
As an added bonus, we'll send you the industry's best e-mail newsletters from BLADE, Gun Digest and Tactical Gear and the industry-leading companies' special offers, straight to your inbox. This FREE service is another benefit of being a fan and reader of Gun Digest.
[form id="59884″]
Y'all asked for it! January's "Hunting Guns Blog" is hereby devoted to coyote rigs, Let's go!
DPMS Prairie Panther Kings Snow Shadow
I don't have more than a smidgen of snow here in Wisconsin (and strictly because I've type those words, we'll probably be inundated with a blizzard any minute now), but a bunch of you have plenty of white stuff on the ground. Since everything stands out on a white background, it's essential that you blend in as much as possible. That includes your gun, which makes the Prairie Panther Kings Snow Shadow from DPMS an awesome pick for snowbound 'yotes.
To be sure, there are about a bazillion AR-15 variants out there to choose from, and this is just one, but DPMS has a solid reputation for reliable firearms. This particular model comes with a 20-inch heavy contour barrel that gets a target crown, flattop receiver (essential for optics use), two-stage trigger, and a Magpul Winter trigger guard, which allows ample room for a gloved hand. Other pluses include a ceramic overcoat on the Snow Shadow pattern (good for durability), skeletonized stock, and a carbon fiber free-floating handguard tube. These last two features help reduce weight, keeping this Panther at a walk-the-countryside 7.1 pounds (sans scope). In the original .223, buyers can order with two bolt-carrier options, one in chrome, the other in titanium.
MSRP: Current listing on the DPMS website is $1,249, really quite reasonable for today's out-of-the-box AR-types.
Harris Rota-Pod
Love to hunt howlers with an AR-15-type rifle? Got one with a Picatinny rail on its underside? Then you need Harris' RBA—Rotating Bipod Adaptor, also known by the company as the Rota-Pod. Finally, you can use one of Harris' wonderful 'pods and be able to move when your quarry does. Simply latch on the adaptor to your rifle's underbelly Picatinny rail via the adaptor's quick-detach button (no screws!), slap on any Harris bipod, and then, from sitting, prone, or whatever position you're in, you can set up in the general direction you want to aim, while still having the flexibility to swing on a coyote sneaking in from a weird angle without picking up and moving your entire rifle setup, a big movement that could give your position away.
The Author Recommends: The things you can do with an AR-15-type rifle are nearly limitless these days. In that spirit I heartily recommend Gunsmithing the AR-15 by expert Patrick Sweeney. Repairs, maintenance tips, and plenty of ideas for accessorizing are all over this must-have reference book.


text:
Career Center
Job Seekers, Welcome to ASI Career Center
The job you tried to view is no longer active.
See similar jobs below or perform a new job search.
See similar jobs below or perform a new job search.
Sort By
268 'data OR entry OR reps OR STATECODE:"MS"' Jobs
Hattiesburg, Mississippi
The University of Southern Mississippi
LAS VEAGAS, Nevada
3 Weeks Ago
Altoona, Pennsylvania
Mid State Tool & Supply, Inc.
3 Weeks Ago
Moraga, California
Saint Mary's College of California
4 Weeks Ago
SAN BERNARDINO, California
California State University, San Bernardino - Admissions & Student Recruitment
3 Months Ago
Claremont, California
Claremont Graduate University
1 Week Ago
Washington, D.C.
American Dental Education Association
3 Weeks Ago
Indianapolis, Indiana
Great Lakes Valley Conference (GLVC)
3 Weeks Ago
Bloomington, Indiana
Indiana University
5 Days Ago
Nashville, Tennessee
Lipscomb University Athletic Department
3 Weeks Ago
Powered By


text:
9621 Coors Blvd NW
Albuquerque, NM 87114
Enter your registered email address to request a password reset link.
Structure My Deal tools are complete — you're ready to visit Melloy Dodge!
We'll have this time-saving information on file when you visit the dealership.
Done with the tools you need? You're ready to visit Melloy Dodge! Get Driving Directions
By submitting your contact information, you consent to be contacted by telephone about purchasing a vehicle or obtaining vehicle financing. Clicking on the Submit button above is your electronic signature.
Melloy Dodge
9621 Coors Blvd NW
Albuquerque, NM 87114


text:
Blood in your urine is called hematuria. The amount may be very small and only detected with urine tests or under a microscope. In other cases, the blood is visible. It often turns the toilet water red or pink. Or, you may see spots of blood in the water after urinating.
Hematuria; Blood in the urine
There are many possible causes of blood in the urine.
Bloody urine is may be due to a problem in your kidneys or other parts of the urinary tract, such as:
If there is no problem with your kidneys, urinary tract, prostate, or genitals, your doctor may check to see if you have a bleeding disorder. Causes from blood disorders include:
Blood that looks like it is in the urine may actually be coming from other sources, such as:
The urine can also turn a red color from certain drugs, beets, or other foods.
You may not see blood in your urine because it is too small. Your health care provider may find it while checking your urine during a routine exam.
Never ignore blood you see in the urine. Get checked by your doctor, especially if you also have:
Call your doctor right away if:
Also call your doctor if:
Your doctor will perform a physical exam and ask you questions such as:
Tests that may be done include:
The treatment will depend on the cause of blood in the urine.
Gerber GS, Brendler CB. Evaluation of the urologic patient: History, physical examination, and the urinalysis In: Wein AJ, ed. Campbell-Walsh Urology. 10th ed. Philadelphia, Pa: Saunders Elsevier; 2011:chap 3.
Landry Dw, Bazari H. Approach to the patient with renal disease. In: Goldman L, Schafer AI, eds. Cecil Medicine. 24th ed. Philadelphia, Pa: Saunders Elsevier; 2011:chap 116.


text:
Seeing Randall's love of Trebuchets, I thought this would be an appropriate place to let him and other fans watch a trebuchet music video.
Due to spam rules I'll give you some keywords and the url un-linked.
Artist - Song Title
Zammuto - IO
This is the un-linked url.
Trebuchet Music Video
It's only cool if no one's heard of it.
Moderators: SecondTalon, Moderators General, Prelates
1 post • Page 1 of 1
1 post • Page 1 of 1
Who is online
Users browsing this forum: No registered users and 9 guests


text:
McConnell holds ground on project
Mitch McConnell wants to make it absolutely clear: He's not the one who came to the rescue of a troubled dam project crucial to his home state.
The Senate minority leader steadfastly denied any role in a provision saving 250 jobs at the lagging and over-budget Olmsted Locks and Dam project. National conservatives are blasting the measure that was included in Wednesday's government spending bill, calling it a "kickback."
Story Continued Below
McConnell's statements show a shift in tactics as the lawmaker tries — a least for now — to shed his image as the consummate rainmaker of federal money for his home state amid the current political environment that frowns on any special project funding as pork-barrel politics.
( Also on POLITICO: McConnell defends deal, slams Obamacare tactics)
McConnell stood by the nothing-to-see-here story in interviews Thursday, noting both the House and Senate had easily passed separate pieces of legislation containing the funding hike.
"The Army Corps requested it, both House and Senate passed an authorization for it, and every senator — every single one — had a chance to review it and ask for it to be taken out," McConnell told POLITICO, adding: "The toughest guy on so-called earmarks in our conference, Tom Coburn, reviewed every single one of these. And some members kicked out other requests. Nobody kicked this one out. I rest my case."
But in Kentucky, business and agricultural groups are grateful construction will continue, protecting jobs in the state and continuing work on a project whose economic impact is more like Interstate 95 than the "Bridge to Nowhere."
( WATCH: Who won the shutdown? Top 5 quotes)
"This is a federal infrastructure project that had to get done," said Col. Luke Leonard, the Army Corps of Engineers Louisville District commander. "So someone took some risks for us. I don't know who they are."
The Olmsted project is actually located on the Ohio River in Olmsted, Ill., about 20 miles from where the river meets the Mississippi, and near the Kentucky and Missouri borders. Since the Ohio carries eight times as much cargo as any other waterway, keeping traffic moving smoothly is crucial to delivering agricultural products, petroleum and coal from state to state.
The Army Corps estimated the new locks and dam will save $640 million a year in transportation costs when the project is completed in 2020.
Congress first authorized the Army Corps of Engineers to replace the 1920s-era lock and dam system 25 years ago, when the Corps said it would cost $775 million. The authorization was later boosted to $1.5 billion and then increased to $2.9 billion as part of the deal to open the government. (The Corps actually estimates the project will cost $3.1 billion.)
( PHOTOS: Senators vote on budget deal)
Shortly after a final draft of the agreement was released Wednesday night, the Senate Conservatives Fund pounced, calling the Olmsted language the "Kentucky Kickback" and "an insult to all the Kentucky families who don't want to pay for Obamacare and don't want to shoulder any more debt."
McConnell and Senate Majority Leader Harry Reid had spent weeks negotiating the bill, but Sens. Dianne Feinstein (D-Calif.) and Lamar Alexander (R-Tenn.), the chairwoman and ranking member of the water appropriations subcommittee, quickly stepped forward and took responsibility for the Olmsted provision, which was also requested by the Obama administration.
McConnell's insistence that he played no role in bringing home the bacon for his state shows just how times have changed from past decades, when members facing tough primary and general election challenges would trumpet the federal money they generated for their constituents. In years past, McConnell himself requested hundreds of millions in earmarks for Olmsted.
"I yield to no administration, Republican or Democrat, the notion that they could better determine how to spend funds in Kentucky than I can," McConnell told the Louisville Courier-Journal in 2005, a year after he secured $90 million for Olmsted. When he ran for reelection in 2008, McConnell ran ads bragging about his ability to win money for Kentucky.
So far, neither businessman Matt Bevin, who is challenging McConnell in a GOP primary, nor Alison Lundergan Grimes, the Democratic secretary of state of Kentucky who is his likely general election opponent, have criticized the deal. Neither responded to requests for comment from POLITICO. Bevin, in a video attacking the debt deal on Thursday, didn't mention the dam project.


text:
This article discusses the efficiency problems of the find_first_of generic STL algorithm in the most notable STL implementations [1,2,3,4]. The following paragraphs will prove that, in these STL implementations, find_first_of is virtually a performance pitfall among the STL algorithms and must be avoided in performance-critical applications. Furthermore, this article also presents solutions that can be used by the STL implementers in order to improve the performance of the find_first_of and alternatives which the C++ developers can utilize instead of using this inefficient generic algorithm.
My intention is to move straight to the point, without lengthy introductions about the C++ templates or the STL itself. In order to understand this article, you need to have a good understanding of the C++ templates, the standard template library (STL) and, of course, the C++ language.
In order to sufficiently describe the usage and behavior of the algorithm, I have borrowed the following three subsections from the excellent SGI STL documentation. [5] Please see the original documentation for more.
template <class InputIter, class ForwardIter>
InputIter find_first_of(InputIter first1, InputIter last1,
ForwardIter first2, ForwardIter last2);
template <class InputIter, class ForwardIter, class BinaryPredicate>
InputIter find_first_of(InputIter first1, InputIter last1,
ForwardIter first2, ForwardIter last2, BinaryPredicate comp);
find_first_of is similar to find in that it performs a linear search through a range of Input Iterators. The difference is that while find searches for one particular value, find_first_of searches for any of several values. Specifically, find_first_of searches for the first occurrence in the range [first1, last1) of any of the elements in [first2, last2). Note that this behavior is reminiscent of the function strpbrk from the standard C library.
[first1, last1)
[first2, last2)
The two versions of find_first_of differ in how they compare elements for equality. The first uses operator== and the second uses an arbitrary user-supplied function object, comp. The first version returns the first iterator i in [first1, last1) such that for some iterator j in [first2, last2), *i == *j. The second returns the first iterator i in [first1, last1) such that for some iterator j in [first2, last2), comp(*i, *j) is true. As usual, both versions return last1 if no such iterator i exists.
*i == *j
comp(*i, *j)
(last1 - first1) * (last2 - first2)
The find_first_of STL algorithm is a successor of the older strpbrk C library function. The main advantage of the find_first_of algorithm is its generality and flexibility. It can easily work with a variety of containers and arbitrary types of elements, while strpbrk only works with null-terminated char strings. But what if we just need to work with char strings or with std::string objects, which can be easily converted to null-terminated char strings? Should we prefer the newer find_first_of algorithm or just use the older strpbrk function?
One of the most remarkable qualities of STL is the fact that it aims both towards generality and efficiency at the same time! More specifically, in 1995 the designer of STL, Alexander Stepanov, affirmed in his article in BYTE magazine [7] that generic STL algorithms should not impose any performance penalty compared to their non-generic versions written in C/C++ code. In the same year, Stepanov said in an interview, "Efficiency is a fundamental concern of mine. It is silly to abstract an algorithm in such a way that when you instantiate it back it becomes inefficient." [8] Consequently, there is virtually no reason for any developer to suspect that the use of the find_first_of STL algorithm may introduce any performance problems.
Furthermore, find_first_of is more secure than strpbrk because it performs boundary checks, reducing the possibility of having buffer overruns. Last but not least, most C++ developers have read and heard repeatedly that it is preferable to use the available STL algorithms, like find_first_of, instead of the equivalent C library functions like strpbrk. According to the above facts, the most reasonable choice for C++ developers is to always favor the generic, flexible and safer find_first_of STL algorithm, even in cases where the older strpbrk C library function is also applicable.
Fortunately, in an article like this we can afford to spend time in performance tests, even in the least suspicious situations. Therefore we have done a performance comparison between the find_first_of STL algorithm and the strpbrk function. [s5] The results of these performance tests in two different configurations [s5] have proved that the find_first_of algorithm performs miserably when the number of the values we are searching for (M=last2-first2) starts to increase! Not only is the find_first_of STL algorithm much slower than the strpbrk C library function, but it also seems to have time complexity no better than O(N*M). In contrast, strpbrk has a superior O(N) time complexity (N=last1-first1).
Having inferior complexity is the worst kind of inefficiency, since it practically means that the performance will become constantly worse when the size of a particular problem factor increases. Unfortunately, the developer who prefers to use the find_first_of STL algorithm will have to suffer a severe performance penalty, even though he has made a very reasonable choice. Hence, find_first_of turns out to be a dangerous performance pitfall among the STL algorithms.
It would be unfair not to mention that in some modern compilers the strpbrk C library function is highly optimized and tuned for maximum CPU exploitation, or even implemented using assembly instructions. However, these advantages in the strpbrk implementations cannot justify its superior complexity compared to the find_first_of implementations. The time complexity cannot be affected by the level of code optimization or even by switching between C/C++ and assembly. It is practically hardware independent, as well. Only design faults or unfortunate design decisions in the core algorithm can actually damage the time complexity. Consequently, it would be very interesting to proceed taking a closer look at the most notable find_first_of implementations in order to determine the source of the performance problems. Afterwards, we will also try to improve the efficiency of this generic algorithm.
The following find_first_of implementation is part of the SGI STL version 3.3. [1,5] This is a rather typical implementation, very similar to the implementations currently used by the very popular MS-VC++ and GCC-C++ compilers [2,4] and also identical to the STLPort STL implementation. [3]
template<typename InputIter, typename ForwardIter>
InputIter find_first_of(InputIter first1,
InputIter last1, ForwardIter first2, ForwardIter last2)
for ( ; first1 != last1; ++first1)
for (ForwardIter iter = first2; iter != last2; ++iter)
if (*first1 == *iter)
return first1;
return last1;
Apparently this typical find_first_of implementation consists of two nested for-loops. The outer loop picks one-by-one the elements of the search range [first1, last1) and executes the inner loop, which is displayed bold in the above code snippet. The inner loop runs for each search range element; its sole task is to discover if the element in question is included in the range [first2, last2). In case an inclusion is detected, find_first_of immediately returns the current element (first1). Otherwise, it continues until the outer loop is exhausted and finally returns last1.
Given that the [first2, last2) range virtually defines the set of elements we are searching for, the inner for-loop of the above find_first_of implementation actually tests for set-membership. However, loops are very inefficient when used for set-membership testing and this technique is evidently the source of the find_first_of performance problems. Namely, the inner-loop of the above find_first_of implementation carries out (last2 - first2) iterations in the case of a mismatch. The worst case scenario is to have a mismatch for all elements of the search range [first1, last1), performing the total of (last1 - first1) * (last2 - first2) iterations, exactly like the SGI STL documentation [5] mentions. Nevertheless, the performance comparison between find_first_of and strpbrk [s5] has already proved that this number of iterations is rather excessive. Under the same circumstances, the complexity of the strpbrk C library function is no worse than O(last1 - first1), regardless of the [last2 - first2) range size.
(last2 - first2)
O(last1 - first1)
[last2 - first2)
Since the source of the find_first_of performance problems has been identified, it is now very important to search for techniques that can be used by the STL implementers in order to improve the efficiency of this generic algorithm. Interestingly enough, in the case that the input ranges of the find_first_of contain signed or unsigned chars, we can take advantage of the fact that one-byte integers can only have up to 256 distinct values. Namely, a find_first_of implementation specialized for signed or unsigned chars can easily prepare a 256 bytes array named MapArray in such a way that, for every one-byte integer ch it will be MapArray[ch]=1 if the value of ch is included in the range [first2, last2) and MapArray[ch]=0 otherwise.
unsigned chars
256 bytes
After having this array prepared, the whole inner for-loop of the typical find_first_of implementation presented above [s4.1] can be effectively replaced by the expression: if (MapArray[*first1] != 0) return first1. This replacement will reduce the main iterations to the amount of (last1 - first1), while adding (last2 - first2)+256 operations because of the MapArray preparation. Consequently, the complexity of this specialized find_first_of implementation will be (last1 - first1) + (last2 - first2). This outruns by far the most commonly used find_first_of implementations [1,2,3,4] while being comparable to the time complexity of the strpbrk C library function.
if (MapArray[*first1] != 0) return first1
(last1 - first1)
(last2 - first2)+256
(last1 - first1) + (last2 - first2)
The entire code of this enhanced find_first_of specialization is presented in the following snippet. Displayed in bold are the portions that have been modified compared to the typical find_first_of implementation of the previous subsection. [s4.1] The same code has been benchmarked in two different test configurations [s5] and has been proved to be very efficient in practice, exactly like its theoretical complexity indicates.
// An efficient find_first_of implementation for
// one-byte elements only (specialization)
template<typename InputIter, typename ForwardIter>
InputIter find_first_of(InputIter first1,
InputIter last1, ForwardIter first2, ForwardIter last2)
unsigned char MapArray[256];
memset(MapArray, 0, 256);
for (ForwardIter iter = first2; iter != last2; ++iter)
MapArray[(unsigned char) *iter] = 1;
for ( ; first1 != last1; ++first1)
if (MapArray[(unsigned char) *first1] != 0)
return first1;
return last1;
* Copyright (c) 2007
* Jim Xochellis
* Permission to use, copy, modify, distribute and
* sell this software for any purpose
* is hereby granted without fee, provided that the
* above copyright notice appears in
* all copies and that both that copyright notice
* and this permission notice appear in
* supporting documentation. Jim Xochellis makes
* no representations about the suitability
* of this software for any purpose. It is provided
* "as is" without express or implied
* warranty.
Although the dpx::find_first_of specialization is only applicable with one-byte integers, this fact does not reduce its significance at all. The specialization is still more generic than the strpbrk C library function. Hence, it can effectively moderate the drawbacks of the find_first_of algorithm compared to its successor. Furthermore, it will eliminate the frustration that C++ developers will feel when they discover the performance penalty that they have to pay each time they prefer find_first_of instead of strpbrk. In addition, if a specialization like this is included in an STL implementation, the performance of find_first_of will be improved automatically, without requiring any special handing by the developer.
of find_first_of
Moreover, I could add to the above reasoning that many C++ developers are still very hesitant when they are about to use a generic STL algorithm, even though most of these algorithms are quite elegant, very versatile and STL guarantees their performance. Having STL algorithms that perform much worse than their C library counterparts -- i.e. find_first_of vs strpbrk [s3.2] -- will make programmers even more reluctant to exploit these excellent programming tools. In addition, since Alexander Stepanov affirmed a long time ago [7] that the generic STL algorithms should not impose any performance penalty compared to their non-generic versions written in C/C++ code, it would be important for the reputation of the STL to eliminate any severe performance drawbacks that may still exist among its generic algorithms. For all these reasons, the use of a find_first_of specialization for one-byte integers could be quite beneficial.
However, there is also a price to pay when using the dpx::find_first_of specialization. Namely, the byte-array which is used by this specialization to dramatically speed up the set-membership testing consumes 256 bytes of RAM when the algorithm is running. This fact may be prohibitive in cases when RAM is limited, such as embedded systems. A possible workaround is to replace the array of 256 bytes with an array of 256 bits. The bit array will consume only 32 bytes of RAM -- 8 times less -- while reducing the performance of the algorithm only slightly and without affecting its complexity. The final choice clearly depends on RAM availability.
Apart from the fact that the find_first_of algorithm can be significantly improved, in the case of the one-byte integers, C++ developers can also utilize some other efficient alternatives that C++ and STL offer, provided that they are aware of the find_first_of performance problems. For instance, they have at their disposal associative containers like set [9] and hash_set [10], which are specifically designed for efficient set-membership testing. Consequently, if the elements of the [first2, last2) range are loaded in an associative container, then an adequate functor in conjunction with the find_if [11] STL algorithm can effectively imitate the find_first_of behavior in a much more efficient way. The following code snippet presents two examples that demonstrate how to use the set and hash_set containers respectively in order to efficiently replicate the find_first_of algorithm.
//SetMembershipFunctor: a functor used in conjunction
//with find_if to produce find_first_of alternatives
template<typename Set>
struct SetMembershipFunctor : public std::unary_function<
typename Set::value_type, bool>
SetMembershipFunctor(Set *setPtr)
mSetPtr = setPtr;
inline bool operator() (const typename Set::value_type val) const
return mSetPtr->find(val) != mSetPtr->end();
Set *mSetPtr;
//A find_first_of alternative based on a std::set
typedef std::set<element_type> set_of_elements;
set_of_elements s1(search_elements.begin(), search_elements.end());
SetMembershipFunctor<set_of_elements> memberOfSet1(&s1);
search_range_type::const_iterator it1 =
std::find_if(search_range.begin(), search_range.end(), memberOfSet1);
//A find_first_of alternative based on a hash_set
typedef hash_set<element_type> hash_set_of_elements;
hash_set_of_elements s2(search_elements.begin(), search_elements.end());
SetMembershipFunctor<set_of_elements> memberOfSet2(&s2);
search_range_type::const_iterator it2 =
std::find_if(search_range.begin(), search_range.end(), memberOfSet2);
Furthermore, we can also effectively imitate the behaviour of the find_first_of algorithm by just using sorted ranges. Namely, if we transform the [first2, last2) elements into a sorted range, we can afterwards use an adequate functor in conjunction with the find_if [11] STL algorithm, like the following code snippet demonstrates, and outrun by far the most notable find_first_of implementations.
//SortedRangeMembershipFunctor: a functor used in conjunction
//with find_if to produce find_first_of alternatives
template<typename ForwardIter>
struct SortedRangeMembershipFunctor
: public std::unary_function<
typename std::iterator_traits<ForwardIter>::value_type, bool>
SortedRangeMembershipFunctor(ForwardIter first, ForwardIter last)
: mFirst(first), mLast(last) {}
inline bool operator() (
const typename std::iterator_traits<ForwardIter>::value_type val) const
return std::binary_search(mFirst, mLast, val);
ForwardIter mFirst, mLast;
//A find_first_of alternative based on a sorted ranges
typedef std::vector<test_string::value_type> sorted_range;
sorted_range elementsRange(search_elements.begin(), search_elements.end());
std::sort(elementsRange.begin(), elementsRange.end());
memberOfRange(elementsRange.begin(), elementsRange.end());
search_range_type::const_iterator it =
std::find_if(search_range.begin(), search_range.end(), memberOfRange);
Theoretically, the set-membership testing has only constant time complexity on the hash_set container, while the complexity of the same procedure on the std::set container and on sorted ranges is logarithmic. Consequently, the expected time complexities of the find_first_of alternatives are O(last1-first1) for the hash_set based solution and O((last1-first1)*log(last2-first2)) for the other two approaches. The performance tests [s5] have actually confirmed the above complexity estimations, proving in practice the superiority of these approaches against the most notable find_first_of implementations. [2,4]
Unfortunately, the above workarounds are only compatible with a subset of the data types which the find_first_of algorithm supports. Namely, they can only work with items which are either sortable or good candidates for hash_set elements. Consequently, these alternatives cannot completely and unconditionally replace the more generic find_first_of STL algorithm.
In the previous sections, this article discussed the performance problems found in the most notable find_first_of implementations [s4.1]. This article has also presented an efficient find_first_of specialization [s4.2] and some other options. [s4.3] In this next section, we are going to measure and compare the speed of these techniques in practice, by actually running and timing them. The performance tests have been based upon the following rules:
The test results have been visualized in the following two graphs: one graph for each of the two test configurations and one graph-line for each tested algorithm. The vertical axes in both graphs represent the elapsed time, while the horizontal axes represent the number M of the values we are searching for. The exact values of the elapsed times have been omitted, since they are configuration-dependent and not particularly useful. What matters the most is the variation of the elapsed times when M is being increased.
Evidently, the elapsed times of all the tested algorithms depend on the number N of the items that are overtaken during the searching procedure. On the other hand, the number M of the values we are searching for has an impact on the performance of the above algorithms. This can vary from insignificant to severe, depending on the design of each algorithm. These facts can be visually observed in the graphs. Thus, the six tested algorithms can actually be divided into three basic categories according to their time complexities:
Undoubtedly the find_first_of generic STL algorithm is a generalization of the older strpbrk C library function, more versatile and superior in theory. [s3.1] Unfortunately, in the most notable STL implementations [1,2,3,4] the find_first_of algorithm has been abstracted disregarding its efficiency drawbacks [s4.1]. This makes it quite dangerous in performance-critical applications! [s3.2]
The worst part of the problem is that only a few C++ developers are likely to suspect the performance drawbacks of the find_first_of generic algorithm compared to the strpbrk C library function. [s3] The average programmer will endure a completely unexpected performance penalty, falling practically into a performance pitfall. Fortunately, there is a way out of this pitfall, provided that the STL implementers are willing to incorporate in their libraries some efficient find_first_of specializations for one-byte integers, like the one presented in this article. [s4.2]
However, things can be much better in the rare case that the programmer is fully aware of the find_first_of efficiency problems. Many efficient alternatives and workarounds [s4.3] can be utilized by C++ developers in order to avoid using this hopelessly inefficient generic STL algorithm. It turns out that find_first_of is probably an STL algorithm that we should learn how to avoid!
My general conclusion, after studying many notable STL implementations, is that although the generic STL algorithms can theoretically compete with the performance of their non-generic counterparts, there is still much to be done before this can actually happen in practice. Unfortunately, I am not particularly pleased with the relatively slow rate that the STL generic algorithms evolve regarding their efficiency. This is ultimately why I write articles like this one and like my previous article about the inefficiency of the search_n implementations. [12] As an epilogue, I would like to repeat once more the words of Alexander Stepanov [8], "It is silly to abstract an algorithm in such a way that when you instantiate it back it becomes inefficient."
Copyright © 1996-1999Silicon Graphics Computer Systems, Inc.
Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appears in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Silicon Graphics makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty.
Copyright © 1994Hewlett-Packard Company
Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appears in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Hewlett-Packard Company makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty.
This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)
template<typename InputIter, typename ForwardIter>
InputIter find_first_of(InputIter first1,
InputIter last1, ForwardIter first2, ForwardIter last2)
// 1. Determine which elements are in the set, with some false positives
bitset<4096 * 8> bloom_filter;
for (ForwardIter iter = first2; iter != last2; ++iter)
bloom_filter[hash(*iter) % bloom_filter.size()] = true;
for ( ; first1 != last1; ++first1)
// 2. Skip nested loop if the element is not in the set
if (!bloom_filter[hash(*first1) % bloom_filter.size()]) continue;
for (ForwardIter iter = first2; iter != last2; ++iter)
if (*first1 == *iter)
return first1;
return last1;
Reonekot wrote:You mention that using a bit array instead will save memory, but it will also speed up initialization from 256 to 32 byte instructions, which should drive down runtime on small M. I'm not sure what impact using bits have compared to bytes though. Have you tested this?
Jeffrey Walton wrote:The article looked so interesting I went back to a college text on Algorithm Analysis. Introduction to Algorithms [^]. Have you entertained the idea of Rabin-Karp? It generalizes to other algorithms for related problems.
Jeffrey Walton wrote:Knuth-Morris-Pratt would be the algorithm of choice for the case of strings (STL specialization).
Jim Xochellis wrote:As far as I know, Knuth-Morris-Pratt was a candidate algorithm for the implementation of the std::search algorithm. However, it has been found to have inferior performance in practice, compared to the brute-force approach, although its worst case complexity is much better. (this is actually an open issue till now...)
signed/unsigned chars
John R. Shaw wrote:Thanks, I did not expect such a detailed answer.
John R. Shaw wrote:I am afraid I was thinking in terms of portability and not that of an implementer writing (or adjusting) code for a particular compiler vendor. I tend to forget about the low level details of the STL, accept when I am testing.
One of the things that have always bothered me is statements like those that I quoted in my post. I know in practice that a char is one byte and I treat it that way, but I do not like the fact that, in theory, it can be a moving target just like the size of an integer. I believe that certain types should be set, but I fully understand why some are not.
John R. Shaw wrote:I have been working on some template classes that are supposed to be portable across compilers; as they depend on the standard. The main classes meet those requirements; it was when I started looking deeply into the top level class that I started running into problems. There is no way to make it truly portable, because the standard does not provide for the required functionality; it steps into OS specific (character types) country. All I can do is search for ways to allow for specialization.
John R. Shaw wrote:Any way I am a bit obsessive-compulsive; I am constantly looking for ways to keep vendor specific code separate from the main algorithms that do most of the mid level work.
unsigned char MapArray[256];<br />
memset(MapArray, 0, 256);
unsigned char MapArray[1 << CHAR_BIT];<br />
memset(MapArray, 0, 1 << CHAR_BIT);
#include <climits>
SwChappell wrote:Regarding the portability issues, I think there's a key point that's been missed. Characters are essentially guaranteed to be the same size as bytes, that's not really the issue. Bytes, however, are not guaranteed to be 8 bits. See item 26.6 of the
C++ FAQ. Although in practice 8 bit bytes are pretty common, if you wanted to be completely generic you could simply change this:
unsigned char MapArray[256];
memset(MapArray, 0, 256);
to this:
unsigned char MapArray[1 << CHAR_BIT];
memset(MapArray, 0, 1 << CHAR_BIT);
You'd have to #include <climits> as well.
This is probably overkill in actual practice, but if portability is a concern this is at least a small step in achieving that.
template>typename InputIter, typename ForwardIter<
InputIter find_first_of(InputIter first1, InputIter last1, ForwardIter first2, ForwardIter last2)
//some-other-conditions are platform and input depended
if ( (CHAR_BIT == 8) && some-other-conditions )
return dpx::find_first_of(rst1, last1, first2, last2);
//proceed with the typical find_first_of implementation
Don Clugston wrote:If you know that last2-first2 is small, the std::find_first_of performs well. Just as std::sort switches to insertion sort when the number of elements is small, it might make sense to use a similar strategy here.
Don Clugston wrote:However, I think that for any kind of byte-based searching, you probably should be using a regexp-style approach if M is large (eg, AND all the values together to form a mask Q, and don't perform the inner loop search for value x unless (x&Q)==Q; this would work for ints as well as single bytes). But regexp engines are well optimised for this.
Colin Grealy wrote:you should prefer member functions calls to algorithms (Meyers, Effective STL, item 44). Why don't you test the performance of std::string::find_first_of, considering your primary concern is with std::find_first_of used with std::string's?
Colin Grealy wrote:also your dpx::find_first_of is not equivalent to std::find_first_of (which does not have an arbitrary 256 byte limit)
General News Suggestion Question Bug Answer Joke Praise Rant Admin
Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.


text:
The requested news item does not exist. Please return to News
SINGAPORE, 29 June 2012 – Jones Lang LaSalle's Asia Pacific capital markets team has been voted best property consultancy at the inaugural Real Estate Investment World (REIW) Asia Awards. The awards, held in Singapore at a gala dinner during the 2012 REIW Asia convention, were voted for by the property industry in Asia Pacific.
Stuart Crow, head of Asia Pacific Capital Markets, who accepted the award said: "This award is a great achievement for our capital markets teams across Asia Pacific and testament to the work they have carried out in the past year. This award was decided by an industry vote and we are delighted to have received this recognition from our peers and clients."
These are the first awards of their kind in Asia to honour real estate investment industry players for their ability to demonstrate growth, outperformance and adaptability to changing market conditions and/or client needs within the sector.
Jones Lang LaSalle was ranked the number one investment broker in Asia Pacific in 2011 by Real Capital Analytics (RCA), advising on over $8.2 billion of commercial real estate investment transactions.
Jones Lang LaSalle Asia Pacific Capital Markets recent highlights:
• Advised CRF on the largest agency-negotiated real estate transaction of any asset class in Australia since the GFC, the sale of 50% ownership in three regional shopping centres to Perron Group for US$666.1 million• On behalf of LaSalle Investment Management advised on the sale of 15 modern logistics facilities in japan for US$1.6 billion. The properties were sold to Global Logistic Properties Ltd• The largest single retail transaction in Australia – brokered the sale of Northland Shopping Centre in Australia at a value of US$499 million• Soho Century Avenue – A Grade A office building in Shanghai, China, which transacted at close to US$294 million • South Beach Development: Divestment of two thirds of the equity interest in Singapore's US$2.5 billion iconic development for Elad Group and Dubai World• On behalf of Australia listed property group Abacus, Jones Lang LaSalle Corporate Finance structured a US$628 million (AUD600 million) joint venture exclusively with Heitman Group.• Land deal in Mumbai: Concluded the sale on the most valuable land in the Mumbai Market for US$140 million which will be developed into a 750,000 sq ft mixed-use scheme• One Finlayson Green, Singapore: Sold for US$217 million and achieved the highest per sq ft sales price of SG$2,520 • CentrePoint, Ho Chi Minh City, Vietnam: Completed the sale of the first-ever commercial investment Grade A building on the open market in Vietnam (c.US$59 million)• Successfully completed the US$230 million sale of Tatung Co's industrial property in prime Beitou District, Taipei by tender, setting the mark for the largest industrial office transaction in Taiwan in 2011
Madeleine Little
+65 6494 7003


text:
Affordable Care Act: Family Planning
Family Planning Expanded
- Despite tremendous pressure from the National Conference of Catholic Bishops, the Obama administration refused to expand the religious exemption in the Affordable Care Act. As a result, students and employees of religiously-affiliated institutions that are not churches (e.g. hospitals, universities, insurance agencies) will have the same right as students and employees of other institutions to access birth control in their health plans without co-pays or deductibles.
- Religiously-affiliated institutions will not be required to provide or refer for contraception directly, but insurance companies will be required to cover it, without copays or deductibles, just as with any other employer or institution.
Abortion Restricted
- The Stupak/Pitts Amendment in the House health care bill, which would have banned all coverage of abortion in insurance plans offered in the new state insurance exchanges, was finally defeated when the House passed the Senate bill. The amendment would have essentially prohibited women from buying abortion coverage in the state insurance exchanges, even with their own money.
- An amendment offered by Senator Nelson (D-NE) was added to the Senate bill in order to secure Nelson's support to bring the bill up for a final vote and to break the Republican filibuster. Under the amendment that finally passed, abortion access is restricted but coverage is not completely banned. In accordance with current federal law (the Hyde Amendment, see below), abortions may not be covered by any federal subsidy or federal funding but individuals may buy insurance plans with abortion coverage as long as they pay for it with their own money. To "segregate" the payments in plans providing abortion coverage, an individual receiving a federal subsidy must make two payments, one for the bulk of the coverage and a second for an allocation fund that would provide the abortion coverage. An individual state may "opt-out" of this provision, but it would require the state to pass a new law prohibiting its insurance exchange from including plans that cover abortion services. State insurance exchanges must offer at least one plan that does not offer abortion coverage.
Hyde Amendment Unchanged
- Under the Hyde Amendment, which became federal law in 1976, no federal funds can be used for abortion funding except in the case of rape, incest or danger to the woman's life. These restrictions do not apply to private insurance plans or coverage. Today, the majority of private insurance plans cover abortion services.
- This insurance reform package could not have been a vehicle for overturning the Hyde Amendment because there simply were not the votes in either the House or Senate to defeat the Hyde Amendment at that point. The women's movement must change the political climate to defeat the Hyde Amendment in the future. The fight over this health insurance reform shows how important it is to win a pro-choice majority in both the House and Senate. But it also reveals that some pro-choice members, especially Republicans, were willing to vote to restrict abortion coverage in an effort to split the Democratic vote and to defeat health care reform in its entirety.
Updated June 27, 2012
- Feminist Majority Foundation, Feminist Newswire
- FACT SHEET: Women's Preventive Services and Religious Institutions
- Full text of the Patient Protection and Affordable Care Act of 2010 PDF
- U.S. Supreme Court
- Abortion Care Coverage and Health Reform. Planned Parenthood.


text:
Mary E. Schofield, Esq.
Of Counsel
Mary Schofield became an attorney in 2007 after years of working as a homeschool advocate in California. She and her husband Paul have been married over 30 years. The Schofields began homeschooling in 1986, and graduated their two sons and a niece. After graduation, their sons completed college, married wonderful wives (who were also homeschooled, though that wasn't necessarily a prerequisite), moved into their own homes, got decent jobs, and are doing fine out in "the real world" despite the fears of homeschool naysayers.
Mary wrote The High School Handbook, a guide to home educating junior and senior high school students, based on years of experience, research, and prayer. She speaks at home education conventions throughout the United States, encouraging parents to seek God's unique plan for their families.
Mary has been enjoying her "retirement" from active homeschooling by continuing to serve on the Board of Directors for the Christian Home Educators Association of California and by remaining active in legal and legislative issues surrounding private and home education, family freedoms, and parental rights. She also found time to go back to school, attending North Western California University School of Law, where she received her J.D. Mary teaches law at her alma mater and has a law practice in northern California. However, her favorite activity these days is playing with her grandchildren.
Licensed in California


text:
The Amazing Desktop Dinosaur Plant
A Pre-historic Evergreen That Just Won't Die
- Live plant from the Carboniferous period
- Grows to about 4" high when watered
- Forget to water? No problem, it won't die!
This one-of-a-kind plant has lived on the Earth for over 290 million years and has the ability to "come back to life" (much like the undead) over and over again for hundreds of years! Simply place this seemingly dead ball of foliage in water and within hours it transforms into a vibrant green blood-sucking evergreen. Ok, we are kidding about the blood-sucking part. It's still amazing though! It's also great for lazy folks since you can forget to water your Dinosaur plant whenever you want! It will simply dry up and hibernate for up to fifty years and will spring to life every time it is given water.
Some Interesting Tidbits about your Dinosaur Plant:
- During the Carboniferous period these plants used to grow over 120 feet tall (bigger than a T-rex)
- When dry it curls up into a tight ball so that the wind can easily roll it to a new location or cubicle, hopefully closer to moisture.
- Retains 3% of its water when it is dehydrated.
- Grows to be about 4"
- Enjoys life so much it survived the Ice Age
Kit includes:
- Live Dinosaur Plant (Selaginella Lepidophylla)
- Bag of genuine Volcanic Lava Rock
- Display Bowl