Here you will find a wealth of in-depth information about navigating the challenges of a saltwater aquarium including insight into some of the most common mistakes and how to avoid them for yourself. If you're ready to learn how to be the best saltwater aquarium hobbyist you can possibly be, simply keep on reading!
Why Are Saltwater Tanks So Challenging to Keep?
Thanks to modern technology, keeping a saltwater aquarium in your home is much easier than it was even a few decades ago. This doesn't mean, however, that it isn't still a challenge. With a freshwater tank you need to maintain a certain balance in your water chemistry, but you have a little more wiggle room than you do with a saltwater tank. Marine inhabitants require a specific level of salinity and it can be difficult to maintain the optimal level when you factor in things like evaporation and the nitrogen cycle. But that isn't the only challenge you have to navigate!
In addition to keeping the salinity in your tank stable, you also have to worry about tank temperature and lighting. These things are particularly important if you keep corals in your tank. Certain species of coral require a high degree of lighting while others do not. You must also keep in mind that the ideal environment for corals and other invertebrates may not line up with the tank requirements of certain saltwater fish. It's up to you to find the right balance.
One final aspect that makes saltwater aquariums particularly challenging to keep is the fact that maintenance requirements are much higher on the whole. Whereas you can be reasonably confident that your freshwater tank will be fine if you go on vacation for a week, a saltwater tank could take a turn for the worst if left unattended for just two or three days. It's not always possible to automate certain maintenance tasks, either, unless you're prepared to spend hundreds of dollars on a top-of-the-line filtration system.
What Are the Top 10 Mistakes Saltwater Aquarium Hobbyists Make?
Insufficient research and planning is the biggest mistake many novice aquarium hobbyists make. It is particularly common in hobbyists who have experience with freshwater tanks because many people assume that it will be similar. The reality is, however, that saltwater aquariums are more complicated in terms of setup and maintenance so, if you don't have a firm foundation of knowledge to start with, you may find yourself chasing a growing snowball of problems down a very steep hill.
It is not enough to spend an hour or two reading about saltwater aquariums before you head to the pet store to buy a tank and the necessary supplies and equipment. Saltwater environments can be finicky, especially in smaller tanks, and if you don't know how to deal with problems as they arise, you may be doomed to fail. More than just doing some general research, however, you need to plan everything down to the smallest detail, especially when it comes to your tank inhabitants.
Whereas many freshwater aquarium fish are tolerant of minor fluctuations in tank temperature and water chemistry, marine fish tend to be a little more sensitive. Depending on the environment from which they come, marine fish have specific requirements for water chemistry, salinity, and water temperature. If you don't know exactly what these requirements are for the fish you plan to keep, you can't cater your tank environment to meet those requirements. You also need to be sure that all of the livestock you keep in your tank – this includes live rock, fish, corals, and other invertebrates – are compatible before you begin.
Resolution: To ensure your best chance of success with your first saltwater aquarium, you need to spend a significant amount of time doing research. First, you'll need to decide what type of tank you want to cultivate – fish only, fish only with live rock, or a reef tank. Each of these comes with its own unique set of challenges, so be sure you understand exactly what each type of tank entails before you make your choice.
From there, you can move on to the specifics of what kind of livestock you want to keep in your tank which will determine the ideal tank parameters. Once you know what kind of environment you need to maintain with your tank you will be able to pick out the best equipment for the job and, from there, all that is left is the actual setup and maintenance.
Even if you do the research beforehand, you may make a mistake when it comes to choosing the right size for your saltwater tank. Many novice aquarium hobbyists assume that smaller tanks are going to be easier to maintain than larger tanks when, in fact, the opposite is true – to a certain degree, anyway. Consider the fact that the ocean itself fluctuates to a relatively small degree when it comes to things like salinity and water chemistry. Why? It is largely because of the sheer volume of water.
Imagine this – you have a small glass of water and a large bucket of water. Now, add a drop of red food coloring to each and watch what happens. In the small glass of water, the dye spreads quickly and turns the water a dark red color. In the large bucket of water, however, the dye spreads more slowly and the resulting change in color is much less pronounced. Now, think about this in the context of a saltwater aquarium. If something happens that has the potential to change the water chemistry in the tank, that change will have a lesser effect in a tank with a high water volume than it would in a smaller tank.
But what exactly does that mean? It simply means that larger tanks are less prone to sudden and significant fluctuations in things like water temperature and water chemistry. If you make a mistake (and you probably will when you are first starting out), a larger tank gives you a bit more wiggle room to make the necessary corrections than a smaller tank. This isn't to say that you don't need to be careful, but larger tanks tend to be a little more forgiving.
Resolution: Unless you want to risk killing your entire tank full of fish the first time you make a mistake, you may want to consider starting with a fairly sizeable tank – the largest tank you can afford to equip and maintain. At the very least, choose a 29-gallon tank but a 55- or 75-gallon tank would be better. In addition to considering maintenance requirements, your choice of tank inhabits should also inform your decision when it comes to tank size. If you are limited by budget, choose the tank size first and then pick your tank inhabitants to match.
Becoming a saltwater aquarium hobbyist is not cheap. In fact, the tank itself may be the least expensive item on your list! As you start researching and planning your first saltwater aquarium, you may be shocked to see how quickly the costs add up. Don't make the mistake of shopping by price, however, and never purchase used equipment! It is well worth it to make a higher initial investment upfront than to pay the price down the line.
By now you well know that maintaining a stable tank environment is paramount in a saltwater aquarium. Though you will have to perform certain maintenance tasks yourself, the stability of your tank is largely left up to your tank equipment – your filtration system, protein skimmer, water pumps, and the rest. There are many different types of tank filters, heaters, and other types of equipment so you need to do some heavy research before you make your choice. If you don't, you could end up wasting a lot of money when you find yourself needing to replace your initial equipment because it simply isn't getting the job done.
Resolution: As you research and plan your tank, be thinking about the kind of equipment you'll need to maintain the ideal tank environment. Certain types of equipment like tank filters and heating systems are rated for different tank sizes, so it may be fairly easy to choose the right size once you've decided what kind of equipment you want to go with. You should also consider how the individual pieces of equipment will work together – it is recommended that you go with a sump system so you can install all of your equipment in one place.
After spending hours upon hours researching saltwater aquarium inhabits and their requirements, you may be eager to get started. As is true with many things in life, however, if you take your time and do it right the first time you'll save yourself a lot of hassle and heartache down the line. Once you've purchased your tank and assembled your equipment, don't make the mistake of rushing the setup process. If you choose to use live rock in your tank, you'll need to give it time to acclimate before you add any fish or other inhabitants. Why? It's all about the nitrogen cycle.
The nitrogen cycle is what keeps your tank running properly – it ensures that the water in your tank doesn't become toxic for your fish. Here's what you need to know: when your fish and other tank inhabitants consume food, they produce waste that accumulates in the tank. As that waste (along with uneaten fish food and other organic material) breaks down, it produces ammonia, a substance toxic to fish. Fortunately, there are beneficial bacteria living in the tank which break down that ammonia, converting it into nitrites and then into nitrates, both of which are less harmful. When you perform routine water changes, then, you remove the nitrates from the tank.
The problem that many novice aquarium hobbyists run into is that it takes time to build up a sufficient colony of beneficial bacteria – especially in a larger tank. These bacteria live primarily in live rock and in the tank substrate. The more fish and other inhabitants you plan to keep in your tank, the more beneficial bacteria you'll need to handle what is known as the biological load of the tank. If you try to add fish to your tank too quickly, the biological load could exceed the ability of your biological filtration system (those beneficial bacteria) in breaking down ammonia and you could poison your fish.
Resolution: There is no hard and fast rule for how long you should let your tank cycle before adding fish – each tank is completely unique. The best thing you can do is purchase a water test kit and test the water every few days until the tank has cycled. You should expect this process to take at least one week, but probably two or three. When you first start testing, you'll notice that the ammonia level in the tank starts to rise. Over time, the ammonia will drop and nitrites will increase, then those will drop and nitrates will rise. When both the ammonia and nitrites are down to 0 ppm, your tank has cycled.
In the same way that not giving your tank time to cycle before adding livestock can overload your biological filtration system, so can adding too many tank inhabitants. When you add too many inhabitants to your tank too quickly, you're likely going to end up with what is known as "new tank syndrome". Basically, you'll be shocking the system – suddenly increasing the biological load of the tank beyond what your current colony of beneficial bacteria is able to handle. This can also happen when you add new live rock to an already cycled tank. The result? The conditions in your tank become harmful (even toxic) for your fish and they may die.
Resolution: Any experienced saltwater aquarium hobbyist will tell you that setting up a marine aquarium is a marathon, not a sprint. Because the balance in a captive marine environment is so delicate, any changes you make need to be made slowly and in the smallest degree possible. First and foremost, you need to make sure that your tank has fully cycled before you add any fish and, even then, you need to add them slowly and acclimate them properly. Once you have the tank where you want it, don't make the mistake of suddenly adding another fish or invertebrate. It may seem like a minor change but the consequences could be severe.
Once your tank is fully set up and cycled, don't make the mistake of thinking your job is done! As your tank inhabitants produce waste, the nitrogen cycle will kick into high gear and the chemistry in your tank is going to fluctuate. In order to prevent the nitrate levels from becoming toxic, you need to perform regular water changes. The challenge here is that you can't just pour new water into the tank – you need to make sure that the water you add to the tank has the right balance of trace elements as well as the proper salinity so it doesn't send your tank parameters into a nosedive.
Topping off the tank like this is one of the most common mistakes saltwater hobbyists make, especially if they come from a freshwater aquarium background. Not only do you need to add new water to the tank when performing water changes, but you also have to accommodate for evaporation. What many hobbyists don't realize is that when water evaporates from the tank, the salt and minerals are left behind. For this reason, you'll need to use some fresh water when topping off the tank.
Resolution: How do you know when the mineral and salinity levels in your tank are creeping out of that optimal zone? You need to test your tank water on a weekly basis using an aquarium water test kit. You'll need to test and keep records of your tank salinity, pH, nitrate, calcium, and phosphate levels at a minimum. As you test your tank once a week, your record of results will help you to establish a baseline or a "normal" reading for your tank. In future tests, if the results are significantly different, you'll know that something is wrong and you can take steps to fix it.
One of the most common mistakes inexperienced aquarium hobbyists make (both freshwater and saltwater) is overfeeding their fish. You may be surprised to learn just how little food most fish actually need. They might eat as much food as you offer them, but their actual needs for nutrition are likely to be much lower. By overfeeding your fish, you run the risk of throwing your tank's water chemistry out of whack. The more your fish eat, the more waste they produce, not to mention all of the uneaten fish food that settles at the bottom of the tank.
Resolution: Though different fish have different needs, the best rule of thumb to follow is this – only feed your fish as much as they can eat within five minutes. You may need to feed your fish multiple times a day, depending on their needs, but don't feed them more in one feeding than they can eat before the food starts to sink. You should also be mindful of providing your fish with a high-quality and varied diet to keep them in maximum health and optimal condition.
As you maintain your saltwater tank, there may come a time when you want to add new inhabitants. Before you do, make sure to perform some research to ensure that the inhabitant your adding is compatible with your current tank conditions – don't make the mistake of trying to alter your tank parameters to suit a new fish. Once you're sure that the fish will be able to survive in your tank, you can go ahead and purchase it. What you absolutely shouldn't do, however, is bring home your new fish and immediately dump the bag into your tank – that's a recipe for at least one dead fish and the results could affect the rest of your tank as well.
Resolution: When you are ready to add the fish, do so slowly, giving the fish plenty of time to adjust to the new tank. There are a number of different methods for acclimating new fish but the methods that work for freshwater fish may not be right for saltwater fish. The best method to use is called the "drip method". Basically, you empty the bag containing your fish and the water from its old tank into a bucket or some other container. Then, you run a length of airline tubing from your tank to the bucket, setting it to drip. Allow this to go on for at least 2 hours so your fish has fully acclimated to the new parameters then net the fish and add it to your tank.
Not only do you need to be careful when adding new fish to your tank, but you also have to be very careful about where you buy your fish and other livestock. It might be tempting to go with the easy option and just purchase from your local fish store, but that may not be the smartest choice. In many cases, the employees at these stores have the bare minimum when it comes to knowledge and experience for maintaining saltwater aquariums. If you purchase from these stores, the fish you bring home could already be sick or stressed from inadequate care. Adding the fish to a new tank could be the final straw, killing the fish or worse yet – it could be carrying a disease that spreads to the rest of your tank.
Resolution: If you want to stock your tank with healthy livestock, you need to purchase from a reputable source. There is something to be said for being able to walk into a store and see the fish you're about to buy, but there are also benefits to skipping the middle man and buying directly from a breeder. If you do purchase from a store, it probably shouldn't be a big box or chain pet store – look for a local shop run by experienced aquarium hobbyists. If you decide to purchase online, look for a breeder that allows you to see the exact fish you are purchasing and make sure that their shipping practices ensure that the fish will arrive alive. One more thing to keep in mind when purchasing livestock is that you need to make sure it has been aqua-cultured (bred in captivity) and not taken from the wild. Wild-caught fish are difficult to care for and they are more likely to transmit disease to your existing tank inhabitants.
Every saltwater tank is unique, so there is no exact formula to follow when it comes to tank lighting, circulation, and filtration – it all depends on the individual requirements of your tank inhabitants. What many novice saltwater aquarium hobbyists fail to realize is that a marine environment is very different from a freshwater environment. Unless you have experience with planted freshwater tanks, it is easy to forget that aquarium lighting serves more than just an aesthetic purpose. If you have live rock or corals in your tank, you need to make sure that your tank lighting is sufficient because it actually provides these photosynthetic organisms with the energy they need to live.
Not only is lighting extremely important in a saltwater tank, but so is circulation and filtration. The ocean is full of currents – currents that carry food particles as well as waste products. Circulation is particularly important for reef tanks with corals in them because these corals rely on the flow of water to deliver the nutrients they need to survive and to carry away the wastes they produce. Filtration is also extremely important because it helps to remove those waste products from the water column, keeping the water in your tank clean and the quality of the water high. If any of these three is insufficient in your tank, it could have deadly consequences.
Resolution: To a certain degree, finding the right balance for lighting, circulation, and filtration requires a bit of trial and error. In the very beginning you'll need to do your research and plan according to the type of tank and tank inhabitants you want. Once your tank is set up and cycled, however, you'll need to make adjustments in order to create and maintain the right balance in your tank. This is where weekly testing comes into play. Again, as you test your tank water you should keep a record of the results so you know what's "normal" for your tank. If you have to make changes to your lighting, circulation, or filtration, having a record of your ideal tank parameters will also be important for helping you get back to that optimal balance.
By now you should have a deeper and more thorough understanding not only of the requirements for keeping a saltwater aquarium, but of the challenges as well. Just because you've read about common mistakes, however, doesn't mean that you're automatically ready to set out and get to work with your own aquarium. Especially if you are a saltwater aquarium novice, there is still a lot to learn!
What kind of saltwater environment do you want to cultivate?
What size tank can you accommodate and what best suits your skills?
What kind of tank inhabitants and how many can you accommodate?
What are the tank requirements for those tank inhabitants?
These are the simplest but also some of the most important questions you need to answer before you even think about purchasing any supplies or equipment. Your answers to these questions will actually bring a whole slew of other questions to the forefront. Only when you have a solid understanding of exactly what you want in a saltwater aquarium should you move from the research stage into the planning stage.
If you're considering a saltwater aquarium, know that it is going to be very different from cultivating a freshwater tank and, in many ways, more challenging. The more research you do upfront, the better off you will be. Take the common mistakes discussed above (and their solutions) to heart as you start planning to improve your chances of success. Good luck!


