text:
Home / News / Buying Guides
BMW ActiveE Electric Vehicle: New Details, Images
Nelson Ireson February 10, 2011 Comment Now!
The future is electric, and BMW knows it as well as anyone despite the fact that the only EVs put out by the company have thus far been limited-distribution, lease-only development cars. The ActiveE doesn't change that, but it's another step down the path to a full-production BMW EV.
The ActiveE marks the second phase of BMW's EV development program, following the MINI E of 2009-10. The next phase will be the upcoming Mega City Vehicle (MCV). For the ActiveE, BMW is planning to lease over 1,000 cars in the U.S., Europe, and China. Feedback from this process will go into the production-bound MCV, due to arrive in 2013.
At 170 horsepower and 184 pound-feet of torque, the ActiveE is among the more interesting EVs around, though it falls well short of the Tesla Roadster. It's more real than the likes of Nissan's latest concept, the ESFLOW, however. Built on a standard 1-Series platform adapted to EV use, the ActiveE should provide rewarding driving dynamics, even if it doesn't light up the dynamometer.
Performance is pegged at sub-nine-seconds to 60 mph, with 100 miles of range. For the full details, including background on its eDrive display tech, liquid-cooled lithium-ion battery pack, and "gliding" method of coasting down the road, hit page two.
BMW ActiveE Electric Vehicle
The second phase of BMW Group's electro-mobility development is ready to take to the road
Woodcliff Lake, NJ – February 10, 2011… The introduction of the BMW ActiveE marks the launch of the second phase of the BMW Group's electro-mobility development strategy. Like the MINI E before it, the BMW ActiveE will be available for lease in select markets beginning in Fall 2011.
project i - research and development of tomorrow's mobility.
The BMW ActiveE is the BMW Group's next step towards an emission-free, mass-produced electric vehicle. Within the framework of project i, the BMW Group is carrying out research and development work on the development of electrically powered vehicles. The ultimate goal is the concept of a Megacity Vehicle (MCV) that meets the demands of a sustainable mobility solution for congested urban areas. For this reason, the drive components and battery technology that will be used in the MCV are being tested in the BMW ActiveE.
Ongoing field tests involving more than 600 MINI E cars, including 450 in the US, have already provided vital knowledge about the demands on future electrically powered production vehicles. Beginning in 2011 in the US, Europe and China, a test fleet of over 1000 BMW ActiveE vehicles, produced at BMW's Leipzig plant, will provide further valuable insights into the everyday use of the vehicle. The findings will serve to deepen the knowledge already gained on the everyday use of electric vehicles and to learn more about customer requirements. The feedback from customers testing the MINI E and the BMW ActiveE will be fed directly into series production of the MCV, which the BMW Group will be launching under a new sub-brand in 2013.
With the BMW ActiveE, the BMW Group is extending field tests on electric mobility and is intensifying research into electric mobility in everyday driving. For this reason, the drive components and battery technology that will be used in the MCV are being tested on the BMW ActiveE. The knowledge gained will be fed directly into series development of the MCV. With the BMW ActiveE, the future of individual mobility combining driving pleasure with zero tailpipe emissions is one step closer.
Electric mobility as a supporting pillar of the EfficientDynamics development strategy.
In the development of groundbreaking vehicle concepts and drive technologies within the framework of the EfficientDynamics strategy, the BMW Group attaches key importance to electric mobility. With EfficientDynamics the BMW Group has for been very successful in reducing fuel consumption and emission levels through new and highly-efficient engine generations, enhancement of aerodynamics, the use of innovative lightweight construction and intelligent engine management - all with better performance in the bargain. Thanks to EfficientDynamics, the company is now able to achieve additional economy advantages through the further electrification of the drive train and hybrid technology. In the medium term, the BMW Group is developing vehicle concepts for emission-free mobility in larger urban areas. In the long term, EfficientDynamics means the transition to emission-free mobility - using both battery power and sustainably produced hydrogen.
On the way to sustainable, CO2-free mobility, the BMW ActiveE represents the next major milestone. Following the MINI E, the BMW ActiveE is the BMW Group's second electric vehicle made available to consumers. With output of 170 horsepower and maximum torque of 184 lb-ft, the car accelerates from 0 to 60 mph in under nine seconds (preliminary), demonstrating the dynamic characteristics typical of a BMW. At the same time, newly developed lithium-ion batteries facilitate a vehicle range of around 100 miles in everyday driving.
Just like the MINI E, the BMW ActiveE is a conversion car, an electric vehicle based on the body and chassis of an existing car. The BMW ActiveE integrates all-electric drive components such as batteries, electric motor and power electronics in a vehicle body that was not originally intended for this purpose - and without significant compromise on space or interior comfort. Therefore, the BMW ActiveE is the BMW Group's first electric vehicle to offer four fully-fledged seats and a seven cu-ft luggage compartment. The BMW ActiveE incorporates a pilot series version of the same drive train and batteries Planned for the MCV.
The design: clearly a BMW, clearly a very special concept.
The BMW ActiveE is based on the BMW 1 Series Coupe. The convex-concave design vocabulary gives the vehicle an even more dynamic appearance. However, specific visual interior and exterior accents highlight the exceptional character of the purely electrically powered BMW. Silver colored, circuit-inspired graphic elements on an Electric Blue background run over the entire Alpine White body. The intentional asymmetry of the graphic elements gives the vehicle a distinctive appearance. The blue shadowing provides additional depth.
The exterior design of the BMW ActiveE is further differentiated by the power dome in the hood which provides space for the batteries located under it. The completely closed rear apron is a distinctive feature of the BMW ActiveE. Since the ActiveE does not have an engine, there is no need for tailpipes and an exhaust system. Where the tailpipes are normally located, the BMW ActiveE boasts a silver-blue accentuating trim in the completely closed rear apron that indicates that the vehicle is free of emissions. Other distinguishing features include the "ActiveE" logo on the back of the car and the "eDrive" logos on the fenders.
In order to increase the vehicle's range even further, the BMW ActiveE rides on the latest generation of tires with optimized rolling resistance. The result is a rolling resistance that is up to twenty percent lower compared to previous series production tires. The wheels of the BMW ActiveE are complemented with BMW's lightest 16-inch alloys and boast a double V-spoke design.
In the interior the features of a BMW 1 Series Coupe are combined with individual details that emphasize the unique nature of the BMW ActiveE. Blue contrasting seams accentuate the Dakota Leather seats in exclusive Pearl Grey. Dashboard and door linings are fitted with Alpine White interior trim, which is available for the first time, and sport an "ActiveE" appliqué that transfers the exterior graphics into the interior of the car. The shift lever plaque in black and blue complements the overall graphic concept.
BMW eDrive - the BMW ActiveE's control display concept.
The instrument cluster and the control system were specifically adapted to the electric drive concept of the BMW ActiveE. In place of a tachometer, the instrument on the right of the cluster shows the amount of energy being taken from the battery or the current amount being supplied to it through recuperation. When the vehicle is at a standstill, the needle in the middle position indicates that the vehicle is ready to drive, as the BMW ActiveE has no engine sound to inform the driver whether or not it is ready to drive. If the vehicle is not ready, the needle rests at the bottom left of the instrument. The "fuel gauge" below it indicates the battery charge level. Furthermore, the onboard computer provides additional vital information such as the remaining vehicle range, for example.
The eDrive display functions on the Central Information Display depict vehicle energy flow. During the journey an active schematic representation of the vehicle informs the driver whether energy is currently being taken from the battery or being fed into it through recuperation. Moreover, the driver can see the current charge state of the battery and also check whether the air conditioning or the heating system is currently in use. This representation can, if required, also be shown as a split screen to allow the simultaneous display of additional infotainment contents or the route guidance of the navigation system. When the vehicle is at a standstill, it is also possible to see on the display whether the vehicle is currently being charged or whether the battery and interior are being climatically conditioned. In addition, a special battery information menu provides information on the battery energy level as well as the current and remaining vehicle range. During charging it also indicates the remaining charging time.
Optimum comfort, optimum efficiency - the ECO PRO Mode.
If the driver wishes to increase the range of the BMW ActiveE even further, it is now possible to do this via the ECO PRO Mode. As soon as the driver activates the switch on the center console, the vehicle's drive configuration and comfort functions are modified to facilitate an even more efficient driving style. The accelerator pedal mapping program delivers less power in the ECO PRO Mode than in the normal driving mode, but with the same pedal travel. The heating and air conditioning systems have a flatter setting and therefore use less energy. The driver is also provided with tips on how to reduce energy consumption even further for the best possible driving efficiency.
Emission-free, powerful and compact: the drive system of the BMW ActiveE.
The BMW ActiveE represents typical BMW driving pleasure in a new, emission-free form. The heart of the BMW ActiveE is the powerful electric synchronous motor. Maximum power output of the electric drive system is 170 horsepower while maximum torque of 184 lb-ft is available from a standstill, as is typical of electric vehicles and it remains available across an exceptionally broad load range. As a result, the BMW ActiveE accelerates from 0 to 60 mph in under nine seconds. Top speed is electronically limited at around 90 mph.
The permanent-magnet synchronous motor and the power electronics of the BMW ActiveE were developed entirely in-house and are characterized in this combination by exceptional efficiency, optimized power development and a compact design. The innovative character of the electric drive system is reflected above all in the relation between engine output and space requirement. The entire power pack including power electronics and transmission with differential is integrated into the modified rear-axle support of the BMW ActiveE, and with 170 horsepower, still has a total weight of only around 200 lbs.
Brake Energy Regeneration: drive and slow down with the accelerator pedal.
The driving experience of the BMW ActiveE is enhanced by the possibility of slowing down using the accelerator pedal via brake energy regeneration. When the driver lifts off the accelerator pedal, the electric motor becomes a generator that feeds the electricity gained from kinetic energy back into the vehicle battery. At the same time, braking torque is created, which effectively slows the vehicle down. In this way, the accelerator pedal becomes a "drive pedal". In urban traffic around 75 percent of all deceleration can be accomplished without using the brake pedal at all. Intensive use of this recuperation of energy via the motor also results in a range increase of up to 20 percent. Only when the driver wishes to slow down faster by stepping on the brake pedal does the conventional braking system of the BMW ActiveE come into play.
Gliding - "coasting" along the road.
Unlike the MINI E, the BMW ActiveE features a distinctive "intermediate position" of the accelerator pedal, allowing the vehicle to "glide". As a result, the vehicle does not immediately recuperate when the driver decelerates, but "de-clutches" using the electric motor's zero momentum control, thereby utilizing its own kinetic energy to move forward. The BMW ActiveE then "glides" along the road without using energy. Gliding offers a most convenient way of increasing the vehicle's range.
Intelligent vehicle dynamics through Stability Management for Regeneration.
When the driver lets off the accelerator pedal to slow down, the regenerative brake torque only works on the rear wheels. Therefore the BMW ActiveE features an adapted drive-active vehicle dynamics interface, "Stability Management for Regeneration", in order to also ensure vehicle stability during recuperation. The Dynamic Stability Control system has been adapted to the specific characteristics of the electric drive train. Based on various parameters, Stability Management for Regeneration adapts the recuperation level to each driving situation, combining the highest level of recuperation with best possible vehicle stability when decelerating in any situation. Should a situation arise that is critical for vehicle stability when using recuperative or hydraulic brakes, the optimized DSC function ensures constant vehicle stability by means of targeted intervention into the braking system and engine management. Furthermore, DCS ensures that the rear wheels are able to convert the high torque of the electric drive into maximum propulsion when starting off.
Lithium-ion batteries with liquid cooling system.
Specially developed lithium-ion storage cells ensure the energy supply of the drive system and all further functions of the BMW ActiveE. These high-voltage battery units are exceptional for their high storage capacity. The BMW ActiveE features large-format storage cells, which are being used for the first time and were jointly developed by the BMW Group and its associate partner SB LiMotive exclusively for automotive use.
With the BMW ActiveE developers are testing the storage cells and the storage electronics, which are to be installed later in the MCV. Combined into modules of six, eight or ten storage cells, they fit perfectly into the available space in the BMW ActiveE. The large battery unit of the BMW ActiveE takes up the space in the lower area of the vehicle normally intended for the drivetrain in a conventional vehicle. In order to accommodate additional storage cells, the space at the rear that has become available through the omission of a fuel tank is also utilized. Further lithium-ion cells are located at the front end in front of the cowl.
The BMW ActiveE's three large storage modules are each protected by a specially-constructed steel-plate battery housing with integrated liquid cooling system. The cooling system constantly maintains the ideal operating temperature of the batteries, thereby contributing to an increase in the service capability and lifespan of the battery cells. The air conditioning/heating system tempers the liquid running through the storage unit housing via a heat exchanger. When connected to the electrical grid, the liquid can also be heated in order to bring the energy storage units up to the ideal temperature of approximately 70° Fahrenheit.
Thanks to these measures, the BMW ActiveE achieves a range of approximately 100 miles with a full battery charge. Intelligent battery management especially developed for the BMW ActiveE ensures that this range can be achieved as far as possible independent of external climatic conditions.
Fast and flexible recharging.
The development of electrically driven series production vehicles also encompasses innovative solutions for flexible, convenient and user-friendly charging of the vehicle's batteries. The lithium-ion battery units featured in the BMW ActiveE can be recharged from multiple external power sources. In addition to using the wallbox, a 32-ampere charging dock installed at the user's home, the driver can also connect the vehicle to a conventional power socket or a publicly accessible charging station. The standardized SAE J1772 charging port on the vehicle ensures compatibility with most charging stations.
The battery can be fully charged within four to five hours using the wallbox at 32 amperes. A range of around 25 miles is possible after just a one-hour charge at the wallbox.
The power electronics - greater efficiency, enhanced development of power.
The BMW ActiveE's power electronics developed by BMW have been designed to get the maximum potential out of the electric motor. As in the future MCV, the BMW ActiveE's power electronics are located above the rear axle on the electric motor, forming a complete unit together with the motor.
Apart from controlling the electric motor, the power electronics also ensure the power supply to the onboard electrical systems. With the aid of a voltage transformer and incorporating intelligent battery management, they ensure the reliable supply of electricity to all vehicle functions including the comfort and infotainment features. Central control functions, which are integrated into both the power electronics as well as the energy storage system, constantly monitor all components.
Everything from a single source - BMW Group drive technology competence.
The performance of the drive system in the BMW ActiveE is typical of a BMW. The exceptional dynamics and efficiency are the result of intensive development efforts. With the exception of the storage cell, BMW Group engineers develop everything that constitutes an electric vehicle – the energy storage module and its wiring, the electric motor, the power electronics and the transmission. After all, the BMW Group is committed to producing the world's best drive systems - drive systems that stand out from the competition through efficiency, performance and running smoothness, even when electric power and not fuel is being transformed into movement.
Superior and comfortable - typical BMW, even with regard to handling.
On the road, the BMW ActiveE offers the typical BMW driving experience offering the handling characteristics and performance of a BMW 1 Series Coupe. The positioning of the batteries lowers the vehicle's center of gravity. Moreover, the flexible distribution of the storage units facilitates the 50:50 weight distribution typical of BMW automobiles.
In addition to the adaptation of the rear axle to accommodate the electric drive, the BMW ActiveE's suspension-related modifications are mainly restricted to specific components. For example, steering characteristics, springs and shock absorbers are adapted to the higher weight compared to the production version of the BMW 1 Series in order to reproduce typical BMW handling in combination with the electric drive train. The suspension setting was chosen with a special focus on comfortable and superior driving in cities and the urban environment for which the BMW ActiveE is predominantly designed.
BMW ConnectedDrive remote functions for the BMW ActiveE.
With BMW MyRemote, BMW enables the user to access the extensive range of BMW ConnectedDrive functions via an app for the Apple iPhone (from 3G) and the iPad. The user has at his or her disposal all BMW ConnectedDrive remote functions using the CE device such as locking and unlocking the doors, the activation of the horn or headlamp flasher for locating the vehicle within sighting or hearing range, the CarFinder for locating the car within a radius of up to 3,300 feet as well as the Google Local Search function.
In addition, new remote functions developed especially for the BMW ActiveE for battery charge control and vehicle preconditioning have been incorporated into the range of functions. Via the customer's Connected Drive Account the iPhone application establishes a unique connection with the vehicle and automatically displays the additional range of functions as soon as the Connected Drive Account has been identified. However, prerequisite for all remote functions is that both the vehicle and the user are receiving a signal. Of course, the driver has access to the BMW ConnectedDrive functions without using an iPhone. This serves solely as a remote control and information device.
eCommand: charge level, range and preconditioning at a glance.
The specific electric car functions, called eCommand, comprise both charge control and control of the preconditioning of both the batteries and the interior cabin. The charge control function allows the user to start and stop the charging process as well as the setting of a charge timer. Via charge control the user can view the charge level at any time and see whether the vehicle is currently being charged. Users are informed of the battery charge level (State of Charge), the vehicle's current travel range with a full battery charge and the time remaining until the batteries are fully charged. Another display function informs users how far away they are from work or the destination that has been predefined as their home, so that they are able to make a best possible estimation of the distance they are still able to travel. Moreover, the app informs users where the nearest battery charging stations are, offering the opportunity to send these directly to the navigation system's routing function as an interim destination.
Preconditioning for enhanced vehicle range.
Unlike the MINI E, the BMW ActiveE offers the user the potential to cool or heat both the batteries and the car interior using intelligent preconditioning when the vehicle is connected to the grid, thus bringing them up to the ideal operating temperature even before setting off. A preconditioned vehicle offers two advantages: first, the ideal operating temperature of the batteries guarantee highest possible power output and ensure a longer range. Secondly, the interior is already adjusted to a pleasant temperature prior to starting a journey - both in the summer and the winter. Intelligent preconditioning of the BMW ActiveE automatically determines according to the ambient temperature to what extent the vehicle and the battery should be pre-cooled or heated.
Using the BMW MyRemote application, preconditioning can be activated directly or the user can determine via the timer when preconditioning should start. For instance, he or she can ensure that the vehicle is pre-cooled or heated in the mornings before they use the car. However, it is only possible to precondition the car if it is connected to a charging terminal. This ensures that the vehicle's range is not shortened by preconditioning, on the contrary, it actually increases it. Due to the heating and cooling process while the vehicle is connected to the power supply, the energy required for this is no longer drawn from the battery during the journey. Charging and preconditioning functions are, of course, also directly accessible and controllable from inside the vehicle.
BMW ActiveE arrives in the US this fall
The BMW ActiveE is scheduled to make its North American debut this April at the New York International Auto Show. It will be available for lease on a limited basis beginning this fall in the metropolitan markets of Los Angeles, San Diego, San Francisco, Sacramento, New York and Boston as well as the state of Connecticut.
BMW Activate the Future
In the meantime BMW has started a broader conversation about the future of mobility that thinks "beyond the car." To start the conversation, throughout the month of February, BMW will launch a four-part online documentary series entitled "WHEREVER YOU WANT TO GO: Four Films about the Future of Mobility", which is intended to create a broader conversation about the future of mobility and to challenge existing consumer mindsets. Go to www.BMWActivatetheFuture.com to join the conversation.
High-Res Gallery: BMW ActiveE
2012 ActiveE BMW 1-Series News BMW ActiveE BMW News Buying Guides EVs News
Video: 2012 Acura TL Unveiling At 2011 Chicago Auto Show
Nelson Ireson - Senior Editor
2023 Ford Mondeo is the Fusion we need
Viknesh Vijayenthiran - Editor
2024 BMW M5, Noble M500, De Tomaso P72: This Week's Top Photos
BMW will build its final V-12 car in 2022
Ken Block's 14-year-old daughter raced the Hoonicorn against a Hemi-powered Corvette drag car
2024 Ford Mustang spy shots: Redesigned pony car spotted for first time
"Wayne's World" 1976 AMC Pacer heads to auction
Influential 1951 Hirohata Mercury custom sells for over $2M at auction
Kirk Bell - Senior Editor
2024 Ford Mustang, 2023 Alfa Romeo Tonale, 2022 Lexus LX: Car News Headlines
"Bad Boys" Porsche 911 Turbo sells for more than $1.4M
2023 Mercedes-Benz AMG GT, 2023 Cadillac Escalade-V, 2022 Lexus LX: Car... Today in Car News January 21, 2022
2023 BMW X7 spy shots and video: Heavy styling update set for big SUV Spy Shots January 21, 2022
2023 Toyota Sequoia, 2023 BMW M2, 2022 Peugeot 98X: Today's Car News Today in Car News January 20, 2022
2023 BMW M2 spy shots and video: Next generation of driver's coupe spotted Spy Shots January 20, 2022
2023 Toyota Sequoia teased ahead of Jan. 25 reveal Teasers January 20, 2022
Bentley Flying Spur Hybrid, Lamborghini Huracan Sterrato, Hydrogen Boot... Today in Car News January 19, 2022
Motor Authority Newsletter
Sign up to get the latest performance and luxury automotive news, delivered to your inbox daily!
I agree to receive emails from Motor Authority. I understand that I can unsubscribe at any time. Privacy Policy.
Follow Us on Instagram @motorauthority
The Luxury and Performance Leader
Green Car Reports
Spy Shots Super Cars Videos Concept Cars
SUV Hybrids First Drives Racing
Muscle Cars Industry Electric Cars Luxury Cars
Car Tech Features View All
Chicago Detroit
Frankfurt Geneva
Los Angeles New York
SEMA View All
Spy Shots Super Cars Videos Concept Cars SUV Hybrids First Drives Racing Muscle Cars Industry Electric Cars Luxury Cars Car Tech Features View All
First Drives Auto Shows
Chicago Detroit Frankfurt Geneva Los Angeles New York SEMA View All
Photos Videos Spy Shots
Never Miss a Motor Authority Story


