text:
From the use of hot and cold packs to new forms of narcotics, James Roush, professor of clinical sciences, is studying ways to lessen pain after surgery and improve care for small animals, particularly dogs. He is working with the clinical patients who come to the College of Veterinary Medicine's Veterinary Health Center.
Because humans and dogs experience some diseases in similar ways, his research may improve how doctors and physicians understand human health, too.
"Several of our projects have human applications, particularly one involving intra-articular prolotherapy," Roush said.
Here's a closer look at three of Roush's current projects:
* A recent project with Ralph Millard, former Veterinary Health Center resident, focuses on ways that hot packing and cold packing affect tissue temperature in beagles and beagle-sized dogs after surgery.
After surgery in both humans and dogs it is common to put a cold pack or hot pack on tissue to prevent and reduce swelling. How long the pack is used and what type of cold or hot pack is used depends on the type of injury and surgery. Roush said that no studies have looked at how deep in the tissue the packs affect temperature and how long the packs must be applied so that the tissue reaches a desired temperature.
The researchers studied the temperature and tissue depth that hot and cold packing affected and the time it took to reach that temperature.
"We found that you don't really need to cold pack anything longer than 10 minutes because there is not a great change in temperature after that," Roush said.
When tissue is cold packed, it will stay cold for a while after the ice pack is removed. But when tissue is hot packed and the pack is removed, the tissue temperature will return to normal much more quickly. Leaving the hot or cold pack on the tissue longer than 10 minutes will extend the time that the tissue stays at the same hot or cold temperature, Roush said. There just will not be a great change in temperature after 10 minutes.
The same technique of hot and cold packing after surgery is also used in humans. Although more research in humans is needed, Roush said there is a strong possibility that a similar 10-minute time frame for hot and cold packing may apply to humans as well.
The research appears in two upcoming publications in the Journal of Veterinary Research.
* For another project, Roush and Matt Sherwood, Veterinary Health Center resident, are using a mat system to study lameness and osteoarthritis in dogs. When dogs step on the mat, it measures the pressure in their step.
The mat system is a useful clinical tool for evaluating and developing treatment of lameness, Roush said. Roush and Sherwood are using the mat for measuring lameness and determining in which leg the lameness is worse.
"We've designed the study to help improve osteoarthritis treatment," Roush said. "We will also use it to measure clinical patients when they come in for regular checkups. We can measure their recovery and a variety of other aspects: how they respond to nonsteroidal anti-inflammatories, how they respond to narcotics or how they respond to a surgical procedure that is designed to take that pressure off the joint."
* Roush also is working with Marian Benitez, Veterinary Health Center resident, on an analgesic pharmacology study. Rose McMurphy, professor of clinical sciences, and Butch KuKanich, associate professor of anatomy and physiology, are also involved.
The researchers are studying the effectiveness of a painkiller used to treat dogs and researching potential alternatives to the drug. The same drug also is commonly used to treat pain in humans.
"To achieve the drug's effect, the dosage in dogs is much higher than in people," Roush said. "It also may not be a very good analgesic in dogs. We want to see if there is an alternative that requires smaller doses and does not have not as much of a discrepancy for patients."
For advertising and promotion on HealthNewsDigest.com please contact Mike McCurdy: _EMAIL_ or _PHONE_
HealthNewsDigest.com is syndicated worldwide, to thousands of journalists in all media, and health-related websites. _URL_
Top of Page
Us | Job Listings
| Help | Site
Map | About Us
Advertising Information | HND Press Release | Submit Information | Disclaimer


Are the change events of a transaction always guaranteed to appear in the order in which they are executed?
Are the change events of a transaction always guaranteed to appear in the order in which they are executed? For example, if two concurrent transactions are being executed, the below sequence shows the order of the operations being maintained even if the transactions themselves are not grouped together.
txn1 - operation1
txn1 - operation2
txn2 - operation1
txn1 - operation3
txn1 - operation4
txn2 - operation2
txn2 - operation3
txn2 - operation4
Is there a possibility of the change events appearing as:
txn1 - operation1
txn1 - operation2
txn2 - operation1
txn1 - operation4
txn1 - operation3
txn2 - operation4
txn2 - operation3
txn2 - operation2
@Kiruphasankaran_Nataraj
In MongoDB, the order of operations within a single transaction is guaranteed to be maintained. However, the order of operations across multiple concurrent transactions is not guaranteed to be maintained. In other words, if two transactions are executed concurrently, the order in which the change events for each transaction appear in the database may not match the order in which the operations were executed. This is because MongoDB uses a multi-version concurrency control (MVCC) model which allows multiple transactions to execute concurrently and make changes to the same data, and the resulting order of operations may depend on the specific timing and order of those changes.
1 Like


Law Enforcement Officers
CAST team members including officer talking with a child. Children pictured are child actors
Law enforcement is often the first responder to a complaint of child abuse. The case typically begins with a uniformed officer assessing the seriousness of a child's disclosure and immediate safety needs, and providing the proper resources (medical, social services, shelter, etc.) to the child. Once the officer has established the probability of a criminal offense, an investigator is assigned to coordinate the criminal investigation and begin the CAST process.
Key to the success of CAST is open communication with each member of the team and a clear understanding of each team member's function and responsibilities. Law enforcement meets regularly with the rest of the CAST team to exchange information and to explore solutions to problems. The CAST process continues to evolve to meet the needs of the child. It is law enforcement's responsibility to:
 - Ensure the child's immediate physical, mental health and safety needs.
 - Conduct criminal investigations, including interviews with victims, witnesses, and suspects.
 - Coordinate with all members of the CAST team.
 - File criminal cases with the District Attorney's office and/or petition the juvenile court for jurisdiction.


text:
Strainmeter Helps NASA Identify Continental Drift
- Created: Saturday, 01 December 2007
TEGAM _PHONE_ ratio transformer
The EarthScope Project is an undertaking funded by the National Science Foundation in partnership with the United States Geological Survey and NASA to characterize the geology of North America, including continental drift caused by earthquake faults. Capturing the slow movement (which in some areas happens over centuries) can be done by measuring strain. Capturing strain (the deformation caused by stress) also can highlight areas that are moving faster along a fault relative to other areas.
The strainmeter is put into service by drilling a borehole into the earth. Although initial accuracy is important, it is critical that the ratio transformer have extremely low drift. Once the GTSM device is embedded in the rock, it is there for the life of the device. Component drift would produce unacceptable results, and the ratio transformer assures there will be insignificant drift for that component over the life of the project. Combined with GPS data that measures the overall motion of the earth surface, the equipment can distinguish regions of energy accumulations from regions of simple deformations.
The EarthScope project has funded a significant increase in the number of strainmeter sites. As the density of strain measurements grows, changes in earthquake models are likely as a result of better information, particularly over long time frames.
For Free Info Click Here

source: openbmb/Ultra-FineWeb


text:
Price competition between store brands and national brands: determinants of price elasticities for cheese products
Store brands and national brands (Kraft) account for eighty percent of the retail cheese market in the United States. The goal of this study is to estimate brand demand elasticities and reveal factors that determine price elasticities for store and national brands of cheese; more importantly, to provide implications for marketing managers. Data used in this study are store-level scanner data provided by a national supermarket chain in the Columbus, Ohio metropolitan area (CMA). Based on product forms, cheese is classified into five product categories: shredded, sliced, chunk, snack, and miscellaneous. Six stores are included in the data set and these stores are selected from geographic areas that can be described as being populated by higherand lower-income consumers. A two-stage modeling process is utilized in this study. First, brand demand elasticities are estimated with respect to various store locations, cheese product forms, and package sizes. Second, a meta-analysis is applied to reveal the factors that determine price elasticities of store and national brands. This process involves regressing the estimated price elasticities of store and national brands on the determinants of elasticities: store location, market share, product form, and package size. Both the nonlinear Almost Ideal Demand System (AIDS) and linear approximation AIDS (LA/AIDS) are utilized in the first stage to estimate brand demand elasticities. Given five product categories and two income groups, a total of 20 demand systems are estimated for the two AIDS models. Before estimating the two versions of AIDS model, the unit-root test was initially conducted to confirm stationarity of the time-series variables. This study provides a rich knowledge base for retail store managers and manufacturers to use for maximizing sales and profits. Results from the first stage demand systems indicate that compared with store brands, consumers are very sensitive to national brands price changes for most cheese items even in higher-income areas. The second stage meta-analysis shows that store location, market share, product form, and package size affect price elasticities for store and national brands; moreover, the estimated demand elasticities between AIDS and LA/AIDS models are not significantly different.
School:The Ohio State University
School Location:USA - Ohio
Source Type:Master's Thesis
Keywords:store brands national cheese
Date of Publication:01/01/2004


text:
Preparing the San Francisco Sewer System for the Compound Challenge of Climate Change Induced Rainfall, Extreme Tides, and Sea Level Rise
David M. Wood Vice President, Water, AECOM
CWEA Engineering & Research Committee
Friday, April 29th 7:o0am to 8:30am
Santa Clara Convention Center
Climate change may induce increases in precipitation magnitude, storm surge, and/or sea level rise, resulting in increased Pacific Ocean and San Francisco Bay water levels. These three variables, individually or in combination, may cause stormwater systems to not perform up to levels of service standard.
Larger magnitude rainfall, in concert with higher Pacific Ocean and San Francisco Bay water levels, has the potential to constrain the ability of systems to discharge through outfalls, resulting in upstream flooding. Furthermore, building or increasing the presence of shoreline flood protection structures along the City's periphery to protect near shore areas against rising water levels may exacerbate the severity of inland flooding.

source: m-a-p/FineFineWeb