text:
The 2001 European 10,000m Cup, was the 5th edition of the European 10,000m Cup (the original name in 2001 was European 10,000m Challenge) and took place on 7 April in Barakaldo, Spain.

Individual

Men

Women

Team
In italic the participants whose result did not go into the team's total time, but awarded with medals.

Men

Women

References

External links
 EAA web site

European 10,000m Cup
European Cup 10,000m

redpajama_set_name: RedPajamaWikipedia


Savor the moment. Appreciate. Congratulate. Celebrate.
Love deeply. Forgive quickly. Keep moving forward deliberately.
Make memories for these are the good old days.
Don't look back with regret but forward with hope.
Read voraciously. Learn every day.
Slow down. Take in the moment.
Say "I love you" often. Give compliments freely.
Read God's Word daily and live it consistently.
Spend time with elders. Record their stories. Preserve this history. Spend time with family.
For these are the good old days.


Avail brilliant 15% cash back Iografica Themes coupon. Get offer by following the Iografica Themes image guidelines below.
In the web development section, the necessity of WordPress platform is rapidly increasing. In the WordPress based site, the users can easily apply many types of themes and the plug-in to make any specific change. For the WordPress based site, Iografica Themes is a reliable source. It offers a lot of themes as well as the plug-in with the custom mode. It includes many types of premium and free themes for WP category. Get both the premium and free themes with our coupon offer.
Iografica Themes includes some fundamental features inside every theme and the plug-in. Here, the users will observe the advance level options for making your site more creative. The available options can easily be customized by depending on your choice. After that, in the designing section, you will observe the creative look inside every theme. So, by depending on your need, you can make proper changes. Get the Iografica Themes discount to purchase this easy-to-use product.
In this platform, each theme is developed with two categories like the free version and the premium version. The premium version includes all the facilities that are active in the free version, but the free version doesn't occupy all the features like the premium version. Here, the features from premium version are described.
Boxed WP Premium: This WordPress theme is developed with the clean interface system and having the boxed designing format. This theme can be applied almost in all sectors like personal website developing case, blog, professional website developing process etc.
Store WP Premium: This premium theme is available for the ecommerce section. This is compatible for almost all types of devices like mobile phone, tablet PC etc. It includes the responsive format with built-in condition. Here, the layout section, designing task, content addition process can be handled quite simply.
One page Premium: This acts like a template for the WP based website. It has the ability to preview all the needed features in your website under the homepage section.
Plugins of Iografica Themes: Inside the plug-in category, a lot of variations can be observed. The common one plug-in is the slide customizer. This manages the task to customize the sliding activities from the admin panel section. To display the available features of your WP site, you can use IG Pricing Table plug-in. For portfolio designing task, you can rely on IG portfolio. Then, IG short codes can be used to maintain the beautiful elements in your site. In the plug-in category, the users will also get IG Testimonial, IG Affiliate Banners and so on.
Iografica Themes offers the available themes and the plug-in with the variation of the price. Here each theme can be purchased through the price of 44 Euro without the coupon. In case of getting Slider Customizer pug in, you need to pay only 2 Euro.
So, get all the premium WordPress themes as well as plugins with our discount offer. We expect that, the Iografica Themes coupon encourages you in purchasing this cool product.


text:
Q: Group enrollment in Azure Device Provisoning Service (DPS) not working through REST API: unauthorized 401002 I am trying to support DPS for my ESP32 firmware through HTTPS REST API using SAS.
My device registration ID is: xx-xx-8c4b14149ff4
I took the group enrollment from DPS primary key to generate the symmetric key from the registration ID.
I created the related SAS from that and forged the request, but the server returns "Unauthorized" with error code being 401002.
Here is my request (a curl version is provided for handiness ):
curl -L -i -X PUT \
-H 'Content-Type: application/json' \
-H 'Content-Encoding: utf-8' \
-H 'Authorization: SharedAccessSignature sr=0neXXXXXX22%2Fregistrations%xx-xx-8c4b14149ff4&sig=XXXXXXXXXXXXXXXXXXX%3D&skn=registration&se=1651482003' \
-d '{"registrationId": "xx-xx-8c4b14149ff4"}' \
https://global.azure-devices-provisioning.net/0neXXXXXX22/registrations/xx-xx-8c4b14149ff4/register?api-version=2021-06-01

Note that I replaced secret information with "xx".
The response body is as follows:
{
    "errorCode": 401002,
    "trackingId": "9fecada7-4e51-455e-9392-68522654a64a",
    "message": "Unauthorized",
    "timestampUtc": "2022-05-02T08:04:03.5761437Z"
}

Is there anything I must tweak to use the HTTPS REST API from the portal?
What should I look at beside the information themselves (which I already double-checked)?
References:

*

*About SAS: https://learn.microsoft.com/en-us/azure/iot-dps/how-to-control-access

*About the REST API: https://learn.microsoft.com/en-us/rest/api/iot-dps/device/runtime-registration/register-device#provisioningserviceerrordetails

A: Consider the following and note how I calculate a deviceKey from the DPS key and then generate the SAS Token from the device key.  Some people overlook that.  :)

from base64 import b64encode, b64decode
from hashlib import sha256
from time import time
from urllib.parse import urlencode, quote_plus
from hmac import HMAC
import requests

def generate_sas_token(uri, key, policy_name, expiry=3600):
    ttl = time() + expiry
    sign_key = "%s\n%d" % ((quote_plus(uri)), int(ttl))
    sign_key = sign_key.encode('utf-8')
    signature = b64encode(HMAC(b64decode(key), sign_key, sha256).digest())

    rawtoken = {
        'sr' :  uri,
        'sig': signature,
        'se' : str(int(ttl))
    }

    if policy_name:
        rawtoken['skn'] = policy_name

    return 'SharedAccessSignature ' + urlencode(rawtoken)

