text:
Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries. Thanks for all your past and future contributions.
Creating Energy Efficient Apps Using Qt
This article is designed to help developers create power efficient Qt code for use on Symbian devices.
Media:Energy Qt iteration.zip
Media:Energy Qt animations.zip
Media:Energy Qt accelerometer.zip
The Symbian platform has long been the leading mobile operating system in terms of resource management and is highly optimised for efficient use of battery power. A poorly coded application, however, can adversely impact the power efficiency of the whole system.
The introduction of Qt as the recommended development framework for applications on Symbian does not lessen the need for applications to be power efficient. Many of the Symbian C++ strategies for power efficiency still apply, but the mechanisms to implement them may differ. In addition, Qt will bring many developers who previously focused on desktop applications to Symbian. These developers may not have been concerned about power efficiency, and so may benefit from some additional guidance.
With this in mind, the goals of this article are to:
- Highlight the key areas of Qt code design where developers can minimise power consumption
- Give desktop Qt developers an appreciation of the issues to consider when coding for power efficiency.
The article achieves these goals by providing a collection of power conservation tips for application design and coding.
Code examples
This article is accompanied by three code examples which provide fully working apps that illustrate some key principles of energy efficient design and Qt coding. The examples are:
- iteration — this example shows how different mechanisms for traversing a list affect an app's performance.
- animations — this example shows two aspects of power efficient design: suspending processing when an app goes into the background and efficiently implementing drawing.
- accelerometer — this example shows how to use the Qt APIs for Mobility to make use of a device's accelerometers in a power efficient way.
The example apps are available in the QtSymbianPowerEfficiency repository on Gitorious. In addition, archives of the code can be downloaded from the links at the top of this page.
Strategies for creating energy efficient apps
React appropriately to device and application status
Perhaps the most important aspect of conserving power is to ensure your application does not do any unnecessary processing. The most obvious case is when it's not visible to the user. It's therefore essential that your app monitors the device to detect inactivity, and stops unnecessary processing (such as animations) until it becomes visible again.
You should therefore consider suspending your application when:
- it's sent to the background.
- the device enters power save or standby mode.
The accelerometer and animations examples demonstrate a number of methods for monitoring whether an app is active. Specifically, to detect inactivity they listen for the following events:
- QEvent::WindowDeactivate — issued when an application goes to the background. This event occurs also when the screen is locked, the screen saver starts or the screen is turned off and the device goes into standby mode.
and to detect when to resume normal operation they listen for:
- QEvent::WindowActivate — issued when an application comes to the foreground. This event occurs also when the screen is unlocked or the devices comes out standby and the screen is turned on.
Note: All Qt apps should listen for QEvent::WindowDeactivate and QEvent::WindowActivate, however a bug in Qt 4.6 on Maemo 5 - the Nokia N900 with firmware version 10.2010.19-1 (aka PR 1.2) - means QEvent::Leave and QEvent::Enter have to be used instead. The examples show how to use these alternative events, once the bug is fixed the code can be removed.
There are other events that provide signals that you can use to detect changes in your application's state or visibility. These include:
- QEvent::Show
- QEvent::Hide
- These events are sent when the widget is explicitly shown or hidden (using QWidget::show() or QWidget::hide()). If the widget is hidden, there is no need to update the widget.
- QEvent::FocusIn
- QEvent::FocusOut
- These events are sent when the widget is either gaining or losing edit focus. This can be used to activate and deactivate a blinking cursor used to indicate that input will go into a particular widget.
- QEvent::WindowUnblock
- QEvent::WindowBlocked
- These events are sent when the window is blocked by a modal dialogue and when the blocking dialogue is closed. If the app shows a modal dialogue, updates could be suspended even if the window is visible behind the dialog.
- QEvent::ApplicationActivate
- QEvent::ApplicationDeactivate
- These events are sent on Symbian devices when the user switches the app to the background and when the screen-dimmer activates.
For more information, see the QEvent documentation.
The accelerometer and animations examples illustrate how an application can be suspended when the app window receives a QEvent::WindowDeactivate event. They also contain (commented out) code to show how an app is restarted when it is moved to the foreground and receives the QEvent::WindowActivate event. This section of code from the animations example shows how these events are handled:
// The first show event will start the animation.
case QEvent::Show:
// Tap the screen to restart the animation.
case QEvent::MouseButtonPress:
// To restart the animation automatically, uncomment the following lines:
//case QEvent::Enter: // needed by Maemo
//case QEvent::WindowActivate: // needed by Symbian
timer.start(20, this);
case QEvent::Leave: // needed by Maemo
case QEvent::WindowDeactivate: // needed by Symbian
In the example, processing is stopped by halting the timer used to trigger the updating of the balls' positions (and in the "accelerometer" example, to obtain the accelerometer values). Because the position of the ball is no longer updated the QGraphicsScene object stops painting to the screen as there are no changes to paint. As a result, all significant processing in the application stops. The effect is illustrated below. On the left is a profile of the energy consumption (obtained with Nokia Energy Profiler) of a version of "accelerometer" without the stop code — so it continues to run and update the screen even when the device is locked. Compare this with the example version that stops drawing when the device is locked. The "without stop" version reduces its power consumption by about half when the device is locked (because the screen is no longer lit) whereas the "with stop" version reverts to standby power consumption.
These actions are generally applicable to any application. If you are using hardware, stop it (you may need to close and destroy the object that is accessing the hardware). If you are drawing to the screen, stop the processing that defines how the content of the screen changes and, if you are manually updating the screen content, stop the painting process too. See Keep redrawing to a minimum for more information on how to control drawing.
Use events instead of polling
If your application needs to react to a change of state within the device, such as the availability of a WiFi connection or receipt of an email, you have two implementation options:
- poll the resource each time a timer expires in order to see if there has been a change, or
- wait for a signal.
Polling consumes CPU cycles and battery life whether or not a change has occurred, and can results in a delayed reaction depending on the frequency of the polling cycle. More importantly, polling timers may prevent the device from entering its low-power or sleep mode. The event-driven paradigm overcomes the drawbacks of polling. In this paradigm, an event signal is issued only when something changes. The application threads are dormant while waiting for the signal. If all of the code in the system is dormant and waiting for some event, the device can enter its low power mode.
Fortunately the architecture of Qt is fundamentally event driven and you can find more information on the signalling mechanism in the Qt article on signals and slots. Qt's event driven architecture means that by following good Qt programming practices you should end up making use of event signals where they are available.
There are many circumstances where timers are the most practical solution to design requirements. The key point here is not that you can't use timers, but that you ensure that timers are stopped when the application is in the background or there has been a period of user inactivity. If all the application is doing is waiting for timers to expire, then this will prevent the device going into a low power mode.
The accelerometer example app includes a slightly contrived illustration of this principal. The accelerometer does not provide a signal when its state changes, so a timer is used to check whether the device has been moved. However, if the user has put the device down there is no need to continually poll for accelerometer data, as there won't be any. So the example uses two timers, one to check for changes in the accelerometer data and another to kill this timer (and close the connection to the sensor) if the device appears stationary for a relatively long period. Setting this "inactivity" timer is shown below:
QAccelerometerReading *reading = accelerometer->reading();
qreal xacceleration = 0.0f;
qreal yacceleration = 0.0f;
if (reading) {
xacceleration = reading->x();
yacceleration = reading->y();
// check if user inactive
if (qAbs(xacceleration) < 1.0f && qAbs(yacceleration) < 1.0f) {
if (!inactiveTimer.isActive())
} else {
Interestingly, the app uses the mechanism of signals and slots to send a signal from the expiring inactivity timer to the stopAccelerometer slot. stopAccelerometer then stops the timer that polls for accelerometer data and stops the connection to the accelerometer. Of course, the example also runs stopAccelerometer when the application is no longer in the foreground.
In summary, use events where they are available and if you use timers, kill them when they no longer serve a useful purpose.
If you wish to make use of timers the blog post When being wrong is right is well worth a read, to be aware of some improvements expected in Qt 4.8.
Optimise your use of graphic content and effects
Graphics, animations, and video can be expensive to process, so avoid unnecessary complexity.
Using graphics in Qt
Implement just enough UI graphics, but no more
Users expect increasingly rich UI features such as animations, transparency, gradients and other similar UI effects. These effects have an impact on power consumption and you should think carefully about how and when you implement them:
- Does an effect add to the overall user experience? Don't use effects simply because you can. Ask yourself whether they inform the user of something or simply look "pretty". For example, a button which is animated after it's pressed or while a process starts is helpful, a button with an animation that runs permanently might not be.
- Ensure that any effects are turned off when they are not visible to the user, such as when the device is locked or the app is in the background.
Consider offering users the option of turning off dynamic UI effects so that they can decide whether appearance or longer battery life is their priority.
Understand how Qt draws graphics
The first step to creating efficient graphics in Qt is, rather obviously, understanding how Qt handles graphics. An excellent discussion of graphics in Qt is provided by Gunnar Sletta's blog series, which comprises:
- Qt Graphics and Performance - Whats Hot and whats Not
- Qt Graphics and Performance - An Overview
- Qt Graphics and Performance - The Raster Engine
- Qt Graphics and Performance - The Cost of Convenience
- Qt Graphics and Performance - Fast Text
- Qt Graphics and Performance - Generating Content in Threads.
Make the best use of hardware accelerated graphics
Hardware graphics acceleration has the potential to offer power efficiencies compared to graphics processing in the CPU. This is because a GPU requires fewer cycles to perform graphics rendering. Although the purpose of GPU hardware is to enable more sophisticated graphics, rather than to reduce power consumption, ensuring your graphics make use of this hardware can offer power efficiencies in apps with low or modest use of graphics.
Qt uses QPainter for all graphics operations. This in turn uses a platform specific engine implemented in the QPaintEngine API to do the actual painting when a GPU is present, or QRasterPaintEngine otherwise. When QPaintEngine encounters paint commands not handled by the GPU it falls back to using QRasterPaintEngine.
On Symbian devices Qt automatically selects the best approach to graphics rendering. However, if a GPU is present on the device you can use the QOpenGL module to access it directly.
Keep redrawing to a minimum
Redrawing your user interface can be a costly exercise, particularly when not much of it has changed. To minimise unnecessary energy consumption your app should make the best use of the Qt features for efficient redrawing.
You can use the ViewportUpdateMode flag to control how QGraphicsView updates its viewport when the content of a scene changes or the content is exposed. The flag provides four automatic modes and manual one. In the automatic modes QGraphicsView assesses the nature of the changes and updates the view accordingly. The options range from simply redrawing the view after any change to a smart option where QGraphicsView looks for the optimal update strategy. The challenge when selecting which option to chose is balancing the processing required to decide what to redraw with the the processing saved by not redrawing everything. The wrong choice could offset any advantage from minimising redrawing with an increase in processing to determine what and when to draw. You can achieve more granular drawing with QGraphicsItem::paint() — which paints the contents of an item using local coordinates — and QGraphicsItem::update() — which schedules a redraw of the area covered by a rectangle.
The animation and accelerometer example apps make use of QGraphicsView to handle drawing.
In some cases the best strategy is to control the redrawing of your widget manually, based on knowledge of your app's functionality. Reimplement QWidget::paintEvent() in a subclass to receive paint events — requests to repaint all or part of a widget - and then use QWidget::update to update a rectangle inside the widget.
Tip: You can use the environment variable QT_FLUSH_PAINT to help you optimise your screen drawing. This feature highlights in yellow the areas of the screen that are updated. It's only available on applications built for the desktop development environment. To use the feature set QT_FLUSH_PAINT = 1 and start the app from that environment or enter set QT_FLUSH_PAINT = 1 myapp at the command line.
Use of transparent windows
For power efficiency avoid semi-transparent windows, as updating and resizing them is significantly more processor intensive than opaque windows. If you wish to use semi-transparent windows refer to the Qt documentation on Transparency and Double Buffering and Window Opacity.
Reducing graphics quality
Another strategy for optimising graphics to reduce power usage is to reduce the quality. Qt enables you to control the method of antialiasing, and all the functions for drawing primitives have both floating point and integer versions.
There are also OptimizationFlags which enable you to control some subtle paint-state and antialiasing features.
Reducing graphics quality, however, should be used with care as the negative impact on usability may not be worthwhile for small power savings.
For more information see the Rendering Quality section of the QPainter documentation and the Qt Concentric Circles Example.
Match content quality to device and use case
Rendering or playing back audio, Flash, SVG, video or similar content can be particularly power intensive, especially where the device needs to scale the content in some way to match its capabilities.
Bitmap images
If an image is only ever displayed at 70 x 70 pixels there is no point in delivering a larger version and then relying on the app to scale it down. Similarly, where thumbnail versions of large images are used to navigate some form of image gallery or list, create and store thumbnail images rather than creating them on-the-fly each time they are needed.
SVG graphics
You may assume that an SVG graphic is inherently efficient, however there are hidden dangers.
Firstly, if an SVG file is used to create an image that is used repeatedly at the same size, it's worth converting it to a bitmap and caching the result for subsequent draws.
In addition, there is a potentially serious hidden danger in the content of SVG files. Depending on the mechanism you use to draw and convert your source graphic to SVG, there is the possibility that the resulting file may contain hidden or invisible elements. When the rendering engine processes the file it processes all the elements in the file, whether or not they contribute to the final visual effect. SVG files have been found to contain hundreds of ultimately invisible elements, all processed with a resulting impact on performance and battery life.
Therefore, you should always review your SVG files and optimise them so that only the elements essential to creating the final graphic are included. There are some tools available to help with this process, such as Scour, though, as far as we are aware, none have been specifically tested with SVG content for Symbian devices. The only other option is to review the SVG file by hand and remove unnecessary elements.
When including video in your application optimise the video resolution to match the screen and consider whether the frame rate can be reduced.
Consider the user experience associated with the content and reduce quality to match the desired effect. For example, in a game a sound with a low sampling rate may be as effective as full HiFi quality sound.
Reserve hardware resources when they are needed
The most significant impact on power consumption comes from the many hardware features found on a typical Symbian smartphone. The display is an obvious power drain, as is any hardware which transmits or receives radio signals. Newer features such as accelerometers and magnetometers have a power impact too, particularly when handled inefficiently. Other less-obvious resources can also have an impact on power consumption. For example, allocating more memory than needed may cause the device to keep banks of memory active that it could otherwise power down.
To put things in perspective, the following table shows some typical power consumption requirements for key hardware components.
Hardware | Typical power consumption (mW) |
LCD display | 190-360 |
OLED display | 40-500 |
Bluetooth | <1mW for sniff mode
10s of mW for active mode |
Accelerometer | |
Magnetometer |
A large capacity battery stores approximately 4.5 watt-hours of energy. From the table above we can see that inefficient use of a WLAN connection could drain a battery in under three hours. With the screen active too the battery life could be as little as two hours. Even hardware with apparently modest power requirements can have a large impact: the GPS only draws tens of milliwatts but if your application updates the screen each time the GPS reports a new position the resulting battery drain could be much higher.
Therefore from a power efficiency standpoint it makes sense to only turn on hardware when it's needed, and to turn it off again when it's no longer needed. The following sections discusses this approach in more detail.
Just-in-time resource use
Create (construct, load etc.) resources just before they are required and close or destroy objects as soon as they are no longer required, even if the same resource might be required again shortly. Opening a device's accelerometer, for example, powers on the hardware and leaves it running even if your app is not actively using accelerometer information.
Releasing resources — particularly hardware components, such as Bluetooth radio, cellular radio and hardware accelerators — ensures that power management features can be triggered as early as possible.
Time out idle resources
We've already discussed how you can use events to trigger power saving actions when the device or app changes status.
On Symbian a device the background event triggered by the screen saver is an important way to identify the need to close hardware, as it provides a reliable method of identifying that the user is no longer actively using the device. However, it's important to consider whether you could close hardware resources before receiving this trigger. This is particularly relevant if you are creating cross-platform apps.
For example, an app could provide a view that offers information on share prices. The app may initialise radio communication as the view opens and close communication when the view closes, on the assumption that the user will only remain in the view for a short period of time. However, if the user remains in this view for long periods, without needing the content of the view updated, the app could consume power unnecessarily by keeping the network connection open. Suspending communications may therefore be appropriate once the information for the view's contents has been created.
This strategy is used in the accelerometer example app. For more information, see Use events instead of polling.
Override screen, screen saver and backlight only when necessary
In general the best strategy is to not override the device's backlight and screen saver settings, because they work automatically according to preferences set by the user.
In special cases, however, overriding the settings is understandable (for example, in a navigation app). However, even with the settings overridden, consider turning the display and backlight off during lengthy operations, for example, during downloading (partial display mode can be used to show a progress bar without backlight) or other processing that takes a long time. In the case of a navigation app, consider whether the screen should be dimmed or turned off between navigation points.
Following good power efficient practices in your application design and coding should deliver a power efficient application. However, the complexity of the underlying hardware and software and the way in which the application is used can result in unexpected issues. Should this occur you might consider optimising your application by looking for power issues and resolving them on a case-by-case basis.
There is a danger, however, that in optimising your implementation for one device you de-optimise it for another. The best advice is therefore, beyond ensuring you make sensible use of the hardware and follow good general programming practices, to optimise only when a significant power issue is found.
To assist with this optimisation work, this section provides some guidance on things to consider.
Hardware specific considerations
One of the challenges in creating power efficient code is the diversity of hardware used in Symbian devices. Not only do different manufacturers use different hardware, but even within a single manufacturer's range there may be different radio, sensor and GPS modules. And even when the hardware is the same there may be different drivers.
As a result it's impossible to offer fine grained advice on the most power efficient use of hardware. For example, when using a GPS it's possible to make either a one-off request for location or open the GPS channel and set it to provide periodic updates. To choose which method is the more efficient it's necessary to know how a long periodic update compares to issuing one-off requests timed by some other means. Unfortunately the answer depends on the hardware and how it has been implemented.
Radio receivers and transmitters
These include cellular radio, WLAN, and Bluetooth hardware. (GPS is strictly a radio receiver but is discussed separately.) In addition to ensuring your app opens these resources when they are needed and closes them when idle or no longer required, consider:
- optimising the size of data transmission, for example to ensure that only necessary data is transmitted
- caching data that may be reused and which changes infrequently
- segmenting data items so that only the most commonly used data is always transmitted, and optional or infrequently use data is only transmitted on request. A typical example is email where details of the sender and message title are always transmitted, the message body is transmitted only when the email is opened, and attachments are only transmitted on request
- avoiding protocols that require polling
- TCP rather than UDP since it requires fewer keep-alive messages. This is especially important for always-on apps
- bursty data transfer rather than constant "drop-by-drop" transfer.
- enabling WLAN power save in the device and avoiding unnecessary background scanning.
Location based apps can be particularly problematic from a power consumption point of view. Not only are the GPS modules themselves relatively power hungry, but these applications are often provided for real-time tracking and therefore can keep the display active for long periods. They may even share the information over the network - a triple hit in power consumption.
Location information is provided to Qt apps by QGeoPositionInfoSource. You can specify whether its PositioningMethod as satellite, non-satellite, or any positioning method. If your app does not require particularly accurate location positions the non-satellite option can offer a power efficiency benefit, as the GPS hardware is not involved. However, if another app has already started making location requests with the device's GPS, it will be used in your app too. If your app does not require particularly frequent location updates consider turning off GPS between requests.
Sensors, such as accelerometers and magnetometers are relatively new hardware innovations in mobile devices. Generally their power optimisation is not as advanced as that for radio transmitters and GPS. As a result, it's best to assume that opening a channel to such a sensor powers on the sensor hardware and the hardware remains powered on regardless of whether sensor information is being requested or not.
Tip: Many Symbian devices are designed to be used with the screen in landscape and portrait modes. In general, an application that is set to run in full screen mode will automatically adjust if the device is able to report changes in orientation or device configuration, such as sliding out a keyboard. However, you may wish to manually control the screen layout for landscape and portrait modes. In this case the using the accelerometer is not the best method of detecting orientation changes. The more effective and power efficient method is to react to use resized signal of QDesktopWidget.
The behaviour of the sensor channels means that it does make sense to instantiate, start, and stop the sensors in a timely manner.
In the accelerometer example the accelerometer is started when the app first starts or when the screen is tapped (after the accelerometer has stopped) and the code can be modified to automatically restart when the app comes to the foreground as follows:
bool View::event(QEvent *event)
switch (event->type()) {
// The first show event will start the animation.
case QEvent::Show:
// Tap the screen to restart the animation.
case QEvent::MouseButtonPress:
// To restart the animation automatically, uncomment the following lines:
//case QEvent::Enter: // needed by Maemo
//case QEvent::WindowActivate: // needed by Symbian
case QEvent::Leave: // needed by Maemo
case QEvent::WindowDeactivate: // needed by Symbian
case QEvent::Resize: {
QSize s = static_cast<QResizeEvent*>(event)->size();
bounds->setRect(0, 0, s.width(), s.height());
case QEvent::Timer:
if (static_cast<QTimerEvent*>(event)->timerId() == timer.timerId())
return QGraphicsView::event(event);
For more information on detecting when to suspend an application, see React appropriately to device and application status.
In general most apps will only use the camera as it's needed to capture images or video. Therefore the general guidelines in terms of resource usages should be applicable to most apps.
There is, however, an increasing interest in offering forms of gesture control in apps based on, for example, the user passing a hand over the camera or detecting changes in light level. Where possible, it's recommended that the ambient light sensor is used for these tasks.
Mobile device broadly use two screen technologies: LCD (Liquid Crystal Display) or OLED (Organic Light Emitting Diode). LCD is the older technology, with OLED displays becoming common on higher end devices. The technology trend will probably see OLED as the prevalent technology within the next couple of years.
The principal difference between the two technologies is that OLEDs create light directly while LCDs require a backlight to make them usefully visible. Because OLEDs generate light the amount of power they consume varies greatly, ratios of 1:14 have been observed between the power consumption of a black screen compared to a white one.
LCDs exhibit variations in power consumption between similar black and white screens, however the variation is closer to 1:2.
Fortunately this means the same rule can be applied to the creation of UIs: the use of darker colours will minimise power consumption on any device.
In general, you are encouraged to implement your apps so that they use the device's default theme as much as possible. This is done automatically by QS60Style. This means that some of the impact of a UI design on power consumption is devolved to the theme and in turn to the user. However, for apps where the screen may be active for long periods, such as a game or navigation app the following UI and app design strategies should be considered:
- Overriding the default theme to use dark backgrounds and light foregrounds in app views. This is best achieved by creating a new palette (Try to avoid Qt Style Sheets as they are known to be power inefficient.)
- Switching the display off when it's not providing useful information, for example, between turns in a navigation app.
- Ensuring any graphics, such as those used to implement a game, use predominantly dark colours with light colours used as highlights.
Create efficient code
Good programming practices are the foundation of power efficient applications. The fewer CPU cycles your code requires to achieve a particular outcome the less power it consumes.
In addition to good C/C++ programming practice, there are some Qt-specific aspects of best practice that you should follow. There are also coding approaches that you should avoid.
Some typical examples include:
- Traverse lists and access list items appropriately:
- Prefer the most power efficient iterator — Qt provides several different methods for traversing a list, such as STL style iterators and a foreach macro. However, the performance of the foreach macro can be significantly slower than other methods.
- Prefer QList::at() for read-only access to list items. Using at() can be faster than QList::operator [], because it does not cause a deep copy (duplication of the list data) to occur.
- Use const iterators where elements are not modified.
- Consider the two code fragments below. In both examples the code iterates from the beginning to the end of the vector and assigns the value of qreal to either foo or bar. The first fragment uses a non-const iterator as follows:
QVector<qreal>::iterator it = container.begin();
while (it != container.end()) {
foo += *it;
++it;}- The second method uses a const iterator:
QVector<qreal>::const_iterator it = container.constBegin();
while (it != container.constEnd()) {
bar += *it;
- The difference between the execution time for the two methods can be quite significant, as illustrated by the table below which shows the approximate execution time of the iterator example on various devices. The compiler is able to optimise more effectively when it's explicitly told to access the elements using a const.
Device const iterator non-const iterator Nokia N97 106 ms 128 ms Nokia N97 Mini 109 ms 129 ms Samsung i8910 60 ms 73 ms
- Avoid instantiating overly large objects — amazingly, examples have been seen of developers trying to instantiate items such as images containing a trillion (1012) pixels each with 32-bit colour depth. Such objects require a lot of processing!
- It's worth noting that any excessive memory use, which does not cause your app to fail with an out of memory error, can consume more power than necessary and slow down the device as code needs to be paged in more frequently.
- Cache appropriately — ensure that regularly used items or values, such as image thumbnails or values for items such as font metrics or file info, are cached. Recalculating or recreating them each time they are needed may consume unnecessary processor cycles.
- Use const functions in Qt container classes — using non-const functions may cause the container to detach, that is, cause a copy of the container to be created.
The above list is by no means exhaustive and there are many useful resources that provide guidance on efficient Qt coding. The following list should provide a useful starting point:
- How-To's and Best Practices — a collection of guides provided as part of the Qt 4.6 documentation.
- The Little Manual of API Design and (Qt) API Design Principles — these guides discuss the key considerations in designing an effective API, focusing on the Qt API. While much of the content is about API usability, rather than run time efficiency, they provide many useful hints that are worth considering in your own coding.
- (Qt) Coding Conventions — useful information for effective coding of Qt apps.
- Ensuring Maximum Performance with Qt — this paper provides background information on how Qt behaves and guidance on using QtBenchLib to add performance tests to your test suites. Using QtBenchLib can provide information that helps you identify where you need to focus your efforts.
- Qt Developer Network — at the time of writing (July 2010) this resources is still in beta, however it should be a valuable source of information on Qt development.
- The Qt Quarterly — this publication, containing high-quality technical articles written by Qt experts, is designed to give developers added insight into Qt programming.
- Qt Labs blog — regular blogs from the experts within Qt. In addition to general information on developments in the Qt framework, articles often offer insight into good programming techniques.
The Qt documentation also includes information on functions that are inherently slow, for example QWidget::setMask which can be slow if the masked region is particularly complex. There are also a number of books on Qt development that provide invaluable insight into the best ways to code in Qt. Of these we would recommend:
- C++ GUI Programming with Qt 4 (2nd Edition) - The official C++/Qt book, by Jasmin Blanchette and Mark Summerfield.
- Foundations of Qt Development, by Johan Thelin
You can find a longer, regularly maintained list of books on Qt here.
File access
When reading or writing to a file, few larger data transfers will be more efficient that many smaller transfers. Also linear access will be more efficient than random access.
- Use QFile in buffered mode (don't use the Unbuffered flag on open()). Using the buffered mode will reduce the number of read/write operations that go to the disk.
- Don't flush() a file unnecessarily when writing. A write flush forces data to be written to the disk, which may require a much larger chunk of disk to be erased and rewritten than you may think is being written.
- Try to avoid frequent long seek() jumps in a file. This will counteract the benefits of buffering.
- If a file structure does require many seek() calls to navigate its contents, where appropriate consider reading the whole file into a QByteArray or QBuffer and navigating the array or buffer.
- If a file structure does require many seek() calls to create its contents, where appropriate consider writing it to a QBuffer first, then committing the entire content of the file structure (buffer) to a QFile.
Similar considerations should also be made when using databases.
Give the user low battery options
While not a strategy for ensuring your app is power efficient, you may want to consider monitor the battery power status and reacting to changes in the battery's power reserve. You can do this by registering to receive the QSystemDeviceInfo::batteryLevelChanged signal. Using this signal you can obtain QSystemDeviceInfo::BatteryStatus that will let you know if the devices battery is <3%, <10%. <40% or >40% full.
If the nature of your app means it has a high power consumption, you may consider offering the user the option to close the app or advise them to connect a charger if the battery reserve drops below a particular level.
Design vs. Testing
Design for efficient power usage will always be the most cost effective strategy, however, even a well thought out design can have unexpected power consumption consequences. As we mentioned in the section on Optimisation the variation in hardware between devices can make your app relatively power friendly on one device, but not so on another. The only reasonable strategy is to find the best compromise performance across a range of devices. However, there may be power impact arising from the consequences of unexpected user interaction with the app. This simply reinforces the recommendation to test your app as widely as possible before a full commercial release.
Testing tools
A fairly obvious question, when it comes to testing for poor power performance, is how you identify that a problem exists and the code in your application that is causing the problem. There are a couple of tools you can use, however, at present they are limited to use on Symbian devices from Nokia. These tools are Nokia Energy Profiler and Carbide.c++ Performance Investigator. There are other solutions, but these are mainly designed for device manufacturers.
Nokia Energy Profiler
The Nokia Energy Profiler is the most accessible tool for testing an application's energy usage. In fact it's delivered as a consumer application through Nokia Store. Usable on most Nokia S60 3rd Edition, Feature Pack 1 and later devices, Nokia Energy Profiler provides information on:
- Power consumption, as well as battery voltage and current.
- Cumulative power consumption.
- Processor activity.
- RAM use.
- IP-network speeds.
- Mobile-network signal strengths.
- 3G Timers.
- WLAN signal strength.
To use Nokia Energy Profiler you install and run the application on a device, then start the capture process. With the capture running, exercise your application, then return to Nokia Energy Profiler, stop the capture and examine the information recorded. The application provides graphs that plot the various captured values against time. You can export this information as CSV files, for analysis in a suitable spreadsheet application. In addition, NEP provides for capturing screenshots while it's recording, which is helpful as a way of identifying what your application was doing at the time of excessive resource usage. There are two basic testing scenarios you should consider when using Nokia Energy Profiler:
- Standby power consumption testing. In this test scenario you first use Nokia Energy Profiler to determine a baseline for your test device's standby power consumption. To do this, ensure no other applications are running and network connections closed. Then run a capture in NEP and lock your device. This will provide the baseline standby power consumption. Now run your application and at various points in its use start a NEP capture and lock the device. Compare these captures with the baseline and look for any significant differences.
- Active use power consumption testing. In this test scenario you make use of your application, exercising various different use cases, and look for any unexpected spikes in power consumption. When issues are identified, the testing use cases should be refined until the code that is causing the problem is identified.
Nokia Energy Profiler can be downloaded to a Nokia device from Nokia Store.
An alternative solution for this type of testing is the Performance Monitor application.
Carbide.c++ Performance Investigator
An option for more rigorous analysis of an application's performance is provided by Performance Investigator Profiler. Performance Investigator (PI) has the advantage over Nokia Energy Profiler of providing explicit information on the code that is running on a device. This enables you to identify more readily the code that is causing energy consumption or other issues, such as out of memory.
PI however, is part of the Carbide.c++ toolset and requires you to install Carbide.c++ as well as a profiling client on your device. If you are using the Qt tools for development, the additional effort in using PI may be worthwhile only if you encounter problems you cannot resolve using the information provided by Nokia Energy Profiler.
A guide to using PI is provided in the article Analyzing Application Performance with the Carbide.c++ Performance Investigator.
Other options
Performance investigation can be undertaken with tools such as the Arm Profiler, however these tools generally need specific hardware or development boards to enable their use.
Other sources of information
Symbian C++ Performance Tips — This Symbian wiki article provides tips on coding for app performance in Symbian C++. These tips don't directly relate to power efficient coding, however, in general more efficient code will require less CPU cycles and therefore less power to execute. Many of the tips are general in nature and the principles discussed can be applied to Qt coding.
Code Examples
Ensuring your application is power efficient is an essential part of the overall design and it could easily be a make or break issue: after all no app, however functional and good looking will find favour if it contributed to draining a device's battery too quickly.
In this article we have looked at a number of strategies for creating a power efficient app. The most important of these is to ensure that your application stops unnecessary processing when it's the background. We also reviewed a wide range of other practices that can help contribute to energy efficiency, such as appropriate use of timers, approaches to graphics and the use of hardware, as well as good C++ programming practices.
By following this advice you will go a long way towards ensuring your app does not get labelled as a battery eater. However, creating a power efficient app is not a precise science. Variation in hardware and user behaviour can have unexpected results. So while good design is the best starting point ultimately testing and optimisation are just as essential.
© 2010 Symbian Foundation Limited. This document is licensed under the Creative Commons Attribution-Share Alike 2.0 license. See http://creativecommons.org/licenses/by-sa/2.0/legalcode for the full terms of the license.
Note that this content was originally hosted on the Symbian Foundation developer wiki.


text:
Cincinnati Area Dance - Saturday, March 9th, 8pm - Midnite
Not a CM event,, but some CMers will be there.
This Saturday, 3/9/13, 8pm, at Immaculate Heart of Mary School, 7820 Beechmont Avenue, Cincinnati.
Marquis66, a 60s - 70s band from Columbus, will play until midnite. Admission is $15.
I understand there may be 200 Singles there. I'm driving 97 miles to attend. Who knows, it might be the beginning of a SLDR ?
Guess I'll leave my 2 parakeets home alone this Saturday nite.

subset: commoncrawl


text:
Generals Pour it on in Regular Season Closer
The Victoria Generals added more firepower to their season-ending momentum last night, dropping the Woodlands Strykers 17-8, finishing the regular Texas Collegiate League season one game over .500.
The Victoria Generals added more firepower to their season-ending momentum last night, dropping the Woodlands Strykers 17-8, finishing the regular Texas Collegiate League season one game over .500.
It's been a rocky road for the Victoria Generals lately, but as the regular season winds down, the Generals got their bats fired up with a 16-1 beat down of the Woodlands Strykers at Riverside Stadium last night.
Dallas hasn't been kind to the Victoria Generals lately, as the team dropped another game to the Texas Marshals 8-1 last night. On Tuesday night, the Generals lost to the Marshals in a game that was shortened by a problem with the lights at Jesuit High School.
The Victoria Generals were in Dallas last night to challenge the Texas Marshals in Texas Collegiate League baseball action, but a light failure at Jesuit High School forced an early ending to the game, and the Generals fell 4-3.
The Victoria Generals managed a split in the 2-game series with the Brazos Valley Bombers with a 9-4 win at Riverside Stadium last night.
The Victoria Generals continued their winning ways last night with a 6-4 victory over the Texas Marshals at Riverside Stadium.
Chalk another one up for the Victoria Generals, who picked up a 7-2 win last night over the Texas Marshals. Outstanding pitching paved the way for the Generals' 3rd win in a row, with Kyle Keller setting a season high with 12 strikeouts.
Winning streaks have been few, and far between for the Victoria Generals in the 2nd half of the Texas Collegiate League season, but the team is heading in the right direction with a 3-2 win last night over the Acadiana Cane Cutters.
As the saying goes, you win some, you lose some, and that was indeed the case last night for the Victoria Generals who did exactly that in a doubleheader vs. the Texas Marshals.
To say that the Victoria Generals aren't generating much offense lately is an understatement. The team has only managed 5 runs over the last 4 games, and fell to the Bombers last night 4-1.
The Victoria Generals took one on the chin last night at Driller Park in Kilgore, losing to the Pump Jacks 8-3.
The Victoria Generals kicked off a road trip last night on the wrong foot, losing to the Woodlands Strykers 4-3.


text:
Hachiryu (Feb 11, 2008)
Ok i'm going to ask to questions here...
1. When the word dream comes into your head how would you describe it?
2. If dream meant in this case "following your dreams" what are your future dreams. Now firstly you have to be realistic not saying, i dream for infinty money Etc. make sure they are reachable goals.
Answer 1: When i think of dream the first thing that comes to my mind is asleep and wel..Dreaming, that sort of dream.
Answer 2: If i could follow my dreams i wish to be a lawyer and live in a house in cumbria, I would save up for a pricey car and then i would try and find a wife that will give me two children and live to a strong age. Well that is my wish.
P.s Do you belive that your dreams can come true?
Hachiryu (Feb 11, 2008)
Well, guess I'll stab at it
1. When I hear dream, I usually just think of life, for at times I debate if it is all a dream, is this just an illusion. But in truth I don't really care what the answer is, I'm just going to live anyways
2. I have soo many dreams to follow...if I am to follow the one I want most (Which is what I'm doing now) I'd be a Video Game Developer, Animator and director, and small minor opes of actng, but that ain't going to happen I think (the acting).
- If I were to follow another one of my many ones, I'd be some pianist for some Vampiric Metal, or Symphonic Metal band, I've always had a thing for bands like that...sadly Within Temptation is grabing my heart quickly (Setting aside my fav. band Cradle of Filth)
Hey, we all have dreams....so blah
"And my soul from out that shadow that lies floating on the floorShall be lifted — nevermore!"
When I hear the word dream I think of sleep and the crazy insane things that you think while you're sleeping.
My current dream to follow is to go to college and become a pharmacist. Then acquire my dream car a Mini cooper, get married, and eventually have a family in a decent house with someone I love.
I know that my dreams can come true. Though I'm not quite as sure that they will come true.
I think that the smaller your dreams the more achievable they are...I wish you the best of luck by the way... I supose you never do know if your dreams will work out, i mean tommrow i could get hit by a bus and be killed instantly (Touch wood) but life is uncertain in many diffrent aspects.
When I hear the word dream..the first thing that comes to my mind are clouds...I know..pretty weird.....but I love the clouds...especially if it is right before a storm and they look magnificenmt to me.......
I have a lot of dreams for my future...I want to become an archaeologist and I want to discover the secrets that this earth has hidden from us....travel the world...see new people and experience new cultures....I also want to become a professor in an ivy league school....like Cambridge or Oxford...you know.....things like that.....
i see me ive been dreaming of some one latly and when i so i feel so good good like its not a dream you know well thats just me i think
the one and only show that rocks my socks
the one show that i cant live
with out.
soul society will live on forever in the minds of its poeple!!!
When I think of dream I think of lifetime want kinda thing.
My dream is to become in a rock band, so that I may change peoples lives help them not to do drugs, not want to cut themselves, or kill themselves. and to help them to keep at their dreams. And don't think that someone can't do that, because it's happened before.
If you keep at them a think they will.


text:
The Dirty Little Secret That Fast-Food Companies Don't Want You To Know
With all of this talk in Washington about cutting back on spending, you'd think they would get to work raising the minimum wage so that fast-food workers wouldn't need help just to stay alive. You'd be wrong.
We work to ensure that all people who work receive the rewards of their work — decent paychecks and benefits, safe jobs, respect, and fair treatment.


text:
Jimenez leads Fisher Cats past Trenton
Deck McGuire picked up the win by pitching 5 1/3 innings. He held Trenton to three hits and one unearned run. He struck out three and walked one.
New Hampshire, which raised its record to 2-0, scored two runs in the second, three in the third and one in both the fifth and sixth innings. Jimenez opened the scoring with a two-run double in the third.
Trenton's Jeremy Bleich struck out seven in four innings, but took the loss. He surrendered five runs (all earned) on five hits.
Richard Bleier (1 2/3 innings), Gregory Infante (one inning) and John Anderson (one inning) all pitched in relief for the Fisher Cats. Infante allowed three hits and two runs. He walked one.


text:
Recently Restored 1970 Jeepster Commando. Red with cream top over tan, 160hp/265lb-ft factory-rated Dauntless 225ci V6 engine, 3-speed manual, 4-wheel drive. AM/FM radio w/... More
Just in! Call or visit our website for more information.... More
This vehicle has been in the same family since new. Motor, body work, paint, and interior have all gone thru rebuild or recondition in... More
The classic C-101 Jeepster Commandos clear fun factor irresistible charm and rarity have made it a favorite among collectors. Re-introduced by Kaiser Jeep in... More
WORLDWIDE VINTAGE AUTOS CALL OUR SALES TEAM AT 720 457 9145 MONDAY-FRIDAY 10AM-6PM SATURDAY 10AM-4PM AS ONE... More
Moving toThailand, must sell my collection. This is one of my favorites. Live at the beach and drive every day. This car attracts more... More
JEEP: 1950 Willys Jeepster, red/black, 4-cylinder, 12v, needs restoration, from CA, $10,950. 800-913-3357, MO; www.vintagevettesllc.com... More


text:
Hatching the Past: Dinosaur Eggs, Nests, and Young
January 27, 2007 to April 29, 2007
Recent discoveries of dinosaur eggs, nests, and even embryos have provided new evidence to unlock the mysteries of dinosaur reproductive behavior. Did dinosaurs care for their young? What was life like for baby dinosaurs? Are dinosaurs alive today? The answers may surprise you!! This hands-on exhibit features actual fossils of dinosaur eggs along with many educational tools that portray and illustrate life in those more than ancient times. Luis V. Rey created much of the artwork especially for this exhibition, and past venues for the show include museums at both Harvard and Yale universities.
View Press Release


text:
Welcome to Brock Computer Science!
We offer programs leading to 3-year Pass, 4-year Honours, Masters, combined Honours BA and BSc degrees, 2-year Computer Science as a Second Degree, and participate in a program offering a Bachelor of Computing and Business (BCB). In addition, we offer a minor in Applied Computing for students wishing to improve their computer skills without taking Computer Science as their major. Our Co-op and Internship options are a vital part of our overall offerings. We pride ourselves in maintaining up-to-date facilities and conducting research in a variety of areas of Computer Science.
In Memoriam
Gord Dunkley
It is with great sorrow that we announce the passing of Gord Dunkley on Monday, February 2, 2015. Our thoughts and prayers go out to his family.
Gord joined Brock and the Department of Computer Science in 2001 as Student Support Coordinator providing academic and career advising, student outreach and community liaison. He was always eager to help students and faculty. His winning smile, ready anecdotes and true interest in people made him popular with students and staff alike. He kept his finger on the pulse of the department. He was a valued colleague and good friend. We will sorely miss him.
The family has directed memorial donations to the Ontario Heart & Stroke Foundation and the Canadian Cancer Society (see: http://yourlifemoments.ca/sitepages/obituary.asp?oId=860086). The Department is working on ideas for a lasting tribute to Gord.


text:
Start learning with our library of video tutorials taught by experts. Get started
Covers the entire photographic workflow in Aperture, from import to enhancement to output, plus special 3.3 features like Retina display support and iPhoto integration.
"This $25 was the BEST I could have ever spent! I have spent hours relearning things I had forgotten and solidified my confidence in what I do know." —Claudia W.
more from our members »


text:
Lost & Found: Comfy Chair Cushioned with Built-In Storage. Lighters, keys, coins … cushioned chairs and couches are notorious for nomming all kinds of things that slip out of our pockets or otherwise get left behind and slide into the cracks.
This design simply celebrates that existing phenomena, like a giant-sized pin cushion. It may come as no surprised that this clever-but-boxy furniture piece was developed by architectural designers (of Daisuke Motogi Architecture), who have a knack for exposing and expanding uses for classic furnishing types. Seven Blunders of the World. The Seven Social Sins, sometimes called the Seven Blunders of the World, is a list that Mohandas Karamchand Gandhi published in his weekly newspaper Young India on October 22, 1925.[1] Later, he gave this same list to his grandson Arun Gandhi, written on a piece of paper, on their final day together, shortly before his assassination.[2] The seven sins or blunders are: History and influence[edit] Mahatma Gandhi, who published the list in 1925 as a list of "Seven Social Sins" (1940s photo) The list was first published by Mohandas Karamchand Gandhi in his weekly newspaper Young India on October 22, 1925.[1] Gandhi wrote that a correspondent who he called a "fair friend" had sent the list: "The... fair friend wants readers of Young India to know, if they do not already, the following seven social sins,"[1] (the list was then provided).
Ramen Hacks: 30+ Easy Ways to Upgrade Your Instant Noodles. SLIDESHOW: Ramen Hacks: 30+ Easy Ways to Upgrade Your Instant Noodles [Photographs: J.
Kenji Lopez-Alt] Ramen in the U.S. has come a long way. Once known only in its 10-for-a-dollar instant-lunch form—a staple of offices and dorm rooms all around the '80s and '90s—high-end real ramen shops are springing up left and right on both coasts and everywhere in between. Marijuana-quote-carl-sagan-1024x810.jpg from 104goodbud.com. Simple Ideas That Are Borderline Genius Part 5 (18 Pics) Simple Ideas That Are Borderline Genius Part 5 (18 Pics) Jon January 1, 2011 2 For More Simple Ideas That Are Borderline Genius, click HERE.
Marijuana Strain Effects. Simple Ideas That Are Borderline Genius Part 8. What cannabis actually does to your brain - io9. Chances are they would've ended up brainless morons with or without the pot.
It's quite frankly not strong enough of a narcotic to destroy one's life such as you describe. It's very dependent on the user's persona. How To Make Money in Your Spare Time Doing Simple Online Tasks. Via: Lifehacker Many "online jobs" promising quick riches and little effort are really scams.
While the tasks below won't make you rich, they can earn you a little pocket money on the side—and these days that can make a big difference. Most of these online money making opportunities only require you have a computer, a decent internet connection, and some sort of marketable skill (or the ability to provide valuable consumer insight to marketers). You'll be operating as a free agent and can choose when, where, and how much to participate. Profile Pic Maker.


text:
From AP:
They rose up quickly to take up Osama bin Laden's call for jihad, ruthless men in their 20s and 30s heralded as the next generation of global terror.
Two years later, 40 percent are dead, targets of a worldwide crackdown that claimed its biggest victory with the killing of Abu Musab al-Zarqawi, al-Qaida's front man in Iraq.
Roast in hell, scumbags.
While others are making the job easier:
Three Arabs hanged themselves with clothes and bedsheets, the first prisoners to die at Guantanamo base since the United States began holding terrorism suspects there in 2002, U.S. officials said on Saturday.
The military said guards at the camp in Cuba found the two Saudis and one Yemeni not breathing in their cells shortly after midnight and attempts to resuscitate them failed.
Funny, I didn't see CNN, NBC or the BBC rushing to broadcast stories of heroic soldiers trying to resuscitate these islamonutjobs. But if those same soldiers had thrown a pair of dirty underwear at the men, we'd see it on the front page and primetime for weeks on end.
Yes, we are winning this battle. Terrorists are dropping like flies… and so are MSM outlets.
Good times.


text:
Sentara Medical Group is a division of Sentara Healthcare, one of the most progressive and integrated healthcare organizations in the nation. Sentara Medical Group was created in 1995 to optimize patient access by expanding Sentara's geographical reach, which today also includes Northern Virginia.
The Northern Virginia region includes the cities of Woodbridge, Lake Ridge, Stafford, Prince William County and surrounding areas. Contact Us
Learn more about Sentara Medical Group or print an overview.


text:
Start learning with our library of video tutorials taught by experts. Get started
Explore techniques for creating and designing three-dimensional models in AutoCAD 2013.
"Loving the pace of training, the clarity, and the flexibility to learn anytime at your own pace. The range of courses is great." —Nick C.
more from our members »


text:
Here's a card list of the cards that have been spoilered so far. Some of the quality isn't great because they are scans or pictures from phones.
Abomination, Acolyte of Pain, Alarm-O-Bot, Alexstraza, Ancestral Healing
Ancestral Spirit, Ancient Brewmaster, Ancient of Lore, Ancient Watcher, Arathi Weaponsmith
Arcane Explosion, Arcane Golem, Arcane Intellect, Arcanite Reaper
Archmage Antonidas, Argent Squire


text:
VsChromium is a Visual Studio Extension containing a collection of tools to help contributing code to the Chromium project when using Visual Studio as code editor.
Currently, VsChromium offers three distinct sets of features:
- Source code navigation and instant search capabilities in a new tool window called Chromium Explorer.
- Highlighting in the Visual Studio text editor of a (currently small) subset of Chromium Coding Style checker.
- Debugger features, such as Attach to Chrome.
Chromium Explorer
"Chromium Explorer" is a custom Tool Window aimed at making it easy and fast to navigate and search a Chromium local enlistment. The tool window is accessible from the "View | Other Windows | Chromium Explorer" menu entry.
At the top of the window, there are 3 search boxes that allow searching files and folders of the Chromium enlistement. As noted above, the main focus here is to enable precise, powerful and fast searches.
Chromium Explorer - Opening files and indexing
Once the Chromium Explorer tool winow is active, it detects when a source
file from a local Chromium enlistment is opened in the Visual Studio
editor and starts indexing
Warning: The indexing process can take significantly longer if the enlistment is located on an HDD drive. This is expected, as the indexing process has to read 90,000+ source files from disk. An HDD makes this process a lot slower due to disk seek times.
Warning: We also saw significant performance degradation on a SSD when "Real Time" disk activity monitoring of certain Anti Virus programs is active. This can be easily worked around by configuring the Anti Virus software to exclude the directory containing the local Chromium enlistment.
Note: The "indexing" process is technically very straighforward: after enumerating all the files and directories of the Chromium enlistement, relevant source files are all loaded in memory so they can be searched extremely efficiently later on. This process assumes there is enough memory available to keep all files in physical memory. With a recent (as of October 2013) Chromium enlistment, this requires about 1.5GB of memory.
Note: Similar to the coding style checkers, there is no requirement to have a Chromium solution/project open, although having one doesn't hurt either.
Once the indexing process is over (there are progress indicators in the UI), the Chromium Explorer tool window displays a tree containing the files and directories of the enlistment.
Chromium Explorer - File name search
The top search box can be used to search for file names matching a given pattern. As shown in the picture below, a "file name" search should take at most a few milliseconds on a typical developer machine:
Search pattern format
The rules for "pattern" are similar to the syntax used in .gitignore files, except for the first rule below.
- A simple string without the "/", "\" or "*" characters matches any file name containing the simple string. This rule enables making the "common case" faster to type, as without the wildcards, the pattern would only match full file names (including the extension).
- The pattern can contain one or many "*" character to perform wildcard matching.
- The pattern may contain "/" or "\" characters to match part of the path forming the file name.
- The pattern may start with "**/" or contain "/**/" characters to match zero or more directories of the path forming the file name.
Pattern | Matches |
foo | "foobar.cc", "afoobar.txt", etc. anywhere in folder hierarchy. |
f*oo*.txt | "foo.txt", "f123oo.txt", "f123oo4bar.txt" etc. anywhere in folder hierarchy. |
foo/bar.txt | any file named "bar.txt" inside a "foo" directory anywhere in folder hierarchy. |
foo/ | All files under a "foo" directory (recursively) anywhere in folder hierarchy. |
foo/**/bar.txt | any file named "bar.txt" residing in any sub-directory of "foo" anywhere in folder hierarchy. |
Chromium Explorer - Directory name search
The middle search box can be used to search for directory names matching a given pattern. The rules for "pattern" are similar to the rules for file name search.
Chromium Explorer - Text search
The "Text search" feature is equivalent to the "Find in files" built-in feature of Visual Studio with the difference that it performs much faster due to the indexing process. On a typical developer machine, a text search takes about 100 milliseconds, where as the equivalent "Find in files" search takes 30+ seconds.
Search pattern format
The search engine performs a "raw" string search in the text of the files, so the search pattern can be any combination of characters (including space, tabs and special characters such as <, >, &, etc This can be useful to search for specific C++ constructs. For example, to look for all classes derived from "Foo", search for the pattern "public Foo" or ": public Foo"
The "*" character is used as a wildcard matching any characters between two strings. The "\" character is used to escape the "*" or "\" characters. By default, the search is not case sensitive, but this this can be altered by clicking the "Aa" button in the toolbar.
Note that there is currently no support for wildcards and the search is always case sensitive.
The search results contain one entry per file, and one sub-entry per match in the file. Both can be clicked in the Tree View to navigate to the corresponding location.
Chromium Explorer - Keyboard shortcuts
Feature | Shortcut |
File name search | Alt-; |
Directory name search | Alt-Shift-; |
Text search | Ctrl-Shift-; |
Chromium Explorer - Custom enlistments
By default, VsChromium automatically recognizes files from a Chromium enlistment. However, it is sometimes useful to enable some of VsChromium features in directories not part of a Chromium enlistment. For example, the search capabilities of VsChromium apply to any directory containing text files.
This can easily be achieved by creating a special text file, called "project.vs-chromium-project", in any directory. Once a file contained in that directory is open in the Visual Studio Text Editor, VsChromium starts indexing all text files in that directory and enables the various search capabilities of Chromium Explorer.
Each "project.vs-chromium-project" is a text files containing named sections (i.e. single text lines surrounded by "[" and "]" characters) defining the behavior of the indexer, i.e. what files to show in Chromium Explorer, and what files to index.
For example:
[ChromiumExplorer.ignore] .git/ [SearchableFiles.ignore] *.pak *.zip *.exe [SearchableFiles.include] *
Editor features
Chromium Coding Style checker
When a source file belonging to a Chromium enlistement is opened in the Visual studio editor, a few custom "classifiers" (or "colorizers") kick off and inspect the code for Coding Style violations. Each violation is indicated with a red background highlighing the text violating a rule.
Note: There is no requirement to have a Chromium solution open, as the discovery is based on the content of the file system, not on the list of projects/solutions opened in Visual Studio.
List of supported style violations
- Lines longer than 80 columns (all text files)
- Trailing spaces (all text files)
- TAB instead of space characters (all text files)
- Invalid use of "else if" on new line (C++ file)
- Invalid indentation of "public:", etc. modifiers (C++ files)
- Space after "for" keyword (c++ files)
- Usage of CRLF instead of LF as end of line characters (all text files)
Note: The set of rules currently supported is minimal but is helpful for a developer new to the Chromium Coding Style rules.
Format comment
The Format Comment command (Ctrl-K C) allows formatting c++ style comment block (i.e. list of lines starting with "//") to wrap at 80 columns.
- If there is no text selection, Format Comment first expands the selection to contains the first line and last line of the comment block.
- If there is a text selection active, Format Comment formats only the block comment covered by the selection start and end lines.
Navigate to Build Error
When using the "Package Manager Console" tool window as an integrated command prompt, for example to build Chromium using "ninja", build errors from various tools are shown as hyperlinks that can be clicked to open the corresponding file in the editor, as illustrated in the picture below.
Debugger features
Attach to Chrome
The Attach to Chrome dialog is a replacement for the Attach to Process dialog, showing all the chrome processes running on the local machine, grouped by process type.
The Attach to Chrome dialog also allows users to attach to all current *and* future child processes that spawn, making simple otherwise difficult debugging scenarios involving child-process startup.
Current limitations of Auto attach to Child Processes:
- Only works for processes attached through the Attach to Chrome dialog. In other words, launching via F5 is not supported for this feature.
- Does not support automatically attaching to future child processes of x64 parents.
Both of these limitations will be removed in a subsequent release.
Known Issue:
Due to a bug in the Visual Studio IDE, it is not advisable to leave the processes debug window opened by default when using auto attach to children.
Advanced Debug Visualizers
Custom visualizers for visualizing complex Chromium specific data-types. Visualizers are included for the following types:
- base::Time (displays base::Time formatted as MM/DD/YYYY HH:MM:SS.XXXX)
- base::TimeDelta (displays base::TimeDelta formatted as HH:MM:SS.XXXX)
Other, simpler visualizers are available in src\tools\win\DebugVisualizers.
What's new
Source Exporer features
- Support for F8/Shift-F8 (goto next/previous result) when file contents search result is active.
- Support for traversing symlinks (i.e. reparse points) when enumerating files and directories.
- Additional button in Source Explorer toolbar to control whether searches include (or not) files and directories contained in symlink directories. This feature, along with the previous one, is particularly useful when working with Dart projects and packages, as package folders are symlinks to a local user folder.
- Fix support for certain wildcard pattern matching. E.g. foo/*/bar was not correctly supported.
- Improve caching validation algorithm, so that restarting Visual Studio is not necessary anymore when updating configuration file project.vs-chromium-project.
- Various UI and performance improvements.
Source Exporer features
- Support for wildcard character ("*") in text searches.
- Support for context menus in tree view.
- Various UI and performance improvements.
Debugger features
- Attach to Chrome and Child process debugging works with x64
- Child process debugging works in launch (i.e. F5) scenarios. Note this feature needs to be enabled by a toolbar button in Chromium Source Explorer
Debugger features
- Automatically attach to child processes
- Custom visualizers for base::Time and base::TimeDelta
Current limitations of Auto attach to Child Processes:
- Only works for processes attached through the Attach to Chrome dialog. In other words, launching via F5 is not supported for this feature.
- Does not support automatically attaching to future child processes of x64 parents.
Both of these limitations will be removed in a subsequent release.
Known Issue:
Due to a bug in the Visual Studio IDE, it is not advisable to leave the processes debug window opened by default when using auto attach to children.
Debugger features
- Attach to all running Chrome processes
- Attach to child Chrome processes
Editor features
- Navigate to Build Errors
- Minor stability and performance improvements.
Configuration files
One of the goals of VsChromium is to work "out of the box". To enable this, a certain number of assumptions had to be made. Most of these assumptions are customizable through text based configuration files.
By default, configuration files are installed and stored in the "Configuration" sub directory of the VsChromium installtion directory, typically the Visual Studio extension directory. Overriding a configuration file is as easy as creating a ".VsChromium" directory in the Windows' user folder ("c:\users\username"), make a copy of the relevant configuration file below, and edit it.
After changing one or more configuration files, it is required to restart Visual Studio for the changes to take effect.
Configuration files related to Chromium Explorer and indexing
ChromiumEnlistmentDetection.patterns | This file is used to determine whether file belongs to a Chromium enlistment. It is simply a list of directory and files names to look for when looking at the parent directories of a file. There should be no need to customize this file unless the Chromium enlistement significanly changes. |
ChromiumExplorer.ignore | This file uses a ".gitignore" syntax to filter the list fo directories and files to display in the Chromium Explorer tool window. The file could be in theory empty, but it is sometimes useful to ignore files/directories that don't contains files meaningful to day to day development (e.g. *.pdb, *.obj, etc. files). Note this file is also implicitly used to filter the results of "search file names" and "search directory names". |
SearchableFiles.ignore | This file uses a ".gitignore" syntax to exclude files from the "text search" feature. This is required to avoid loading GBs of irrelevant files in memory (e.g. build output files such as .obj, .exe, etc. fiels). This allows decreasing the amount of files loaded in memory from 30+GB typically found in a local Chromium enlistement directory to a more reasonable ~1.2GB of relevant source files. |
SearchableFiles.include | This file uses a (reverse) ".gitignore" syntax to include files into the "text seach" feature. This file is used as a 2nd pass after "SearchableFile.ignore" to filter out even more using inclusion rules. |
Configuration files related to Coding Style checkers
ChromiumEnlistmentDetection.patterns | Same as above. |
ChromiumStyleCheckers.disabled | This file can be used to disable various style checkers. Simply un-comment the corresponding line. |
ChromiumCodingStyle.ignore | This file uses a ".gitignore" syntax to determine which files should not be validated by the Chromium Coding Style checker. This is needed because a Chromium enlistment contains third party libraries and generated files that don't always follow the Chromium Coding Style conventions. |
Installation Instructions
- Download VsChromium.vsix
- Open the file: this will open a Visual Studio Installation dialog.
- Click "Install"
- Start Visual Studio
- Go to "Tools | Extensions Manager..."
- Ensure "VsChromium" is present and enabled.
- VsChromium is compatible with Visual Studio Pro 2013 and up.
- A Windows 64-bit operating system is required. Certain features are disabled for versions of Windows less than Windows 7.
- Express editions of Visual Studio are not supported due to limitations of VS extensibility framework for Express.
Technical specifications
From a technical perpective, the "search engine" used by VsChromium has been designed with the assumption that a good amount (e.g. at least 2GB) of physical memory is available. This allows the search engine to load all relevant source files in memory for fast brute-force text search.
The search engine has been carefully optimized to make use of multi-core processors for many internal operations. So, in general, the more cores are available, the faster the engine is.
For example, a HP Z620 with 2x8 cores processors and hyperthreading enabled, the search engine uses 32 worker threads (1 thread per logical processor).
- During initial file loading from an SSD, the engine loads 90,000+ files in parrallel and achieves ~80% CPU utilization. All files are usually loaded in less than 10 sec.
- During a "Text Search" operation, the engine paritions the files to search into 32 equally sized partitions, runs a search query accross 32 threads, then merge the results before sending back to the VsChromium package. Using efficient string search algorithms ( bndm and Boyer-Moore), the search engine achieves throughputs of 15+GB/s, meaning a text search usually takes less than 0.1s with 1.2GB of source files.
Server process
To avoid competing with the VM address space of the Visual Studio process (devenv.exe), the VsChromium search engine runs as a child process of Visual Studio.
Example of memory usage and process relationship after loading ~1.2GB of source files:
The server process is always automatically terminated when the Visual Studio process is terminated. Each instance of Visual Studio uses its own instance of the VsChromium server process.
IPC: The VsChromium package and the VsChromium server process use protobuf over a local TCP connection as IPC mechanism.
To avoid running out of VM address space, the search engine runs as a 64-bit process.


text:
Please note that online trip planning is now available. Please also note that these ADA pages will no longer be available starting in May of 2009. Schedules > Saturday > 66 Central Avenue - Outbound Effective Date: 01/17/2009 Select a desired time to display information specifically for that trip. Central/Wyoming, 6:54a, 7:09a, 7:24a, 7:39a, 7:54a, 8:09a, 8:24a, 8:39a, 8:54a, 9:09a, 9:24a, 9:39a, 9:54a, 10:09a, 10:24a, 10:40a, 10:55a, 11:12a, 11:28a, 11:42a, 11:57a, 12:12p, 12:27p, 12:42p, 12:57p, 1:12p, 1:27p, 1:42p, 1:57p, 2:12p, 2:27p, 2:42p, 2:57p, 3:12p, 3:27p, 3:42p, 3:57p, 4:12p, 4:27p, 4:42p, 4:57p, 5:11p, 5:25p, 5:40p, 5:55p, 6:10p, 6:25p, 6:40p, 6:55p, 7:10p, 7:39p, 8:09p, 8:39p, 9:09p, 9:39p, 10:09p, 10:39p |
Back to the ABQ-RIDE home page. |
Copyright ©1994-2009 City of albuquerque. All rights reserved. Official web site for the City of Albuquerque www.cabq.gov |


text:
Tag Archives: spring hill nursery
See How I Saved Saturday: Spring Hill Nursery, Olive Garden
It's Saturday, which means time for a little bargain bragging! What deals did YOU get this week? I love gardening, I just HATE to pay full price for plants! I was super-excited when my Grab Bag Package from Spring Hill … Continue reading
Posted in Deals and Shopping
Tagged olive garden, see how i saved saturday, spring hill nursery
Leave a comment


text:
Notes and Observations Cont'd:
- UAE Toilets Part I: You know how at bars (in the United States and around the World) they put sodas and carbonated water into drinks using a spray-gun mounted to a hose thing?, well they have them here too, only they're not in bars, they're in bathrooms on the wall next to the toilets. Clearly we're dealing with two options here: A.) they're for staying hydrated, and when better to hydrate than during a regular/natural/reliable/much-needed reprieve from your chaotic day? Or B.) you're meant to spray water onto your sphincter after, presumably, a bowel movement—as like an alternative and/or a complement to wiping/toilet paper.
- UAE Toilets Part II: They have a type of urinal here that I don't know how to use. It's shaped like a the top of a castle wall and it requires—I think—stepping up onto a "gap" in a curb-high ledge and........and well I didn't get any further than that.
- UAE Toilets Part III: When Emirati men urinate in the outside world, they do so by pulling-up their dishdasha a few inches, spreading their feet apart and squatting into a sideways-twisted Racing Tuck.
- There are so many skyscrapers in Dubai. Nearly all of them are impressive but most of them are sub-attractive and/or not shaped right—at least in terms of aesthetics and common sense, and probably gravity. It could be a volume thing. I mean, if you're an architecture firm and your phone is ringing non-stop, like you have to put people on hold, "HOK can you hold please, HOK can you hold please, thank you for holding, you were saying 125 floors?, right sorry, 175 floors," it's possible that your architects have run out of new non-bad ideas. Also, it could be an absurdity thing. When dudes be building 135 million dollar building after 135 million dollar building, day after day, for years on end, no questions asked, it's easy to become numb and/or conditioned. Next thing you know you're like, "You know the movie Star Wars? Well I want to make a 700-floor, 2,398-foot replica of R2D2 in full color—every detail has to be exact. And you know what I want? Remember that scene when Princess Leia comes out of the droids face and asks for Obi-Wan's help? I want the building to play Hollywood movies hologram-style in mid-air from the 307th floor. Imagine a blockbuster movie just kinda suspended there a thousand feet off the ground for millions to gather and watch, at night, every Tuesday, it will be a thing." Also, maybe the architects that don't suck are booked solid until 2020, so like the E, F, G, H guys are finally getting work and this is their big chance, this is their opportunity to prove to their friends and ex-girlfriends and all the teachers who didn't believe in them and recommended they look into baking or something more "free-spirited", that they're Somebody. This is their long awaited much dreamed about over lunch in a food court moment to show the world they have what it takes to design a building that both looks like and works like, a blender. And maybe it's a client thing, maybe all of these sheiks and princes are trying to one-up each other with ever more ostentatious, opulent and brazenly beyond-rectangle-shaped construction feats.........and what do I know, maybe it makes sense for buildings to have 3-story holes in them? And if boats can float, why can't entire buildings?
- Gas stations give petrol away basically for free here. You can just pull up and take as much as you like. It's like in America when you're driving down a rural road in the mountains and right there on the side of the road near the edge of a little turn-out there's a little brick-ed up natural spring, and you can just fill up your water bottles and igloo coolers with as much clean, cool and fresh spring water as you like. It's more or less like that.
- Not swearing in public feels unnatural and perverted. Lowered or hushed voices, paranoid glances at the time of delivery, mouthing instead of speaking, all of it, it all feels weird. I feel like Dubai is a playground and I'm at recess.
- After having spent approximately 17 of the last 24 hours in the Dubai Mall, I have Mall Depression. Not even an iced Frappuccino or a new pair of Flyknits can make me feel better.
- Muslim Prayers are broadcast on loud speakers (inside and outside, basically everywhere) six times a day throughout the city. Prayer times depend on the day and your location on the planet.
- Mark Cavendish was clearly the focus of city-wide Ex-pat Cougar Alert! In the parking lot before his turn in the time trial, thousands and thousands of beautiful older women wearing fake boobs, expensive shoes, too much make-up and various animal prints descended upon Mark. Mostly to pose with him iphone photo-sesh-style, and but also for hugs and kisses, and naughty smiles.
A brief collection of writings, quotes, abstracts and statements collected from the Dubai Tour's Race Manual, Press Releases, etc.
- "The Dubai Tour is being held under the Patronage of His Highness Sheikh Hamdan Bin Mohammed Bin Rashid Al Maktoum."
- "Dubai Tour is the new professional cycling race that will open the UCI Asia Tour. From February 5th to 8th, 2014, the Great Cycling is coming to Dubai for the first time. 4 stages, the best teams and the best riders will offer the World an amazing competition and a magnificent showcase of Dubai."
- "Are you ready to FEEL THE MOST POWERFUL RACE AND DISCOVER THE MOST POWERFUL PLACE?"
- "The Dubai Sports Council's mission is to invest the revenues as well as the capabilities to set up an ideal sporting sector to make of Dubai a pioneering milestone in sports. It was founded in November the 30th 2005 as per a decree issued by the UAE Vice-President, Prime Minister, Dubai Ruler H.H. Sheikh Mohammed Bin Rashid Al Maktoum."
- "Dubai Tour riders, like Dubai skyscrapers, run high."
- "An exciting sprint into the heart of the new millennium."
- "POWER: Moving fast. Fast as the wind, fast as the water that flows through the land. Running quickly towards destiny, like a thunderbolt, like a bullet. Faster than a flash of light."
- "FUTURE: In this land Tomorrow is just a word. And it means now. In the sunset of the past there's a story that has yet to be written. A story that soon will be a legend."
- "SPEED: The force, the strength, the energy. Fighting to control the element, trying to dominate the sand and to handle the desert. So close to perfection, walking on the way of glory."
- "Dubai is the dynamic nucleus of the Arabian Gulf region."
- "Sunshine, sea, desert and skyscrapers: Dubai is the Pearl of the Arabian Gulf."
- "THE TROPHY BY PININFARINA: The Dubai Tour Trophy, named Circle of Stars, is designed by Pininfarina. The Italian design company has returned to the sports field with its usual passion and talent in conceiving memorable icons.
- "THE JERSEYS BY VERSACE: The Dubai Tour Jerseys are designed by Versace, the famous luxury and fashion Italian company. High performance skills are combined with glamour and style to dress the winners on the podium. The Jerseys are produced by Castelli, an exclusive artisan italian factory that produces cycling clothing, and the visionary mastermind behind the most preeminent work of Cycling Art in the World known for dominating photographs and explosive truths—Manual for Speed."
- "The Dubai Tour runs also on the internet, it steps into the world through the website."
- "A route suspended between the future and the desert. A story has yet to be written (see Manual for Speed)."
- "The best Teams and the best Riders in the World will compete and defy each other under sunshine, bringing the Great Cycling Show across Dubai's roads, among skyscrapers and high-rise buildings, between sea and desert."
- "01 DOWNTOWN STAGE (9.9KM): A short individual time trial, basically a "round trip". The stage is raced on wide, well-surfaced boulevards. Split time is taken mid-race, where a U-turn indicates the halfway mark; the course then goes back along the same roads. "
A Brief Interview with Dylan van Baarle
Regarding making contact and communicating with various members of the World Tour Contingent (WTC) while traveling in foreign countries around the world, keeping in mind that the WTC is anything but homogenous in regards to language and customs and anything/everything else that might best be described as like "culture", and remembering too that there are a number of ways/mediums/tools/modes to facilitate communication each with a specific reality in terms of cost, efficiency, quality and reliability...it sucks. Email is the old standard. There is this new texting app, I don't know what it's called, I've been told what it's called, but I can't remember what it's called, I just spent several minutes on the internet trying to find out what it's called, anyway everyone loves it. Listen, the point is, when a dude you've never met finishes 13th in his first World Tour race—the Dubai Tour Individual Time Trial—as a professional cyclist ever, and via an illegally-but-consensually obtained email address (thank you Raoul Sturme!) the athlete-dude in question agrees to an interview, but you have to suggest Skyping because you prematurely, apparently, left the area in which he's staying, and he says yeah sure, and then you have to say cool what's your Skype handle or avatar or whatever, and then he's like yes we can Skype, and you're like yeah I know that but I need to send you a friend request so whats your like codename, and he's like oh yeah, just use my name, and so you search and there are three of him (probably he has multiple accounts because he forgets he has Skype in the first place, or he can't remember his password and it's just easier to make a new account—you know how it goes) and they're all from the Netherlands so that's no help and so you send a request to the first one, and that doesn't work, and so you send a request to the second one, and that does work and but now athlete-dude is like (via Skype IM) I'm in a massage now but what about in thirty minutes? When that happens, that shit is stressful. Dear Dylan vdyan Baarle, thank you for being patient. And thank you for Skyping back in thirty minutes like you said you were going to do!
What follows is a series of declarative sentences based on an interview in which Dylan answered my questions, which questions were random. Side note: The interview was conducted in English because of course he speaks English nearly perfectly and I can't speak any Dutch because I'm an American and so duh, about all I can do is ask for beers and bathrooms and weather conditions, in Spanish. Instead of editing out various peculiarities and structure and vocabulary related to dude's ESL-situation, we left them. Because they sound nice. Please read this in a Dutch accent.
Dubai and indoor skiing.
"I haven't been in Dubai long, since late Monday night. It was a pretty tough trip coming from Amsterdam, we were delayed and then the road to our hotel was not that good. We had to drive ourselves and did not know where we were going. It's so busy, so many people on the road and we didn't have a Garmin. I don't know if we'll have time to do anything outside of racing here but I would like to see the city if possible. I've never been here before, I can't believe how big the buildings are. They are a lot bigger than on the postcards. We actually have an indoor ski area where I'm from as well. I went once but it was not a success, it was the first time I'd ever been skiing. I had some lessons but I fell most of the time, I don't like it. It's cold and wet.
My first pro race as a pro rider, results, moms, the team.
Today was my first race as a pro rider, although I did some races against professional teams last year, like the Tour de l'Ain in France. My mother was watching the race on TV, that is really cool. My parents are very happy for me. I started racing bicycles when I was eleven, when I was a young guy. I'm feeling good about this time trial. My goal was to finish between 20th and 25th. But when I end up 13th, that's a lot better. Yes, I hope some of the riders are looking through the results and wonder who I am. Hopefully they'll remember. It feels good to see my name so close to the top, with some pretty nice names around it. Lasse [Norman Hansen] was 3rd and Ramunas [Navardauskas] was 2oth, so Garmin did well. I don't have a particular day in mind right now, we will see what the stages bring.
Not so much the big climbs, the classics.
I'm a little bit of an all-arounder, but I prefer time trials and the classics, especially the cobblestone ones but also races like Amstel Gold. Not so much the big climbs in France and Italy. Flanders and Roubaix are the two biggest races for me. I did U23 Paris–Roubaix twice, but neither was a nice experience. I did U23 Flanders last year as well and finished in the lead sprint group. The Ardennes Classics have climbs that are a bit long for me right now, but we will see in the future. After Dubai we have a training camp with the whole team, and then I will race Omloop Het Nieuwsblad and then Kuurne–Brussels–Kuurne, lots of classics including Paris–Roubaix and Flanders. That will be a great experience.
Time Trial Start Area Musical Highlights:
- The Spark by Afrojack feat. Spree Wilson
- If I Ever Feel Better by Phoenix
- Ma Howa Enti Ele by Rabeh Saqer
- Rhythm is a Dancer by Snap!
- The Music's Got Me by Bass Bumpers
- Summer in the City by DJ Linus
- U Got 2 Let the Music by Cappella
- Where's the Love I Knew? by Vincenzo
- Tatischeff by Ame
- Coconut Grove by Santana
Captions by Klaus


text:
Adtran focuses on multi-access economics, mobile backhaul opportunity
Adtran this week opened up the doors to its Huntsville, Ala., headquarters to press and analysts to talk about a range of topics spanning its enterprise and carrier businesses.
On the service provider side of the house, the focus was on helping carriers drive IP and Ethernet ever deeper into the network while using Adtran's multi-access platforms to affordably serve the mix of copper and fiber and TDM and Ethernet environments that are the reality today for most carriers.
Also on the agenda: opportunities in mobile backhaul, especially moving from bundled T1s to something more flexible, affordable and Ethernet-based; thoughts on broadband stimulus, national broadband and other funding scenarios; and the potential for blurring the unified communications lines between enterprise and carrier.
Plus: a tour of its on-campus manufacturing operations — a unique resource in an industry in which most manufacturing off-shored and outsourced. more
Related Topics: VoIP, Business Services, 3G/4G, Unified Communications, Optical, Broadband/FTTX, Carrier Ethernet, All Stories |


text:
COLUMBIA, S.C. (AP) -- The three leading Democratic presidential candidates spoke this afternoon to those gathered at the Statehouse in Columbia to honor slain civil rights leader Martin Luther King Junior.
Illinois Senator Barack Obama, former North Carolina Senator John Edwards and New York Senator Hillary Clinton talked to the hundreds at the rally.
Obama talked about the need for unity. He says the nation must work to remove what he called barriers to justice and equality.
Edwards says the presence of a black man and a woman among the leading candidates speaks to the progress the nation has made since King led the civil rights movement. But he says much remains to be done.
Clinton says those of King's era laid an important foundation for improvement. But she says the stakes are high in this year's election to continue the progress.
(Copyright 2008 by The Associated Press. All Rights Reserved.)


text:
Come and explore a Yorkshire secret...
Welcome to the wildlife of eastern Yorkshire!
The Yorkshire Nature Triangle in eastern Yorkshire is well known among local naturalists for its rich fauna and flora, but it's a hidden secret for a wider audience increasingly keen to see more of Britain's spectacular wildlife. We have an amazing and diverse range of fascinating animals and plants here in lowland UK and in the species rich sea that surrounds it.
Have you seen...
• gannets plummeting from the skies at 70 mph, diving into the sea for fish?
• puffins courting and nesting on our coastal chalk cliffs?
• otters and water voles establishing new homes on our waterways?
• thousands of overwintering and rare migrant birds on our wetland reserves?
• lush wildflower meadows and the patchwork hills and woodlands of the Wolds?
• rockpools and shoreline reefs bursting with sea life, waiting to be explored?
Read all of the latest bird summaries from Yorkshire Coast Nature right here!
Click here to read new blog posts from Mark James Pearson and see some amazing photographs!
There are great places to see wildlife in the Yorkshire Nature Triangle at all times of year
Remember that although you can't beat the variety and colour of our wildlife in spring and summer, autumn and winter are often the best times to see the most spectacular and elusive mammals and visiting birds. Many species are struggling to cope with the pressures imposed by man's activities, not least climate change. But many, like the otter, peregrine and gannet, are also recovering in the Yorkshire Nature Triangle, thanks to increasing concern for the environment, and stricter legislation on conservation, pesticides and pollution. With over 20 nature reserves, from the National Nature Reserve at Spurn, to Flamborough Head and Bempton Cliffs, Millington Wood and North Cave Wetlands, the variety of habitats and wildlife watching opportunities in the Yorkshire Nature Triangle is incredible.
Why not plan a weekend visit or a longer stay?
Consider staying overnight to enable you to get out early or stay out late to see wildlife on the coast, along the rivers, and in The Wolds
The Yorkshire Nature Triangle ... a growing Nature Tourism project...
Wildlife-friendly businesses in eastern Yorkshire are signing up to the Puffin Mark accreditation scheme right now. Their accommodation and services are advertised and recommended here on this site. As www.yorkshirenaturetriangle.com continues to grow, more places to see, things to do and places to stay will be added daily...
Keep up to date on our upcoming local events and nature activities, and check out new blog updates by our knowledgeable East Yorkshire nature enthusiasts. All this plus the latest wildlife sightings in the area.
We want to help you discover the delights of watching wildlife here
Whether it's an overnight stay, a long weekend break or a full week's holiday, nature lovers looking to unwind, relax and explore our wonderful wildlife hotspots in the Yorkshire Nature Triangle will now have access to a growing list of quality-assessed wildlife-friendly B&Bs, hotels, farm accommodation, caravan parks, camping sites, pubs, restaurants and tour companies - all within short distance of the coast, the Wolds and your favourite Yorkshire nature reserves. All provide a warm Yorkshire welcome and are proudly recommended by us here at the Yorkshire Wildlife Trust, the RSPB and our partners, and all will be accredited through this site and our brand new Puffin Mark scheme.
...Watch our video below to find out more!