text:
Accident Reconstruction Biomechanics
Following an accident, a detailed analysis of the situation can be provided to clients to help them make informed decisions on what truly happened, and which scenario was most likely to have occurred. This can be done by one of Envista's biomechanical engineers, who have investigated numerous accidents and provided expert testimony for decades.
Examples of typical investigations include:
- Ladder incidents and falls
- Personal injury (trip and fall)
- Playground equipment failures
- Handicap accessible ramps or equipment incidents
Building code and industry standard requirements
Aside from the accident alone, other factors can come into play to complete an accident investigation, including building code and industry standard reviews. This is especially important for worker's comp or regulatory health and safety incidents. An Envista biomechanical engineer can evaluate:
- Building code requirements for stairs, railings, interior or exterior steps and doors
- Ladder testing that adheres to local standards (based on where the accident occurred, e.g. CSA, OSHA, etc.)
- Walking surfaces and floors to ensure they adhere to industry and local standards
Vehicle collision and personal injury
When addressing personal injuries, both medical and personal information will be required to help with our analysis. Our biomechanical engineer will analyze injury mechanisms, probable causation and seatbelt effectiveness no matter the speed of the vehicle.


text:
How to Store Portable Solar Generator for Winter? Are you planning to store your portable solar generator for the winter? Proper storage is essential to ensure your generator remains in top working condition when you need it again. Here's a comprehensive guide on how to store your portable solar generator for winter.
How to Store Portable Solar Generator for Winter?
The days are getting shorter, and the cold weather is settling in – it's time to put away your portable solar generator for the winter. Proper storage is essential to ensure your generator remains in good condition, ready to provide you with reliable power when you need it. In this article, we'll cover the essential steps to prepare and store your portable solar generator for the winter months, as well as tips for periodic maintenance and reassembly. Let's get started!
Why Store Your Portable Solar Generator Properly?
Storing your generator correctly has a few key benefits:
- Extend its lifespan – Proper storage helps to prevent damage to the generator's components, ensuring that it continues to function efficiently for years to come.
- Maintain efficiency – A well-maintained solar generator will work at peak efficiency, providing you with the maximum amount of power when you need it.
Preparing Your Portable Solar Generator for Storage
Follow these steps to get your generator ready for storage:
Before storing your portable solar generator for the winter, ensure you clean it thoroughly. The generator accumulates dirt and dust over time, which can affect its performance. Clean the generator's exterior using a damp cloth, and make sure to remove any grime that may have accumulated in the ventilation holes. You can also use a small brush to get rid of any debris that may have accumulated on the panels.
2. Battery maintenance
Check the battery for any signs of swelling, leaking, or corrosion. If you notice any issues, replace the battery before storing the generator. Additionally, fully charge the battery to prevent it from discharging during storage.
The battery is the most crucial component of your portable solar generator. It's essential to ensure the battery is fully charged before storing the generator. A fully charged battery prevents the generator's internal components from corroding. To charge your battery, connect your solar panels and let the generator charge until it reaches full capacity.
3. Inspecting for damage
Inspect the generator, solar panels, and any cables or connections for signs of wear or damage. Repair or replace any damaged components as needed.
Selecting the Right Storage Space
Keep these factors in mind when choosing a storage location:
- Temperature considerations – A cool, dry location with a stable temperature between 50°F and 80°F (10°C and 27°C) is ideal. Extreme temperatures can damage the battery and other components.
- Humidity considerations – Choose a storage area with low humidity to prevent corrosion and damage to the generator's electrical components.
- Safety precautions – Store the generator away from any potential sources of heat or open flames to prevent accidental fires. Also, Portable solar generators are valuable items that are often targeted by thieves. It's important to take precautions against theft when storing your generator for the winter. Store your generator in a secure location, such as a locked garage or shed. You can also use a security system or camera to monitor the area where you store your generator.
Proper Storage Techniques
Use these techniques to keep your generator safe during storage:
1. Disassembling the generator
Detach any solar panels, cables, or other accessories and store them separately to prevent damage. After charging your battery, disconnect the solar panels from the generator. Solar panels generate electricity even when the generator is not in use. If you leave the solar panels connected, they will continue charging the battery, which can cause it to overcharge and damage the battery.
2. Wrapping and protecting components
Wrap the generator and its components in protective materials such as bubble wrap or a soft cloth to prevent scratches or dents.
3. Storing the generator off the ground
Place the generator on a sturdy shelf or pallet, elevated off the ground. This will protect it from moisture and potential water damage. Storing your generator in a safe position prevents damage from falls or accidents. Avoid placing heavy objects on top of the generator or storing it in an area where it's likely to get knocked over. Store the generator in an upright position, and make sure it's stable and secure.
Periodic Maintenance During Winter
Even while in storage, it's essential to perform some routine checks:
- Checking the battery – Every few weeks, check the battery's charge level and top it up as needed. A well-maintained battery will last longer and perform better when it's time to use the generator again.
- Inspecting for pests – Pests like rodents can cause damage to your generator by chewing on wires or nesting inside the unit. Regularly inspect the storage area for any signs of pests and take action if needed.
Preparing for Use After Winter
When winter ends, and it's time to use your generator again, follow these steps:
1. Reassembling the generator
Carefully reconnect any solar panels, cables, and accessories you removed during storage. Make sure all connections are secure and in good condition.
2. Testing the generator
Before relying on your generator for power, run a test to ensure it's working correctly. Fully charge the battery, then connect a small appliance or device to confirm that the generator is providing power as expected.
Proper storage of your portable solar generator during winter is essential for maintaining its efficiency and prolonging its lifespan. By following these steps, you can ensure that your generator will be ready to provide you with reliable power when you need it most. Remember to clean, maintain the battery, and select a suitable storage location. Also, don't forget to perform periodic maintenance checks during the winter months and test the generator before using it again.
- Can I use my portable solar generator during winter? Yes, you can use your generator during winter, but keep in mind that shorter daylight hours and lower sun angles may reduce the efficiency of the solar panels.
- How often should I check the battery during winter storage? It's a good idea to check the battery's charge level every few weeks and top it up as needed to maintain its health.
- Do I need a specific type of battery for cold weather? Some batteries, like lithium-ion batteries, perform better in cold temperatures compared to lead-acid batteries. If you live in a particularly cold region, it may be worth considering a generator with a lithium-ion battery.
- Can I store my portable solar generator outdoors during winter? While some generators are designed to withstand harsh weather conditions, it's generally better to store your generator indoors in a cool, dry, and stable environment to protect it from extreme temperatures and moisture.
- How can I increase the efficiency of my solar generator during winter? You can optimize solar panel efficiency during winter by clearing snow from the panels, positioning them to receive maximum sunlight, and using a solar panel tracking system to follow the sun's movement.


text:
Mesoscale Analysis of Hydraulics
This open access book presents a series of complicated hydraulic phenomena and related mechanism of high-speed flows in head-head dam. According to the basic hydraulic theory, detailed experiments and numerical simulations, microscopic scale analysis on cavitation bubbles, air bubbles, turbulent eddy vortices and sand grains are examined systemically. These investigations on microscopic fluid mechanics, including cavitation erosion, aeration protection, air–water flow, energy dissipation and river-bed scouring, allow a deep understanding of hydraulics in high-head dams. This book provides reference for designers and researchers in hydraulic engineering, environment engineering and fluid mechanics.
KeywordsGeoengineering, Foundations, Hydraulics; Civil Engineering; Mechanical Engineering; Hydraulic Engineering; Hydraulics; High-head Dam; Cavitation Erosion; Aeration Protection; Air-water Flow; Energy Dissipation; Scouring; Sediment Transport; Open Access; Meteorology & climatology; Geochemistry; Civil engineering, surveying & building
Publication date and place2021
Meteorology & climatology
Civil engineering, surveying & building


text: In my last article, I wrote about an app called DrainGuard that can help you monitor your battery usage in standby mode; still on that battery power tangent, how about a screen that recycles light energy well enough to charge the phone? Engineers at UCLA have developed a process for harvesting and recycling the light energy of LCDs in electronic devices. By equipping a LCD with their photovoltaic polarizers, the device can convert ambient light, sunlight, and its own backlight into usable electricity. The UCLA team explains that currently a device's backlight is responsible for consuming around 80 to 90 percent of the battery and in the current design of LCDs, as much as 75 percent of light is simply lost. The polarizing organic photovoltaic cell can potentially harvest that 75 percent back into usable electricity. Essentially, as long as you have a light source, your phone may stay charged forever. The UCLA team, as well as the rest of us, hope to see technology manufacturers utilize this concept with future products.


next up previous
Next: Combining the Models Up: Overview of the Algorithm Previous: POS Sequence Model
The Phrase Break Model
The phrase break model is trained by examining the database again, but this time ignoring the POS information and only examining junctures. A n-gram of order N is constructed which represents the probability of different sequences of junctures. Using JNi-1 to represent the the previous sequence of N junctures, we have:
P(ji | JNi-1) = P(ji | ji-1, ji-2, ji-3,...,ji-N+1) (3)
Alan W Black