device_id = "3c71bfa95f7c"
scope_id = "0neYOURSCOPEHERE39"
dpskey = 'CsBYOURSASCODEHEREXWyfUMl/OA=='

deviceKey = b64encode(HMAC(b64decode(dpskey), device_id.encode('utf-8'), sha256).digest())
uri = scope_id + '/registrations/' + device_id
policy= 'registration'
url = "https://global.azure-devices-provisioning.net/" + scope_id + "/registrations/" + device_id + "/register?api-version=2021-06-01"
headers = {'Authorization': generate_sas_token(uri=uri, key=deviceKey, policy_name=policy), 'User-Agent': 'MicroPython', 'content-type': 'application/json', 'Content-Encoding': 'utf-8'}
data = '{"registrationId" : "' + device_id + '"}'

print(generate_sas_token(uri=uri, key=deviceKey, policy_name=policy))

print(requests.request("PUT", url=url, data=data, headers=headers).json())

The response shows "assigning", which is success.  Hope this helps.
C:/Python38-64/python.exe h:/test/sastoken.py
SharedAccessSignature sr=0ne00223A39%2Fregistrations%2F3c71bfa95f7c&sig=UH5KKeREMOVED0vcs%3D&se=1651880438&skn=registration
{'operationId': '4.4cb788ae24922c84.6856a3d0-857f-4c79-a90c-360fdf3355f8', 'status': 'assigning'}

A: Can you provide a code sample of how you are generating the individual key? Did you try the samples at https://learn.microsoft.com/en-us/azure/iot-dps/how-to-legacy-device-symm-key?tabs=linux%22%20%5Cl%20%22derive-a-device-key#derive-a-device-key ?
Here's an example using C#
        private string GenerateDeviceSas(string enrollmentGroupName, string dpsIdScope, string registrationId, string key)
        {
            if(String.IsNullOrEmpty(dpsIdScope) || String.IsNullOrEmpty(registrationId) || String.IsNullOrEmpty(key))
            {
                Console.WriteLine("Error: Missing required values in settings.json");
                return null;
            }

            if (String.IsNullOrEmpty(enrollmentGroupName))
            {
                // Generate Device API SAS key for individual enrollment
                return GenerateSasToken($"{dpsIdScope}/registrations/{registrationId}", key, "registration");
            }
            else
            {

                // Generate derived Device API SAS key for group enrollment
                // See https://learn.microsoft.com/en-us/azure/iot-dps/how-to-legacy-device-symm-key?tabs=linux#create-a-symmetric-key-enrollment-group

                HMACSHA256 hmacsha256 = new HMACSHA256();
                hmacsha256.Key = Convert.FromBase64String(key);
                var sig = hmacsha256.ComputeHash(ASCIIEncoding.ASCII.GetBytes(registrationId));
                var derivedkey = Convert.ToBase64String(sig);

                return GenerateSasToken($"{dpsIdScope}/registrations/{registrationId}", derivedkey, "registration");

            }
        }

        private static string GenerateSasToken(string resourceUri, string key, string policyName, int expiryInSeconds = 3600)
        {
            TimeSpan fromEpochStart = DateTime.UtcNow - new DateTime(1970, 1, 1);
            string expiry = Convert.ToString((int)fromEpochStart.TotalSeconds + expiryInSeconds);

            string stringToSign = WebUtility.UrlEncode(resourceUri) + "\n" + expiry;

            HMACSHA256 hmac = new HMACSHA256(Convert.FromBase64String(key));
            string signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign)));

            string token = String.Format(CultureInfo.InvariantCulture, "SharedAccessSignature sr={0}&sig={1}&se={2}", WebUtility.UrlEncode(resourceUri), WebUtility.UrlEncode(signature), expiry);

            if (!String.IsNullOrEmpty(policyName))
            {
                token += "&skn=" + policyName;
            }

            return token;
        }

A: Actually my signature code had a small bug. I fixed it and now it works.
Here is the (working) code for signing:
#include <mbedtls/md.h>         // mbed tls lib used to sign SHA-256

#include <base64.hpp>           // Densaugeo Base64 version 1.2.0 or 1.2.1

/// Returns the SHA-256 signature of [dataToSign] with the key [enrollmentPrimaryKey]
/// params[in]: dataToSign The data to sign (for our purpose, it is the registration ID (or the device ID if it is different)
/// params[in]: enrollmentPrimaryKey The group enrollment primary key.
/// returns The SHA-256 base-64 signature to present to DPS.
/// Note: I use mbed to SHA-256 sign.
String Sha256Sign(String dataToSign, String enrollmentPrimaryKey){
  /// Length of the dataToSign string
  const unsigned dataToSignLength = dataToSign.length();
  /// Buffer to hold the dataToSign as a char[] buffer from String.
  char dataToSignChar[dataToSignLength + 1];
  /// String to c-style string (char[])
  dataToSign.toCharArray(dataToSignChar, dataToSignLength + 1);

  /// The binary decoded key (from the base 64 definition)
  unsigned char decodedPSK[32];

  /// Encrypted binary signature
  unsigned char encryptedSignature[32];

  /// Base 64 encoded signature
  unsigned char encodedSignature[100];

  Serial.printf("Sha256Sign(): Registration Id to sign is: (%d bytes) %s\n", dataToSignLength, dataToSignChar);
  Serial.printf("Sha256Sign(): DPS group enrollment primary key is: (%d bytes) %s\n", enrollmentPrimaryKey.length(), enrollmentPrimaryKey.c_str());

  // Need to base64 decode the Preshared key and the length
  const unsigned base64DecodedDeviceLength = decode_base64((unsigned char*)enrollmentPrimaryKey.c_str(), decodedPSK);
  Serial.printf("Sha256Sign(): Decoded primary key is: (%d bytes) ", base64DecodedDeviceLength);

  for(int i= 0; i<base64DecodedDeviceLength; i++) {
    Serial.printf("%02x ", (int)decodedPSK[i]);
  }
  Serial.println();

  // Use mbed to sign
  mbedtls_md_type_t mdType = MBEDTLS_MD_SHA256;
  mbedtls_md_context_t hmacKeyContext;

  mbedtls_md_init(&hmacKeyContext);
  mbedtls_md_setup(&hmacKeyContext, mbedtls_md_info_from_type(mdType), 1);
  mbedtls_md_hmac_starts(&hmacKeyContext, (const unsigned char *) decodedPSK, base64DecodedDeviceLength);
  mbedtls_md_hmac_update(&hmacKeyContext, (const unsigned char *) dataToSignChar, dataToSignLength);
  mbedtls_md_hmac_finish(&hmacKeyContext, encryptedSignature);
  mbedtls_md_free(&hmacKeyContext);

  Serial.print("Sha256Sign(): Computed hash is: ");

  for(int i= 0; i<sizeof(encryptedSignature); i++) {
    Serial.printf("%02x ", (int)encryptedSignature[i]);
  }
  Serial.println();
  // base64 decode the HMAC to a char
  encode_base64(encryptedSignature, sizeof(encryptedSignature), encodedSignature);

  Serial.printf("Sha256Sign(): Computed hash as base64: %s\n", encodedSignature);

  // creating the real SAS Token
  return String((char*)encodedSignature);
}

See it there: How to generate a symmetric key in C or C++ the same way this script does?

redpajama_set_name: RedPajamaStackExchange


All Regarding Drapes - Curtains are essentially meant to act as a protective covering for the windows, to shield a home or any kind of various other facility's interiors from extreme sunlight and from various other potentially dangerous components from the outdoors, such as dirt and also some rain.
Drapes are made of fabric things, sometimes of cotton, or some other fabric with large texture treatment. Often, they might be made of linen or satin. Whatever material drapes are made, one point is for certain: they should be of the right size for the home window for them to be regarded just right to be used as a drape.
On The Average Curtain Sizes - There are 2 primary elements when it comes to typical drape sizes. The decrease primarily refers to just how long the drape is. The conventional size for the average curtain is 45 inches by 54 inches. That implies that the width is 45 inches, and also the decline is 54 inches. Of training course, there are several other dimensions of curtains to check out. These all depend on the measurements of the window where they are mosting likely to be put on.
Obtaining the Right Sized Curtain - So, exactly how does one make sure that he gets just the appropriate size of curtain for his windows. For starters, they ought to start by measuring the width as well as the length of the curtain rod or post. This is where the curtain experiences so maybe held on the window. Hereafter, gauge the size of the window. To make certain that the curtain one buys will certainly just look right for that window, one must make allowances on the measurements. For us, an allowance of concerning 2 to 3 inches is just enough. Never ever mind the creases that the added inches will result to - these in fact include in the enchanting feeling of the curtain.
Various Other Tips When Buying Curtains - Always remember that curtains are not just for protecting the insides of a certain room or space in the home; they likewise offer a very crucial style function. That is why the design of the drape is also just as essential as making sure that they are of the appropriate size for a window.