Have you tried the AudioStreamer Pro before? If yes, please consider recommending it by clicking the Facebook "Recommend" button!
This download is 100% clean of viruses. It was tested with 26 different antivirus and anti-malware programs and was clean 100% of the time. View the full AudioStreamer Pro virus and malware test.
The file that was tested: aspro29.exe.
Tip: If you're experiencing trouble downloading this file, please disable any download managers to AudioStreamer Pro you may be using.
If you're receiving a 404 File Not Found error, this means the publisher has taken the file offline and has not updated their links with us for AudioStreamer Pro. Please do drop us a note in the event of a missing file.
R.M provides their software as a Windows Executable file and therefore installation is as easy as downloading the file aspro29.exe and running it directly after retrieving it. We highly suggest using antivirus software before running *any* files from the Internet. The company hosting this file has a trust rating of 6/10.


text:
Q: How do I use querySelectorAll on my class names I am trying to make my site responsive to handheld actions. I have four images, all with the class="grid-photos". I am trying to make the photos expand when clicked, and close when clicked again.

As of now I can get it to work only with the first image using this Javascript
const gridPhotos = document.querySelector(".grid-photos");

document.querySelectorAll(".grid-photos").forEach((item) => {
  item.addEventListener("click", (event) => {
    gridPhotos.classList.toggle("expander");
  });
});