text:
Targets not preserved in saved games
When the game is saved in any Doom engine game, monster and missile targets are not registered in the save game file, so any monsters which were active at the time of saving the game become dormant upon loading the game again. However, their location and angle when the game was saved is preserved.
Demonstrating the effect
Here is one way to see the anomalous behavior:
- Start a new game of Doom II (MAP01) on I'm too young to die.
- When the program loads, you will be looking at two troopers with their backs to you. Ignore them for now; instead, walk west along the short corridor until you reach the balcony.
- Fire a bullet. Two grunting sounds will now indicate that you have attracted the troopers' attention.
- Save the game.
- Load the game you just saved.
- (Optional) Stand still for a minute or two and listen. One would expect to hear the breathing noise made by zombies as they walk around, but all is quiet.
- Carefully move back along the corridor to the starting point, keeping your eye on the opening to the north. As you move into each trooper's line of sight, one of two things will happen:
- If he is facing you, he will become active and start moving again.
- If he is not facing you, you will see him standing still.
So, even though the troopers woke up in step 3, they "fell asleep" during step 5.
Some distinguishable effects become evident because of the bug. The target of an incomplete arch-vile attack, for example, is not preserved in a saved game because of the bug. This means loading a saved game that includes such a situation will render the arch-vile attack harmless apart from the flame animation on the arch-vile's ex-target, which is displayed all the way through (as the corresponding flame thing had been spawned there as an effect of the attack). Similarly, the target of a revenant's missile is not stored in the save game data. Therefore, the missiles will no longer follow anything after it is restored.
The cause of this effect can be found in the Doom source code in p_saveg.c, in the functions P_ArchiveThinkers and P_UnarchiveThinkers.
In the Doom source code, the mobj_t structure is used to represent game objects such as monsters. Monster targets are stored in these structures as a field named target, which is a pointer to another mobj_t that the monster is currently targeting.
The Doom engine saves games by directly writing the raw structures used in memory to disk. When reloading saved games, pointers such as the target field are no longer valid (as the layout of structures within memory is different). When loading a game, the P_UnarchiveThinkers function deliberately sets target on all map objects to NULL in order to avoid crashes due to accessing invalid areas of memory. A null target indicates that a monster has no current target, causing active monsters to return to sleep.
A number of source ports have fixed the save game exploit, producing save game files with monsters that will continue to hound their previous target upon reloading the saved game. It is also possible to reconstruct infighting targets from standard Doom savegames by treating the stored mobj_t pointers as unique identifiers and analyzing their mutual relationships to determine which monster used to be which thinker. Mocha Doom uses this approach to reconstruct full target relationships from standard Doom savegames.


text:
Phosphates play an essential role in our living systems. Therefore, it is important to have simple and effective methods to detect and monitor the level of phosphates in complex samples. In this study, a facile switch-on fluorescence sensing method is developed for the detection of phosphates. The sensing probes are composed of Gd3+ and riboflavin-5′-phosphate (RFMP), which are hard acid and hard base, respectively. Gd3+ and RFMP can strongly bind via chelation once mixed. RFMP emits bright green fluorescence under ultraviolet (UV) light illumination. However, its fluorescence is quenched in the presence of Gd3+, presumably due to aggregation caused quenching. In the presence of phosphates, the fluorescence derived from RFMP on the Gd3+-RFMP can be restored owing to the competitive binding of phosphates with Gd3+ on the Gd3+-RFMP conjugates to release RFMP. In this study, we demonstrate the feasibility of using the developed sensing method to determine the level of phosphates from real world samples such as drinking water and fetal bovine serum under the illumination of a UV lamp (λmax = 365 nm) simply with the naked eye. The lowest distinguishable concentration of using our detection method towards adenosine triphosphate and pyrophosphate with the naked eye is ∼1 μM. Furthermore, when fluorescence spectroscopy is used as a detection tool, the limit of detection has further reduced to ∼611 nM. The feasibility of using the developed sensing probes combined with fluorescence spectroscopy for quantitative analysis of phosphates in real samples is also demonstrated in this study.
- Riboflavin-5′-phosphate (RFMP)
- Sensing probes


text:
Oxygen – ATP Models Every Chronic Diseases
I expect that many eyes will roll at the title of this article. I anticipate many knowing smiles from other readers who are familiar with my oxygen models of various diseases. They might chuckle and say we knew it was coming, considering how many oxygen models of chronic diseases this Dr. Ali has put forth.
Let us consider a thought experiment. There is one factor that is crucial for functions and survival of cells in all body organs. Next there is one nutrient that is crucial for maintaining the regular and ample supply of that factor. Wouldn't it follow that if the regular and ample supply of that factor was seriously compromised, it would put in jeopardy the functions and survival of cells in all organs of the body?
Here are the two fundamental scientific facts of human biology: (1) ATP is the energy substance without which cells cannot function and survive; and (2) oxygen is the nutrient which assures regular and ample supply of ATP. This, in simplest words, is the Oxygen Model of Every Chronic Disease.
Challenge to the Oxygen – ATP Models of Chronic Diseases
Chronic Disease are broadly classified as infectious, inflammatory, autoimmune, nutritional, environmental, and genetic. How can ATP be considered as fundamental to the causation of all these diseases.. I cite here just two examples of how ATP plays essential roles in all chronic diseases other than just being a source of energy:
- ATP serves myriad roles in health and disease in calcium signaling
- ATP regulates crucial functions of immune cells, such as hunter-immune cells called phagoctyes.
As for chronic genetic disease, even a cursory study of their pathology and clinical manifestations makes it clear that infectious, inflammatory, autoimmune, nutritional, and environmental factors play crucial roles their as well.
Evidence for the Oxygen Model of Every Chronic Disease
In a companion article posted on _URL_, I reproduce abstracts of two important papers that firmly established the scientific facts I cite above to provide evidence for ATP roles other than serving as source of energy.
Links to Relevant Articles


text:
Why would I see a Psychologist?
Managing your mental health and well being is part of a holistic health approach and helps to build knowledge, coping skills and enhance self-management of life challenges.
Psychological support can assist in dealing with change, life stressors, family/relationship issues and career directions support.
Services including vocational assessment and career counselling, support with depression, post-natal depression, anxiety, stress, intellectual assessment, dealing with health issues, psychological pain management and cancer support.
Paulette Gayton is an independently practicing Psychologist working within Canning Healthcare. Patients can self-refer or may be referred by their General Practitioner.


that can be improved @rolandleth.
]]>
_URL_ Optionals, flatMap and you 2018-10-11T14:33 2018-10-11T14:33 Roland Leth _URL_ Say we have a UILabel where we want to display a birthdate with a full format, and an API from where we get a String? with iso8601 format. One of the ways to do this would be:
let dateFromAPI: String?
// [...]
let dateFormatter = DateFormatter.shared // 1
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"
if let dateString = dateFromAPI, // 2
 let date = dateFormatter.date(from: dateString) { // 3
 dateFormatter.dateFormat = nil
 dateFormatter.dateStyle = .full
 dateLabel.text = dateFormatter.string(from: date) // 4
}
DateFormatters are expensive to create, so we either create it here once, or use a shared one (1), we then check to see if we have a date from our API (2), then check if we can transform it to a date (3), then finally we can assign it to our dateLabel.text (4).
What about flatMap?
let dateFromAPI: String?
// [...]
let dateFormatter = DateFormatter.shared
dateLabel.text = dateFromAPI
 .flatMap { // 1
 dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"
 return dateFormatter.date(from: $0) // 2
 }
 .flatMap { // 3
 dateFormatter.dateFormat = nil
 dateFormatter.dateStyle = .full
 return dateFormatter.string(from: $0) // 4
 }
If dateFromAPI is not nil, the first flatMap closure will be called (1), where we transform the String to a Date (2), which if it's not nil (3), the second flatMap closure is called, where we transform the date intro a String (4), which will be assigned to dateLabel.text.
I'm a bit torn on which one is more readable, but other in other scenarios, using the latter might be preferable.
]]>
_URL_ Goalee 2018-10-08T11:00 2018-10-08T11:00 Roland Leth _URL_ Yesterday we released Goalee, an app that helps you not lose sight of your life's goals. The main idea behind the app is that all the annoyances, conflicts or so-called problems we face in our everyday lives pale in comparison with our true goals in life.
The issue I faced, as many others, is that I tend to lose track of what I desire most, exactly because of problems here and there. One approach is to start writing down your goals on a sheet of paper, which I did and it worked; for a while, because I eventually started overlooking said sheet of paper.
I then tried using to-do apps, or habit tracking apps for this purpose. But this isn't something to be checked off, something to record progress of, nor a habit to build; it's a mindset change, if you will. So I ended up building Goalee to add long/mid-term goals and remind myself about them on a daily/weekly basis.
Start your company one day? Become rich? Settle down? Become famous? Whatever it is, don't lose focus; don't forget what you desire most; or it will end up forgotten in the sea of daily struggles and it's not worth it.
Hope you never forget your destination, but also enjoy the journey!
Below you can find some promo codes (all gone):
]]>
_URL_ Handling the Next button automatically 2018-09-24T10:59 2018-09-24T10:59 Roland Leth _URL_ Entering text in multiple text fields is such a common pattern — everywhere, not just iOS — there should be a way to easily navigate from on field to the next, preferably the "correct" one. Sadly, iOS doesn't offer this feature, but let's see how we could accomplish this ourselves.
First, a quick recap on what we need:
 - See the Next button if there are any fields after the current one; preferably just ones that are still empty.
 - Tapping the Next button takes us to the correct field.
 - See the Return button if there are no more fields after the current one; preferably taking empty ones into consideration.
 - Tapping the Return button resigns the current responder.
 - Everything should work automatically, no matter the view and no matter how many fields there are.
 - Everything should probably be encapsulated in a protocol.
Cool, let's dive in and start with the protocol. What would we need here?
 - A list of text fields (1).
 - A method that handles the text fields' editing begin, to display the correct button (2).
 - A method that handles the text fields' editing end/return press, to perform the correct action (3).