text:
VIDEO: Cruz Calls Trump Supporters Terrorists, Remembers 'Heroic' Capitol Police on 'Solemn' 1/6 Anniversary
Stephanie Grisham claims there 15 former Trump aides plotting how to STOP him in 2024
Texas Sen. Ted Cruz called Trump supporters terrorists and hailed the "heroic" actions of Capitol Police on January 6, 2021, a date Cruz calls "solemn" one. Cruz did not mention to mention the point blank firearm death of unarmed Air Force veteran Ashli Babbit, but ostensibly believes the officer who shot her is a hero.
The remarks from Cruz came during a hearing of the Senate Rules Committee, where legislators asked Capitol Police Chief Thomas Manger what he thinks could have been done differently to prevent the January 6th, 2021 "terrorist attack" from unfolding as American voters demonstrated against election fraud.
"Thank you for your service," Cruz said as he addressed Manger. "And I want to start by thanking the heroic service of the men and women who serve alongside you."
"We are approaching a solemn anniversary this week," Cruz went on. "And it is an anniversary of a violent terrorist attack on the Capitol where we saw the men and women of law enforcement demonstrate incredible courage, incredible bravery, risk their lives to defend the men and women who serve in this Capitol."
"My view is that anyone who commits an act of violence should be prosecuted and anyone who assaults a law enforcement officer should go to jail for a very long time," continued Cruz. "And I think that's a principle that is true regardless of the politics of the violent criminal, whether they are right-wing, left-wing or they got no wings at all."
Rep. Timmons Says U.S. Should Remain as Member of United Nations, Continue Foreign Aid
Watch Ted Cruz call Trump supporters terrorists:
"As we reflect on what happened a year ago, it is also worth asking – as we have, as this committee has, as this Congress has, I know you have – what could have been done differently? What could have prevented the breach of the Capitol, what could have prevented the riot from getting as far as it did," questioned Cruz, incuriously.
Cruz also failed to mention the death of American Air Force veteran Ashli Babbitt, the unarmed demonstrator shot dead by federal law enforcement inside the Capitol building on 1/6 from the opposite side of a locked door and did not respond to a request for comment from National File, asking whether or not he believes the officer who killed her to also be a "hero."
Cruz was one of eight GOP Senators to originally object to the certification of contested electoral votes in the 2020 Presidential Election, only to stand down and allow the votes to go through after lawmakers returned to the legislative chambers following the 1/6 demonstrations. National File also asked Senator Cruz what changed during that time period about the contested votes and whether or not he had determined them to be legitimate, therefore changing his vote to affirm the counts and make Joe Biden President. Cruz and his staff didn't respond to that question either.
Long before Cruz joined hands with Democrats to approve contested votes and make Joe Biden President of the United States, a hardcore contingent of Cruz supporters attempted to subvert the 2016 GOP nomination process and snatch the GOP nomination for President away from Donald Trump, who had won a convincing primary victory and was preparing to accept the party's nomination at its convention. Cruz supporters ran desperate efforts to steal the nomination from Trump until the very last minute, with many of his hardcore supporters becoming so-called "Never Trumpers" and fracturing the GOP, though it wasn't enough to stop Trump from being elected President.
This is not the first time Cruz has sided against Trump supporters over January 6.
Last year, he called the mostly peaceful protests a "terrorist attack" and said that he supports investigating, prosecuting, and incarcerating the Trump supporters who went inside the Capitol.
National File is committed to ensuring your voice can and will be heard. To keep your speech free, we are switching our commenting platform to Insticator. Don't worry! All you have to do is create a commenting account with Insticator. We will be transferring previous comments to our new site, and then you will be able to link your past comments to your new Insticator account. If you have any feedback or questions about your Insticator commenting account, please email them at: [email protected]
Source: National File
Biden DOJ says it will 'vigorously defend' vaccine mandate after Louisiana federal court halts it
The United States' Department of Justice is planning to 'vigorously defend' President…
Ricki-Lee Coulter reignites the age-old debate of toilet roll hanging etiquette
Ricki-Lee Coulter has reignited a feud that has divided the nation for…
Inappropriate Relationships With Students Lead To Terminations Of 10 Staff At Marine Leadership Academy
CHICAGO (CBS) — Misconduct between adults and students at Marine Leadership Academy,…
Bitcoin Prices Trade Near $50,000 After Hitting Fresh, Multi-Month High
Bitcoin prices have been stuck trading near $50,000 after their latest upward…
George Sherman
Sarah Palin is hooking up with NY Rangers great Ron Duguay
Chicago Public Schools Cuts COVID-19 Isolation And Quarantine Period For Students, Staff From 10 Days To 5

redpajama_set_name: RedPajamaCommonCrawl


It is no secret I like coffee. If you have followed this blog since its beginning you would see that coffee is one of my favorite beverages. Dunkin Donuts has a wonderful iced coffee beverage that frankly is superior to the bottled version of the Starbucks Frappucino™!
This blend of coffee and milk is smooth and sultry. You'll be seduced by the coffee and milk matrimony pleasant in this bottle. It is similar to the iced coffees served at Dunkin, but it is in a bottle for your enjoyment at home. I recommend checking this out ASAP.
← Mario Kart 64, One of My Wife's Favorite games.