I have tried querySelectorAll with [i] but to no avail.
Thank you for any help

A: The problem is that your variable gridPhotos is a collection of all your grid photos. So when you call .classList on it you'll get an error about it being undefined.
What you need to to is get the correct element from the event instead. event.target will return the element that was clicked so you can use that to add a class to the correct image.

document.querySelectorAll(".grid-photos").forEach((item) => {
  item.addEventListener("click", (event) => {
    event.target.classList.toggle("expander");
  });
});
.expander {
  border: 4px solid green; /* Added to highlight which one was clicked */
}

A: You wrong selector querySelector select just 1, querySelectorAll select all items example:

const gridPhotos = document.querySelectorAll(".grid-photos");

gridPhotos.forEach(function (item) {
  item.onclick = function()
  {
    this.classList.toggle("expander");
  };
});

redpajama_set_name: RedPajamaStackExchange


On Thursday, 13 September, for 24 hours only, help us to provide an opportunity for future generations of girls who wouldn't normally be able to attend St Margaret's. Girls who would thrive in the St Margaret's environment and achieve their full potential with the benefits of a St Margaret's education, going out into the world as wahine toa to live and lead.
We have a goal to raise significant funds for the St Margaret's College Foundation Scholarship Programme. For just ONE day, your gift will be quadrupled by our generous matching donors. But, here's the catch, it's all or nothing – we have to reach our goal within 24 hours or the donations will not be processed so your support, however big or small, is vital!


The Department of Budget and Management (DBM) and the House of Representatives have agreed to a "transitory cash-based system" in spending the P3.76-trillion proposed budget for next year, Malacañang confirmed Thursday.
Presidential Spokesperson Harry Roque said the DBM gave the information after a meeting with lawmakers earlier this week in Malacañang.
"Under this system, the government would have 12 months to obligate and 18 months to disburse its budget," Roque said in a statement.
"We expect the national budget to be passed on time and signed by the President before the end of the year," he said.
Roque confirmed the statement of House Majority Leader Rolando Andaya on Tuesday that Budget Secretary Benjamin Diokno had agreed to let state agencies continue with the "hybrid" budgeting for three years before adopting the cash-based system that he had defended.
Earlier, Diokno said the executive was ready for a reenacted 2018 budget if the congressmen would insist on an obligation-based budget for 2019.
The House, however, stood firm on the obligations-based system, saying application of the cash-based method would lead to budget cuts for agencies undertaking the administration's infrastructure program.