protocol NextTextFieldHandler {
 var textFields: [UITextField] { get } // 1
 func setupReturnKeyType(for textField: UITextField) // 2
 func handleReturnKeyTapped(on textField: UITextField) // 3
}
The textFields property (1) can either hold all the fields on a view, or just the ones we're interested in navigating through — the protocol doesn't care about this, it's our job to decide what is needed, when adhering to the protocol. The two functions are used to cover our other two needs (2, 3).
extension NextTextFieldHandler {
 private var _textFields: [UITextField] {
 return textFields.filter { !$0.isHidden && $0.alpha != 0 && $0.isEnabled } // 1
 }
}
We could add some safety measures, in case we're not careful, which would also act as a convenience: these conditions will have to be written over and over, so we could filter out the hidden fields and the disabled ones automatically (1).
But, as stated above, the protocol shouldn't care about what goes in textFields; for whatever reason, we might want to include a disabled text field and there would be no way to do that. If you do know for sure the project has no weird scenarios, you can add the above property and use that instead of textFields.
Next, we need a way to extract all the fields after the current one:
extension NextTextFieldHandler {
 private func fields(after textField: UITextField) -> ArraySlice<UITextField> {
 let textFields = self.textFields // 1
 guard let currentIndex = textFields.index(of: textField) else { return [] } // 2
 return textFields.suffix(from: min(currentIndex + 1, textFields.endIndex - 1)) // 3
 }
}
We first save the array in a local constant for a slight boost of efficiency (1), since the textFields property might be a computed one. At a handful of text fields this boost is negligible, but it's still a good practice to not go through computed properties — especially when iterating — unless we actually need the property to be recalculated over and over, which we don't need.
We then find the index of the text field passed in, or bail out if we can't find it. Lastly, we return an ArraySlice with all the text fields starting with the one after the current.
Why use a slice? Because it keeps the original indices. So, for example, if we have [field1, field2, field3, field4] and we do a slice starting with index 2, we'd get [field3, field4], but each element would have the following indices: [2, 3]. We'll see in just a bit why this is needed.
One last thing before we move to the two functions: a simple helper to check if there are any empty fields in the above slice:
extension NextTextFieldHandler {
 private func emptyFieldsExist(after textField: UITextField) -> Bool {
 return fields(after: textField)
 .filter { $0.text?.isEmpty != false }
 .isEmpty == false
 }
}
It only takes the fields after the current, filters the one that have text in them and checks if the result is empty.
Finally, we can start implementing:
extension NextTextFieldHandler {
 func setupReturnKeyType(for textField: UITextField) {
 let textFields = self.textFields // 1
 guard let currentIndex = textFields.index(of: textField) else { return } // 2
 let emptyFieldsExistAfterCurrent = emptyFieldsExist(after: textField)
 if currentIndex < textFields.end


PhpStorm 2021.1 Help
Code Editing
Use the Code Editing page of the Settings/Preferences dialog to configure the general code editing options.
ItemDescription
Highlight on Caret Movement
Matched braceSelect this checkbox to have PhpStorm highlight pairs of opening/closing braces when you position the caret right before the opening or right after the closing one. It also works for HTML and XML tags.
Current scopeSelect this checkbox to have PhpStorm highlight the available scope for the code typed in the current caret location.
Usages of element at caretSelect this checkbox to have PhpStorm highlight all usages of the element at which the caret is currently positioned.
In the PHP context, PhpStorm automatically highlights extended and implemented methods, import statements, exit points, the places where exceptions are thrown, and loop statements. Highlighting is invoked when you place the caret at an extends, implements, use, use trait, return, try, catch, @throws, break, or continue keyword.
Symbols' usages are highlighted with regard to their scope. For example, highlighting for @throws is not applied inside nested classes and functions.
Refactorings
Specify refactoring options
 - In the editor: select this option to enable the in-place refactoring mode for PHP.
 In the in-place mode, you specify all or most of the information necessary for the refactoring just by typing it, right in the editor. All the affected code fragments are highlighted and change as you type. If appropriate, additional refactoring options are selected in corresponding option boxes.
 The in-place refactoring mode is available for the following refactorings:
 - In modal dialogs: select this option if you want to use the refactoring dialogs when you refactor code.
Preselect current symbol name for Rename refactoring
If this checkbox is selected, the old name of a symbol is selected in the editor or in the Rename dialog when the Rename refactoring is invoked for that symbol.
Preselect
If the checkbox is cleared, the symbol to be renamed is not selected.
Show inline dialog for local variablesSelect this checkbox if you want to display a confirmation dialog for the "Inline local variable" refactoring.
Error Highlighting
Error stripe mark min height (pixels)In this field, specify the minimum size of the error and warning stripes.
Autoreparse delay (ms)In this field, specify the time period after which PhpStorm starts reparsing the entered text.
The 'Next Error' action goes through
 - The problems with the highest priority: select this option to have PhpStorm pass through the highest priority problems only (for example, errors), when executing Navigate | Next/Previous Highlighted Error command F2/ Shift+F2.
 - All problems: select this opiton to have PhpStorm pass through all the existing problems (for example, errors and warnings) sequentially.
Quick Documentation
Show quick documentation on mouse moveSelect this checkbox to show quick documentation for the symbol when you move the mouse pointer over it. The quick documentation popup appears after the delay time specified in the Tooltip delay field.
Editor tooltips
Tooltip delayUse this option to specify the delay for a tooltip appearance.
Last modified: 01 July 2021


text:
New scam alert technology detects malicious links and warns users during conversations on WhatsApp, Facebook Messenger, Telegram and Discord
BUCHAREST, Romania & SANTA CLARA, California, November 02, 2022–(BUSINESS WIRE)–Bitdefender, a global leader in cybersecurity, today unveiled the first real-time chat protection features for mobile instant messaging apps. Bitdefender Chat Protection immediately alerts users if malicious links are received or sent during live sessions on the world's most popular chat apps, including WhatsApp, Facebook Messenger, Telegram and Discord. A true industry innovation, the new features help protect users against the increase in cybercriminal activity targeting mobile devices.
Chat Protection is integrated with Bitdefender Mobile Security for Android via Bitdefender Scam Alert technology, used by consumers around the world to monitor, detect and stop link-based attacks distributed through messaging apps, notifications and SMS. Chat Protection continuously monitors chat sessions, alerting users to suspicious links that may attempt to steal financial data, credentials, and other sensitive information.
When malicious links are detected during chat sessions, the user receives a warning along with information about the associated risks and a suggested course of action. If the warnings are ignored, the built-in web protection technologies prevent the user from navigating to the malicious web page.
Over two billion people use WhatsApp and over one billion use Facebook Messenger worldwide. At the same time, malware and scams sent via instant messaging apps and text messages remain one of the top threats to mobile users in 2022. According to the Bitdefender Consumer Threat Landscape Report 2021, spam and domains untrusted together account for 85% of detected malicious URLs.
"Mobile threats continue to rise and cybercriminals have evolved beyond email phishing attacks to include popular SMS (smishing) and instant messaging apps," says Ciprian Istrate, Senior Vice President of Operations, Consumer Solutions Group at Bitdefender. "With the new features in Bitdefender Mobile Security for Android, users can rest easy and chat safe knowing they have robust, real-time protection against malware, malicious links and online scams. their Android devices."
Key Features and Benefits
Bitdefender Mobile Security for Android with Chat Protection customers benefit from:
Preventive alert for financial and data loss risks — When users receive a suspicious link in messaging apps, notifications or text messages, they are notified to prevent accessing or sharing the link.
Enhanced protection for friends and family — If a potentially dangerous link is inadvertently shared, users have the option of recalling or deleting the message.
Sophisticated social engineering detection — Phishing attempts that rely on human curiosity, urgency, and spoofing are recognized and flagged by Bitdefender, giving users an extra layer of protection.
Bitdefender Mobile Security for Android with real-time chat protection for WhatsApp, Facebook Messenger, Telegram and Discord is now available for existing and new customers. For more information or to purchase, visit bitdefender.com or Google Play Store.
Bitdefender delivers cybersecurity solutions with industry-leading security efficiency, performance, and ease of use to businesses and consumers. Guided by the vision of being the world's most trusted cybersecurity solutions provider, Bitdefender is committed to defending organizations and individuals around the world against cyberattacks in order to transform and improve their digital experience. For more information, visit _URL_.
See the source version on businesswire.com: _URL_


text:
Question: "What does it mean that God came from Teman (Habakkuk 3:3)?"
Answer: Habakkuk 3 consists of a hymn of praise to God. Verse 3 begins a section that says, "God came from Teman, and the Holy One from Mount Paran." What exactly does this mean? What is the significance of God's coming from Teman?
When Habakkuk states, "God came from Teman," he speaks of God as appearing out of the East; that is, He is shining over His people like the rising sun. God breaks the darkness and initiates a new day. Teman was a city or region in southern Edom, to the east of Israel (Genesis 36:11, 15, 34, 42; 1 Chronicles 1:36, 45, 53; Jeremiah 49:7; Ezekiel 25:13; Amos 1:12; Obadiah 1:9). Teman was also the home of one of Job's friends (Job 22:1; 42:7, 9). Likewise, Mount Paran, a mountain opposite of Teman (Deuteronomy 33:2-4), was also east of Israel (Genesis 21:21).
The next verses in Habakkuk 3 emphasize this theme: "His glory covered the heavens and his praise filled the earth. His splendor was like the sunrise" (verses 3b-4). Here we are told explicitly that God's coming from Teman is like the rising of the sun.
The "splendor" referred to in verse 3 is from the Hebrew word hod, associated with kingly authority (Numbers 27:20; 1 Chronicles 29:25). In this context, God's splendor is His glory as the sovereign King, reigning over all creation and for all time.
The language in Habakkuk 3 is strikingly similar to God's appearance at Mount Sinai. At the end of Deuteronomy, Moses blesses the Israelites one final time: "The LORD came from Sinai and dawned from Seir upon us; he shone forth from Mount Paran; he came from the ten thousands of holy ones, with flaming fire at his right hand" (Deuteronomy 33:2). Habakkuk's use of similar phrases connects his song of praise with Moses' blessing. Habakkuk praises God's sovereign power and ability to provide a "second exodus" for His people—not from Egypt but from Babylon.
Habakkuk 3:3 marks a shift in Habakkuk's hymn from request to praise. He notes God's power in bringing the Jewish people out of Egypt and into the Promised Land. Because the Lord had accomplished this great work in the past, Habakkuk was confident He would deliver His people from Babylon and bring them back to their homeland once again. After the darkness of captivity, God would be the sunrise of freedom and hope.
© Copyright 2002-2013 Got Questions Ministries.

source: HuggingFaceFW/fineweb-edu


text:
August 2009 / Volume 61 / Issue 8|
Hit it again, harder
By Dr. LaRoux K. Gillespie
Courtesy of Progressive Technologies Shot peening can produce longer part life.
When finishing parts, shops may want to hit them with their best shot. While commercial shot peening equipment looks and is used like the small abrasive blasting machines most shops use to clean, remove slag, scale and corrosion, or provide texture on parts, the process has other purposes: to significantly improve part performance and life.
In the process, metallic, glass or ceramic shot impacts a surface to plastically deform it. Essentially, each particle functions as a tiny ball-peen hammer. A peened surface spreads plastically, changing its mechanical properties.
Shot peening is widely used on highly stressed parts to remove detrimental tensile surface stresses and replace them with compressive stresses that resist operating forces and cyclic stresses. It is one of the easiest, least expensive and safest part finishing processes, and accommodates almost any part geometry and work material.
With proper peening, heavily stressed parts can withstand higher cyclic stresses, reducing the potential for fatigue fracture and extending part life. In turn, the higher fatigue strength may allow specifications of slightly lighter parts, which saves material and transportation costs for conventional parts and reduces jet fuel consumption in aircraft applications.
Repeated cycles of twisting, bending or flexing a part cause fatigue failures if loads are too high. Fatigue cracks originate from surface flaws, but peening closes them; in some instances, it actually welds them together, thus eliminating them as immediate sources of cracks and failures.Shot Peening Applications
The most common users of shot peening are producers of automotive transmission gears, highly stressed coil and leaf springs, welded joints and turbine blades. Peening is particularly useful on turbine blades because they operate continuously under large centrifugal forces that try to tear the blades apart. Chemical plants use peening to reduce stress-corrosion cracking in piping and vessels subject to stress corrosion. Fastener makers use it to reduce fretting corrosion. Shot peening is also used on aluminum die-cast transmission housings and gearboxes to close pores, preventing lubricant loss through the porous walls.
Shot peening effectiveness depends upon several factors. Longer peening time increases surface hardness and compressive stresses—up to a point. Shot size, shape, density, hardness and velocity are major factors in how the shot impacts the surface and in the effects of the peening process. Distance of the nozzle from the part affects particle velocity at impact.
Courtesy of Electronics
The impact of shot size and velocity that each particle delivers to the part is expressed by the equation E=1/2mv2, where E is the energy produced when an individual shot particle hits, m is the mass (weight) of the shot particle, and v is the velocity at which it hits the part. Most of that energy stretches the metal at the point of impact beyond its elastic limit so the part stores the energy of the impact as plastic deformation at and just below the part surface. That plastic deformation causes compressive stresses.
Aerospace Materials Specification 2431 describes seven types of peening media: cast iron shot, cast steel shot, carbon and stainless steel cut wire, peening balls, glass shot and ceramic shot. Shot media must be as hard or harder than the workpiece. Peening needs smooth-edged (normally almost round) particles to provide uniform plastic deformation.
Cast steel shot varies in hardness from 45 to 52 HRC, so it is used for parts softer than 45 HRC (a 55 to 62 HRC version of cast shot is also available). Carbon steel cut wire lasts longer than cast materials, so it is more economical in many instances. Stainless steel cut wire is used where carbon steel would leave corrosion-causing particles.
Typical shot blasting media comes in standard sizes (Table 1). Peening balls vary in size from 1⁄8 " to ½ ". Cut steel wire shot is defined by cut wire numbers from 20 to 62, with a CW20 corresponding to a 0.020 "-dia. wire, each about 0.020 " long. Glass and ceramic beads are chemically inert and use different SAE, Mil Spec and company size numbering systems. Glass beads are available from 0.0015 " to 0.0661 " in diameter. The smaller sizes allow the shot to reach into small crevices and root sections. Ceramic shot ranges from 0.008 " to 0.046 " in diameter and lasts longer than glass. Detailed information about glass beads is available on the Media Blast & Abrasive Inc. Web site: _URL_
After shot has been used once, it begins to break down into smaller particles. Because used shot is not of uniform size, it must be continuously sieved to remove undersized particles.Shot Blasting Equipment
Tyler Cotton, president of Blast Abrade Inc., Elyria, Ohio, said small, simple shot blasting equipment costs about $30,000, while a larger, more automated machine can cost up to $250,000. Heavy-duty, large-scale, high-production units may cost several million dollars. All machines need special screening classifiers and air-wash separators to remove undersize media and dust from the shot operating mix.
The cost of shot media varies. The least expensive is glass-bead shot, which costs less than 40 cents/lb. Cast steel shot typically sells for 35 to 45 cents/lb., depending on the size grade and order quantity. Hard cast steel shot may have a process and price premium of 6 to10 percent. Carbon steel cut wire shot costs about $1.50/lb., while stainless steel cut wire shot costs about $3.50/lb.Table 1: Cast steel shot sizes and equivalent cut wire shot sizes.
Shot peening machines can process from five to 500 parts per hour, depending upon required coverage, part size and part geometry. Shops typically charge between $100 and $300 per hour for standard shot peening services. Specialized machines for peening parts, such as aircraft landing gear components, have rates up to $2,000 per hour.
There are two main types of peening machines: those that throw shot using compressed air and those that sling shot with a centrifugal wheel. The compressed air design allows users to move the nozzles to cover different areas of the part or to apply different levels of impact to different areas. The nozzles can be directed manually, by hard automation or by CNC. Some specifications essentially prevent manual adjustments because hand placement does not ensure consistent control.
Parts are presented to the peening media via several approaches. They include a slack belt that tumbles the parts like a barrel, parts fixtured on a rotating table, hung from spinning hangers like parts to be painted on an overhead line and parts lying on a continuous mesh belt. For low-volume processes, operators in heavy gloves can manually position parts under a stream of shot media.Measurement and Control
There are several ways to measure and control peening. To measure peening intensity, one side of a sample Almen strip is blasted at the same conditions used on the part. The strip will curve in one direction as a result of stress changes at the surface caused by the peening. The degree of curvature provides a relative value of the blasting intensity. The Almen strip process is cheap, simple and provides both visual and quantitative information. Users test variations of peening on an Almen sample until they believe they have a combination that works.
The standard Almen sample is made from SAE 1070 cold-rolled spring steel tempered to 44 to 50 HRC and hot pressed to remove residual stresses. Using a steel like 1070 provides users with a clear understanding of process effects, as opposed to part effects. A similar specimen can then be made of the material in question to compare process effects. Separate analysis must be made on actual parts to determine if the objective was reached, but the samples save time and money and allow easy comparisons.
To measure hard-to-reach areas, a fluorescent tracer lacquer can be applied; when the area has been peened, the lacquer will be fully removed and its presence or absence readily detected by ultraviolet, or black, light.
To meet peening specifications, shot size and material, shot flow rate, Almen sample results and part position must be controlled. Adhering to process requirements is not difficult and most shop personnel can be quickly trained to provide consistent results.
Shot peening does imbed minute particles in the workpiece. This is usually not an issue, but can be.
Peening roughens most surfaces. This may be an advantage for some gears because the small pockets will hold oil better then slick surfaces. It is not an advantage for most parts and must be planned for. Fine-particle shot peening, a variation on the process, provides a much smoother surface than conventional peening. For example, Mitsubishi researcher A. Inoue tested an unpeened 7050-T7451 aircraft aluminum part with a surface finish of 0.2µm Ra. Conventional shot peening roughened the surface to 4.6 µm Ra while fine particle shot peening produced a 0.9µm Ra surface finish while increasing the residual compressive stress from 103 to 174 MPa. Vibratory finishing after peening removes the peaks of the indentations, generally without affecting the compressive stresses that peening induces.
Shot peening typically deforms thin samples unless both sides can be processed to prevent that deformation.
Four keys to successful use of shot peening include:
- Know exactly what the customer or application needs,
- Closely define the process


text:
Caribbean Water Science Center
PUERTO RICO PROJECTS
USGS IN YOUR STATE
USGS Water Science Centers are located in each state.
Hydrology and Water Quality of the Levittown Lake, Toa Baja, Puerto Rico
Project Number: 2516-E5900
Figure 1. Location of the Levittown Lake in Toa Baja, Puerto Rico, about five miles west of the Bahía de San Juan
Levittown Lake is surrounded by dense populated areas to the north, east, and south, with an extensive vegetated buffer zone that extends by about 6 kilometers west of the lake (fig. 2). The lake is about 5 meters in depth and because of the man-made nature it has a presumably a flat bottom with little relief. The actual lacustrine system is composed of three basic identifiable components: the lake's main water body, the inlet/outlet channel that connects with the sea, and a runoff channel that receives the majority of the urban runoff generated by rainfall.
The lake is connected to the Atlantic Ocean by a 1.6-kilometer channel and is surrounded by mangroves and tidal swamps (fig. 1). Although initially intended to be a draining system, the lake may have turned into a functional aquatic ecosystem with an effective trophic chain. With its inlet/outlet channel connecting the lake to the ocean, the Levittown Lake may be operating as a typical coastal lagoon exporting tons of organic matter to the sea supporting the food chain and removing tons of carbon dioxide from the atmosphere. Therefore, the Levittown Lake could have become an integral part of the nearby coastal resources and an important ecological oasis and carbon dioxide filter in the middle of a heavily developed and populated zone.
As designed, the Levittown Lake receives urban runoff from developed areas in order to contain the waters and drain them out of the system to avoid flooding of private property. This runoff however is suspected to be contaminated and affecting nearby housing units. Neighboring people have reported noxious conditions and foul odors that affect the quality of life of many families. In addition to the possible human hazard, noxious conditions could be negatively impacting the aquatic ecosystem since the Levittown Lake has become a habitat for many fish and bird species.
Runoff from the Levittown Lake basin is presumed to be contributing with sewage from possible sewer mains and septic tanks overflow, as well as contaminants like metals and oils derived from surrounding ground transportation infrastructure, and urban wastes dumped directly into the lake. During periods of high runoff events, high nutrient loads could enter the lake which can be deleterious to the lake's ecological health and impair the homeostatic capacity of the semi-enclosed coastal resource. In addition, flood tides could be contributing pollutants derived from the nearby Río Hondo and Río Bayamón through the runoff channel (fig. 3).
Figure 3. Location of the Levittown's inlet/outlet and runoff channels.
Although the Levittown Lake could be an important coastal resource in the middle of development, local and Federal authorities, there are no documented scientific data to characterize, manage, and regulate the resource. Therefore, the need to establish the water quality baseline data is necessary.
The objective of this study is to obtain baseline data of the physical, chemical, biological, and bacteriological conditions of the Levittown Lake to define its present characteristics and provide to the stakeholders of the resource a holistic perspective of the area's hydrology and ecological conditions.
The proposed study will encompass the Levittown Lake's main water body, the inlet/outlet, and the runoff channels. Data collection will include monthly measurements of physical, chemical, biological, and bacteriological parameters to define seasonal variability during one year. The study will also include two diel studies to determine community productivity rates, diurnal variation of selected water-quality characteristics, water interchange of the lagoon with the ocean through the outlet channel. The study is proposed to be conducted between October 2009 and September 2011, for a total of two natural years.
Strategy and Approach
The study will include the following field activities:
Table 1 summarizes the physical, biochemical, biological, and chemical parameters to be obtain at sampling stations in the lake. The proposed physical parameters, water quality, nutrients, primary productivity, phytoplankton, sediment, and tidal station locations at Levittown Lake are shown on fig. 4.
This study will provide updated information on the hydrology, morphology, water quality, and biological characteristics of Levittown Lake, and how these interact and affect the aquatic ecosystem. The data will provide stakeholders with a broad overview and understanding of natural processes, which can be used to more effectively manage and monitor the Levittown Lake's watershed and coastal surrounding areas, to protect the reserve and promote habitat utilization.


a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
GetByteContext
Definition: bytestream.h:33
bfi_decode_close
static av_cold int bfi_decode_close(AVCodecContext *avctx)
Definition: bfi.c:171
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:325
AVPacket::data
uint8_t * data
Definition: packet.h:374
FFCodec
Definition: codec_internal.h:119
BFIContext::pal
uint32_t pal[256]
Definition: bfi.c:38
init
static int init
Definition: av_tx.c:47
bytestream2_skip
static av_always_inline void bytestream2_skip(GetByteContext *g, unsigned int size)
Definition: bytestream.h:168
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:123
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:180
av_cold
#define av_cold
Definition: attributes.h:90
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:500
BFIContext
Definition: bfi.c:35
FF_CODEC_DECODE_CB
#define FF_CODEC_DECODE_CB(func)
Definition: codec_internal.h:279
g
const char * g
Definition: vf_curves.c:117
decode.h
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:264
ff_bfi_decoder
const FFCodec ff_bfi_decoder
Definition: bfi.c:178
AV_PICTURE_TYPE_I
@ AV_PICTURE_TYPE_I
Intra.
Definition: avutil.h:274
bytestream2_get_buffer
static av_always_inline unsigned int bytestream2_get_buffer(GetByteContext *g, uint8_t *dst, unsigned int size)
Definition: bytestream.h:267
bytestream2_get_bytes_left
static av_always_inline int bytestream2_get_bytes_left(GetByteContext *g)
Definition: bytestream.h:158
BFIContext::avctx
AVCodecContext * avctx
Definition: bfi.c:36
ff_get_buffer
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
Definition: decode.c:1450
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
AVPacket::size
int size
Definition: packet.h:375
codec_internal.h
shift
static int shift(int a, int b)
Definition: bonk.c:260
for
for(k=2;k<=8;++k)
Definition: h264pred_template.c:425
bfi_decode_init
static av_cold int bfi_decode_init(AVCodecContext *avctx)
Definition: bfi.c:41
height
#define height
BFIContext::dst
uint8_t * dst
Definition: bfi.c:37
offset
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
Definition: writing_filters.txt:86
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:269
code
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some it can consider them to be part of the FIFO and delay acknowledging a status change accordingly Example code
Definition: filter_design.txt:178
AVCodecContext::extradata
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
Definition: avcodec.h:499
common.h
av_mallocz
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
Definition: mem.c:264
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:211
AVCodecContext::height
int height
Definition: avcodec.h:571
AVCodecContext::pix_fmt
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition: avcodec.h:608
avcodec.h
AV_PIX_FMT_PAL8
@ AV_PIX_FMT_PAL8
8 bits with AV_PIX_FMT_RGB32 palette
Definition: pixfmt.h:77
av_uninit
#define av_uninit(x)
Definition: attributes.h:154
ret
ret
Definition: filter_design.txt:187
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:264
U
#define U(x)
Definition: vpx_arith.h:37
AVCodecContext
main external API structure.
Definition: avcodec.h:398
AV_CODEC_ID_BFI
@ AV_CODEC_ID_BFI
Definition: codec_id.h:169
frame_end
static void frame_end(MpegEncContext *s)
Definition: mpegvideo_enc.c:1605
AV_PICTURE_TYPE_P
@ AV_PICTURE_TYPE_P
Predicted.
Definition: avutil.h:275
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
AVCodecContext::frame_number
int frame_number
Frame counter, set by libavcodec.
Definition: avcodec.h:1046
AVPacket
This structure stores compressed data.
Definition: packet.h:351
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:425
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:34
src
INIT_CLIP pixel * src
Definition: h264pred_template.c:418
AVCodecContext::width
int width
picture width / height.
Definition: avcodec.h:571
bytestream.h
bytestream2_init
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
Definition: bytestream.h:137
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
bfi_decode_frame
static int bfi_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *avpkt)
Definition: bfi.c:51


text:
Using a pseudo-random sequence to encode the transmitted waveform can significantly improve the working efficiency and depth of detection of electromagnetic exploration. The selection of parameters of pseudo-random sequence plays an important role in correlation identification and noise suppression. A discrete cycle correlation identification method for extracting the earth impulse response is proposed. It can suppress the distortion in the early stage of the excitation field and the glitches of the cross correlation function by traditional method. This effectively improves the accuracy of correlation identification. The influence of the order and the cycles of m-series pseudo-random coding on its autocorrelation properties is studied. The numerical results show that, with the increase of the order of m-sequence, the maximum out-of-phase periodic autocorrelation function decreases rapidly. Therefore, it is very beneficial to achieve synchronization. The limited-cycle m-sequences have good autocorrelation properties. As the period of the m-sequence increases and the width of the symbol decreases, the overall autocorrelation becomes closer to the impact function. The discussion of the influence of symbol width and period of m-sequence on its frequency bandwidth and power spectral density shows that the narrower the symbol width, the wider its occupied band. The longer the period, the smaller the power spectral line spacing. The abilities of m-sequence to suppress DC (Direct-current) interference, Schumann frequency noise, and sine-wave noise are analyzed. Numerical results show that the m-sequence has excellent ability to suppress DC interference and Schumann frequency noise. However, for high-order harmonic noise, the correlation identification error appears severe oscillation in the middle and late stages of the impulse response. It indicates that the ability of m-sequence to suppress high-frequency sinusoidal noise is deteriorated. In practical applications, the parameters of the transmitted waveform should be reasonably selected in combination with factors including transmitter performance, hardware noise, and ambient noise level to achieve the best identification effect.
This is an open access article distributed under the Creative Commons Attribution License
which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited


Forgotten Realms Wiki
Advertisement
Forgotten Realms Wiki
A phase spider was a magical beast akin to a predacious version of the ethereal filcher. Phase spiders were monstrous arachnid-kin that dwelt within the Ethereal Plane. They made quick forays into the natural world to snatch an unlucky creature to feed upon. Those stolen by phase spiders were never seen again and were regarded as unsolved disappearances.[3]
Description[]
The phase spider resembled a giant, two-eyed, spindly-legged spider with the same dark green and white coloration of an ethereal filcher (though it was a bit more blue than green).[3]
Combat[]
While the filcher transported between the Ethereal Plane and the Material Plane for the purpose of stealing, the phase spider did this for the purpose of hunting. It looked for a likely spot in the Ethereal Plane, and then teleported (its form of teleportation was known as "phasing," hence the name) to the Material Plane, presumably ambushing travelers it expected to be there, biting and killing them, and then quickly retreating back to the Ethereal Plane.[3]
Behavior[]
They could not speak. They were regarded as neutral in alignment.[3]
History[]
In the Year of Lightning Storms, 1374 DR, a small group of drow arachnomancers took over one of ancient Illefarn ruins, interestingly enough, located in the deep jungles of Samarach of the Chultan Peninsula. Even though their goal remained a mystery, they brought a pack of phase spiders with them and kept the deadly creatures in the top levels of the ruined structure.[6]
Appendix[]
Appearances[]
Adventures
Dungeon #45, "An Artist's Errand"Dungeon #128, "The Fireplace Level"Pool of Radiance: Attack on Myth Drannor
Video Games
Curse of the Azure Bonds • Baldur's Gate • Icewind DaleIcewind Dale: Trials of the Luremaster • Neverwinter Nights • Neverwinter Nights 2 • Neverwinter Nights 2: Storm of Zehir • NeverwinterNeverwinter: Fury of the Feywild • Baldur's Gate III
Card Games
Dragonfire (Shadows Over Dragonspear Castle)
Gallery[]
External links[]
References[]
Connections[]
True Spiders
Natural spiders: BladeBloodwebBristleBudbackDaughter of LolthDireDoomspinnerGargantuanGee'aantuGiant (Giant FlyingGiant Water)Huge (DeathjumpWolf spiderWatchspider)IceRoaveSpittingSubterranean (FlyingHairySword)TarantulaVelsharess Orbb
Magical spiders: BloodsilkElectricGlassGazeGoblinPet of KalistesSpellgauntSteeder
Planar spiders: Demonweb terrorFireMyrlocharPhaseShadowTombVortex
True Arachnids Considered Spiderkind
Advertisement


text:
Senior secondary education is designed to prepare students for initial entry into the workforce, for vocational education and training and higher education studies. It is undertaken in Years 11 and 12.
There are two key senior secondary education accrediting bodies in Victoria, the Victorian Curriculum and Assessment Authority (VCAA), and the International Baccalaureate (IB).
The VCAA accredits the two Victorian senior secondary qualifications, the Victorian Certificate of Education (VCE) and the Victorian Certificate of Applied Learning (VCAL).
The IB accredits the International Baccalaureate Diploma, which is a globally recognised senior secondary qualification.
In Victoria, the VRQA is responsible for the:
- registration of senior secondary providers to deliver one or more senior secondary qualification:
- in schools
- in non-school settings.
- registration to become a senior secondary awarding body
- accreditation of senior secondary qualifications.
For information about applying to provide senior secondary education, see:
To search for registered senior secondary providers, see:
For information about becoming an awarding body or about accreditation of senior secondary qualifications, see:


text:
AMONG THE mega stars of Hollywood, not many are as affectionately respected and universally adored as Gregory Peck. For five decades and more since his Hollywood debut in 1943 with "Day of Glory" and his first hit, "The Keys of the Kingdom" (1944) for which he received an Oscar nomination, he rose to be a major and majestic presence in theatre, television, and of course, Hollywood cinema. For the average American, Gregory Peck shone brightly as a symbol of the American Man at his best, an icon of moral courage and a faithful defender of traditional values of his native land. The roles he played during his long and successful career, like General MacArthur... Captain Ahab (in "Moby Dick")... and Atticus Finch, (in "To Kill A Mocking Bird") gave moviegoers not only in America but also elsewhere values of dignity, strength, character and masculinity and the will and talent to face any crises and their consequences.
Influenced by his father's desires for him to be a doctor, Peck began to study medicine but his interests lay elsewhere acting and writing. After graduating in 1939, he changed his name by deleting Eldred to Gregory Peck and relocated to New York. Here his abilities came in for quick recognition.
Soon He began to play small roles in travelling shows and in 1942, he made his bow on Broadway with "The Morning Star."
In 1943 he went west to Hollywood. His role as Scottish priest, Father Francis Chisholm in "Keys to the Kingdom" (1944) brought him his first Oscar nomination for Best Actor.
It opened the doors wide to work with great filmmakers.
The golden hour of his career came when he was cast in the lead role in his best-known film, "To Kill A Mocking bird." Talking about the film, Peck said later, "Many young men came up to me to say that they chose to become lawyers after they saw the film." (Not many are aware that Gregory Peck was not the first choice to play the lawyer. The studio (Universal) thought of Rock Hudson for the role! Hollywood history is full of such incredible events!)
Another favourite film of Gregory Peck's was the famed filmmaker William Wyler's "Roman Holiday'' (1953). In the famous scene at the 'Mouth of Truth' sculpture, Gregory Peck actually came up with his own idea to hide his hand and convinced the director to let him do it with no rehearsal and spring a surprise on the new actress, Audrey Hepburn. The shock and surprise and her squeal for the shot was not acting, but her natural reaction! (According to superstition in Italy, if a man who has told a lie slips his hand inside the mouth he will lose it!) While shooting a scene on a Rome City street, Wyler was setting up the camera angle for a shot. Smiling at the director Gregory Peck remarked, "Willie, this new girl is stealing the movie right under our noses. Don't bother about camera angles. Just shoot the picture fast!" Later, he graciously agreed to have Hepburn's name appear along with his, above the title of the film. Few Hollywood heroes would extend such gesture to newcomers and unknowns. That was the Gentleman Gregory Peck.
Later, he described the shoot of "Roman Holiday" as "probably the happiest experience I ever had making movies".
A highly socially conscious person, he involved himself in public life in charities and politics and contributed his best to the society and country that gave him so much. He was an active member of the National Council on the Arts, chairman of the Board of Trustees of the American Film Institute, and president of the Academy of Motion Picture Arts and Sciences. Also, the Chairman of the American Cancer Society.
Many were the awards bestowed on him, the Medal of Freedom Award, the Jean Hersholt Humanitarian Award, and a Life Achievement Award from the American Film Institute in 1989, as well as awards from the Museum of Modern Art (1990), the John F. Kennedy Center and the Film Society of Lincoln Center (1991).
He recently appeared as a presenter at the Media Awards for the Gay and Lesbian Alliance Against Defamation (G.L.A.A.D.) and said, "It just seems silly to me that something so right and simple has to be fought for at all." And most recently the American Film Institute chose him as the best hero of American Cinema for his role in the film "To Kill A Mocking Bird".
A happily married man, (he met his wife Veronique, a Paris-based journalist who came to interview him during the making of "Roman Holiday"), a fond parent and grandparent, his private life was admirably free from scandals normally associated with Hollywood stars. Americans looked up to him as an idol, icon and the personification of all that was best in American values.
Talking of movies today, he said, "We're in the age of the antihero.... It's the fashion of the day. But I always say, if you want brain surgery, you don't want an antihero to do it."
The best compliment to the departed Hollywood legend came from a colleague, another Hollywood legend Orson Welles.
When Ronald Reagan was elected to the White House, Welles remarked that instead of Reagan, Gregory Peck should have been sent there for he was the better and right choice.
Send this article to Friends by


text:
The Randolph County Strategic Plan is focused on optimizing Public Health, Safety, and Well-Being, by answering four broad questions: Where have we been?; Where are we now?; Where do we want to be?; and How do we get there?
Facilitated by County staff with technical support from the Piedmont Triad Regional Council, this initiative includes a wide range of local governments, organizations, and citizens from across the county. The process began with the development of a detailed Environmental Data Scan to provide a clear picture of the county – past, present, and future. Steering Committee members used this information to identify and prioritize key strategic issues impacting Randolph County communities. Our 60-member Steering Committee includes the Chair of the Board of County Commissioners, mayors, city managers, health care professionals, educators, human service providers, public safety providers, chambers of commerce, economic development, and planning professionals, and citizens representing a broad cross-section of county interests. In addition, more than 100 citizens served on three task forces (Public Health, Public Safety and Well-Being) with various sub-committees, and met monthly to discuss issues and develop strategic goals and strategies. Significant input from other planning processes was also integrated into the plan. The Steering Committee and Task Force members worked diligently to develop an action plan that focuses limited resources on key strategic issues facing the county to make a positive, lasting impact on the communities we serve.
Common themes emerging from our work together include:
- Improving development and recruitment of qualified workers for industry, agriculture, health care, education, and critical government services.
- Making tangible quality of life improvements to enhance our county's recruitment and marketing efforts.
- Developing proactive prevention programs to reduce the debilitating and costly effects of existing and emerging community and mental health challenges.
- Reducing barriers to critical services. Aligning resources to increase the efficiency and effectiveness of services by: -reducing silos between organizations; -increasing communication, cooperation and collaboration among public agencies, private agencies and institutions to gain a better mutual understanding of issues and challenges; and -developing mutually-beneficial solutions.


text:
|• June 29, 2006|
Did you know that one of the nation's most historic attempts at creating a utopian society was in Indiana? You may have seen the movie "Hoosiers" but do you know the real story behind the Hollywood version? And did you realize that most of the great buildings and monuments in our nation's capital were built with Indiana limestone?
The Hoosier state has a historical and cultural history rich in tradition and diversity. Present Indiana is a final step in a three-part effort to familiarize Wabash faculty, staff and students with the Hoosier state.
Wabash students, working with faculty and staff mentors, will develop and deliver a series of modules that will compose a curriculum focused on Indiana's culture. During the summer of 2005, 10 Wabash men created the first Present Indiana projects.
These video and PowerPoint presentations will be made available to a variety of audiences who will benefit from an introduction to the rich heritage and opportunities associated with living, studying and working in Indiana.
The links above right will allow you to see a summary of each project. The summaries include links that will help you learn more on each topic.
Present Indiana will serve audiences that include international students studying in Indiana, elementary and middle school students, personnel directors and small business leaders, newly relocated employees to the area, as well as new faculty and staff at Wabash College.
Present Indiana is part of a Lilly Endowment grant.


Segments are essential tools when using Crisp, they can help in a lot of ways. To better understand what they are and how to use this feature, this article is set to give you everything you need.
This guide goes into explaining what is a segment and how it works. Segments are vital if you want to make the most out of Crisp. That's why it is an essential read if you're getting started with our platform.
Coming from Intercom? Segments are known as tags.
What is a segment?
A segment is a way for your business to mark a profile or a conversation. You can assimilate it as a way of tagging a user with a specific behavior. For example, you can tag all your leads with a segment named "lead" to create filters in your inbox, build advanced filters in the contact tab, send them a newsletter using campaign or build an routing rule that will redirect conversations to the sales team.
How to assign a segment?
Segments can be assigned in three different ways. It can be manual, automated or done with a bot scenario. Here is how you can do it, and where.
Assigning a segment manually
A segment can be added manually by typing it inside the dedicated input, as shown below. In the example, you can see three different segments: Email, Ambassador and clothes.
Assigning a segment automatically
Assign a segment using the JS SDK
A dedicated article exists about how to set a segment dynamically using the JS SDK. However, here is a quick reminder:
// Feed this call with your own internal segment.
$crisp.push(["set", "session:segments", [["registered_users", "lead"]]])
Assign a segment using the API
- session segments:
- contact segments:
You'll need to add your segments in the "segments" array in the request body: "segments": ["lead"]
Assign a segment using the bot.
Through the bot you can do multiple actions automatically, such as assigning a segment to a conversation. By using a specific block called "Set Session Segment" which is an action block, you'll assign segments automatically to conversations.
Example of a chatbot scenario having a Set Session Segment
Assign a segment using Mailboxes
Thanks to Crisp, you can handle multiple mailboxes in the same inbox. Using aliases such as or you'll be able to assign a segment to the conversation and route it to the right department or make it a priority task to handle.
How can segment help your team?
Now that you understand what is a segment and how to use it, it's time to focus on some specific use case that can be quite helpful when using Crisp.
To build an email list
Segments are a targeting option inside Campaigns (our customer engagement software). It means that you can retarget users that had to deal with a specific thing such as a downtime, a sales meeting or a bug report for example.
To trigger a zap
Using zapier, we've created a trigger that enables a zap when a segment is assigned to a conversation. This way, you can build a workflow that sends a ticket to Trello or Jira when the segment "bug" is assigned to the conversation for example.
To create a filter in the inbox
Using segments, you can build filters to display specific conversations inside your Inbox. This way, you can choose to display VIP conversations or lead conversations based on your role or your needs.
There are many more ways to take advantage of segments, it's up to you to get started with this key, yet simple, feature.
Was this article helpful?
Thank you!


HomeCOVID-19Basic Researchers on COVID-19
NEWS | Jan. 21, 2021
Gender in the time of COVID-19: Evaluating national leadership and COVID-19 fatalities
By Leah C. Windsor (Minerva)
This recent article by Minerva-funded researcher, Dr. Leah Windsor and colleagues explore the idea that women world leaders are doing better (i.e., fewer deaths in the countries they lead) than men world leaders. They show that in aggregate, women and men leaders do about the same - that women world leaders do not fare significantly better. However, the role of country culture is quite important: countries with more egalitarian social cultures have fewer deaths, and those with women leaders have even fewer.
Link: _URL_


text: The signalling mechanism and cellular targets of the AT2 receptor are still unknown. We report that angiotensin II (Ang II) inhibits basal and atrial natriuretic peptide stimulated particulate guanylate cyclase (pGC) activity through AT2 receptors in rat adrenal glomerulosa and PC12W cells. This inhibition is blocked by the phosphotyrosine phosphatase (PTPase) inhibitor orthovanadate but not by the Ser/Thr phosphatase inhibitor okadaic acid, suggesting the involvement of a PTPase in this process. Moreover, Ang II induces a rapid, transient and orthovanadate sensitive dephosphorylation of phosphotyrosine containing proteins in PC12W cells. Our findings suggest that AT2 receptors signal through stimulation of a PTPase and that this mechanism is implicated in the regulation of pGC activity. This observation is also the first example of hormonal inhibition of basal pGC activity.


the parameters of the signal.
The __gproperties__ dictionary is a class property where you define the properties of your object. This is not the recommend way to define new properties, the method written above is much less verbose. The benefits of this method is that a property can be defined with more settings, like the minimum or the maximum for numbers.
The key is the name of the property
The value is a tuple which describe the property. The number of elements of this tuple depends on its first element but the tuple will always contain at least the following items:
The first element is the property's type (e.g. int, float…).
The second element is the property's nick name, which is a string with a short description of the property. This is generally used by programs with strong introspection capabilities, like the graphical user interface builder Glade.
The third one is the property's description or blurb, which is another string with a longer description of the property. Also used by Glade and similar programs.
The last one (which is not necessarily the forth one as we will see later) is the property's flags: GObject.PARAM_READABLE, GObject.PARAM_WRITABLE, GObject.PARAM_READWRITE.
The absolute length of the tuple depends on the property type (the first element of the tuple). Thus we have the following situations:
If the type is bool or str, the forth element is the default value of the property.
If the type is int or float, the forth element is the minimum accepted value, the fifth element is the maximum accepted value and the sixth element is the default value.
If the type is not one of these, there is no extra element.
Invoke the object method handler in the first emission stage.
Invoke the object method handler in the third emission stage.
Invoke the object method handler in the last emission stage.
The property is readable.
The property is writable.
The property is readable and writable.


Managed Extensions: Versioning Collection Classes
Welcome to this week's installment of .NET Tips & Techniques! Each week, award-winning Architect and Lead Programmer Tom Archer demonstrates how to perform a practical .NET programming task using either C# or Managed C++ Extensions.
In the previous two articles, I've illustrated how to make your C++ classes enumerable and how to add sorting capabilities to those classes. This article discusses the issue of versioning. Put simply, versioning your collections becomes important if the data held by the collection can be modified while a client is enumerating that data. Here's an example of the problem using the same Article class example I've been using throughout this series on programming collection classes with Managed Extensions:
 1. Client code instantiates an ArticleCollection object.
 2. Client code then requests an enumerator for that collection.
 3. The ArticleCollection instantiates an ArticleEnumerator object, passing to it the current data held in an internal member. This is done so that multiple clients can retrieve enumerators from the same collection object.
 4. Client code changes the collection's data—by adding or removing an item. Because the enumerator object's data is for enumeration purposes only, it is now out of synch with the collection data. Therefore, the client code is now using an obsolete enumerator.
The following steps demonstrate a technique that a member of the Microsoft .NET Common Language Runtime (CLR) team showed me—a technique that he told me they use internally.
 1. Define an internal member of the collection class (the IEnumerable implementing class) that tracks the current version number. The following code snippet assumes, as a starting point, the article.h file used in the "Managed Extensions: Sorting Your Collection Classes" article:
 2. __gc class ArticleCollection : public IEnumerable
 {
 ...
 static int version = 0;

 3. Increment the version number member from any collection method that would render the collection invalid. For example, a method that allows client code to add data to the collection would obviously invalidate the collection for any client that is currently enumerating that object:
 4. __gc class ArticleCollection : public IEnumerable
 {
 ...
 public:
 void Add()
 {
 // If data is changed, update version so that any
 // outstanding enumerators are now out of data!
 version++;
 // perform add
 }

 5. Update the collection class's GetEnumerator method to pass the current version to the enumerator class's constructor. This is done so that you can track the version number at the enumerator object level:
 6. __gc class ArticleCollection : public IEnumerable
 {
 ...
 public:
 IEnumerator* GetEnumerator()
 {
 return dynamic_cast<IEnumerator*>(new
 ArticleEnumerator(this, version));
 }

 7. Update the enumerator object's constructor to also receive the version number and store it at the object instance level:
 8. __gc class ArticleEnumerator : public IEnumerator
 {
 ...
 public:
 ArticleEnumerator(ArticleCollection* collection,
 int version)
 {
 this->collection = collection;
 this->version = version;
 position = -1;
 }
 protected:
 int version;

 9. Add a method to the enumerator class to throw an exception if the client attempts to access an obsolete enumerator's data:
 10. __gc class ArticleEnumerator : public IEnumerator
 {
 protected:
 void VerifyVersion()
 {
 if (version != collection->version)
 throw new InvalidOperationException(S"Data out of sync. "
 S"Need to reacquire
 enumerator");
 }

 11. Finally, update the enumerator class's get_Current, MoveNext, and Reset methods to call the VerifyVersion method before attempting to perform their work:
 12. __gc class ArticleEnumerator : public IEnumerator
 {
 public:
 bool MoveNext()
 {
 VerifyVersion();
 ...
 }

 __property Object* get_Current()
 {
 VerifyVersion();
 ...
 }

 void Reset()
 {
 VerifyVersion();
 ...
 }
 };

Maintaining a Boolean Member to Indicate a "Dirty" Collection
I used a numeric field to track the version number associated with a given enumerator object. I did this to handle scenarios in which the client might retrieve multiple enumerator objects from a single collection object. As a result, each time the data is changed, the client code needs to re-acquire each enumerator object that is made obsolete. Depending on the complexity of your needs, you could use a simple boolean member to indicate whether or not the collection is "dirty" or changed. The main difference is that, if you use such a technique, you would be marking the collection dirty for all clients of a particular instance of the collection. So, it really comes down to the needs of your applications.
Looking Ahead
The past three (3) articles have illustrated the technique of creating two additional classes to the class that you're enumerating—a collection class (IEnumerable-derived) and an enumerator class (IEnumerable-derived). The next article will show how you can combine these two interfaces into a single class and explains when you would want to do that and when it would not be a good idea.
About the Author
Tom Archer - MSFT
I am a Program Manager and Content Strategist for the Microsoft MSDN Online team managing the Windows Vista and Visual C++ developer centers. Before being employed at Microsoft, I was awarded MVP status for the Visual C++ product. A 20+ year veteran of programming with various languages - C++, C, Assembler, RPG III/400, PL/I, etc. - I've also written many technical books (Inside C#, Extending MFC Applications with the .NET Framework, Visual C++.NET Bible, etc.) and 100+ online articles.
Comments
 - There are no comments yet. Be the first to comment!
Leave a Comment
 - Your email address will not be published. All fields are required.
Top White Papers and Webcasts
 - Discover how to quickly remediate aggressive security threats. Read this report from Forrester Research and get the facts about new automated compliance processes and how they will reduce your organization's vulnerability and risk. Learn to: Adopt a set of cyber "Rules of Engagement" Define the appropriate response through the "Response Index" Create actionable response metrics Ensure multiple levels of audit and reinforcement Plus, find out how to better align security and operations teams and put the …
 - By providing developers with the right tools to detect, understand, and fix problems early, your business can simplify software development, shorten development lifecycles, and improve the quality of software code. The end result is increased innovation, secure applications, and a faster time to market — all at a lower cost.
Most Popular Programming Stories
More for Developers
RSS Feeds
Thanks for your registration, follow us on our social networks to keep up-to-date