text:
Le Center for Science in the Public Interest (Centre pour la science dans l'intérêt public) est une organisation scientifique  sans but lucratif, fondée en 1971, dont le siège est situé à Washington (États-Unis). C'est un  groupe de défense des consommateurs et d'investigation  qui plaide pour une alimentation plus sûre et plus saine.

Notes et références

Sécurité alimentaire
Association de consommateurs
Organisme fondé en 1971
Organisation américaine 501c
Association ou organisme scientifique aux États-Unis
Washington (district de Columbia)


text:
Q: When converting data type datetime overflow occurred i am working with localDB on Windows Phone and i want to work with datetime. Everytime i get error
An exception of type 'System.Data.SqlServerCe.SqlCeException' occurred in System.Data.Linq.ni.dll but was not handled in user code

in inner exception is
When converting data type datetime overflow occurred.

Column is defined simply (VB.NET)
<Column(CanBeNull:=True)>
Public Property Expiration As DateTime

Why i everytime get error When converting data type datetime overflow occurred?

A: I would make sure the date in the database is not out of the upper or lower bounds of the data type within your programming language (Forget what it is off hand). An example would be Microsoft's SQL server's minimum date time is less than the minimum date time in C#, which results in an error if this is not accounted for.
Also, obviously make sure the database object is not null.


Free Essays on Importance Of English Language In Modern World. Get help with your writing. 1 through.
Done for English language. Looking for tips on quality of argument, point-making and grammar. Thank you. You can discuss the subject of the essay.
Professional Academic Help. Starting at .99 per pageOrder is too expensive? Split your payment apart - Essay about english language society.
English is an Indo-European language, and belongs to the West Germanic group of the Germanic languages. Most closely related to English are the Frisian.
Professional Academic Help. Starting at .99 per pageOrder is too expensive? Split your payment apart - Report essay english language society motto.
Society language Essay english Police subculture essays, list comparative words essays on poverty catch 22 research paper everyday use essay on deepavali.
English Language for Dummies Essay English grammar has minimal inflection compared with most other Indo-European languages.
English in society our language of essay Importance Freud essays ziekenzalving bij euthanasia essay casey hayden and mary king argued in her essay.
english language essay. This essay has been submitted by a student. This is not an example of the work written by our professional essay writers.
Professional Academic Help. Starting at .99 per pageOrder is too expensive? Split your payment apart - Essay english language society.
Essay On Language This essay will investigate the role of language in each of the other Ways while English speakers are likely.
Language is pure and unchanging. As a conservative society heavily focused on written, rather than oral, forms of language, we tend to think that change, in language.
Professional Academic Help. Starting at .99 per pageOrder is too expensive? Split your payment apart - Report essay english language society in schools.
Professional Academic Help. Starting at .99 per pageOrder is too expensive? Split your payment apart - Essay speech english language society.
Is English changing? By Betty Birner. Download this document as a pdf. Yes, and so is every other human language! Language is always changing, evolving, and adapting.
Free Essays regarding Short Speech On Importance Of English Language In Our Society for download.
English Fortnight was the second major programme organised by English Language society. It was held from 25th of April, 2011 until.
Database of FREE english language essays - We have thousands of free essays Advertisements for Myself: Norman Mailer's Critique of American Society.
English is not normal No, English isn't uniquely vibrant or mighty or adaptable. But it really is weirder than pretty much every other language.
Short Speech On Importance Of English Language In Our Society. AISYAH AMALIEN SPEECH-THE IMPORTANCE OF ENGLISH LANGUAGE In today's society the English language.
Without language, society would be a disorderly mess of miscommunication and Indeed, our modern use of the English language has deteriorated to the point .
Kast o lite 23 essay living in the countryside essay help virginia woolf essays gutenberg bible history english language essay introduction dessay natalie illness.
Short Essay on English Language. Article shared by Bunty Rane. English is a global language and proficiency in it is a must to succeed in a globalized world.
Report essay english language society motto. October 13, 2016 • • Uncategorized. Report essay english language society motto. 5 stars based on 33 reviews.
Importance Essay of on our english in language society Essay on bullying in high school the population problem in bangladesh essay subhas chandra bose essay in english.
Yes, and so is every other human language! Language is always changing, evolving, and adapting to the needs of its users. This isn't a bad thing; if English .
AP English. Sample Essays; When you are writing a for an AP English Language or AP English Literature Sample Character Analysis Essay - "Dead Poet's Society".
Open Document. Below is an essay on "Language and Society" from Anti Essays, your source for research papers, essays, and term paper examples.
Language Research Papers look at the different ways in which we use language in society. Buy Custom College Research Papers Today.
AP English. Sample Essays; When you are writing a for an AP English Language or AP English Literature Sample Character Analysis Essay - Dead Poet s Society.
"Politics and the English Language" (1946) is an essay by George Orwell that criticises the "ugly and inaccurate" written English of his time and examines.
Still water runs deep essays. About language society Essay english Essay on subhash chandra bose in kannada language small essay on bal gangadhar tilak british people.
English is a West Germanic language that was first spoken in early medieval England and is now a global lingua franca. Named after the Angles, one of the .
Language Essay english society 4 page essay on respecting waxman verlag dissertation abstract u of oregon admissions essays when do i use citations in a research.
English 1A. Essay. Questions This essay was written by a student enrolled in English 1A. It is reproduced here to give you an opportunity to apply.
Professional Academic Help. Starting at .99 per pageOrder is too expensive? Split your payment apart - Report essay english language society.
Nov 15, 2008 In today's global world, the importance of English can not be denied and ignored since English is the most common language spoken .
Jan 26, 2014 As Chairperson of the English Language Society, you are going to try to persuade the students to study the language by writing an article in the .
Short Speech On Importance Of English Language In Our Society. AISYAH AMALIEN SPEECH-THE IMPORTANCE OF ENGLISH LANGUAGE Student Essay on The English Language.
English Language Films; Ethics; Europe; Fiction; Government; Internet; Iraq; Law; Novel; Poetry; Psychology; Enter your essay topic in our search.
Culture and Language in Society In a It is estimated that a few dozen new words are added to the English language alone Sign up to view the whole essay.
essay report about english language society What is hamlet debating in his famous to be or not to be soliloquy how to do good on a thematic essay on health begins.
Entrepreneurial leadership dissertations bowling for columbine essay conclusion paragraph. Importance society in of language our essay english.
LARGEST Free English Essays Database: Over 180,000 English Essays, English Term Papers, English Research Paper, Book Reports. 184 990 ESSAYS, term and research papers.
Professional Academic Help. Starting at .99 per pageHere you can get a top-notch personal statement - Essay About English Language Society.
Category: Cultural Identity Essays; Title: Language and Culture in an Immigrant Society.
AP® ENGLISH LANGUAGE AND essay with many distracting modern-day satirists "encourage us to question the ills of our society through humor." The language.
Essay on Language and its Importance to Society! Language and Society. From what has been written so far it is clear that man is possessed of natural sociality.
What does veterans day mean to me essay oostende bashung explication essay mi instituto essay. Language society essays and Vegetative toestand euthanasia essay.
Essay english language society essay. 5 stars based on 33 reviews Mla format title page essay contents. Good essay structures. Essay informal letter pmr volume.
Essay on Language and its Importance to Society! Language and Society The Hindi linguists have coined some words to replace English as a medium.
Free Essays on Role Of English Language In Modern Society. Get help with your writing. 1 through.
Professional Academic Help. Starting at .99 per pageOrder is too expensive? Split your payment apart - Importance of english language in our society essay.
Language english society about Essay Cornell vs princeton engineering essay animal imagery in othello essay conclusion sarah carr the hechinger report essay.
This free Linguistics essay on Essay: The English Language is perfect for Linguistics students to use as an example.
Professional Academic Help. Starting at .99 per pageOrder is too expensive? Split your payment apart - Essay report english language society board.
Essay english language society This entry was posted in Uncategorized on October 24, 2016 by Essay english language society. 4 stars based on 30 reviews Teaching.
Open Document. Below is an essay on Language And Society from Anti Essays, your source for research papers, essays, and term paper examples.
On June 8, 2015 By Aditi Chopra Category: Essays, Paragraphs and Articles. English plays an English language is widely used in official communications.
The Importance Of English Language English Language Essay. Published: 23, March 2015. The usage of English Language has become significant in our daily.
Daniel pink essay The data shows that the article an is used before words begin with vowels and essay about english language society a before words.
Search for English Language Society. Look Up Quick Results.
New cognitive research suggests that language profoundly influences the way people see the world; a different sense of blame in Japanese and Spanish.
Importance our society of on in Essay language english Essay ways to reduce bullying 1980s culture events essays. On laziness essay analysis of the whistle.
Sep 28, 2015 As language plays very important role in the development of a person personality. language which has become the medium of expression for their society. /significance-of-language-in-human-affairs-philosophy-essay.php.


text:
; =============================================================================
; BareMetal -- a 64-bit OS written in Assembly for x86-64 systems
; Copyright (C) 2008-2015 Return Infinity -- see LICENSE.TXT
;
; Memory functions
; =============================================================================

; -----------------------------------------------------------------------------
; os_mem_allocate -- Allocates the requested number of 2 MiB pages
;  IN:	RCX = Number of pages to allocate
; OUT:	RAX = Starting address (Set to 0 on failure)
; This function will only allocate continuous pages
os_mem_allocate:
	push rsi
	push rdx
	push rbx

	cmp rcx, 0
	je os_mem_allocate_fail		; At least 1 page must be allocated

	; Here, we'll load the last existing page of memory in RSI.
	; RAX and RSI instructions are purposefully interleaved.

	xor rax, rax
	mov rsi, os_MemoryMap		; First available memory block
	mov eax, [os_MemAmount]		; Total memory in MiB from a double-word
	mov rdx, rsi			; Keep os_MemoryMap unmodified for later in RDX
	shr eax, 1			; Divide actual memory by 2

	sub rsi, 1
	std				; Set direction flag to backward
	add rsi, rax			; RSI now points to the last page

os_mem_allocate_start:			; Find a free page of memory, from the end.
	mov rbx, rcx			; RBX is our temporary counter

os_mem_allocate_nextpage:
	lodsb
	cmp rsi, rdx			; We have hit the start of the memory map, no more free pages
	je os_mem_allocate_fail

	cmp al, 1
	jne os_mem_allocate_start	; Page is taken, start counting from scratch

	dec rbx				; We found a page! Any page left to find?
	jnz os_mem_allocate_nextpage

os_mem_allocate_mark:			; We have a suitable free series of pages. Allocate them.
	cld				; Set direction flag to forward

	xor rdi, rsi			; We swap rdi and rsi to keep rdi contents.
	xor rsi, rdi
	xor rdi, rsi

	; Instructions are purposefully swapped at some places here to avoid
	; direct dependencies line after line.
	push rcx			; Keep RCX as is for the 'rep stosb' to come
	add rdi, 1
	mov al, 2
	mov rbx, rdi			; RBX points to the starting page
	rep stosb
	mov rdi, rsi			; Restoring RDI
	sub rbx, rdx			; RBX now contains the memory page number
	pop rcx 			; Restore RCX

	; Only dependency left is between the two next lines.
	shl rbx, 21			; Quick multiply by 2097152 (2 MiB) to get the starting memory address
	mov rax, rbx			; Return the starting address in RAX
	jmp os_mem_allocate_end

os_mem_allocate_fail:
	cld				; Set direction flag to forward
	xor rax, rax			; Failure so set RAX to 0 (No pages allocated)

os_mem_allocate_end:
	pop rbx
	pop rdx
	pop rsi
	ret
; -----------------------------------------------------------------------------

; -----------------------------------------------------------------------------
; os_mem_release -- Frees the requested number of 2 MiB pages
;  IN:	RAX = Starting address
;	RCX = Number of pages to free
; OUT:	RCX = Number of pages freed
os_mem_release:
	push rdi
	push rcx
	push rax

	shr rax, 21			; Quick divide by 2097152 (2 MiB) to get the starting page number
	add rax, os_MemoryMap
	mov rdi, rax
	mov al, 1
	rep stosb

	pop rax
	pop rcx
	pop rdi
	ret
; -----------------------------------------------------------------------------

; -----------------------------------------------------------------------------
; os_mem_get_free -- Returns the number of 2 MiB pages that are available
;  IN:	Nothing
; OUT:	RCX = Number of free 2 MiB pages
os_mem_get_free:
	push rsi
	push rbx
	push rax

	mov rsi, os_MemoryMap
	xor rcx, rcx
	xor rbx, rbx

os_mem_get_free_next:
	lodsb
	inc rcx
	cmp rcx, 65536
	je os_mem_get_free_end
	cmp al, 1
	jne os_mem_get_free_next
	inc rbx
	jmp os_mem_get_free_next

os_mem_get_free_end:
	mov rcx, rbx

	pop rax
	pop rbx
	pop rsi
	ret
; -----------------------------------------------------------------------------

; =============================================================================
; EOF

redpajama_set_name: RedPajamaGithub


Two Yuutas in contrasting sweaters. Actually the little guy on the left is Yuuta's new friend Kouta.
Kouta is a Magic Boy of Moonlight Yuuta that I picked up at Mandarake. Ebay prices were just insane for this boy but Mandarake sold him for just a hair over his original cost. This was my second time buying from them. Great to deal with and fast. Would purchase from them again in a heart beat.


JOHANNESBURG - The Property Sector Charter Council hosted a seminar on the transformation in the property industry and the way forward – ahead of the gazetting of the sector charter – to ensure that the industry members understand the implications to the sector and business at large.
The property sector remains one of the key economic sectors in the South African economy, estimated at R4 trillion in total value (49% and 52% attributed to commercial and residential sectors, respectively).
"It is because of the recognition of the importance of transformation as a critical imperative for all South African economic sectors that the Property Sector Charter Council commits to strive for transformed property relations in South Africa and to promote a vibrant growing property sector," said Portia Tau-Sekati, chief executive officer of the Property Sector Charter Council.
The Property Charter stakeholders including the public sector, property service providers, property owners, regulatory bodies and other interest groups participating in the private sector met to discuss progress made since the adoption of the Property Sector Transformation Charter.
It is expected that the Property Charter will unlock obstacles to property ownership and the effective participation of all South Africans in the property market.
"This seminar marks a major step in a process started many years ago by the late Minister of Public Works, Stella Sigcau," said Saul Gumede, chairman of the Property Sector Charter Council.
"The road that has been travelled since the adoption of the Property Sector Transformation Charter in 2007 speaks volumes about our commitment and willingness to conclude the work of those who have come before us," said Gumede.
Tau-Sekati said this seminar launches the education and awareness drive around the Property Charter and brings into effect the commitment and buy-in of support of transformation and empowerment by all signatories through the sector charter, by driving implementation in order to achieve key milestones and targets.
"The Property Sector Charter is only a guiding document of how transformation and empowerment could be achieved in the property sector. The true delivery and effects will be seen in the implementation of the charter by its stakeholders," said Tau-Sekati.
Transformation remains a key delivery for the Minister of Public Works, Gwen Mahlangu-Nkabinde. "It is through the Property Sector Charter that as government – the single biggest property owner (with property holding of about R400 billion) and biggest tenant and client in the South African property sector – we become a major catalyst for change in property ownership. We aim to promote the objectives contained in the BBBEE Act of enabling meaningful participation of black people including women, youth and people with disabilities to achieve sustainable development and general prosperity," says Minister Mahlangu-Nkabinde.
Through its Ministry the Department of Public Works acknowledges its crucial role in the transformation of the property sector. It realises that the success of the Property Sector Charter depends on the full co-operation and commitment of government departments and private sector organisations involved in the property sector.
· Create a platform to increase the pool of intellectual capital amongst black people, particularly women, in the sector by contributing towards increased investment in skills development and training of existing and new black professionals.
The aim of the seminar was also to establish how government could work with the private sector on initiatives that show clear commitment and concrete interventions that support empowerment aligned to the charter," said Tau-Sekati.


text:
/**
 * Javascript to support the heatmap visualization
 */
/*global $, document, Raphael, alert, window, location */

if (!window.Juxta) {
   window.Juxta = {};
}
if (!window.Juxta.Heatmap) {
   window.Juxta.Heatmap = {};
}

$(function() {

   /**
    * Get the maximum, non-scrolling height for the heatmap content area
    */
   var getMaxNonScrollHeight = function() {
      var maxH = $("#juxta-ws-content").parent().height();
      var headerH = $(".header").outerHeight();
      if ( $("#condensed-header").exists() ) {
         headerH = $("#condensed-header").outerHeight();
      }
      var extraH = headerH + $(".heatmap-toolbar").outerHeight();
      if ($("#condensed").text() === "true") {
         extraH = extraH + $("#condensed-heatmap-footer").outerHeight();
      }
      return (maxH - extraH );
   };

   /**
    * Create raphael canvases to use when drawing the change index circles
    */
   var renderWitnessChangeIndexes = function() {
      var attribs = {
         stroke : '#000',
         'stroke-width' : 0.5
      };
      var fill = {
         stroke : '#BBC1FF',
         'stroke-width' : 0,
         fill: '#BBC1FF'
      };

      var idxJson = $.parseJSON( $("#witness-change-indexes").text() );
      var colors = ["#FFFFFF", "#EFF0FF", "#D5D9FF", "#BBC1FF", "#A1AAFF", "#8792FF", "#6D7BFF", "#5363FF"];
      var dim = "#aaa";
      var dark = "#000";
      var witId;
      var changeIndex;
      $(".change-index").each(function(index) {
         witId = $(this).attr("id").substring("change-index-".length);
         $.each( idxJson, function(idx, obj) {
            if (obj.id === parseInt(witId,10)) {
               changeIndex = obj.ci;
               return false;
            }
         });
         $(this).attr("title", changeIndex + " change index from base text");
         var paper = new Raphael($(this).get(0), $(this).width(), 10);
         $(this).data("paper", paper);
         var box = paper.rect(0, 0, $(this).width(), 10);
         box.attr(attribs);
         box = paper.rect(1, 1, $(this).width()*changeIndex, 8);
         box.attr(fill);
      });
   };

   /**
    * Purge the cached heatmap data and re-render the contents
    */
   var refreshHeatmap = function() {

      // send an ajax DELETE to purge the heatmap cache for this set. Once
      // successful, just reload the page to get the updated view
      var setId = $('#setId').text();
      var csUrl = $('#ajax-base-url').text() + setId + $('#view-heatmap-segment').text();
      $.ajax({
         url : csUrl,
         type : 'DELETE',
         async : false,
         success : function() {
            location.reload();
         },
         error : function(jqXHR, textStatus, errorThrown) {
            alert("Unable refresh heatmap view:\n\n" + jqXHR.responseText);
         }
      });
   };

   /**
    * Show a note or margin box in the gutter, and align it with the specified top position
    */
   var showAndAlign = function(top, tgtEle, tgtClass, ownerDiv) {
      tgtEle.width(ownerDiv.width() - 8);
      tgtEle.css({
         position : "relative",
         margin : 0,
         marginTop : 0,
         top : top
      });
      tgtEle.show();

      var bot = tgtEle.position().top + tgtEle.outerHeight();
      if (bot > ownerDiv.height()) {
         ownerDiv.height(bot);
      }
   };

   /**
    * Layout notes boxes in the right-side gutter
    */
   var layoutNotes = function() {

      var scrollPos = $(".heatmap-scroller").position().top;
      var scrollTop = $(".heatmap-scroller").scrollTop();
      var lastTop = -1;
      var totalHeight = 0;
      var top = 0;
      var firstTop = -1;

      // iterate over each note and find its anchor. align
      // the top of the note with the top of the anchor
      $(".note").each(function(index) {
         var noteId = $(this).attr("id");
         var anchorId = "note-anchor-" + noteId.substring(5);
         var anchor = $("#" + anchorId);

         if (anchor.exists()) {
            // the first note just gets positioned directly.
            if (lastTop === -1) {
               top = anchor.position().top - scrollPos + scrollTop;
            } else {
               // all others are positioned relateve and need to bump
               // their top pos by the accumulated height of all others
               var newTop = anchor.position().top - scrollPos + scrollTop;
               if (newTop <= (lastTop + totalHeight)) {
                  // this overlaps the prior note. Just bump the top
                  // 5 piles down (relative to the prior)
                  top += 5;
               } else {
                  top += (newTop - lastTop);
                  top -= totalHeight;
               }
            }

            if (firstTop === -1) {
               firstTop = top;
            }

            showAndAlign(top, $(this), 'note', $("#note-boxes"));
            totalHeight += $(this).outerHeight();
            lastTop = top;
         }
      });

      // if the new layout pushes the height from non-scrolly
      // to scrolly, slap on the scroll bar and reduce the witdth
      // of all of the boxes a bit so the are not chopped off
      // by the newly reduced horizontal space.
      if (firstTop + totalHeight > getMaxNonScrollHeight()) {
         $("#heatmap-scroller").css("overflow-y", "visible");
         $(".note").width($(".note").width() - 10);
      }
   };

   /**
    * Toggle view of revisions
    */
   var toggleRevisionStyle = function() {
      var revTags = $(".rev");
      if ($("#revisions-button").hasClass("pushed") === false) {
         $("#revisions-button").addClass("pushed");
         revTags.removeClass("plain-revs");
         revTags.addClass("reveal");
      } else {
         $("#revisions-button").removeClass("pushed");
         revTags.removeClass("reveal");
         revTags.addClass("plain-revs");
      }
   };

   var toggleLineNumbers = function() {
      var lineNumTags = $(".line-number");
      if ($("#line-num-button").hasClass("pushed") === false) {
         $("#line-num-button").addClass("pushed");
         lineNumTags.show();
      } else {
         $("#line-num-button").removeClass("pushed");
         lineNumTags.hide();
      }
   };

   var toggleUserAnnotations = function() {
      if ($("#annotations-button").hasClass("pushed") === false) {
         $("#annotations-button").addClass("pushed");
         $.ajax({
            url : $('#ajax-base-url').text() + $('#setId').text() + $('#annotate-segment').text() + "?base=" + $("#baseId").text(),
            type : 'GET',
            async : false,
            dataType: "html",
            success : function(data, textStatus, jqXHR) {
               $("#ua-scroller").html(data);
               $("#annotation-browser").show();
               $("#annotation-browser").animate({
                  left : "-=" + ($("#annotation-browser").outerWidth()+2) + "px"
               }, 500);
            }
         });
      } else {
         $("#annotations-button").removeClass("pushed");
         $(".heatmap").removeClass("outlined");
         $("#annotation-browser").animate({
           left: "+="+ $("#annotation-browser").outerWidth() +"px"
         }, 500 );
      }
   };

   /**
    * Togggle view of page breaks
    */
   var togglePbTags = function() {
      var pbTags = $(".page-break");
      if ($("#pb-button").hasClass("pushed") === false) {
         $("#pb-button").addClass("pushed");
         pbTags.css('visibility', 'visible');
      } else {
         $("#pb-button").removeClass("pushed");
         pbTags.css('visibility', 'hidden');
      }
   };

   /**
    * Toggle view of notes
    */
   var toggleNotes = function() {
      var notes = $(".note-anchor");
      if ($("#notes-button").hasClass("pushed") === false) {
         $("#notes-button").addClass("pushed");
         notes.removeClass("note-anchor-hidden");
         $("#note-boxes").show();
      } else {
         $("#notes-button").removeClass("pushed");
         notes.addClass("note-anchor-hidden");
         $("#note-boxes").hide();
      }
   };

   /**
    * Clear out all margin boxes and replace with note boxes
    */
   var clearBoxes = function() {
      if ( $("#hm-overlay").exists() ) {
         $("#hm-overlay").remove();
      }

      $("#margin-boxes").fadeOut(250, function() {
         var priorActive = $(".active");
         priorActive.removeClass("active");
         if ($("#condensed").text() === 'true') {
            if ($("#notes-button").data("selected")) {
               $("#note-boxes").fadeIn(250);
               layoutNotes();
            } else {
               $("#heatmap-text").removeClass("dimmed");
            }
         }
      });
   };

   var showAnnotation = function(id, note) {
      if ( id === null ) {
         $('.box-annotation.group').text(note);
         $('.group-annotation').show();
         if ( $("#show-annotation-controls").text() === "yes") {
            $(".group-del-anno").show();
            $(".group-anno.anno-edit").show();
            $("#group-add-anno").hide();
         } else {
            $(".group-del-anno").hide();
            $(".group-anno.anno-edit").hide();
            $("#group-add-anno").show();
         }
      } else {
         $('#box-anno-' + id).text(note);
         $('#box-annotation-' + id).show();
         if ( $("#show-annotation-controls").text() === "yes") {
            $('#del-anno-' + id).show();
            $("#edit-anno-" + id).show();
            $("#add-anno-" + id).hide();
         } else {
            $('#del-anno-' + id).hide();
            $("#edit-anno-" + id).hide();
            $("#add-anno-" + id).show();
         }
      }
   };

   var addOverlay = function() {
      $('#heatmap-scroller').append("

");
      $("#hm-overlay").height( $("#heatmap-scroller").height());
      $("#hm-overlay").css( "top", $('#heatmap-scroller').offset().top+"px");
      var help = $("
");
      $("#heatmap-scroller").append(help);
      var w  = help.width();
      help.remove();
      $("#hm-overlay").width(w);
   };

   /**
    * Show all margin boxes for the specified alignment
    */
   var showMarginBoxes = function(alignId) {

      // if we clicked same diff, do nothing otherwise clear the old one
      var priorActive = $(".active");
      if (priorActive.length > 0) {
         var priorId = priorActive.attr("id");
         if (priorId === alignId) {
            return;
         } else {
            priorActive.removeClass("active");
         }
      }

      // FIRST turn on some dimming and a wait cursor
      $("body").trigger('wait-requested');
      $('#wait-popup').show();

      // hide ALL boxes. this to cover case when 1st click shows 4 and 2nd shows 1
      // must ensure that the extra 3 are no longer shown
      $('.margin-box').hide();

      // make an ajax request to get json containing
      // data to fill out the margin boxes with detail
      var src = $("#" + alignId);
      var range = src.attr("juxta:range");
      var setId = $('#setId').text();
      var csUrl = $('#ajax-base-url').text() + setId + $('#fragment-segment').text();
      var url = csUrl + '?range=' + range + "&base=" + $("#baseId").text();
      var filter = $("#witness-filter").text();
      filter = $.trim(filter.replace("[", "").replace("]", "").replace(/\s+/g, ""));
      if (filter.length > 0) {
         url = url + "&filter=" + filter;
      }

      $.ajax({
         contentType : 'application/json',
         accepts : {
            json : 'application/json'
         },
         type : 'GET',
         url : url,
         dataType : 'json',
         success : function(jsonData) {
            // toggle to margin box view
            $("#note-boxes").hide();
            $("#margin-boxes").show();

            // make clicked change active and show margin boxes
            src.addClass("active");

            // show group anno?
            if ( jsonData.groupAnnotation.length > 0) {
               $(".box-annotation.group").text( jsonData.groupAnnotation );
               $(".group-annotation").show();
               $("#group-add-anno").hide();
               if ( $("#show-annotation-controls").text() === "yes") {
                  $(".group-annotation .anno-edit").show();
                  $(".group-annotation .anno-del").show();
               } else {
                  $(".group-annotation .anno-edit").hide();
                  $(".group-annotation .anno-del").hide();
               }
            } else {
               $(".group-annotation").hide();
               if ( $("#show-annotation-controls").text() === "yes") {
                  $("#group-add-anno").show();
               } else {
                  $("#group-add-anno").hide();
               }
            }

            // figure out the top pos of the clicked diff within the scroll div
            var scrollPos = $(".heatmap-scroller").position().top;
            var scrollTop = $(".heatmap-scroller").scrollTop();
            var boxTop = src.position().top - scrollPos + scrollTop;
            $("#margin-boxes").css({
               position : "relative",
               top : boxTop
            });

            // fill boxes with change data
            var idx;
            for ( idx = 0; idx < jsonData.fragments.length; idx += 1) {
               var diff = jsonData.fragments[idx];
               var boxId = idx + 1;

               if ( diff.note.length === 0) {
                  $('#box-annotation-' + boxId).hide();
                  if ( $("#show-annotation-controls").text() === "yes") {
                     $('#add-anno-' + boxId).show();
                  } else {
                      $('#add-anno-' + boxId).hide();
                  }
               } else {
                  showAnnotation(boxId, diff.note);
               }

               // set title with witness name
               var titleEle = $('#box-title-' + boxId);
               titleEle.html(diff.typeSymbol + diff.witnessName);
               $("#mb-wit-id-" + boxId).text(diff.witnessId);

               var txtEle = $('#box-txt-' + boxId);
               txtEle.html(diff.fragment);

               $("#box-" + boxId).show();
            }

            if ($("#condensed").text() === 'true') {
               addOverlay();
               $("#hm-overlay").css("z-index", "1");
               $("#margin-boxes").css("z-index", "1000");

               var bottomY = $("#heatmap-text").position().top + $("#heatmap-text").outerHeight();
               $("#margin-boxes").css("left", ($("#heatmap-text").width() - $("#margin-boxes").width()) / 2);
               // box container is below the text. move it up to alignt with clicked diff
               var t = boxTop - bottomY + $("#condensed-header").outerHeight(true) - $("#heatmap-scroller").scrollTop();
               $("#margin-boxes").css("top",  t);
            }

            $('#wait-popup').hide();
            $("body").trigger('wait-completed');
         },
         error : function(jqXHR, textStatus, errorThrown) {
            alert("Unable to determine differences.\n     " + jqXHR.responseText);
            $('#wait-popup').hide();
            $("body").trigger('wait-completed');
         },
         xhrFields : {
            withCredentials : true
         }
      });
   };

   window.Juxta.Heatmap.toggleVisibility = function(icon) {
      var witnessId = $(icon).attr("id").substring("toggle-".length);
      if ( witnessId === $("#baseId").text()) {
         return;
      }
      var top = $("#heatmap-scroller").scrollTop();
      var full = $("#heatmap-scroller")[0].scrollHeight;
      var percent = top / full;

      var p = $(icon).css("background-position");
      if (p.indexOf("16") === -1) {
         $(icon).css("background-position", "0px 16px");
         $("#witness-" + witnessId).addClass("hidden-witness");
         $("#toggle-"+witnessId).attr("title", "Show Witness");
      } else {
         $(icon).css("background-position", "0px 0px");
         $("#witness-" + witnessId).removeClass("hidden-witness");
         $("#toggle-"+witnessId).attr("title", "Hide Witness");
      }

      var by = $("input[name=hm-sort-by]:radio:checked").val();
      var dir = $("input[name=hm-sort]:radio:checked").val();
      var setId = $('#setId').text();
      var csUrl = $('#ajax-base-url').text() + setId + $('#view-heatmap-segment').text() + "base=" + $("#baseId").text()+"&by="+by+"&order="+dir;
      csUrl = csUrl + "&top="+percent.toFixed(5);
      var filter = "";
      $(".visibility-toggle").each(function() {
         p = $(this).css("background-position");
         if (p.indexOf("16") > -1) {
            if (filter.length > 0) {
               filter = filter + ",";
            }
            filter = filter + $(this).attr("id").substring("toggle-".length);
         }
      });

      if (filter.length > 0) {
         csUrl = csUrl + "&filter=" + filter;
      }
      window.location = csUrl;
   };

   var sizeWitnessList = function() {
      var maxH = $("#juxta-ws-content").parent().height();
      $("#files").height(maxH);
      $("#files-scroller").height(maxH-$(".header").outerHeight(true) );
      if ( $("#files-content").height() > (maxH-$(".header").outerHeight(true))) {
          $("#files-scroller").css("overflow-y", "scroll");
      } else {
         $("#files-scroller").css("overflow-y", "hidden");
      }
   };

   var sizeAnnotationBrowser = function() {
      $("#annotation-browser").hide();
      $("#annotations-button").removeClass("pushed");
      $("#annotation-browser").height( $("#heatmap-scroller").height()-12);
      $("#annotation-browser").css("top", ($("#heatmap-scroller").position().top+5)+"px");
      var l = $("#heatmap-scroller").position().left + $("#heatmap-scroller").outerWidth(true)+10;
      $("#annotation-browser").css("left",l+"px");
   };

   var initAddAnnotation = function() {
      $(".group-anno").on("click", function(event) {
         event.stopPropagation();
         if ( $(this).hasClass("anno-edit") ) {
            $(".group-annotation").hide();
            $(".group-edit-annotation .ua-toolbar").text("Edit Regional Annotation");
            $(".annotation-editor.group").val($(".box-annotation.group").text());
         } else {
            $(".group-edit-annotation .ua-toolbar").text("Add Regional Annotation");
            $(".annotation-editor.group").val("");
         }
         $(".group-edit-annotation").show();
         $(".annotation-editor.group").focus();
      });

      $(".hm-anno").on("click", function(event) {
         event.stopPropagation();
         var diffNum =  $(this).attr("id");
         diffNum = diffNum.substring( diffNum.lastIndexOf("-")+1);
         if ( $(this).hasClass("anno-edit") ) {
            $("#box-annotation-"+diffNum).hide();
            $("#box-edit-annotation-"+diffNum+" .ua-toolbar span").text("Edit Annotation");
            $("#annotation-editor-"+diffNum).val($("#box-anno-"+diffNum).text());
         } else {
            $("#box-edit-annotation-"+diffNum+" .ua-toolbar span").text("Add Annotation");
            $("#box-anno-"+diffNum).text("");
            $("#annotation-editor-"+diffNum).val("");
         }
         $("#box-edit-annotation-"+diffNum).show();
         $("#annotation-editor-"+diffNum).focus();
         var bot = $("#box-edit-annotation-"+diffNum).position().top + $("#box-edit-annotation-"+diffNum).outerHeight();
         if (bot > $("#heatmap-scroller").height()) {
            $("#heatmap-scroller").height(bot);
         }
      });
      $(".anno-ok-button").on("click", function(event) {
         event.stopPropagation();
         var owner = $(this).closest(".box-edit-annotation");
         var data = {};
         var diffId = null;
         var r = $("#heatmap-text .heatmap.active").attr("juxta:range").split(",");
         data.baseId = $("#baseId").text();
         data.baseRange = { start: r[0], end: r[1]};

         if ( owner.exists() ) {
            diffId = owner.attr("id").substring("box-edit-annotation-".length);
            data.witnessId = $("#mb-wit-id-"+diffId).text();
            data.note = $("#annotation-editor-"+diffId).val();
            data.isGroup = false;
         } else {
            owner = $(this).closest(".group-edit-annotation");
            data.witnessId = $("#curr-base-witness-id").text();
            data.note = $(".annotation-editor.group").val();
            data.isGroup = true;
         }

         $.ajax({
           type: "POST",
           url: $('#ajax-base-url').text() + $('#setId').text() + $('#annotate-segment').text(),
           data: JSON.stringify(data),
           contentType : 'application/json',
           success: function() {
              owner.hide();
              showAnnotation(diffId, data.note);
              $("#annotations-button").show();
              sizeAnnotationBrowser();
           }
         });
      });
      $(".anno-cancel-button").on("click", function(event) {
         event.stopPropagation();
         var p = $(this).closest(".box-edit-annotation");
         if ( p.exists()) {
            var diffNum = p.attr("id").substring("box-edit-annotation-".length);
            if ( p.find("span").text().indexOf("Edit ") > -1 ) {
               $("#box-annotation-"+diffNum).show();
            }
            p.hide();
         } else {
             p = $(this).closest(".group-edit-annotation");
             if ( p.find(".ua-toolbar").text().indexOf("Edit ") > -1 ) {
               $(".group-annotation").show();
             }
             p.hide();
         }
      });
   };

   var initDelAnnotation = function() {
      $(".group-del-anno").on("click", function(event) {
         event.stopPropagation();
         $(".group-del-annotation").show();
      });

      $(".hm-del-anno").on("click", function(event) {
         event.stopPropagation();
         var diffNum =  $(this).attr("id");
         diffNum = diffNum.substring( diffNum.lastIndexOf("-")+1);
         $("#box-del-annotation-"+diffNum).show();
      });

      $(".del-anno-cancel-button").on("click", function(event) {
         event.stopPropagation();
         var p = $(this).closest(".box-del-annotation").hide();
         if ( p.exists()) {
            p.hide();
         } else {
            $(this).closest(".group-del-annotation").hide();
         }
      });

      $(".del-anno-ok-button").on("click", function(event) {
         event.stopPropagation();
         var owner = $(this).closest(".box-del-annotation");
         var url = $('#ajax-base-url').text() + $('#setId').text() + $('#annotate-segment').text();
         var r = $("#heatmap-text .heatmap.active").attr("juxta:range").split(",");
         url = url + "?base="+$("#baseId").text()+"&range="+r;
         var diffId = null;
         if ( owner.exists() ) {
            diffId = owner.attr("id").substring("box-del-annotation-".length);
            url = url + "&witness="+$("#mb-wit-id-"+diffId).text();
         } else {
            owner = $(this).closest(".group-del-annotation");
            url = url + "&witness=0";
         }

         $.ajax({
           type: "DELETE",
           url: url,
           success: function( resp ) {
              if ( parseInt(resp,10) === 0) {
                 $("#annotations-button").hide();
              }
              $(owner).hide();
              if ( diffId !== null ) {
                 $("#box-annotation-"+diffId).hide();
                 if ( $("#show-annotation-controls").text() === "yes") {
                     $("#add-anno-"+ diffId).show();
                 }
              } else {
                 $(".group-annotation").hide();
                 if ( $("#show-annotation-controls").text() === "yes") {
                     $("#group-add-anno").show();
                 }
              }
           }
         });
      });
   };

   /**
    * Initialize heatmap size, layout and events
    */
   window.Juxta.Heatmap.initialize = function() {

      var reloadSet = function( baseId ) {
         var by = $("input[name=hm-sort-by]:radio:checked").val();
         var dir = $("input[name=hm-sort]:radio:checked").val();
         var setId = $('#setId').text();
         var csUrl = $('#ajax-base-url').text() + setId + $('#view-heatmap-segment').text() + "base=" + baseId+"&by="+by+"&order="+dir;
         window.location = csUrl;
      };

      var setSortOrder  = function() {
         var by = $("input[name=hm-sort-by]:radio:checked").val();
         var dir = $("input[name=hm-sort]:radio:checked").val();
         if (by === 'name') {
            $("#files").find(".set-file").tsort({
               order : dir,
               attr : 'title'
            });
         } else {
            $("#files").find(".set-file").tsort({
               order : dir,
               attr : 'juxta:date'
            });
         }
      };

      $("#juxta-ws-content").parent().css("overflow-y", "hidden");

      var h = getMaxNonScrollHeight();
      $(".heatmap-scroller").height(h);
      sizeWitnessList();

      var fullHeight = $(".heatmap-text").outerHeight();
      if (fullHeight < h) {
         $(".heatmap-scroller").css("overflow-y", "hidden");
      }

      // Setup the full heatmap UI as long as we are not in condensed mode
      if ($("#condensed").text() === 'false') {

         // set initial sort order
         setSortOrder();

         // sort dropdown goodness
         var dd = $("#files").find(".dropdown");
         $("body").on("click", function() {
            $(".dropdown").hide();
         });
         $("#sort-header").on("click", function(event) {
            event.stopPropagation();
            if ($(dd).is(":visible")) {
               $(dd).hide();
            } else {
               $(dd).show();
            }
         });
         $("#files .dropdown li").on("click", function(event) {
            event.stopPropagation();
            if ( $(this).attr("id") !== "divider-row") {
               $(".dropdown").hide();
               var btn =  $(this).children(".sort-radio");
               if ( !btn.is(':checked') ) {
                  btn.attr('checked', true);
               }
               setSortOrder();
            }
         });

         var r = $("#files").position().left + $("#files").outerWidth(true);
         $(dd).css("left", (r - $(dd).outerWidth()) + "px");

         // initially, notes and pagebreaks are displayed. set buttons to pushed
         $("#notes-button").addClass("pushed");
         $("#pb-button").addClass("pushed");
         $("#line-num-button").addClass("pushed");

         // create a bunch of raphael canvases
         // for the non-base witnesses. Render the colored
         // blocks in them to indicate change index
         renderWitnessChangeIndexes();

         // space the note boxes in the margins and handle highlighting
         // note / anchor pairs on mouse movement
         layoutNotes();
         $("#note-boxes").on("mouseenter", ".note", function(event) {
            var noteId = $(this).attr("id");
            $(this).addClass("highlighted");
            var anchorId = "note-anchor-" + noteId.substring(5);
            var anchorSpan = $("#" + anchorId);
            anchorSpan.removeClass("note-anchor");
            anchorSpan.addClass("note-anchor-highlighted");
         });
         $("#note-boxes").on("mouseleave", ".note", function(event) {
            var noteId = $(this).attr("id");
            $(this).removeClass("highlighted");
            var anchorId = "note-anchor-" + noteId.substring(5);
            var anchorSpan = $("#" + anchorId);
            anchorSpan.removeClass("note-anchor-highlighted");
            anchorSpan.addClass("note-anchor");
         });

         // change base witness by clicking on name in witness list on left
         $(".wit-click-area").on("click", function() {
            var witnessId = $(this).find(".witness").attr("id").substring("witness-".length);
            if ( $(this).find(".witness").hasClass("hidden-witness") ) {
               window.Juxta.Heatmap.toggleVisibility( $("#toggle-"+witnessId) );
            } else {
               reloadSet(witnessId);
            }
         });
      } else {
         // show the pick base popover
         $("#condensed-list-button").on("click", function() {
            $(".witness-option").each(function(index) {
               if ($(this).attr("id") === $("#baseId").text()) {
                  $(this).attr("selected", "selected");
               }
            });

            $('.condensed-witnesses-popup').css({
               "top" : $(this).position().top + $(this).outerHeight() - $('#pick-base-popup').outerHeight() + "px",
               "left" : $(this).position().left + "px"
            });
            $('#pick-base-popup').show();
         });

         // pick new base
         $("#base-ok-button").on("click", function() {
            var newBaseId = "";
            $(".witness-option").each(function(index) {
               if ($(this).attr("selected") === "selected") {
                  newBaseId = $(this).attr("id");
               }
            });
            reloadSet(newBaseId);
         });
         $("#base-cancel-button").on("click", function() {
            $('#pick-base-popup').hide();
         });
      }

      $.each($.parseJSON($("#witness-filter").text()), function(idx, witId) {
         $("#toggle-" + witId).css("background-position", "0px 16px");
         $("#change-index-" + witId).hide();
         $("#witness-" + witId).addClass("hidden-witness");
         $("#toggle-"+witId).attr("title", "Show Witness");
      });

      $(".visibility-toggle").on("click", function() {
         window.Juxta.Heatmap.toggleVisibility($(this));
      });

      // clicks on background clear boxes
      // and revert to note display
      $("body").click(function() {
         if ( $(".box-edit-annotation").is(":visible") === false && $(".box-del-annotation").is(":visible") === false &&
              $(".group-edit-annotation").is(":visible")===false && $(".group-del-annotation").is(":visible")===false)  {
            clearBoxes();
         }
      });

      // click heatmap to show margin box
      $("#heatmap-text").on("click", ".heatmap", function(event) {
         showMarginBoxes($(this).attr("id"));
         event.stopPropagation();
      });

      // Annotations handling setup
      initAddAnnotation();
      initDelAnnotation();

      $("#annotation-browser").on("click", ".show-ua", function() {
         var r = $(this).closest("div.ua").attr("juxta:range");
         $('.heatmap').removeClass("outlined");
         var matched = false;
         var hit = $('.heatmap').filter(function() {
            if (matched) return false;
            var rng = $(this).attr('juxta:range');
            if ( rng === r ) {
               matched = true;
               return true;
            }
            if ( parseInt(r.split(",")[0],10) >= parseInt(rng.split(",")[0],10) &&  parseInt(r.split(",")[1],10) <= parseInt(rng.split(",")[1],10) ) {
               matched = true;
               return true;
            }
            return false;
         });
         $(hit).addClass("outlined");
         $('#heatmap-scroller').animate({
            scrollTop : $(hit).offset().top - $('#heatmap-scroller').offset().top + $('#heatmap-scroller').scrollTop()-10
         });
      });

      sizeAnnotationBrowser();
      $("#annotations-button").on("click", function() {
         toggleUserAnnotations();
      });

      // hook up event handlers for the heatmap toolbar buttons
      $("#refresh-button").on("click", function() {
         refreshHeatmap();
      });
      $("#pb-button").on("click", function() {
         togglePbTags();
      });
      $("#line-num-button").on("click", function() {
         toggleLineNumbers();
      });
      $("#notes-button").on("click", function() {
         toggleNotes();
      });
      $("#revisions-button").on("click", function() {
         toggleRevisionStyle();
      });
   };

   // Let the world know that the heatmap code is now loaded and can be initialized
   if ( $("#heatmap-text").exists() > 0 ) {
      $("body").trigger('heatmap-loaded');
   }

   $(window).resize(function() {
      // don't try to do anything if the curr page
      // does not contain a heatmap
      if ($(".heatmap-text").exists()) {

         var h = getMaxNonScrollHeight();
         $(".heatmap-scroller").height(h);
         var fullHeight = $(".heatmap-text").outerHeight();
         if (fullHeight < h) {
            $(".heatmap-scroller").css("overflow-y", "hidden");
         }

         sizeWitnessList();
         sizeAnnotationBrowser();

         // easiest to just clear boxes and reset notes on a resize
         clearBoxes();
         layoutNotes();

         var dd = $("#files").find(".dropdown");
         var r = $("#files").position().left + $("#files").outerWidth(true);
         $(dd).css("left", (r - $(dd).outerWidth()) + "px");
      }
   });

});


Mark it on your calendar! SPEC 2017 is only 9 months away!!!
If you have already downloaded the SPEC app (built using YAPP), the app is automatically updated.
If you haven't downloaded the app, use this link http://my.yapp.us/3FTVYJ to get YAPP and access the 2015 SPEC app.
Great stuff including schedules, class info, links to sports schedules, news field, and how to sign up for text messages.
Check out the SPEC schedule for 2015!
There have been a few changes from previous years and some new stuff too.


Clyde by Bed Stu is a fashionably classic boot best worn on a night out. Can be paired with pants, suits, and trousers. This boot is handcrafted in Mexico in vegetable tanned leather with a cushioned insole and has a 1-inch heel.


I have been using a FertiCare for some time now. I find it to be very frustrating as it can be very hit and miss.
Do any male SCI members have experience and if so any tips as to how I can make it more reliable?
Unfortunately it creates more stress than not.


text:
Ottawa Senators launch new Senators Community Foundation
Published Wednesday, August 12, 2020 12:20PM EDT Last Updated Wednesday, August 12, 2020 6:18PM EDT
OTTAWA -- The Ottawa Senators have announced the creation of a new charitable foundation after the Ottawa Senators Foundation cut ties with club management.
The Senators Community Foundation will be the new charitable arm of the capital's hockey team, and will work with partners such as CHEO, Roger Neilson House and the Boys & Girls Club of Ottawa.
Former Senators alternate captain Chris Phillips will serve as the foundation's executive director.
"The Foundation will be working closely with appropriate governmental agencies and charitable organizations to complete necessary registrations over the next several weeks to serve the needs of the Ottawa-Gatineau region by supporting Canadian charities and their worthy causes," the Senators said in a news release.
"We are extremely proud to have Chris Phillips lead our Foundation as he personifies what a community leader is all about," said Senators owner Eugene Melnyk in the release. "From being our first overall pick in 1996, to his 17 remarkable seasons that led to his jersey retirement earlier this year, he's a natural fit for this role."
Phillips, the Sens longest serving player, has spent countless hours on the ice and just as many off, volunteering his time to help his community.
"I'm excited about the opportunity," says Phillips. "We're certainly going to have to be creative but you know looking forward to anyway that we can make that happen to continue that great work that was done ... This brand and the team and alumni just bringing it all together I'm really looking forward to that."
The event was held outside the Brewer Park COVID-19 testing facility where Spartacat and "The Big Rig" himself handed out bobble heads to children who received a test lifting their spirits during trying times.
Patrick Drouin was there with his daughter Audrey.
"I think it's a good way to get started," says Drouin. Audrey received a number four bobble head handed to her by Phillips. "To reach out and let people know that they're there and trying to make a difference."
The new Senators Community Foundation will continue to work with partners such as the Boys and Girls Club, Rogers Neilson House and CHEO.
Hospital CEO Alex Munter was at the event and says the hospital relies on the relationship with the team to help raise money for programs aimed to help children.
"We're really encouraged to hear this renewed commitment from the Senators," says Munter. "The relationship between the players and families they come and visit the hospital encourage the kids it's been a really important part of the fabric of CHEO and with Chris there we look forward to it continuing."
This announcement follows the rebranding of the former Ottawa Senators Foundation as the Ottawa-Gatineau Youth Foundation.
The Club-Foundation Agreement between the Sens Foundation and Capital Sports and Entertainment expired on July 31, 2020.
Former Ottawa Senators alternate captain Chris Phillips has been named the first executive director of the new Ottawa Senators Community Foundation. (Tyler Fleming / CTV News Ottawa)
The Ottawa Senators Foundation rebrands as the Ottawa-Gatineau Youth Foundation
Ottawa Senators, Sens Foundation cutting ties after 22 years
Suspicious death off Tenth Line Road
Fired for falsifying nursing credentials
Inside Highbridge Construction's collapse
Ottawa police pursuit leads to five arrests
Two Quebec men charged with gun offenses after traffic stop on 401 near Kingston
Baby Tessa begins battle with rare form of brain cancer
These six Ottawa restaurants are in Canada's top 100


Simply fill in the following and I will show you THE PROGRAM and Unlock our Exclusive Accelerated Training Site, so that you can See It For Yourself.
You will quickly understand that we are VERY SERIOUS about YOUR SUCCESS!
Your Information is NEVER shared or put on some Silly Opportunity List!