Note: this article was written on 2007-04-27, and the circumstances may probably change in the future.
I was about to write a very positive story about Kommander, a development tool from KDE. However, I think I'm only going to do so during the first lines and in the end I'm going to write a pretty long rant about it. Not because I think it deserves being bashed in public. Kommander is, IMHO, a great idea which needs a lot of technical improvements. The core idea is very good, but Kommander has many problems and bugs that need to be solved if it wants to be much more useful. I am currently using Kommander for a couple of things and fully acknowledge its power. There's also a Kommander scripts section at http://www.kde-apps.org.
Kommander is composed of two main programs. kmdr-executor is the program that runs Kommander scripts. kmdr-editor is the one that lets you create those scripts. A Kommander script is an XML file that describes something to be run. When you launch kmdr-editor, you find a tool similar to the Qt designer, if you know it, but simplified. The idea behind Kommander is that you must take into account 3 different aspects of your application. First, the editor lets you create dialogs (that is, windows) with widgets (buttons, labels, checkboxes, line edits, text edits, etc). Then, you must specify associations between events and actions. The events come from the different widgets, like a specific button being clicked. The actions are also associated to other widgets, because widgets can perform actions. In Qt, this is called signals and slots, and those are the terms Kommander uses. Finally, the core of those actions is a very simple programming language that lets you manipulate the application widgets by their name (which you set, like MyLovelyCheckBox), setting their text and/or state, perform basic operations with text strings, doing basic flow control (if, for), and run programs and scripts in any language, taking their output and manipulating it. That's what makes Kommander powerful. You can take the texts and selections in the widgets, use them as parameters to run scripts in arbitrary languages (shell, awk, perl, python, php…) and process the output of those scripts to use them in other widgets. Kommander acts as a powerful glue that binds all those actions together in a GUI.
The main problem with Kommander is its documentation and specially its handbook. The introduction is very hard to understand for programmers and non-programmers, and you don't get to see an example of what Kommander is about because the tutorials, which should appear later in the documentation, are missing. It contains a lot of philosophy that should probably be put in a different section.
The primary objective is to create as much functionality as possible without using any scripting language.
By being language neutral and allowing a Kommander dialog to be extended by using any scripting language Kommander positions itself in a unique position for wide spread adoption. Multiple script languages can be used in a single dialog and applications can be taken over by people using a different language than the original developer and gradually converting and extending it. New widgets and features can be instantly leveraged by all available languages.
We hope that Kommander begins to get the developer support and recognition required to achieve the potential it offers. Our end goal is to make Kommander useful for novice users to extend and merge their applications.
However, no novice user is going to use Kommander if it has that lack of documentation and tutorials, and if the power resides in binding together scripts in arbitrary languages, the user will need to know one or more scripting languages to do something useful, and that's not very novice-friendly.
Despite all that, I think Kommander is going the right way. I don't mind contradictions between the project goals and the project state as long as I like the project state, obviously.
I think Kommander developpers need to urgently rewrite the introduction and create an easy to follow tutorial so people will see how to create dialogs, use layouts in them, connect signals and slots and use different scripting languages, as well as the Kommander language, to do something useful. This way, us Kommander newbies could easily see what a Kommander program is supposed to look like, according to them.
The names the Kommander developpers have chosen for some components are unexplained and unfamiliar to programmers. In Kommander, words with special meanings are preceded by the @ character. For example, you have @if, @endif, @exec, @String.replace() and also widget names like @MyLovelyCheckBox. These are called specials and can refer, as you see, to reserved words, widget names, function names, etc. However, the name special isn't used in any mainstream language that I know of. Please, mail me if I'm missing some important language with specials. Also, the introduction description of them is very poor.
Widgets have two types of text associated to them. One is the widget text, which is the content of the widget. For example, a button label like "Click me" or a text you have introduced in a line edit. On the other hand, widgets can "perform actions" to react upon events, and these actions are described in a special scripting language, like I mentioned before. These scripts are called Kommander text and that name is confusing because everytime you want to talk about a widget and modifying its text using Kommander text you end up talking about text and nobody knows what you're refering to. This happens in the handbook introduction. I would have chosen another name like Kommander scripts, Kommander actions, or anything that doesn't have the word "text" in it.
The documentation is also plain wrong at some points because Kommander has changed and some things can be no longer done the way they're described in the documentation. So it's not only imcomplete, but sometimes wrong.
Signals and Slots is a little less intuitive to a new user. It is under review for how we process things in the first major release. These offer a limited event model for when a button is pushed or a widget is changed. Combined with "Population Text" it is rather powerful.
Furthermore, the usage of the population Kommander text is very confusing, and it took me a good amount of minutes to figure out what I was supposed to do with it, and let me explain the confusion in detail. Let's suppose you want to create a simple dialog with a read-only line edit (the user can't modify its contents) that displays your kernel version. The kernel version can be obtained from running uname -r. You create a dialog and place a line edit in the middle. You mark the dialog as read-only in the properties panel to the left. You then associate the widgetOpened dialog event to the line edit populate action, so that the line edit is populated with the kernel version when the application starts. How do you get and set the line edit text? The @exec special is the name of a function that runs a program and gets its output, so you need to run @exec(uname -r). Suppose you called your line edit KernelVersionEdit. Widgets have a set of properties that can be used to read or set its contents. For example, line edits, among other widgets, have a property or method called setText, which receives a text string. By invoking the following, you can achieve the intended effect: @KernelVersionEdit.setText(@exec(uname -r)). Or that was what I thought, because it turns out the population Kommander text has to contain a string or something that returns a string, which will be used to fill the widget contents, like @exec(uname -r). The other full expression won't work, because its execution won't return a string. When I tried to create my first application I thought something wasn't working, and I didn't know if it was my mistake or a program bug. I didn't know if I was right assuming that when the populate action is associated with an event, the population Kommander text was executed. I finally got it running by specifying only @exec(uname -r) as the population Kommander text, and I don't know if I had read it somewhere or if I was simply trying alternatives. I swear I don't remember, but discovering it was painful. If the handbook had a tutorial, this wouldn't have happened.
Another key component is the script widget. It's a special invisible widget that has an execute action, and you can bind it to events. You can write things to do in the default Kommander text for the script widget, then bind an event to the execute action and it will do those things. The previous example could have used a script widget in addition to the line edit. I could have written @KernelVersionEdit.setText(@exec(uname -r)) in its default Kommander text and bind the widgetOpened event to its execute action, achieving the same effect. The script widget is a key component when the action involves more than just setting some widget text. For example, in one of my tests I created a GUI for the locate command. It lets you specify a regular expression to search, then launches locate with that regular expression and sends the result to a listbox, and if you doubleclick on any entry, it will launch kfmclient exec with the selected file or directory. It's very neat, but locate can take some seconds to run, and the program appeared to have frozen, so I decided to add a status bar that contains "Searching…" while locate is being run, and after it has finished it contains "Found [x] files.", where [x] is the number of rows in the listbox (there's a listbox property to get the number, very easy). However, that group of actions need a script widget, or otherwise it can't be done. The script widget isn't mentioned in the documentation at all. Now, I ask, wouldn't it be better if the populate action for the widgets would simply run their contents, including some setText calls if the user wants to? You wouldn't have to use the script widget, and I wouldn't have hit the problem in mentioned in the previous paragraph. Maybe people don't usually hit that problem and it was just me. An issue with this suggestion is that, while the event is attached to the action of a widget, you could modify any other widget from that action. This is slightly unelegant.
The only way to evaluate arithmetic expressions is to use the @expr special, but the documentation does not mention if it's floating point or integer, or which operations are supported. I suppose the basics (+, -, *, /) are supported, but what about others? Experimentation is the only way to find out these things.
The @if special lets you execute some things if a condition is met, but it doesn't have an @else counterpart. The boolean checks you can perform aren't mentioned either. You'll have to find out trying. Not having @else may be due to the lack of a grouping character (like the curly braces in many languages). This could be solved by introducing those grouping characters or by specifying in the @else and @endif the condition of the @if block they belong to (users of CMake will recognize this approach). Some other constructions use the @endif special as terminator, eventhough they're not if blocks. Wouldn't @endfor make more sense? Or something like bourne shell, where both the beginning and the end are marked with do and done.
The usage of double quotes to indicate strings is undocumented, as well as the escape sequences. Kommander interprets everything as strings, like for example mIRC does, so instead of @Somespecial("The string parameter") you use @SomeSpecial(The string parameter). This creates unneeded problems, in my humble opinion, and leads to confusing situations. How do you indicate a single space or end of line as argument, without receiving a syntax error? The answer is using " " and "\n", quotes included, as far as I have seen.
Despite its orientation to manipulating strings and the output of programs, there's no easy way of joining two strings without spaces between them. If you have two line edits, and one of them contains Hello and the other one World, you can join them with something like @LineEdit1.text @LineEdit2.text and get Hello World, but what if you want to get HelloWorld? I use the hack of putting each one of them in one line and calling @String.remove() on that, with "\n" as the second argument.
In a couple of places in the documentation the format a string must have is mentioned using a description like key\tvalue\n. I doubt a novice user will know what \t or \n mean, and if, on top of that, you put that description in italics, the backlash may end up looking like a vertical bar, making the description even more confusing.
I haven't found a simple way of processing lines as they are received. Suppose you want to create a GUI for a program that outputs a completion percentage as it's working, and you want to use it to create a progress bar. @exec returns all the output when the program finishes, but you can't process the program output while it's working. Using @forAll doesn't solve the problem either. Is there a way to do this? If not, how can you use the progress bar widget in a useful way?
There are some bugs processing comments (lines that start with the # character), because sometimes I have commented lines of code to try a couple of alternatives and the programs have gone wild, doing weird things. These problems were solved as soon as I removed the comment line. I'm sure it was not my fault because I tried this several times, putting the comment line back again, even writting it again manually, and it was obvious the comment line was the source of the problems.
Despite all these problems, Kommander looks promising and I recommend you to experiment with it. Try not to get very frustrated when things don't work and avoid doing complex things. You'll find you are able to create very useful GUIs in a handful of minutes. You can easily use Kommander to display information coming from several programs or scripts, and create launchers for command line programs. I created a couple of GUIs for the cifras and letras programs and they work very well.
If you are going to start programming in Python and come from languages like C or C++, there are a couple of things you should know about variable names. In Python, variable names do not have the same behaviour as in C++. Part of this is clarified in the Python documentation, but I'll try to give specific examples of things that work and don't work as you may expect, and why.
When creating the reference to int named bar, both foo and bar are names for the same variable or object. If you assign a value to bar, foo will see the change. They're names for the same integer. References in C++, however, can't be modified. You can't make a reference start referencing a different object. Some people would argue that it's because there's no syntax to perform that operation. In Python, however, a reference can be modified. In fact, that's what assignments do, because all variables are references.
A new integer is created with value 1. Variable a is a reference to that object.
The same for integer value 2 and b.
The same for integer value 0 and c.
Due to the plus operator, a new integer is created with value a + b, and c is changed to refer to or point to that new object. The previous integer it was referencing (with value zero) can be discarded.
However, other data types such as lists or dictionaries are mutable, and they store references to other objects. Let's see some examples of this variables-as-references interpretation.
However, you can't modify them when they're immutable. In this example, a function receives a copy of the reference. Inside the function, this local copy is changed to refer to another object, but the original reference doesn't change.
The case above may mislead a C or C++ programmer. If some_int is a reference and you perform a += operation, you may have expected to see the integer changed after calling the function, because you may be used to the C interpretation that the += operator modifies the integer in place. However, this is similar to the c = a + b example we used previously. Inside the function, a new integer is created as the sum of some_int and 1. some_int is then changed to refer to this new integer object. However, some_int is the function's local copy of reference a, and changing its reference value won't change the reference value of a. The integer object IS NOT being modified in place. Integers are immutable.
This creates new lists in a loop. Suggestions for easier or different methods are welcome. Use the contact link if you wish.
With all these articles about the Cifras y Letras show, from time to time people seem to be hitting this website searching for C++ code that generates permutations and combinations, so this post is dedicated to every casual reader that is desperate to find out how to accomplish that task in C++. It's very easy, but it seems some people are unable to create such an algorithm, or are so limited in time that prefer to use Google instead of writting 50 lines of code.
I apologize in advance if someone doesn't like the following code, or thinks I should've used templates or object oriented design or whatever design criteria you feel a program must meet to be considered good, and I hope it's clear enough for the people I mentioned in the first paragraph. First, the code. Then, the analysis.
Let's suppose you have a set of N elements in a vector and want to find all the combinations of size M (M > 0 and M <= N). What do you need to do? Easy. Start by taking one element as the first one. Then, find a second element to the right of the first one, then a third element to the right of the second one, etc. Follow this method until you've chosen M elements. Example with elements (a, b, c), finding the combinations of two elements. The first one can be a, b or c. If it's a, the second one can be b or c (for combinations ab and ac). If it's b, the second one can only be c (forming bc) and if the first one is c there are no elements to its right to choose a second element. Hence, the combinations are ab, ac and bc. This isn't rocket science.
Any algorithm that performs this task will be valid. Mine's recursive, because I consider it easier this way. You have to search elements to the right of the previous one, and have to perform this task with M depth, so I think it calls for a recursive algorithm. Every recursive algorithm can be algorithmically transformed into an iterative algorithm, so feel free to do the conversion if you're an iteration fan.
My test program has a recursive function, a wrapper function to simplify doing the initial call, and a main program that tests the algorithm by extracting the combinations of 3 elements out of 5. I will analyze only the recursive function.
// Have we selected the requested number of elements?
// Are there enough remaining elements to be selected?
// correct, but it saves futile calls.
Sorry for the indentation as I'm trying to keep it narrow. The first function argument, elems, is a vector containing N elements. As you see, I chose characters as elements, just like in the examples above. The second argument, req_len, is the requested combination size or length (that is, M). pos is a vector of size req_len that will hold the positions or indexes of the chosen elements. The depth argument indicates how many elements we've chosen so far, that is, the recursion depth. Finally, the margin argument indicates the first position to start looking for a new element (the left "margin"). Remember we have to choose elements to the right of the last chosen one.
Simple as that, the first block checks if we've chosen enough elements and prints the elements in the chosen positions. If we wanted to store the combination instead of printing it, we could use one output argument, for example.
The second block checks if there are enough remaining elements to the right. In the example we put, when we chose c as the first element, there were no elements to its right to be chosen as the second one. This is a generalization of that test to stop as soon as possible. As the comments say, the function works if you remove it. However, it can be slower. This check can also be integrated into the loop condition in the third block, if you want.
The third and final block chooses one more element starting from the margin, iterating until the end of the vector, and recursively calls itself, indicating one more depth level, and setting the margin to one position to the right of the current chosen position.
The initial call must use depth 0 and margin 0.
// Have we selected the number of required elements?
// to the right of the last selected one.
Note how I removed the second block and used ii instead of ii + 1 as the margin argument.
// Try to select previously unused elements.
Note how we start the search at the initial position, we skip used elements, mark the current position as used and store it in the pos vector as we did previously. We only need to remember to clear the used flag after the recursive call, before selecting another element. Obviously, the used vector must have at least the same size as the elems vector and in the initial call all of them must be set to false.
Some days ago I was searching for an old CD and instead of finding what I was looking for, I found another old CD with a digital Spanish dictionary. I didn't even remember I had it, but it quickly prompted me to finish the letters program for the TV show. The dictionary was one of those typical Windows applications distributed in a CD that installs a minimum amount of data from it to your hard drive and runs from the CD itself.
I immediately had a look on the CD contents and spotted a .MDB file quite big in size. Kexi was unable to import the data, and OpenOffice.org didn't appear to give me good results opening the database either. I waited some more days until I had access to a computer with MS Office installed, and opened the file with MS Access. To my surprise, the result was similar. The database appeared to contain a single table, where each row contained a word id, a definition id and the text of the definition, but the words themselves were nowhere to be found. Furthermore, the definition text appeared to be garbage. I didn't bother to investigate, but maybe their bits were inverted, or the characters rotated like in ROT13. In any case, I lost hope and discarded finishing the program.
However, some days later, while watching TV I had the idea to run a recursive grep on the CD files just in case the words were stored in cleartext in a separate file. I didn't have much hope, but the words did turn up. They were stored in a different file, using the ISO-8859-1 charset. The file was quite big and mostly filled with space characters. Each word seemed to use a fixed chunk of 65 bytes. I ran an on-the-fly Python program directly from the Python interpreter to split the file into chunks, strip whitespace and encode its contents in UTF-8. Five minutes later I had stored the word list into a text file called palabras-utf8.txt with one word per line. That file is distributed inside letras.zip. I needed to hand-edit that file using VIM to obtain a final list of words. The work mostly involved removing accents, words that start with a bracket that seemed to indicate "unofficial" words, split alternate spellings of words into different lines and some more minor changes. The final result is stored in palabras-utf8-final.txt, also included in the archive.
As you can see, many of the lines in the final file have alternate endings for different genders, and optional suffixes that modify the word gender. A file like that one can be processed with the script build-db.py included in the archive, that will create a database of words by processing that file. This database is created using the shelve Python module (yes, I know it was a nice situation to use sqlite3 but I wanted some backwards compatibility with Python 2.4). It uses the method I mentioned in the previous Cifras y Letras post. It takes each word, sorts its letters and associates the word, maybe along with other words, with its corresponding sorted letters combination. For example, the combination aacs corresponds to the words casa (house) and saca (bag). Given 9 letters, you form the combinations of 9 letters (there's only 1), the combinations of 8 letters (there are 9), etc. You sort the letters of each combination and use them as keys to access the database, so it returns the list of words. As I explained in the previous post, this is much faster than forming every permutation and checking if it's in the dictionary. In this case, preprocessing the database and organizing it once allows us to be much more efficient when we use it. The script build-db.py creates the database this way and handles the alternative endings and word suffixes, introducing both variants in the database. If you want to use a different text file and a different database name, those can be changed in the first lines of the script.
It's worth mentioning that the database lacks gerunds and any past participles that aren't used as adjectives. These are allowed in the TV show, so don't be surprised if someone finds a longer word this way in some particular situations. Due to the lack of verb markers (in Spanish, there are may words ending in -ar, -er and -ir that aren't verbs) and the existance of irregular verbs, I can't generate gerunds and past participles automatically.
Both build-db.py and letras.py are less than 100 lines long, and some of them are comments. This gives you an idea of the game simplicity. The code and the word lists are released to the public domain.
Suspending a computer means to turn it off in a special way, so that when you power it on again it resumes what it was doing, like nothing had happened. There are two common ways of suspending a computer: suspending to RAM and suspending to disk.
Suspending to disk is the "simplest" way of suspending a computer, also called "hibernation". The operating system kernel stops what it is doing and writes the contents of the system RAM to a specific place in the hard drive. When a computer is running, the system memory contains all the information needed for it to run. It contains the kernel image, the kernel data structures that allow programs to run, the state of the programs currently running on the computer, etc. To sum up, a lot of data that represents the state of the computer at a given moment. By writing those contents to the hard drive, the operating system is writing a snapshot of the system in that moment to a safe place. After writing that snapshot, if proceeds to power off the machine in the same way it normally powers off.
There's no need for special or unusual hardware support as far as I know (please, mail me if I'm wrong). If you can power on and off normally, you should be able to suspend to disk, provided you have enough space in your hard drive to store the RAM image and your OS kernel has suspend to disk support. When the computer powers on again, it checks if there's a saved image. If there is, it restores the contens of that image to the system RAM, and continues execution at the point it left. Like if you had never turned it off. It's not that simple because there are some things that won't work after resuming. For example, if you suspend for a long time, which is usually the case, the network connections probably won't work after resuming and will need to be reestablished. In other words, the computer can deceive itself and assume it's not been powered off, but other computers will probably notice. There are some more issues. For example, when the computer boots again, it's a normal boot up to the point when the operating system kernel starts restoring the image. First comes the BIOS, then the bootloader loads the kernel and the kernel starts booting, which is when it checks if there's a saved image. But… what if you had upgraded the kernel and when it boots again, the new kernel is loaded? Or what happens if you change some hardware while the computer is suspended? Or what if you boot another operating system, maybe from a live-CD, and touch the filesystems or repartition your hard drive? A disaster. In many of these cases, as the Linux software suspend documentation says, you can "kiss your data goodbye". So be careful and always power off or reboot normally when you want to do these things. This is specially critical about kernel upgrades, which is the most common operation from those mentioned. After installing a new kernel, reboot immediatelly to load it.
That said, many Linux distributions have suspend to disk preconfigured and handle that common kernel upgrade case. When you install a new kernel, maybe a "flag file" is created somewhere and when you try to run one of the suspend-to-disk scripts, they detect the flag file and refuse to suspend. In any case, it's always a good idea to reboot after installing a new kernel. Furthermore, if you have installed it, you want to use it, don't you?
But there are more ways to do it (s2disk), and you probably need to run a couple of things before and after suspending. This is because, like I mentioned, not everything is restored properly. Most people would want to bring down the network interfaces before suspending and bring them up after resuming, etc. Also, some kernel modules and programs don't like suspending (proprietary NVIDIA kernel module maybe?), and you may also need to reload and relaunch those kernel modules and programs. For example, my Acer laptop has a winmodem that uses the snd_intel8x0m kernel module and the slmodemd daemon. They need to be reloaded, so I have to kill the daemon, unload the module, reload the module and restart the daemon when I suspend. For this reason, and because I use Slackware and need to handle all of this myself, I created a short (24 lines) suspend-to-disk shell script that automates everything, and it's the one I call if I want to suspend to disk.
If, instead of the vanilla kernel software suspend to disk you're using Suspend2, you should probably configure your hibernate script and use it, because it may be easier. Remember to read your distribution manual and see what they have done for you and how everything is set up. This way you'll know what you need to run if you want to suspend to disk.
In terms of time and power, suspend-to-disk isn't specially fast, but it's worth using it unless you can suspend to RAM. When the computer powers off, it really powers off. You may even unplug it if you want, and it won't drain the batteries in case it's a laptop computer. The time it takes to save and restore the image on disk depends on several factors, which are usually your disk speed, your CPU speed and if you're compressing or encrypting the image or not. Eventhough it sounds weird or unintuitive, it's usually faster to compress the image. This is because in modern computers, the CPU can compress the image faster than the hard drive can write it, so compressing it will use more CPU power but will take less time, because the amount of data to write will be greatly reduced. The same applies when resuming, because the CPU will be able to decompress the image faster than the hard drive will read it.
It will probably take around 10-20 seconds to power off and between 20 and 50 seconds to power on (around 35 in my case) since you press the power on button on the computer. A fast BIOS helps to boot faster, so does having a fast hard drive and a fast CPU. In general, unless your system is very well tuned and boots up very quickly, suspending to disk will benefit you and cut your boot time to one half or less. You will have to experiment and see it for yourself. Also, let's not forget that when it has finished booting, you will have everything running like it was before. The disk cache will also be in place. In other words, the restored system will be as "responsive" as it was before suspending. This is another good reason for considering suspending to disk instead of simply powering off.
In terms of power, which is important if you use a laptop, I mentioned before that the system powers off really and will not drain the battery power. But let's not forget that those 10-20 seconds in which the computer is writing the image to disk and the 20-50 seconds it takes to restore it are peaks in power usage, because the disk and probably the CPU will be working intensely. Those total 60 seconds of high power usage may use the same as 5 minutes of power being idle, or something similar, but not much more.
Suspend to RAM means to power off almost everything in the computer except for the system RAM. That way, the state of the current running system is preserved while you save power by disconnecting the CPU, the hard drive, etc. There's no need to lose time saving and restoring great amounts of data, but simply to disconnect and reconnect components. Hence, this is the fastest method. My Acer laptop can suspend to RAM in less than 10 seconds, and be restored in that same amount of time (7.5 seconds average using a stopwatch). You can think of suspend to RAM like going into standby mode.
However, suspending to RAM needs special cooperation from the computer hardware. When you resume, it's not a normal boot (if you can still call it "boot"), and there are many things that may go wrong. The most typical problems involve the graphics card not restoring properly, and you may end up with a blank or corrupted screen after resuming, eventhough the computer keyboard and mouse may still work (or may not). From the software point of view you face the same problems as when suspending to disk, that is, you'll probably want to bring down network interfaces, unload problematic modules, etc.
For these reasons, suspending to RAM does not always work. I think you can suspend to RAM using Suspend2 but I've only tried the vanilla kernel software suspend using the s2ram program from the suspend package. The name of the actual package depends on the distribution, so you better check which package contains the s2ram program and install it. The program maintainers are very optimistic and they always tell you to keep trying, because s2ram has several options to try different approaches and you may find one that works. Sometimes the program may tell you your computer is not in the whitelist and refuse to run, but you can force it to try and test several different methods, and one of them may actually work, so don't lose hope. In case you make it work with a non-whitelisted system, they ask you to report the success and the method you forced, so they can whitelist your system in future versions.
Like before, in my Slackware system I wrote a specific script for myself (23 lines), which is identical to the one that suspends to disk but replaces the 2 critical commands with one call to s2ram. It's the one I invoke when I "close" the laptop, that is, the one associated with the LID button event.
Suspending to RAM does use some power. Remember that your memory stays connected while the computer is suspended. For reference, my laptop can survive suspended for more than 12 hours when there's only half an hour of battery left. If you've got a battery that lasts for 4 or 6 hours and it's full, the computer may well survive for several days, but not many. Of course, if it's a desktop computer and/or you leave it plugged in, it can stay so for as long as you want or your electric company lets you. I haven't noticed the power on and off process having any peaks in power usage. It simply powers off to "standby" and on to normal.
As with suspending to disk, the system will be as responsive as just before suspending. Due to the low power requirements and the minimum time it takes to restore the system, suspending to RAM is usually a good alternative to leaving the system idle turned on, unless you want it to keep downloading something or completing some calculations.
Suspend to both is useful if you can get suspend to RAM to work. Before suspending, it saves a RAM image to disk (like in suspend to disk) and then tries to suspend to RAM. If there's some problem and the power is interrupted while suspended (because you run out of battery power, for example), it will restore the disk image when booting. Otherwise, it resumes like in suspend to RAM and discards the disk image. I haven't found this useful, but I'm sure many people will do in their specific situations and environments.


The search tool is designed to find specific GPOs that match specified criteria. As an alternative to using the search tool, you can also filter settings within a GPO to restrict what you see in the Group Policy Management Editor (GPME). As stated, the filter tool is per GPO, whereas the search tool is per forest or domain, so the scope of the two tools is quite different.
Within the GPME, you can filter on Administrative Template settings only. If you right-click the Administrative Templates node in the GPME, you can click Filter Options to open the Filter Options dialog box, as shown in Figure 1.
Figure 1. The Filter Options dialog box allows you to limit the number of Administrative Template settings you view within the GPME for optimized configuration of GPO settings.
The filter tool allows you to search on nearly every possible detail within the Administrative Templates settings, both Computer and User. Each element of the filter tool is described here.
Managed These are GPO settings that fall under the Policies categories for both Computer Configuration and User Configuration. These settings are volatile because they are located in a special part of the registry that is dynamic. The setting allows you to focus on GPO settings that are managed or not managed.
Configured By default, no GPO settings are configured. They appear as Not Configured in the interface. As soon as a setting is enabled, disabled, or set to anything but Not Configured, they will appear in the Configured category.
Commented All GPO settings can have a comment associated with them. These comments are excellent for tracking, documenting, and troubleshooting. Not all GPOs need to have comments, which is why it is good to have a filter that allows you to view only those settings that have a comment associated with them.
Enable Keyword Filters The keyword filter allows you to search for settings that are more general. For example, you might want to find all settings that contain the words Internet, security, or desktop. This filter can examine the Policy Setting Title, Explain Text, and Comment and allows you to specify any combination of these settings for searching.
Enable Requirements Filters The requirements filter allows you to focus on the technology that the policy setting controls, such as Microsoft Internet Explorer, as well as the version of the technology supported. The possible platforms that can be configured for the requirements filter include: options related to BITS, Internet Explorer, the Windows Server 2008 family, the Microsoft Windows Server 2003 family, the Windows 2000 family, the Windows XP family, the Windows Vista family, Windows Installer, Windows Media Player, and more.
Each section in the Filter Options dialog box has a set of operators that also must be configured. These options allow you to include or exclude GPO settings from your filter. Table 1 lists the operators available for each filter area.
Enabled Requirements Filters Include settings that match any of the selected platforms. Include settings that match all of the selected platforms.
You can use two different methods to run reports on GPOs within the GPMC. The first is a real-time view of the GPO settings that are currently configured in the GPO, which lets you view settings without having to search through the GPO for them. The second view is a slightly different view of the GPO, including not just the settings, but also the links, delegation, filtering, and so on. This view is excellent for documentation of the GPO's current state.
Expand the Group Policy Objects node.
Select the GPO for which you want to see a report.
In the details pane, click the Settings tab.
You will see the full list of settings within the GPO, for both Computer Configuration and User Configuration, as shown in Figure 2.
Figure 2. The Settings report summarizes all of the settings in the GPO, for both Computer Configuration and User Configuration.
The second report that you can run for a GPO is not as interactive as the Settings report, but it is more thorough and ideal for documentation of all GPOs.
It is a good idea to save reports for every GPO periodically, for documentation and disaster recovery of all GPOs. Because the saved reports of a GPO include all essential information about the GPO, they provide an excellent tool for troubleshooting in case of an errant setting or even complete disaster of your Group Policy infrastructure. You should print the reports and keep them in a binder in the server room for quick reference. You could also use the HTML reports on a secure intranet site that only the administrators and Help desk staff have access to for remote access to the settings in all GPOs.
Right-click the GPO for which you want to save a report, and then click Save Report. The Save GPO Report dialog box appears.
Click Browse Folders, select the location where the report will be saved, type a name for the report in the File Name box, and then select a file type (HTML or XML) from the Save As Type list.
After the report is saved, browse to the location where you saved it and double-click it to open it in Internet Explorer. HTML reports are extremely useful for routine viewing of the GPO and the settings. Figure 3 shows what a typical report includes.
Figure 3. Reports that are generated from the GPMC contain essential information about the GPO, excellent for disaster recovery or troubleshooting.
Note that the report contains almost every bit of information that you would want to document for the GPO. Table 2 lists the contents of the saved GPO report.
There is little else that you would want to document that the saved report does not provide.


text:
Q: Knitr HTML output formatting issues My plots and most tables knit to HTML fine, but certain tables with "subcategories"  have formatting issues that show HTML code instead of processed tables.
The top table is what I want but the bottom table is not formatted correctly.
Here is the code:
library(tableone)
tableone_f <- function(vars) {
  table <- CreateTableOne(vars = vars, strata = c("Gender"),
                          data = dataset) %>%
           print(printToggle = FALSE, noSpaces = TRUE)
  return(xtable(table))
}

# Pad table cells
cat("
<style>
th, td {
  padding: 2px 5px 2px 5px;
}
</style>
")

outs <- c("ISL_cor", "GMCT_mps", "IDN_lmn", "ONB_acc",
          "TWOB_acc", "ISRL_cor", "PA_Total", "Spatial",
          "Flanker")
print(tableone_f(outs), type = "html")

symptoms <- c("MHQ_Unintentional_Impacts_Category", "MHQ_Symptom_Binary")
print(tableone_f(symptoms), type = "html")

Does anyone know what is going on/how to fix this?
Data:
structure(list(Cluster = c(1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L,
3L, 3L, 3L, 4L, 4L, 4L, 4L, 5L, 6L, 6L, 6L), SubjectID_Full = c("2012-658-0101-BH",
"2012-658-0101-BH", "2012-658-0101-BH", "2012-658-0102-JB", "2012-658-0102-JB",
"2012-658-0102-JB", "2012-658-0102-JB", "2012-658-0103-SM", "2012-658-0103-SM",
"2012-658-0103-SM", "2012-658-0103-SM", "2012-658-0103-SM", "2012-658-0104-SN",
"2012-658-0104-SN", "2012-658-0104-SN", "2012-658-0104-SN", "2012-658-0105-JF",
"2012-658-0106-JR", "2012-658-0106-JR", "2012-658-0106-JR"),
    SubjectID = c("SOC0101", "SOC0101", "SOC0101", "SOC0102",
    "SOC0102", "SOC0102", "SOC0102", "SOC0103", "SOC0103", "SOC0103",
    "SOC0103", "SOC0103", "SOC0104", "SOC0104", "SOC0104", "SOC0104",
    "SOC0105", "SOC0106", "SOC0106", "SOC0106"), Visit = c(0,
    18, 24, 0, 6, 18, 24, 0, 6, 12, 24, 18, 0, 6, 18, 24, 6,
    0, 6, 18), Gender = structure(c(2L, 2L, 2L, 1L, 1L, 1L, 1L,
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("Male",
    "Female"), class = "factor"), Visit_age = c(37, 38, 39, 22,
    23, 24, 24, 20, 21, 21, 22, 22, 36, 37, 38, 38, 22, 42, 42,
    43), AHQ_YearsSimilarFreq = c(13, 13, 13, 5, 5, 5, 5, 12,
    12, 12, 12, 12, 6, 6, 6, 6, 11, 4, 4, 4), AHQ_Out_Games_MainPos = structure(c(3L,
    3L, 3L, 4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
    3L, 1L, 1L, 1L), .Label = c("Forward", "Midfield", "Defense",
    "Goaltender"), class = "factor"), AlcWeek_Category = structure(c(2L,
    2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
    2L, 1L, 1L, 1L), .Label = c("I do not drink", "Light Drinking (M:1-7, F:1-2)",
    "Mod-Heavy Drinking (M:8+, F:3+)"), class = "factor"), CigsYN = structure(c(1L,
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
    2L, 1L, 1L, 1L), .Label = c("No", "Yes"), class = "factor"),
    Concussion = structure(c(3L, 3L, 3L, 2L, 2L, 2L, 2L, 1L,
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L), .Label = c("0",
    "1", "2+"), class = "factor"), SchoolYears = c(19, 19, 19,
    16, 16, 16, 16, 15, 15, 15, 15, 15, 20, 20, 20, 20, 15, 20,
    20, 20), HeightCm = c(170, 170, 170, 182, 182, 182, 182,
    177.8, 177.8, 177.8, 177.8, 177.8, 168, 168, 168, 168, 162.56,
    164, 164, 164), WeightKg = c(63.18181, 58.63636, 60.45454,
    70.90909, 77.72727, 75.45454, 80.45454, 78.86363, 81.36363,
    80, 83.18181, 82.72727, 68.18181, 69.0909, 68.18181, 65,
    69.0909, 48.18181, 50.45454, 47.72727), BMI = c(21.86222,
    20.28939, 20.91852, 21.40716, 23.46554, 22.77941, 24.28889,
    24.94671, 25.73752, 25.30617, 26.31266, 26.16888, 24.15739,
    24.47948, 24.15739, 23.03004, 26.14529, 17.91412, 18.75912,
    17.74511), HI_LateralityQuotient = c(0.529411765, 0.529411765,
    0.529411765, 0.846153846, 0.846153846, 0.846153846, 0.846153846,
    0.888888889, 0.888888889, 0.888888889, 0.888888889, 0.888888889,
    1, 1, 1, 1, 0.8, 1, 1, 1), NeckLengthCm = c(16, 16, 16, 14,
    14, 14, 14, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15,
    15), NeckCircCm = c(35, 30, 32, 35, 34, 34, 36, 38, 39, 38,
    40, 41, 39, 24, 36, 38, 34, 30, 29, 30), HeadCircCm = c(58,
    58, 58, 56, 56, 56, 56, 57, 57, 57, 57, 57, 58, 58, 58, 58,
    55, 52, 52, 52), NeckVolumeCm = c(1559.718, 1145.915, 1303.797,
    1364.753, 1287.881, 1287.881, 1443.853, 1838.557, 1936.597,
    1838.557, 2037.183, 2140.315, 1936.597, 733.3859, 1650.118,
    1838.557, 1379.873, 1074.295, 1003.869, 1074.295), MHQ_Heading_Male_Quartile = structure(c(NA,
    NA, NA, 4L, 4L, 3L, 2L, 2L, 3L, 2L, 3L, 2L, 1L, 3L, 2L, 3L,
    NA, NA, NA, NA), .Label = c("0-6", "6.01-15", "15.01-53",
    "53.01+"), class = "factor"), AHQ_Heading_Male_Quartile = structure(c(NA,
    NA, NA, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
    NA, NA, NA, NA), .Label = c("0-435", "435.01-861", "861.01-1964",
    "1964.01+"), class = "factor"), MHQ_Heading_Female_Quartile = structure(c(1L,
    1L, 2L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
    4L, 2L, 3L, 3L), .Label = c("0-2", "2.1-7", "7.1-24", "24.1+"
    ), class = "factor"), AHQ_Heading_Female_Quartile = structure(c(1L,
    1L, 1L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
    3L, 2L, 2L, 2L), .Label = c("0-108", "108.1-430", "430.1-1278",
    "1278.1+"), class = "factor"), ISL_cor = c(27, 33, 30, 29,
    28, 28, 29, 33, 28, 32, 27, 25, 26, 23, 22, 24, 26, 31, 31,
    30), GMCT_mps = c(0.066638, 0.166589, 1.06656, 1.83315, 1.39986,
    1.366439, 1.732987, 1.89962, 1.599627, 1.76649, 1.79964,
    1.49935, 0.69993, 0.499967, 1.133031, 1.033575, 1.866542,
    1.932174, 1.866418, 1.666167), IDN_lmn = c(2.712426, 2.666696,
    2.691574, 2.60214, 2.66739, 2.666007, 2.683421, 2.64958,
    2.637634, 2.592968, 2.627395, 2.626299, 2.794555, 2.799669,
    2.883404, 2.76647, 2.668145, 2.691837, 2.711009, 2.665336
    ), ONB_acc = c(NA, 1.570796, 1.570796, NA, 1.2692, 1.188903,
    1.322056, NA, 1.393086, 1.393086, 1.322056, 1.393086, NA,
    1.322056, 1.225939, 1.2692, 1.393086, NA, 1.2692, 1.322056
    ), TWOB_acc = c(1.325818, 1.570796, 1.570796, 1.230959, 1.162158,
    1.570796, 1.325818, 1.230959, 1.395827, 1.325818, 1.273674,
    1.395827, 1.021329, 1.230959, 1.273674, 1.325818, 1.230959,
    1.273674, 1.395827, 1.570796), ISRL_cor = c(9, 10, 12, 11,
    11, 11, 10, 12, 12, 12, 11, 11, 10, 10, 9, 8, 11, 11, 12,
    12), PA_Total = c(21, 23, 24, 20, 13, 20, 21, 21, 24, 23,
    24, 21, 16, 21, 22, 23, 23, 19, 22, 22), Spatial = c(0.451184,
    0.166667, 0.083333, 0.5, 1.339256, 1.533743, 1.622678, 0.333333,
    0.166667, 0.416667, 0.333333, 0.25, 0.970857, 1.235702, 2.41257,
    1.27022, 0.686887, 1.206559, 0.436339, 1.235702), Flanker = c(206.48,
    106.09, 68.9, 155.93, 102.03, 129.46, 135.85, 89.29, 134.4,
    125.57, 104.29, 105.33, 182.3, 108.25, 92, 109.75, 93.85,
    41.9, 75.25, 16.43), MHQ_Unintentional_Impacts_Category = structure(c(3L,
    3L, 3L, 3L, 3L, 3L, 3L, 2L, 3L, 2L, 1L, 2L, 1L, 1L, 1L, 1L,
    3L, 1L, 3L, 2L), .Label = c("0", "1", "2+"), class = "factor"),
    MHQ_Symptom_Binary = structure(c(1L, 1L, 2L, 2L, 2L, 2L,
    2L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L), .Label = c("None/Mild",
    "Moderate/Severe/Very Severe"), class = "factor"), MHQ_Symptom_Binary_num = c(0,
    0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1),
    ExtensorAVG = c(NA, 40.26666, 32.03333, NA, NA, 40.1, 30.76666,
    NA, NA, 54.6, 45.86666, 37.7, NA, NA, 36.2, 48.2, NA, NA,
    NA, 21.36666), FlexorAVG = c(NA, 15.33333, 15, NA, NA, 19.66666,
    22.5, NA, NA, 30.36666, 28.93333, 31.2, NA, NA, 19.86666,
    21.56666, NA, NA, NA, 11.6), RightAVG = c(NA, 19.13333, 27.03333,
    NA, NA, 17, 19.43333, NA, NA, 21.73333, 22.66666, 24.03333,
    NA, NA, 15.06666, 19.96666, NA, NA, NA, 10.73333), LeftAVG = c(NA,
    27.4, 27.03333, NA, NA, 16.7, 20.8, NA, NA, 24.86666, 25.06666,
    29.4, NA, NA, 12.2, 19.8, NA, NA, NA, 10.96666), LateralAVG = c(NA,
    23.26666, 27.03333, NA, NA, 16.85, 20.11666, NA, NA, 23.3,
    23.86666, 26.71666, NA, NA, 13.63333, 19.88333, NA, NA, NA,
    10.85), ExtensorPeak = c(NA, 41.2, 32.8, NA, NA, 42.2, 34.5,
    NA, NA, 56.8, 51.1, 43.3, NA, NA, 37.8, 51.8, NA, NA, NA,
    22.7), FlexorPeak = c(NA, 15.9, 15.5, NA, NA, 22.4, 25.3,
    NA, NA, 34, 30.7, 32.8, NA, NA, 22, 23.6, NA, NA, NA, 12),
    RightPeak = c(NA, 20.9, 28.3, NA, NA, 19.3, 20.8, NA, NA,
    23, 24.3, 24.3, NA, NA, 16.7, 21.8, NA, NA, NA, 11.1), LeftPeak = c(NA,
    28.2, 29.5, NA, NA, 20.2, 22.4, NA, NA, 25.6, 27.4, 32.2,
    NA, NA, 13.3, 20.8, NA, NA, NA, 11.4), LateralPeak = c(NA,
    24.55, 28.9, NA, NA, 19.75, 21.6, NA, NA, 24.3, 25.85, 28.25,
    NA, NA, 15, 21.3, NA, NA, NA, 11.25), FlexExtDiff_AVG = c(NA,
    -24.93333, -17.03333, NA, NA, -20.43334, -8.26666, NA, NA,
    -24.23334, -16.93333, -6.5, NA, NA, -16.33334, -26.63334,
    NA, NA, NA, -9.76666), FlexExtDiff_Peak = c(NA, -25.3, -17.3,
    NA, NA, -19.8, -9.2, NA, NA, -22.8, -20.4, -10.5, NA, NA,
    -15.8, -28.2, NA, NA, NA, -10.7)), row.names = c(NA, -20L
), class = c("tbl_df", "tbl", "data.frame"))

A: I have figured it out- there were spaces in the string of the subcategories which resulted in weird formatting. Using str_trim from stringr resolved the issue!


Jump from the balcony and try to land in the pool in Balcony Diving, a funny online game. Watch out for the crocodile!
Use your cute Jelly Wheels and collect as many vegetables and money without dropping or losing any cargo!


These DVD's are a great instructional tool for you and your employees. Great for either beginners or seasoned pro's. All DVD's are in Spanish and English and are professionally done. Although we recommend you attend a training seminar, these are a great tool as well.
Catalog request form and request a rep to call you.


It is generally recognised that litter prevention needs an integrated approach involving education, infrastructure and enforcement.
Each year we use Keep Australia Beautiful Week to raise awareness of important environmental issues via a national communications and publicity campaign. The 'Trash My Ad' competition encourages students to create a Litter Prevention TV or Radio Commercial. Keep Australia Beautiful runs education and schools participation programs in most states and territories.
Resource recovery and litter abatement-infrastructure is a key element in the judging of the Australian Sustainable Communities Awards. Coca-Cola currently funds the Beverage Container Recycling Grants administered by Keep Australia Beautiful. Dozens of local communities across the country receive funding each year to increase the recycling of beverage containers.
In many states and territories council officers and/or police can issue littering fines. Members of the public can also get involved through the 'Dob in a Litterer' scheme. In states and territories where this scheme exists it can result in a warning letter or a fine being issued to the person responsible for the litter.


Dawn Fiona's credentials are not filled up yet.
What are the range of investments we should look out for and are advisable?
"Enough" is subjective, as I mentioned during my talk. You have to decide what makes you comfortable / able to sleep at night. If having 6 months worth of expenses stashed away makes you able to sleep well, then go for that. If you're still worried, then go for a longer period / larger amount. It's up to you! Start reading (free method, but need time and effort) or shortcut your learning journey by attending courses to learn how to invest. My advice is to go only for the courses that are under $2,000, because I'm personally not convinced of the value for those who charge higher than that cos I've seen their notes / have heard from those who paid and regretted it.
If you had $100K spare cash (with emergency fund set aside), what would you do with it?
If you need the money in the near future then yes, FDs and short-term endowment plans might be more suitable. But you also want to use the 100k to earn more money. So what about splitting it into two pots? This is what we call portfolio allocation. Have some in risk-free investments, some in low-risk investments, and the rest in mid to higher risk investments.
Should i sell my current property (landed property) to get equity cash out and downgrade? or should i hold on longer for higher capital gain? ?
Hmm I don't predict property cycles so maybe you should speak to a property agent about this instead. However, the question I would pose to you is, if you were to cash out and downgrade now, what are you going to do with that cash?
Folks told me the $20,000 I saved up in my first year of work was gonna get eroded over time if I just kept it in the bank. Lol.
How do you split expenses between you and your other half? Who pays more/less?
Different strokes for different couples. My husband and I pay our own bills and expenses by ourselves. If we go out on dates, we take turns to cover the bill. We aren't calculative about it cos that ruins romance faster than you can yell Sherlock. lol. For baby, we split expenses, although I end up paying for all the small expenses like baby bibs, clothes, toys, etc. So actually I frankly think baby's stuff is 80% paid by me lor. Haha.
Would you agree that increasing your income is a lot more effective than just saving more or cutting down on expenses?
Yes for sure! The difference is which one you have control over. You don't always get to decide that your income WILL rise (some people work very hard and keep upgrading themselves but also still no income raise), but you can have control over how much you wanna save and cut down on. Both should go hand in hand.
Are you in the Smaller House camp or Early Retirement camp?
Haha when I was single and even after I got married, I was in the smaller house camp. Now with a kid, I realised I prefer a bigger space because I want to have a teaching (and later study) room for him. Plus my husband is the only son so we need to have our in-laws stay with us to look after them. And I'm the only one supporting my father. Therefore now we need a minimum of a 5-room flat, if not bigger. 1 room for us, 1 room for kid, 1 room for in-laws, and 1 room for my dad. But I'm also in early retirement camp (hopefully before 45). So how to answer your question ah, I also dunno lol.


text:
Interactive video lesson plan for: Correlative conjunctions | The parts of speech | Grammar | Khan Academy
Correlative conjunctions work in pairs to connect parts of sentences. David teaches you how they do it!
Practice this yourself on Khan Academy right now: https://www.khanacademy.org/humanities/grammar/partsofspeech/conjunctions/e/correlative-conjuntions?utm_source=YT&utm_medium=Desc&utm_campaign=grammar
Watch the next lesson: https://www.khanacademy.org/humanities/grammar/partsofspeech/conjunctions/v/beginning-sentences-with-conjunctions-the-conjunction-the-parts-of-speech-grammar?utm_source=YT&utm_medium=Desc&utm_campaign=grammar
Missed the previous lesson? https://www.khanacademy.org/humanities/grammar/partsofspeech/conjunctions/v/subordinating-conjunctions?utm_source=YT&utm_medium=Desc&utm_campaign=grammar
Grammar on Khan Academy: Grammar is the collection of rules and conventions that make languages go. This section is about Standard American English, but there's something here for everyone.
About Khan Academy: Khan Academy offers practice exercises, instructional videos, and a personalized learning dashboard that empower learners to study at their own pace in and outside of the classroom. We tackle math, science, computer programming, history, art history, economics, and more. Our math missions guide learners from kindergarten to calculus using state-of-the-art, adaptive technology that identifies strengths and learning gaps. We've also partnered with institutions like NASA, The Museum of Modern Art, The California Academy of Sciences, and MIT to offer specialized content.
For free. For everyone. Forever. #YouCanLearnAnything
Subscribe to Khan Academy's Grammar channel: https://www.youtube.com/channel/UC8JT97hQjMVWeO0B-x8eVxQ?sub_confirmation=1
Subscribe to Khan Academy: https://www.youtube.com/subscription_center?add_user=khanacademy"

redpajama_set_name: RedPajamaCommonCrawl


text:
This is Vicky'S
VanIves
Childhood friends Stuart Ramage (Singer, Songwriter, guitarist) and Roan Ballantine (Producer, pianist, DJ and songwriter) make up the multi-genre-bending duo of VanIves. Hailing from south-west Scotland.
They first met as ten year olds lobbying to have a skate park built in Galloway.
The songs are written in a unique manner, by sampling family VHS tapes and building soundscapes and songs around the memories attached to those moments. The music is a cathartic nod to the past and a springboard to a bright future. Sonically they've managed to create a seamless analogue and digital blend, glued together with impassioned soaring vocals, routed in hip-hop influenced production.
When they were seventeen years old they helped build sound systems and held bass music nights in forests. The culture of bass heavy dance music has influenced and inspired their creative direction.
Roan is a self taught producer, and Suzuki pianist, releasing bass heavy music under various alias' currently a design student at world famous Glasgow School of Art.
Stuart is a multi instrumentalist ,virtuoso guitarist specialising in songwriting with open tunings. He recently graduated from University of West of Scotland with an honours degree in Commercial Music. He has toured the world as a session musician as well as writing and producing music for other artists. Made a name for himself at songwriting camps in Nashville.
Debut single Positive is out now via Berlin label Vielen Dank Records.


Each version of Snort brings new features, but they aren't always immediately obvious or clearly documented. Using the release candidate of Snort 2.8.2 as an example, learn how to interpret Snort's release notes, README file and the snort.conf configuration file to locate new Snort features to deploy at customer sites.
Service provider takeaway: Service providers will learn about new features in Snort 2.8.2 that they can deploy at customer sites.
The last time we looked at new Snort options occurred with Snort 2.8.0, released in late September 2007. Since then, Snort 2.8.0.1, 2.8.0.2 and 2.8.1 have been published. At the time of writing, Snort 2.8.2-8-rc1 is the latest version, although release candidate versions should generally not be deployed in production environments. However, RC editions do provide a look at the newest elements of Snort available to the general public. This Snort Report provides an overview of some of the new features in the latest editions of Snort while explaining how to identify these new features.
* Updates to build with new versions of libPCRE.
for normal & IPv6 enabled builds.
* Correct perfmonitor statistic calculation for pattern matcher percentage.
This edition was mainly a bug-fix release. You won't find any changes in the snort.conf file if comparing versions 2.8.0 and 2.8.0.1.
Snort 2.8.0.2 appears to add a feature, but this isn't likely going to appear in the snort.conf file.
describing services running on various hosts on the network.
Eliminates reliance on port-based rules.
* Support for GRE encapsulation for both IPv4 & IPv6.
* Support for IP over IP tunneling for both IPv4 & IPv6.
* SSL preprocessor to allow ability to not inspect encrypted traffic.
* Ability to read multiple PCAPs from the command line.
* Support for new CVS rule detection options.
* Update to HTTP Inspect to identify overly long HTTP header fields.
conflicts for certain Operating systems.
* Updates to address issues seen on various Sparc platforms.
Snort 2.8.1 is the first edition with release notes that show "New Additions." You can expect some of these features to appear in the snort.conf shipped with 2.8.1 and/or at the command line. The "Improvements" section will not likely be reflected in the snort.conf file.
processing for common rule options.
Finally, Snort 2.8.2 offers "Performance Improvements," but these are likely not to appear in the snort.conf file.
Why all of the attention to the snort.conf file in the previous section? I've found that scrutinizing this file is one of the fastest ways to identify new features and bring them to life on the network. In the following example I use the diff utility to show changes between the snort.conf shipped with Snort 2.8.0 and that appearing with 2.8.2.rc1.
< # preallocated fragment eats ~1550 bytes.
> # go as high as 64K so beware!
> # inspection of it.
> # inspection of the data on the connection is made.
> # encrypted traffic on.
This output displays five sets of changes. Items preceded by < appear in the old file (Snort 2.8.0). Items preceded by > appear in the new file (Snort 2.8.2rc1).
The first change reflects the new version.
In order to understand the second change, we need to look at the context for the difference. We could have acquired this using diff, but I preferred to limit the amount of lines reproduced here. If we inspect the snort.conf for 2.8.2rc1, we see the new material falls in the prealloc_frags option of the Frag3 IP defragmentation preprocessor. It's a warning concerning the "[m]aximum number of individual fragments that may be processed at once."
The third change has altered the default value for prealloc_frags from 262144 to a much lower 65536. This is a safer value, but under the right conditions increasing the value is acceptable.
The fourth change involves an option for the Stream4 stateful inspection mechanism. It shows that port 514 has been added to the ports considered to be "default." Many readers will now be using Stream5, so this change will not affect you.
The final change is one of the more interesting aspects of Snort since 2.8.0. As of 2.8.1, Snort can be told to stop inspecting SSL-encrypted traffic on specified ports, after the SSL Dynamic Preprocessor (SSLPP) identifies a flow as SSL-encrypted. This feature helps Snort run faster, since it can ignore encrypted traffic after the SSL handshake is completed.
# above to use Stream5.
It's not immediately clear just where "port both 443" should be added in order to help SSLPP. This situation leads us to the third place we should look for information on new Snort features -- the README files.
appear more than once in a given config.
If you decide not to perform stream reassembly for traffic destined to be inspected by SSLPP, an attacker could introduce layer 4 fragmentation to evade SSLPP.
I hope this article has shown you a new feature introduced since Snort 2.8.0, and more importantly, shown you how to find and understand new capabilities as they are introduced.
Note: Thanks to beenph in #snort on irc.freenode.net for help with the ports client default option.


We invite you to engage your mind and body as you join us for a morning of yoga in the gallery with Yogadown Studios. Surrounded by the beauty of exhibiting artist, Samantha Charette's work, you will be guided through a deep and gentle practice as your creative mind awakens with each posture. If available, bring a yoga mat, blanket or shawl, and a water bottle. Yoga mats available for those without.
Focus this session: Beginner-friendly Hatha yoga | seated, laying, and standing postures with a touch of balancing.