text:
Undoubtedly, there’s a fierce competition between Android and iOS–as we always find an up and down in their market share. A mobile marketing company—Velti—has recently released its monthly report “State Mobile Advertising” for March 2012. According to the report, Apple’s iOS led over Android OS in March of this year. In this month, iOS had 53% mobile ad impression worldwide, while Android manged to grab 47% of impression. However, the company has gathered the data from the firm “Mobclix Exchange—having more than 33,500 apps and over 45 demand sources.

Until March of this year, iPad 2 had 74.4% of market penetration, while new iPad succeeded to hold 2.2% of total iPad’s market market share in just a month ahead of its launch. Over three million new iPads were sold within three days of its release in March this year. Indeed, the new iPad has outburst the market even in such intense competition–market is flourished with low-priced Tablets with numbers of lineups.

In terms of Smartphone, Apple dominated with 53% of market share, followed by Samsung and  HTC with 15% and 8% shares respectively. While LG and Motorola managed to obtain 6% of the market share each in March 2012. The notable Android devices during this period were Galaxy series by Samsung, HTC Wildfire, LG Optimus S, and HTC Evo.

Weather apps (cost $1.24) were more lucrative for publishers, followed by educational and Life style apps, which were priced $1.17 and $0.89 respectively.

The effective cost per mille (eCPMs)  for standard Smartphone banner ads on iOS platform was two times higher than the Android. Despite of this, advertisers more preferred iOS platform, along with, they were also willing to pay a premium for these services.

Source: Velti


Content-Type: application/http; msgtype=response

WARC-Identified-Payload-Type: text/html

WARC-Type: response

text:
Dead Gods

The Karl Says...

• The new Karl-W it turned out had been able to answer a few questions. He revealed that several months ago the wandering grey orc tribes had gathered in the plains to the distant north-east of the Great Road for a gathering of the people. Nobody was exactly certain on how the fighting started or who struck the first blow, but before long the tribes came to blows. A few small conflicts quickly escalated into a furious frenzy with stronger tribes scouring the weak and absorbing the survivors worthy.

• This was the beginning of surviving clans that would rise to reclaim the might of their ancestors. From one of the strongest clans, a warlock revealed that he had discovered the way into the ruins south of them and convinced first his own clan, then the strongest clan followed them first descending into the ruins through the Black Gate to drink the blood of the prince, Tenebrous.

• While he was unable to reveal anything of this demon prince Tenebrous other than his secretive nature, he did reveal that all the large surviving clans had descended into the ruins to drink the demon’s blood from what he called the Well of Shadows, and these numbered roughly a dozen, and all of these had loosely unified under the strongest clan with varying degrees of success. Most immediately, the clan that commanded his own fort had been away deep in the forests south of the fort. The demon they had fought was of a kind known as klurichir, and was in the service of a two-headed ogre warlock commanding another fort north of the Great Road.

• After a quick discussion, the party decided it was worth another attempt to strike some discord into these orcs by attempting to slay or capture their warlord. With help from the prisoner, it did not take long to pin down an ideal spot from where to slip in. They decided to try their luck and slip in the same way as before, relying on the ethereal plane to slip through the fort’s defenders.

• The plan worked better than before, this time with the party able to make the first move. Fenix used his sorcery to seal off the entrance to the fort behind them while Fenris and Cromlack attempted to tear through the strange two-headed ogre mutant. Desthro wasted no time in thinning out the guards around them dropping them terror-stricken as Fenix had done before. Gullah attempted to silence the warlock but failed. Fenix moved to tearing through the defenders in Desthro’s place as the doctor set about acquiring another Karl. Within moments however, as if hearing his master’s unspoken call the klurichir appeared in the room entering the fray as his master rose up above the swinging blades of Fenris and Cromlack leaving them on the ground beneath him while he prepared to get serious.

• Switching tactics, Fenris and Cromlack moved their attention to those remaining on the ground, while Fenix and Gullah turned their attention to the mutant. The klurichir sent out his own call, and the swirling heat entering the room suggested what would soon be arriving. Desthro finished acquiring a fel orc raider even as his enslaved warlock fell. The appearance of the two balors while their main enemies still stood convinced the party that they would need to get serious to have any chance of salvaging the success of their raid. Fenix, Desthro and Gullah all hurled their magic at the ogre in the air above them, who now had summoned a marilith to join the battle as Cromlack and Fenris braved the klurichir’s attacks attempting to strike it down as swiftly as they could fearful of the flaming blades and whips of the two balors.

• It was Gullah who then took down the ogre mage in his rage calling on the orc gods and imploding the fel warlord while the spells of Desthro and Fenix sapped the vitality and energy from the klurichir allowing the two barbarians to finish it off. Deciding there was no time to lose, the party fled leaving the two enraged balors to their fate and returning to Telflamm to decide their next move.

Sesshomaru Sesshomaru

I'm sorry, but we no longer support this web browser. Please upgrade your browser or install Chrome or Firefox to enjoy the full functionality of this site.

warcinfo:
robots: classic
hostname: ip-10-179-198-159.ec2.internal
software: Nutch 1.6 (CC)
isPartOf: CC-MAIN-2018-13
operator: Common Crawl Admin
description: Wide crawl of the web for March 2018
publisher: Common Crawl
format: WARC File Format 1.0
conformsTo: http://bibnum.bnf.fr/WARC/WARC_ISO_28500_version1_latestdraft.pdf


text:
Profitable S.F. Hair Salon In Presidio Heights #408984 posted Jun 8, 2016

  • California, United States
  • $89,000

* Great location On Main Retail thoroughfare in San Francisco's Prestigious Presidio Heights Neighborhood. * Long-established Salon caters to the area's successful customers seeking top-flight Hair Salon services. * Elegant Retail-Front & Custom Built For Salon Use with 7 Primary Stylist Stations...

Upscale San Francisco Salon Spa #459911 posted Dec 21, 2016

  • California, United States
  • $69,000

This great San Francisco based upscale Salonspa that offers both hair and body services. Attention to detail transcends through each stylist and therapist service. All of the treatments are customized to your particular needs. Whether you are in need of a facial or hair treatment, they are the...

Classy Upscale Hair Salon #466247 posted Apr 8, 2017

  • California, United States
  • $159,000

Location location location. Incredible salon nestled up against one of Los Angeles County's most prestigious neighborhoods.Don't miss this great opportunity to own this upscale and well established salon serving this community in the same location for close to two decades. This destination spot caters...


WARC-Truncated: length

text:
On the trail of the Hobbit

If you like J.R.R. Tolkien and his tales from The Hobbit and The Lord of the Rings you are going to love this 🙂

Deano's Travels

When it comes to movie making in New Zealand, Wellington is ground zero. The capital is the home base of Peter Jackson, Weta and many other production houses; and when it comes to the tales from J.R.R. Tolkien’s Middle Earth, Wellington truly is smack bang in the middle of it! The Lord of the Rings and The Hobbit movies were put together here and the world premiere of The Lord of the Rings: Return of the Kingand The Hobbit: An Unexpected Journeywere held at the very regal Embassy Theatre in the city (opened in 1924, the theatre underwent a major refurbishment for the world premiere of Return of the Kingin 2003).

I went and saw The Hobbit at the Embassy on a recent visit to Wellington (I had already seen it before in Australia but couldn’t miss an opportunity to see it in NZ). It was a fantastic theatre and…

View original post 357 more words

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


WARC-Identified-Payload-Type: application/xhtml+xml

text:
fredag 18. september 2009

Korstog mot korstogsretorikken

Rodney Stark er av de mer spennende, men etterhvert litt vel publiseringskvikke religionssosiologene.

Hans tidligere bøker om hvordan gudstro har påvirket historien (som hans banebrytende The Rise of Christianity: How the Obscure, Marginal, Jesus Movement Became the Dominant Religious Force in the Western World in a Few Centuries og de noe mindre politisk korrekte One True God og For the Glory of God) inneholdt mange nyttige vinkler, tall og konklusjoner.

Selv om researchen har gått stadig raskere, noe som særlig merkes på sistnevnte.

Det er ingen tvil om at Stark er blitt ganske kontroversiell, og ikke bare fordi han har beveget seg fra en ateistisk orientert agnostisme til en kristen orientert.

Denne gang er det altså korstogene som er tema. I anledning boken God's Battalions: The Case for the Crusades er religionssosiologen intervjuet i av en historiker som nok ikke er like enig på alle punkter.
According to its publisher, “Stark reviews the history of the seven major Crusades from 1095 to 1291, demonstrating that the Crusades were precipitated by Islamic provocations, centuries of bloody attempts to colonize the West, and sudden attacks on Christian pilgrims and holy places.

Although the Crusades were initiated by a plea from the pope, Stark argues that this had nothing to do with any elaborate design of the Christian world to convert all Muslims to Christianity by force of arms.

Given current tensions in the Middle East and terrorist attacks around the world, Stark’s views are a thought-provoking contribution to our understanding and are sure to spark debate.”
Historikerens hovedkritikk handler om Starks påstand om at korstogene i stor grad var en reaksjon på muslimsk provokasjon, og ikke primært en effekt av pavens og vestlige fyrster egne politiske og religionsstøttede behov.
One of the premises of your book is that the Crusades were a reaction to what you describe as “Islamic provocations: by centuries of bloody attempts to colonize the West and by sudden new attacks on Christian pilgrims and holy places.” As a scholar of the Crusades, I disagree with this idea - for the most part Islamic expansion had ended by the middle of the eight century, and for the next three hundred years, warfare between Christian and Muslim states was motivated by political relations and not necessarily religious reasons. It was not even uncommon for Muslim and Christian kingdoms to be allies and co-exist peacefully with each other. Moreover, the bulk of the people who took part in the First Crusade seem to have little or no knowledge of who they were actually fighting, and simply saw them as random pagans. With this in mind, I was wondering how you came to your conclusions that somehow the Crusades were “a justified war waged against Muslim terror and aggression”?

The conflict with Islam surely had not ended by the eighth century-although the conquest of the Middle East and North Africa was over by then. Warfare continued in Spain, often quite intensively, until the end of the fifteenth century. A war of reconquest raged in Sicily and Southern Italy until only a few years before the start of the First Crusade. And the initial call from Emperor Comnenus for a Crusade was prompted by an invasion of Seljuk Turks who had driven to within 100 miles of Constantinople. It is all well and good to say these later wars were motivated by “political relations and not necessarily religious reasons.” No doubt all of the Muslim conquests had political aspects, but wars across the Christian/Muslim divide always had religious implications that usually did not apply to wars within each faith. To say that the bulk of those who took part in the First Crusade “seem to have little or no knowledge of who they were actually fighting” might apply to those who followed Peter the Hermit. But the real Crusaders knew rather a lot about whom they were fighting. Many had relatives who had suffered or even died at the hands of Muslims while making a pilgrimage to Jerusalem, and a few had themselves been on a pilgrimage and had encountered Muslims at first hand. In addition, the Normans had recently beaten Muslims in Sicily and, even more recently, Bohemond had fought Muslim mercenaries hired by Byzantium.
La nå den debatten ligge akkurat nå (og her er det noe å si for begge vinkler, litt avhengig av hvordan man velger å betone og begrunne - det er ingen tvil om at det oppstod en ny situasjon i området mot slutten av 1000-tallet), men boken er ihvertfall bestilt som en nyttig motvekt til de sedvanlige oppslagene der korsfarerne får skylden for alt for jihad til dagens terrorister.

[Takk til Kjetil for tips om intervjuet.]

Ingen kommentarer :


text:
Worse Than Before?

How many hundreds of pounds have you lost (5 or 10 at a time of course) and how many have you gained back?  chocolatesIMG_0962

How many New Year’s resolutions have you made, and not been able to sustain?

How many times have you quit habits and gotten hooked again?. . .

Worse than before?

Luke 11:24-26 explains why it often happens this way.
“When an evil spirit comes out of a person, it travels through dry places, looking for a place to rest. But when it finds no place, it says, ‘I will go back to the house I left.’ And when it comes back, it finds that house swept clean and made neat. Then the evil spirit goes out and brings seven other spirits more evil than it is, and they go in and live there. So the person has even more trouble than before.”

Do you notice the problem? The evil has been removed, but the place left EMPTY. Room has been left for it to be refilled.

WHAT is the solution? Romans 13:14

“But put on the Lord Jesus Christ, and make no provision for the flesh in regard to its lusts.” (bold emphasis mine)  OS11109

What could disobeying this command – and making provision for the flesh –  look like?

Make a goal to watch less television, then sign up for the 400 channel special.

Buy a cart-full of after-holiday candy and put it in the freezer “for after the diet goal is reached”

Postpone the goal until after one last smoke, drink, gaze, holiday binge…whatever.

So, HOW can we avoid the worse-than-before syndrome?

Rather than sloughing-off the external symptoms of inner decay – to “try” to break the old habit hoping to make room for the new, we first replace it. God’s Word directs us to the formula in James 4:7: “Submit, therefore to God. Resist the devil and he will flee from you.”

  1. Submit to God.   (Put ON)
  2. Resist the devil          (Put OFF)
  3. and he will flee from you.

In scripture to Put Off is not so much “To take off or discard” as in put off a sweater, but more so to repel, resist, or repulse; and Put ONisnot merely to cover, To clothe oneself with; as to put on a coat, but To apply; activate: put on the brakes.

Resolutions almost always fail if we depend on our own strength to accomplish any changes, and make no allowance for permanent change.

How can we make no provision for the flesh?

By the putting ON the character of Christ – and therefore new, Godly, desires. By allowing God to so fill our souls there is room for none else but Him.

A great illustration of this comes from a (free!) online classes at Setting Captives Free. The food addiction class, The Lord’s Table, likens it to FIRST pulling up to a feast towersandwichwith the Lord, and eating our fill of all our favorite “real” life-giving and health-keeping food. I mean filled. Full to capacity. Sated. Satisfied. Not room for another bite or sip of anything.

Then the junk is brought out. Just looking at it and smelling it makes you feel ill. You wonder why you ever craved it.

Now  imagine each “room” in you, God’s temple. Is there empty space in any of the rooms, closets, or secret places that leaves room for the enemy to enter and take control? If so, let’s get in the Word and fill it.

Fill my cup, Lord;
I lift it up Lord;
Come and quench this thirsting of my soul.
Bread of Heaven, feed me till I want no more.
Fill my cup, fill it up and make me whole.
Source: http://www.hymnal.net/en/hymn/ns/340#ixzz2zxIClGLt

About Delores Liesner

Author, Reviewer, Columnist
This entry was posted in Devotional and tagged , , , , , . Bookmark the permalink.

2 Responses to Worse Than Before?

  1. So, so true. We are so weak, but he is so strong. Praise Jesus. And wouldn’t it be great if people were willing to make no provision for the flesh? That is very insightful of you to identify the linkage.

    • Thanks for stopping by. You are right, it’s a daily commitment to leave room for God to work, instead of depending on our hidden provisions. Couldn’t resist visiting your blog and I enjoyed your poetry quote today – beautiful!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


text:
I have not written for a while as I have had no motivation or emotion to do so. Mood has been quite flat and I have felt that I have had nothing to say. Not sure why I feel the way I do. I guess that is the nature of the beast.

I sit here in the lounge at David Lloyd having just completed a 2000m swim and a 45 minute run. I felt distracted during my training as I have things on my mind. I saw my GP this morning and my medication has been increased (it is being done in stages for medical and safety reasons to ensure that I can tolerate it). Appointment went fine and I will not see her now until after Christmas.

I collected my medical report written by the Psychiatrist who I saw 13th December last year. I requested it for work purposes. It confuses me how two Psychiatrists can have massively differing opinions. Granted they are written 10 months apart but their conclusions could not be more different. Whilst report 1 (December 2016) states that I am not suffering from a severe mental illness but refers to an adjustment disorder without persistent depressive symptoms; report 2 (October 2017) concludes that I have complex and severe PTSD and severe depression.

The problem I have, as previously described is that my intellect and my emotions function on a different level. They do not work together. In appointment 1, I sat there and felt like an intellectual robot as if I knew the answers but could not relate them to me or the way I was feeling. Perhaps I played down the way I was feeling as I did not want to be labelled or I was scared to be diagnosed with a mental illness. I spoke about how things were and I was intellectually able to describe and articulate things. I distanced myself from the real me.

Ten months on and things have changed. I am more open and honest about my mental health. I can talk about it and by the time I saw Psychiatrist 2 I felt like a different person. By this I mean that I did not care about labels and just needed to be me. On that day I was. Whilst I still think I am talking about someone else, it was still me. I was asked questions which I have not been asked before, I completed questionnaires which I have never competed and after two hours felt mentally drained.

I am not the professional but two differing opinions could massively influence my future career. Unfortunately, my honest, intellectual and emotional head tends to agree with report 2. This maybe more damming for me in terms of diagnosis and future but that’s how it is.

I have spoken to my federation rep this morning and I will send the report to her for FMA and HR attention. Due to the discrepancies a further opinion may be sought. In the meantime I am still in limbo with where I stand in relation to policy and unsatisfactory attendance procedures.

  1. Thanks for writing Georgie, keep sharing. I understand what you mean about the two sides, intellectual and emotional. For me bringing them together more has made a positive difference for me this year. Actually it wasn’t bringing them together , it was allowing the emotional side to talk and letting the logical side be quiet. I am a big fan of Compassionate Focused Therapy, it really helps with that emotion side. I think you wrote before you haven’t had talking therapy (might be wrong). That is the thing which really helped me. Hope that helps, take care. Chris

    Liked by 1 person

    1. Hi, thanks as always Chris for your support. I am glad that you have manged to bring the intellectual and emotional together. It is such an odd thing but totally get that I am like that. I have one last session of CBT early January and not sure what the next therapy (if any will be) x

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


text:
Technical Note TN2313

Best Practices for Color Management in OS X and iOS

This document discusses best practices for color management in OS X and iOS.

Color Management Workflows
Active Color Management with ColorSync
Frameworks for Color Matching when Rendering to the Display
Frameworks for Color Matching when Not Rendering to the Display
Color Management - Choosing a Framework
Color Managed Frameworks - Integrated with ColorSync
Color Managed Frameworks - Your Responsibilities
Non-Color Managed Frameworks
Targeted Color Management - iOS sRGB
Document Revision History

Color makes a difference—often a dramatic difference—in our photographs, graphics, and other media. Accurate color that matches your expectations can help you generate more engaging visual products, and reduce development costs and timetables. How can you make informed decisions during development so the final result matches your intentions across all the different configurations your customers may have?

OS X and iOS provide a robust, standards-based solution for color management that is designed to give you the best possible representation of your source media on all the various devices and environments you are working with. There are different methods to how this happens, and these will be covered in this document.

This color management ensures the color fidelity of the original throughout the digital workflow -- it delivers color that accurately represents the original. The colors the camera produces by taking a snapshot of a given scene will be reproduced faithfully on the display and in the finished printed product. Your colors are accurately translated from one device to another across your workflow. Your colors will be consistent over time, across media, and across different devices. This color management offers the best color fidelity of the source media whether seen on a monitor, printed on a desktop printer or viewed on a mobile device.

Active and Targeted Color Management

Apple uses two different approaches to color management -- one is active color management, which is provided in OS X. Active color management is a dynamic process, applied to every pixel in real time on every frame. For each pixel a color match is performed from the source content's profile space to the destination space, possibly with an intermediate space or working space (requiring an additional color match) in between. This color matching can be GPU accelerated when rendering to the display, or vectorized accelerated on the CPU when not rendering to the display (for example, when sending output to disk). This color management provides the formula to perform the color match, and that formula is applied to every pixel in the different frameworks (Core Image, Core Animation, ColorSync, Accelerate and various others) and applications.

OS X provides Active Color Management with ColorSync. Active color management is all about flexibility. It allows you to use any content and view it on any display, certainly on a desktop environment where you have many different display devices or other forms of output devices such as printers.

The other type of color management used by Apple is targeted color management, which is a technique to apply color management during authoring on the Mac before delivering your content on iOS. See Targeted Color Management - iOS sRGB.

Display Referred Environment

The goal of ColorSync color management is to reproduce the Authoring Intent — what the author saw and signed-off on their own display or output device. This form of color management is called output referred (if you are targeting the display it may also be called display referred).

Authoring Intent

The creation of film images and other forms of media are creative endeavors. This means a newly recorded scene is typically not distributed as the finished product. Instead, it is manipulated first (in the industry, this is called color timing). The result is the authoring intent. Only after the scene has been manipulated to the author’s satisfaction does it get distributed.

For example, consider broadcast video. Once distributed, broadcast video is really only intended to be looked at on a TV in a specific viewing environment. According to standards, that viewing environment is a fairly dark 1950's era living room. Modern usage is of course very different, and varying. You are probably not viewing media content in your living room on a modern workstation or personal computer. Instead, you probably have a large, bright display. There are even more environments. There are mobile devices you look at outdoors in the sunshine, or you may be looking at these devices in a dark theatre environment. Clearly there is a need to produce a consistent color appearance on different devices in different environments. That's what color management begins to solve.

Color Management Workflows

Controlling Color conversions

What is the color management workflow?

Figure 1 illustrates an example of a typical workflow for many Mac users.

A typical workflow starts with three devices processing digital media: a camera, a Mac and a printer. Images are first downloaded from the camera, then viewed on the Mac display and finally printed on the printer. The expectation is the colors the camera produces by taking a snapshot of a given scene will be reproduced faithfully on the Mac display. Similarly, when the image is printed, the printer will reflect what was captured by the camera. In other words, you expect the workflow will produce consistent color across different devices. This is what color management is all about:

Color management = a controlled conversion between different color representations in order to achieve a consistent color appearance.

This workflow can quickly become very complicated. The user may bring in additional color media from the web, and may present this media on other computers like workstations, laptops and portable devices such as the iPhone or iPad. In addition, digital video might be added to the mix -- it has slightly different requirements. In the end, the goal is to have a consistent color appearance across all devices.

Figure 1  Typical Color Management Workflow.

Device Color Capabilities

Device Gamut

To reproduce color on different devices you need to find a way of characterizing the color capabilities of any of those devices. The term device gamut describes those color capabilities. A given device can only reproduce part of the complete visible spectrum (all the colors that exist in nature). The device gamut is all the colors reproducible by the device.

Problem to Solve

The problem that must be solved is how to reproduce color on different devices knowing the gamut of the devices are different. In the simple workflow from above, there are three different gamuts; one each for camera, display and printer. Let’s say you want to reproduce a color from the camera across all the devices. You can express the color space of any given device mathematically. Figure 2 shows the different color spaces for the camera (Adobe RGB), Mac laptop display and inkjet printer.

Figure 2  Different Device Color Spaces.

As you can see, the color spaces are vastly different. You can convert color from one color space to another through a mathematical conversion called gamut mapping, but it really depends on which colors you are trying to reproduce. You are limited to what colors the device can represent. This has consequences in terms of organizing your workflow. For example, when proofing you should have a large size gamut on your device. Otherwise, the gamut mapping may result in colors which are not correct in terms of the original data.

Color conversions are non-linear. Conversion to a smaller gamut can cause irreversible damage. Once you convert down specific colors in this manner they will remain there. Let’s imagine your camera acquires a blue color as shown in Figure 3 below, and you want to display this color across all your devices. Gamut mapping will covert it from the camera gamut to the laptop display gamut. You can see it lands inside the display gamut after the conversion. There is no problem reproducing it in the different gamut. The same is true if you try to print it.

Now imagine your camera acquires a very saturated green. The problem is this color does not exist in the gamuts of the other two devices. What happens in this case is the color is pushed inside the gamut. As a result, the saturated green becomes somewhat yellow. It is no longer the same color it was originally. In the case of the printer, the color shift isn’t very big. It's still very close to the original green.

This illustrates an important point: color conversions are very often irreversible. If you commit to the wrong colorspace when designing your workflow you may lose color information.

Figure 3  Color Conversions.

Color Values in Perspective

This illustrates another point. RGB device color values are not the same across different color spaces. These values are dependent upon the color space they are defined in.

For example, if you are given some RGB device values but you don't know what color space they came from, they really tell you nothing. Figure 4 compares the two color spaces discussed previously, Adobe RGB vs the smaller LCD display.

As you can see, the fully saturated green on the laptop display RGB is somewhere in the middle of chromaticity diagram. By contrast, the fully saturated Adobe RGB green is high up in the greens. These are not the same colors even though the RGB values are the same. This underscores the importance of knowing where the color values are coming from.

The conclusion to be drawn from this is color values are only meaningful when they are tagged with the proper profile.

Figure 4  RGB device colors are not the same across different color spaces.

Active Color Management with ColorSync

ColorSync is the color management system provided in OS X. It is the OS X implementation of the International Color Consortium (ICC) specification, providing system-level color management of images, documents, and devices. ColorSync consists of several parts as shown in Figure 5.

It includes a color management module (CMM). This is a mathematical engine that converts color data from one device to another. OS X ships a default CMM, the Apple CMM, as part of ColorSync. ColorSync also provides a plugin architecture for CMM's. If you have written a custom CMM to use in your application there is a specific plugin API to invoke it.

ColorSync uses ICC profiles for color matching or color conversion across different color spaces. ICC profiles characterize devices in terms of color capabilities. They contain mathematical primitives that describe how to convert data between device color space and a reference color space called the profile connection space (PCS) . A PCS is a device-independent color space used as an intermediate when converting from one device-dependent color space to another. Colorsync includes profiles for different color spaces with OS X, and you can add your own profiles as well.

ColorSync has a device integration database. Every device that is connected to the Mac will be registered with the device integration database. This provides an opportunity for device developers to integrate their device and any associated profiles with ColorSync. If the device manufacturer provides factory ICC profiles these will be registered with the device integration database for use as needed. In addition, the user can assign custom profiles to a device.

Figure 5  What is ColorSync.

How Does ColorSync Work?

Consider an image taken from a digital camera. The image will contain a profile characterizing that color space. Profiles contain tags that describe how to convert data between the device color space and the PCS. Profile connection spaces are based on spaces derived from the CIE color space. ColorSync supports two of these spaces, XYZ and L*a*b. The CIE color spaces can fully represent all the visible colors, thus ensuring there are no errors incurred during the process.

The profile that is associated with the image and describes the characteristics of the device on which the image was created is called the source profile. Displaying the image requires another profile, which is associated with the output device, such as a display. The profile for the output device is called the destination profile. If the image is destined for a display, a color match is performed by the CMM using the display’s profile (the destination profile) along with the image source profile to match the image colors to the display gamut. To perform the color match, the CMM creates a transform which converts color data from the source device to the destination through the PCS. See Figure 6.

This workflow can be repeated for many different devices. For example, you can scan an image on a scanner and view it on the display. If the image is printed, the ColorSync color matching will use the printer profile to match the image colors to the printer. If you have a properly built profile, you can analyze all the properties of your printer, and before commiting ink on paper (which can be costly) you can simulate the printer using a printer profile. This is called soft proofing. Soft proofing allows you to view on your computer monitor what your printout will look like when it is on a specific paper. The paper and ink combination is defined by the profile that you or someone else has made for your printer paper and ink combination. When a printer profile is made, the color of the paper is one of the factors that is figured into the profile. If you are able to view your image through the printer profile, you can see how that particular combination of ink and paper will reproduce it, taking into account the gamut as well as other characteristics of the inks used.

Figure 6  How does ColorSync work?

Frameworks for Color Matching when Rendering to the Display

OS X offers a number of frameworks that perform GPU-accelerated color matching when rendering to the display. Here's a brief summary:

Quartz 2D (Core Graphics)

The Quartz 2D API is part of the Core Graphics framework (CoreGraphics.framework). Quartz 2D is an advanced, two-dimensional drawing engine. Quartz 2D provides low-level, lightweight 2D rendering with advanced color management that provides unmatched output fidelity regardless of display or printing device.

Core Animation

Core Animation is a graphics rendering and animation infrastructure that you use to animate the views and other visual elements of your app. With Core Animation, most of the work required to draw each frame of an animation is done for you. All you have to do is configure a few animation parameters, and Core Animation does the rest, handing most of the actual drawing work off to the onboard graphics hardware to accelerate the rendering. This automatic graphics acceleration results in high frame rates and smooth animations without burdening the CPU and slowing down your app. Color management is applied as necessary.

Core Image

Core Image is an image processing and analysis technology designed to provide near real-time processing for still and video images. It operates on image data types from the Core Graphics, Core Video, and Image I/O frameworks, using either a GPU or CPU rendering path. Core Image hides the details of low-level graphics processing by providing an easy-to-use application programming interface (API) so you don’t need to know the details of OpenGL to leverage the power of the GPU. The entire pipleline is color managed.

AV Foundation

AV Foundation is a powerful framework for playing and creating time-based audiovisual media. It allows you to add audio and video playback, capture, and encoding to your application. It delivers efficient media playback, and provides a GPU accelerated, color managed video pipeline. AV Foundation automatically applies color management to video on input, during playback, and on output. For more information, see Video Color Management in AV Foundation and QTKit.

Application Kit

The Application Kit framework contains the objects you need to implement a graphical, event-driven user interface. The Application Kit handles all the details for you as it efficiently draws on the screen. AppKit also color manages all the interface elements that you typically use in your windows.

Frameworks for Color Matching when Not Rendering to the Display

You can use the vImage framework to perform CPU accelerated (vectorized) color matching when not rendering to the display:

vImage is a CPU-based, high-performance image processing framework. It is a subframework of the Accelerate framework. The vImage framework uses vectorized code that makes use of Single Instruction Multiple Data (SIMD) vector units, when available. It uses the best code for the hardware it is running on, in a manner completely transparent to the calling application. It includes high-level functions for image manipulation—convolutions, geometric transformations, histogram operations, morphological transformations, and alpha compositing—as well as utility functions for format conversions and other operations.

Color Management - Choosing a Framework

OS X is implemented as a set of layers. The lower layers of the system provide the fundamental services on which all software relies. You should typically use the highest-level abstraction available that allows you to perform the tasks you want; remember that the higher-level frameworks simplify your work and are, for this reason, usually preferred.

There are a number of high-level frameworks in OS X integrated with ColorSync that offer automatic color management. These are discussed below in Color Managed Frameworks - Integrated with ColorSync. To ensure your content is properly color managed when using these frameworks you must follow the guidelines discussed in Color Managed Frameworks - Your Responsibilities.

If you are using a low-level framework, you must explicitly perform color management prior to rendering. See Non-Color Managed Frameworks.

Color Managed Frameworks - Integrated with ColorSync

OS X offers automatic color management through frameworks integrated with ColorSync. Here is a list of several modern frameworks for processing color media that are tightly integrated with the color management provided by ColorSync:

Details about the color management aspects of these frameworks are described below:

Quartz (Core Graphics)

Quartz provides rendering with advanced color management. Quartz defines a number of basic objects that allow you to describe and process color. Here are the objects pertaining to color:

  • CGColorSpaceRef

  • CGColorRef

  • CGImageRef

  • CGContextRef

The first is CGColorSpace. The CGColorSpace object allows Quartz to interpret your color data.

Color spaces can be created many different ways, but here is a simple API:

Listing 1  Creating a color space.

CGColorSpaceRef colorspace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);

Color spaces can also be created directly from an ICC profile:

Listing 2  Creating a color space from an ICC profile.

CGColorSpaceRef colorspace = CGColorSpaceCreateWithICCProfile(<#Data containing the ICC Profile#>);

The CGColorRef object contains a set of components values (such as red, green, and blue) that uniquely define a color, and a color space that specifies how those components should be interpreted.

Listing 3  Creating a CGColorRef.

CGColorSpaceRef colorspace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
if (colorspace != NULL)
    CGFloat comp[4] = {0.5, 1.0, 0.7, 1.0}; // Last component is alpha
    // Create CGColorRef
    CGColorRef color = CGColorCreate(colorspace, comp);
        // do something with CGColorRef here.
        CGColorRelease(color); // Release CGColorRef when done
    // Release CGColorSpaceRef when done

CGImage consists of a CGColorSpaceRef and array of component values organized in rows and columns. These component values correspond to color space primaries.

Listing 4  Creating a CGImage.

CGImageRef image = CGImageCreate(width,

To create a CGImageRef from a image file on disk, you can do as follows:

Listing 5  Create a CGImageRef from a image file on disk.

CFURLRef path = <#A path to an image#>; // Path to image
CGImageSourceRef imageSource = CGImageSourceCreateWithURL( path, NULL );
// Make sure the image source exists before continuing
if (imageSource != NULL)
    // Create an image from the first item in the image source.
    CGImageRef myImage = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL);
        // do something with CGImageRef here.
        CGImageRelease(myImage); // Release CGImageRef when done
    // Release CGImageSourceRef when done

Similarly, with a chunk of compressed image data in memory:

Listing 6  Create a CGImageRef from image data in memory.

CFDataRef data = <#Your image data#>;
CGImageSourceRef imageSource = CGImageSourceCreateWithData(data, NULL);
// Make sure the image source exists before continuing
if (imageSource != NULL)
    // Create an image from the first item in the image source.
    CGImageRef myImage = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL);
        // do something with CGImageRef here.
        CGImageRelease(myImage); // Release CGImageRef when done
    // Release CGImageSourceRef when done

The CGContextRef represents a Quartz 2D drawing destination. A graphics context contains drawing parameters and all the device-specific information needed to render the paint on a page to the destination, whether the destination is a window in an application, a bitmap image, a PDF document, or a printer.

Listing 7  Drawing into a graphics context.

CGContextRef cgcontext = <#A graphics context#>

Quartz provides creation functions for various flavors of Quartz graphics contexts including bitmap images and PDF. The most significant difference between different types of contexts is there are some that contain their own color space, and others that do not require color conversion because they are recording contexts.

These contexts let you specify a CGColorSpace:

  • CGBitmapContext

  • CGWindowContext

And these do not:

  • CGPDFContext

  • CGPostScriptContext

You can create a context with a specific color space and draw content into it with many types of color. Automatic color management is performed in the graphics context if the context’s CGColorSpace is different from the source CGColorSpace. For example, you can create an sRGB context and draw a CMYK image into it and composite that with monochrome or some other color. In this scenario, since the color space of the context destination is different than the source Core Graphics will automatically invoke ColorSync and perform the necessary color correction.

Other frameworks in Quartz

Core Animation

Core Animation is another framework in Quartz. Core Animation will take advantage of the GPU when drawing images, and use color management. All you need to do is assign the contents of your Core Animation layer to the image.

Listing 8  Using the GPU when drawing a CGImageRef into a window (NSView).

[NSView layer].contents = <#CGImageRef to display#>; // set layer contents to CGImageRef

Core Image

Core Image is an image processing framework that allows you to display images and color convert them very quickly using the GPU. Core Image provides access to built-in image processing filters and the ability to chain multiple filters together to create custom effects.

Here's how to chain two filters together and apply them to an image:

Listing 9  The basics of applying filters to an image.

CIImage* image = [CIImage imageWithContentsOfURL: <#NSURL location of the file#>];
if (image != NULL)
    image = [[[CIFilter filterWithName:@"CISepiaTone" keysAndValues:
          kCIInputImageKey, image,
          kCIInputIntensityKey, [NSNumber numberWithFloat:1.0], nil]
          valueForKey: kCIOutputImageKey];
    image = [[[CIFilter filterWithName:@"CIHueAdjust" keysAndValues:
          kCIInputImageKey, image,
          kCIInputAngleKey, [NSNumber numberWithFloat:1.57], nil]
          valueForKey: kCIOutputImageKey];
    [context drawImage: image atPoint:CGPointZero fromRect:[image extent]];

Image I/O

The Image I/O framework allows applications to read and write most image file formats. It is highly efficient, allows easy access to metadata, and provides color management.

Many file formats allow you to directly embed a color profile to characterize the image. When Image I/O reads an image file it will retrieve all the color metric information contained in any embedded color profile or metadata and create a CGColorSpace. You as the programmer need not worry about this.

Figure 7  Image I/O - CGColorSpace created from embedded profile or metadata.

The Image I/O framework provides opaque data types for reading image data from a source (CGImageSourceRef):

Listing 10  Reading image data - Create a CGImageSourceRef and acquire a CGImageRef.

CFURLRef path = <#A path to an image#>; // Path to image
CGImageSourceRef imageSource = CGImageSourceCreateWithURL( path, NULL );
// Make sure the image source exists before continuing
if (imageSource != NULL)
    // Create an image from the first item in the image source.
    CGImageRef myImage = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL);
        // do something with CGImageRef here.
        CGImageRelease(myImage); // Release CGImageRef when done
    // Release CGImageSourceRef when done

and writing image data to a destination (CGImageDestinationRef):

Listing 11  Writing image data - Create a CGImageDestinationRef in a specified file format and add a CGImageRef.

CFURLRef url = <#URL of image destination#>;
CGImageDestinationRef myImageDest = CGImageDestinationCreateWithURL(url, kUTTypePNG, 1, NULL);
// Make sure the image destination exists before continuing
if (myImageDest != NULL)
   CGImageRef image = <#Image to add#>;
   // Add an image to the image destination
   CGImageDestinationAddImage(myImageDest, image, NULL);

You create an image from an image source with functions like CGImageSourceCreateImageAtIndex, which will retrieve any color matching information in the image and create an appropriate CGColorSpace.

An image destination abstracts the data-writing task and eliminates the need for you to manage data through a raw buffer. You create an image destination with functions like CGImageDestinationCreateWithURL or CGImageDestinationCreateWithData. After you create an image destination, you can add an image to it by calling the CGImageDestinationAddImage or CGImageDestinationAddImageFromSource functions. Calling the function CGImageDestinationFinalize signals Image I/O that you are finished adding images.

Image Capture

Another important framework from the color management perspective is Image Capture.

Image Capture allows you to acquire images directly from cameras and scanners. It is based on Image I/O.

Image Capture consists of the ImageKit framework and the ImageCaptureCore framework. High-level image capture classes in the ImageKit framework allow you to construct applications that control cameras and scanners entirely by dragging and dropping elements in Interface Builder, literally without writing a line of code.

The following ImageKit classes are all color managed to the current display:

  • IKDeviceBrowserView

  • IKCameraDeviceView

  • IKScannerDeviceView

  • IKImageView

Similar classes in the ImageCaptureCore framework provide the equivalent capabilities to quickly find and control cameras and scanners, but without the built-in UI, allowing you to write headless applications or to provide your own custom UI. Use the following ImageCaptureCore classes for lower-level camera control:

  • ICDeviceBrowserDelegate

  • ICCameraDeviceDelegate

  • ICScannerDeviceDelegate

  • ICCameraDeviceDownloadDelegate (e.g. for downloading images)

For those file formats that do not contain color metric information, Image Capture will use ColorSync to query the Device Integration Database to determine an appropriate profile to assign to the image, and create a CGColorSpace from it. Image Capture will also color convert images for display.

AV Foundation

AV Foundation is a framework for playing and creating time-based audiovisual media. You can use it to examine, create, edit, or reencode media files. You can also get input streams from devices and manipulate video during realtime capture and playback.

The AV Foundation framework automatically applies color management to video on input, during playback, and on output. For more information, see Video Color Management in AV Foundation and QTKit.

Application Kit

The Application Kit is a framework containing the objects you need to implement a graphical, event-driven user interface. The Application Kit handles all the details for you as it efficiently draws on the screen. AppKit also color manages all the interface elements that you typically use in your windows.

To draw into a window using the OS X frameworks in Quartz you will need to access the CGContextRef for the window. Here’s how:

Listing 12  Acquire CGContextRef for the window.

CGContextRef cgcontext = [[NSGraphicsContext currentContext] graphicsPort];

When a window is created, AppKit automatically sets the window backing store color space. In OS X, the graphics context are connected to a window backing store. By default, the window context is tagged with the current display profile. However, in certain situations the color space can be changed by the application:

Listing 13  Setting the window's color space.

NSWindow *myWindow = <#Your window#>
[myWindow setColorSpace: [NSColorSpace sRGBColorSpace]];

You can then can draw different types of images and composite them together to this window graphics context and your custom color space will be used. See Figure 8.

Figure 8  Window backing store color space can be set by the application.

You can also register for display change notifications (NSWindowDidChangeScreenProfileNotification):

Listing 14  Register for Display Change Notification.

NSWindow *myWindow = <#Your window#>
[myWindow setDisplaysWhenScreenProfileChanges:YES];

The display change notification is posted whenever the display profile for the screen containing the window changes. This notification is sent only if the window returns YES from the NSWindow displaysWhenScreenProfileChanges method as shown here:

Listing 15  Indicates whether the window context should be updated when the screen profile changes or when the window moves to a different screen.

- (BOOL)displaysWhenScreenProfileChanges
    return YES;

The NSWindowDidChangeScreenProfileNotification may be sent when a majority of the window is moved to a different screen (whose profile is also different from the previous screen) or when the ColorSync profile for the current screen changes.

If you are caching information that is tied to the display you should discard it to allow for the proper color matching of your content.

Figure 9  Display Change Notification called when majority of window is moved to a different screen.

After the window context is updated, the window is told to display itself. If you need to update offscreen caches for the window, you should register to receive the NSWindowDidChangeScreenProfileNotification notification.

Example - What happens in an Application using Color Managed Frameworks

Let's put this all together and see what happens in a simple app that acquires an image from a camera.

If the app is using Image Capture to acquire the image (as a CGImageRef), it will be properly tagged, and contain all the necessary color metric information (see previous Image Capture section). See Figure 10.

If the app then wants to draw the image on the screen, it simply calls the proper Quartz functions to perform the drawing; no further steps are necessary. Quartz will consult ColorSync to find the proper display profile, and convert the image data to the display profile color space to ensure it is displayed correctly. See Figure 10.

Printing an image is a similar process. If you are using CUPS, you don't even need to know which printer the user has selected. The CUPS printing architecture will determine the proper profile for the selected printer, and convert the data and print the job. See Figure 10.

In summary, OS X provides automatic color management through the various frameworks integrated with ColorSync.

Figure 10  An app acquiring an image from a camera, drawing to the display, and printing to the printer .

Color Managed Frameworks - Your Responsibilities

As discussed in Color Managed Frameworks - Integrated with ColorSync, the high-level OS X frameworks integrated with ColorSync provide automatic color management. However, you still have some responsibilities to ensure your content is properly color managed when using these frameworks:

Pixel Buffers should be Tagged

If you are working with pixel buffers explicitly you should make sure they have a CGColorSpace attached to them (the term tagging is used to describe this). Tagging pixel buffers is especially important if your application is synthesizing these buffers.

If you are reading pixel buffers from Core Media, AV Foundation, ImageIO or other framework, or even from another application, chances are they are already tagged -- if taken from a media file, the file will likely have a tag associated with it. Nevertheless, it is good practice to check them programmatically and make sure they are tagged. Pixel data that is not tagged is considered undefined, and can cause your colors to come out looking wrong. It is good practice to make sure everything is tagged, even programmatically. Untagged content should be tagged with something, and you'll need to determine what is most appropriate. For example, if you have untagged content that was intended for the web or PC, chances are it should be tagged as sRGB.

Graphics Contexts must be fully specified

The OS X frameworks very often require you setup a graphics context. Make sure your contexts are fully specified with an appropriate color space in order to be properly color managed.

Use of device RGB colors is problematic

RGB device values without any color space information really tell you nothing. The colors produced by RGB (and CMYK) are specific to a device. Because their color appearance is device dependent, these spaces are actually the worst choice for faithful color reproduction across different devices. Devices (displays, printers, scanners, cameras) don't treat color the same way; each has its own range of colors that the device can produce faithfully. A color produced on one device might not be able to be produced on another device. Therefore, device RGB color usage is strongly discouraged. Don’t expect consistent results when using device RGB colors with the OS X frameworks because each individual framework may treat these differently.

Non-Color Managed Frameworks

If you are working with a lower level framework, you’ll need to provide your own explicit color management prior to rendering.

With vImage you can perform explicit color management of images. Of particular interest with regard to color management are the transformation and format conversion functions. Image transformation operations alter the values of pixels in an image as defined by custom functions provided as a callback. With vImage, you can use image transformation operations on the following sorts of functions:

  • Matrix multiplication

    Color space conversion

    Hue, saturation, brightness

    Color effects

  • Gamma correction

You use a vImageConverter object to convert an image from one format to another. A vImageConverter interoperates with Core Graphics by supporting the CGImageRef object. To use a vImageConverter you define a vImage_CGImageFormat structure which describes your image format. The vImage_CGImageFormat structure defines the ordering of the color channels, how many there are, the size and type of the data in the color channels, whether the data is premultiplied by alpha or not, and the color space model for the pixel data. This format mirrors the image format descriptors used by CoreGraphics to create things like CGImageRef and CGBitmapContextRef:

Listing 16  The vImage_CGImageFormat structure.

typedef struct
   uint32_t                bitsPerComponent; /* # bits in each color channel */
   uint32_t                bitsPerPixel; /* # of bits in each pixel. */
   CGColorSpaceRef         colorSpace; /* color space model for the pixels */
   CGBitmapInfo            bitmapInfo; /* describes the color channels */
   uint32_t                version; /* Reserved for future expansion */
   const CGFloat           *decode; /* Decode parameter */
   CGColorRenderingIntent  renderingIntent; /* See CGColorSpace.h */

vImage functions use a vImage_Buffer structure to receive and supply the pixel data. The vImage_Buffer contains a pointer to the pixel data, the height and width of the buffer, and the number of bytes in a pixel row. The following example shows how to initialize a vImage_Buffer of a desired format, from a file referenced by a CFURLRef:

Listing 17  Initializing a vImage_Buffer of a desired format.

CFURLRef url = <#A url to your source image file#>;
CGImageSourceRef imageSource = CGImageSourceCreateWithURL(url, NULL);
CGImageRef image = CGImageSourceCreateImageAtIndex( imageSource, 0, NULL );
vImage_Buffer result;
vImage_CGImageFormat format = {
    .bitsPerComponent = (uint32_t) CGImageGetBitsPerComponent(image),
    .bitsPerPixel = (uint32_t) CGImageGetBitsPerPixel(image),
    .bitmapInfo = CGImageGetBitmapInfo(image),
    .colorSpace = CGImageGetColorSpace(image)
}; // .version, .renderingIntent and .decode all initialized to 0 per C rules
vImage_Error err = vImageBuffer_InitWithCGImage( &result, &format, NULL, image, kvImageNoFlags );

A vImageConverter object is used to convert an image. A vImageConverter object is created by specifying a source and destination vImage_CGImageFormat, optionally with a custom colorspace transform. Listing 18 shows how to create a vImageConverter, and uses a colorspace transform you pass in. This gives you greater control over the fine details of colorspace conversion, for exacting color fidelity.

Listing 18  Creating a vImageConverter.

CFArrayRef profileSequence = <#A set of profiles to be used in the transform#>;
CFTypeRef codeFragment = NULL;
/* transform to be used for converting color */
ColorSyncTransformRef transform = ColorSyncTransformCreate (profileSequence, NULL);
/* get the code fragment specifying the full conversion */
codeFragment = ColorSyncTransformCopyProperty(transform, kColorSyncTransformFullConversionData, NULL);
if (transform) CFRelease (transform);
vImage_CGImageFormat inpFormat = { /* Your source image format */ };
vImage_CGImageFormat outFormat = { /* Your output image format */ };
vImage_Error err;
/* create a converter to do the image format conversion. */
vImageConverterRef converter = vImageConverter_CreateWithColorSyncCodeFragment( codeFragment, &inpFormat, &outFormat, NULL, kvImageNoFlags, &err );

You call the vImageConvert_AnyToAny function with an appropriately configured vImageConverter to convert the image.

Listing 19  Converting an image with the vImageConvert_AnyToAny function.

vImageConverterRef converter = <#A configured image converter#>;
vImage_Buffer srcBuf = <#an array of vImage_Buffer structs describing the source data planes#>;
vImage_Buffer destBuf = <#an array of vImage_Buffer structs describing the destination data planes#>;
vImage_Error err;
err = vImageConvert_AnyToAny(converter, & srcBuf, & destBuf, NULL, kvImageNoFlags );

Finally, call the vImageCreateCGImageFromBuffer function to create a CGImageRef from the converted image data in the vImage_Buffer.

Listing 20  Calling vImageCreateCGImageFromBuffer to create a CGImageRef from the converted image data.

vImage_Error err;
vImage_Buffer destBuf = <#A buffer with the converted image data#>;
vImage_CGImageFormat outFormat = { /*The output image format */ };
CGImageRef outImage = vImageCreateCGImageFromBuffer( &destBuf, &outFormat, NULL, NULL, kvImageNoAllocate, &err );

OpenGL - Explicit Color Management Example

OpenGL is not color managed. As a consequence, it might require additional effort to devise solutions to specific color problems you may encounter when using it. The fundamental problem is OpenGL has one set of assumptions, and the display buffer has another.

OpenGL has a linear light model. For example, if you apply a garoud shade to a scene in OpenGL you are working with a linear light model.

OpenGL has RGB values, but they are not RGB specific in any particular gamut.

The display buffer is largely sRGB 2.2 gamma.

How do you go from the OpenGL linear model into something that is appropriate for the display buffer? There are two different strategies you can take: a simple one, and one slightly more sophisticated.

OpenGL Options For Simple Color Management - Do Nothing

The simplest approach of all is to do nothing.

What does it mean if you do nothing? It means you are putting linear light data in a 2.2 gamma buffer. Implicitly, that will provide a gamma boost. A gamma of 2.2 is a big boost. It will be much more contrasty than you'd expect. If you are working with lighting models, you will get lighting that is really unexpected. It will probably not look like the environment you are trying to target. That also may be ok, if you've lived with it being contrasty that's fine. Or there may be circumstances where it may even be the correct thing.

Not everybody uses OpenGL to do 3D. A lot of people use OpenGL to do simple compositing. If you are compositing content that is sRGB based, it is already a 2.2 gamma, and it may be perfectly fine to composite it and place it into a 2.2 buffer. It will actually come out looking correct.

Provide 1.0 -> 2.2 gamma conversion in shader

The next simplest thing to do (which may be trivial if you are already using shaders) is to provide the gamma correction component of color correction. This is what changes the contrast (also called tonality). It is actually a bigger, more perceptually significant factor than the color correction aspect.

The mathematical part of gamma correction can be described as a pure power function. You take a pixel value (in this case it is a floating point value between 0 and 1) and raise it to a power. That power happens to be the ratio of the source gamma to the destination gamma. In the above OpenGL example, source gamma is 1.0 and destination gamma is 2.2, thus the ratio is 1 over 2.2. See Listing 21.

It turns out the power function on many GPU’s is very expensive. You can simplify it as a square root. A square root is raising the value to the 1 over 2.2 power. It is not quite accurate, but it is very close, and is what many OpenGL games use.

Listing 21  Provide 1.0 -> 2.2 gamma-only conversion via shader.

result = pow(fvalue, (source / destination));
result = sqrt(fvalue); // approximation

OpenGL Options for Advanced Color Management

This option is actually quite simple if you are using the proper framework. If you are using AppKit, you can very easily access the Window Manager's backing store, and set a color space on it using the method described in Listing 13.

The Window Manager will then use a shader based color match for you. It may not be the most efficient technique, but it is probably sufficient for most.

Finally, you can explicity call ColorSync to get the best possible result. Simply call ColorSync and pass it your source profile and destination profile. It will return to you a “recipe” to perform the color correction. That recipe actually has a linearization, a color conversion (a 3x3 conversion matrix) and a gamma.

Listing 22  Create shader to apply ColorSync linearization, color conversion, and gamma recipe.

FragmentInfo = ColorSyncTransformCopyProperty (transform, kColorSyncTransformFullConversionData, NULL);

If you like, you can combine all those operations into a 3D lookup table. That's actually what happens in the color management of many of the OS X frameworks and applications.

Targeted Color Management - iOS sRGB

iOS application development uses the targeted color management model. Your content is matched to the sRGB color space on the authoring platform. This matching is not performed dynamically on the iOS device. Instead, it happens during authoring on your Mac OS X desktop. Targeted color management is similar to what the video industry has traditionally done in targeting High Definition (HD) video, where the source content is transformed to the HD color space. That way, when the content is rendered on HD displays nothing further has to be done.

Targeted color management may also occur when you sync content to your mobile device. In fact, iTunes running on the desktop provides color management to the iOS targeted color space when you sync content from iPhoto to your iOS device.

Targeted color management on iOS saves tremendous amounts of power, which extends runtime, and unburdens other valuable resources like the GPU to perform other operations. With targeted management you are getting the same high quality result as active management. However, the color match it is occurring at authoring time instead of dynamically at runtime.

Authoring Content for iOS - Best Practices

Consider some typical scenarios: let's say you have a company logo, and you want your iOS app's logo to have the same appearance as your company logo. Or what if you are targeting a specific color from a color chart for some particular elements in your app. How do you go about it?

Here’s some general guidelines to follow to ensure your colors come out looking right when authoring content for iOS apps.

Setup Authoring Workstation/Environment

When authoring you should use a desktop display. Desktop displays are better than laptop displays for authoring because they have a very wide viewing angle and they're brighter. Don’t use a wide gamut display. Wide gamut displays can have a tremendously wide color gamut, and are beautiful to look at, but unless you are a very sophisticated developer with regard to color management it is easy to make mistakes. A wide-gamut monitor can display colors that are outside the gamut of more commonly used color spaces such as sRGB. However, your images must actually contain those colors, in a color space with a larger gamut than sRGB. You also need color managed software that can recognize the larger color space and translate it properly into colors on the monitor. In addition, your monitor needs to be properly calibrated and profiled to tell the color management system how to do the translation.

You should also strive for a consistent viewing environment. Unfortunately, that means forsaking windows. In addition to the big difference between sunlight and darkness, your perceptions of what you are viewing can change dramatically, even when the sun ducks behind a cloud entirely.

It is good to backlight your displays (have a light illuminate the wall behind you, and optimally the wall should be some kind of neutral color). At the very least that reduces eye strain.

Monitor calibration is not strictly required. For Apple devices, the ColorSync device integration database provides a profile for the display. You still may want to calibrate, and OS X provides a software calibrator for the system.

Content Authoring/Proofing

It is imperative you use color managed authoring tools. All of the various Apple tools are color managed — some third party tools are color managed as well. Tools that are color managed are usually very sophisticated. It is up to you to make sure they are properly configured.

When configuring your tool you’ll need to set a working color space. The working color space is a device independent color space used for image editing (such as color and tone adjustments). You should use sRGB as the working color space in your authoring tool when editing media for iOS. Your source content can be in any color space as long as it is properly tagged.

When your content is imported, convert it to the working color space sRGB. Even if your media is in a wider gamut (for example, raw photos), and your monitor can display wider than the sRGB gamut, your color managed application will translate those colors to sRGB, the color space for the finished product. By using an sRGB working color space you can get an accurate prediction of what your media will look like when displayed on the actual iOS device. This is how soft proofing works. Soft proofing allows you to see how the iOS device will render the colors in your media by displaying a "simulation" of this on your monitor. For example, here’s what happens when you soft proof an image on your monitor using an sRGB working space:

- the image is first color converted from the image profile (the profile tagged to the image) to the sRGB profile.

- once colors have been converted to the sRGB profile, a second color conversion is performed that converts color from the sRGB profile to your monitor profile.

By converting to color used by the sRGB working space and then converting the color to the color used by the monitor, you can simulate on the monitor what the image will look like on the actual iOS device.

Finally, you should make sure and tag the exported file with an sRGB color profile.

Tagging Content

Tagging means attaching meta information to your content that makes it self-describing from a color perspective. For still images, that is the ICC profile. The various Apple tools will automatically tag content they generate. That is not necessarily true of third-party tools. It is your responsibility to make sure that all your content is tagged and looks correct.

OS X contains the following tools for tagging your media:

  • Preview

  • ColorSync Utility

  • Automator

The Preview app is color managed, and is a great tool for opening your content and making sure it looks correct. If you bring up the inspector window (Tools > Show Inspector menu item) it will tell you if there is a tag attached.

Figure 11  Using the Preview Tools > Show Inspector menu item to reveal image tags.

This is important, because you could be looking at untagged content. Very often it won't be obvious if a particular image is tagged or untagged. In addition, untagged content may look correct — even non color managed content may look corrrect on a particular display, but it is almost guaranteed to look different on another person’s display. Color management not only makes things look correct, but it makes them consistent.

With Preview, you can tag an image with a color profile using the Tools > Assign Profile menu item.

Figure 12  Assigning a color profile to an image using the Preview Tools > Assign Profile menu item.

This allows you to set the color space for an image. Note it doesn't change the pixel values in your file, it changes the information that is associated with it. It tells the color management system how to render those pixels.

ColorSync Utility

ColorSync Utility is very powerful app. There are a number of different things you can do with it, such as assign a profile to image data. You can also perform a profile match operation. This is an operation that actually modifies pixels. For instance, if you open a ProPhoto wide gamut image you can have it matched to sRGB so that all the pixel values are converted to sRGB and saved in the file. The file will then have an sRGB profile associated with it.

You can compare ICC profiles in three dimensions. This becomes very useful when comparing gamuts. As a case in point, if you want to figure out if all the colors in an image in a certain color space can be represented in another color space, you can compare both of those in 3D, and spin the result around and see if any stick out. Those colors that stick out cannot be represented in that color space.

Figure 13  Using ColorSync Utility to view ICC profiles in three dimensions.

ColorSync Utility also has a calculator that allows you to perform math calculations. For instance, you can use the calculator to determine what a value in the ProPhoto color space is in sRGB. This can be useful if you are authoring RGB values for OpenGL rendering and you want to match something that is color managed. It can also be useful for HTML or for the web.

Figure 14  ColorSync Utility Calculator.

Automator Profile action

Automator is an Apple app that automates repetitive procedures on OS X. With Automator, users can construct arbitrarily complex workflows from modular units called actions. An action performs a discrete task, such as opening a file or cropping an image. A workflow is a number of actions in a particular sequence.

Apple includes a suite of ready-made actions with Automator. These include an action that allows you to apply a selected ColorSync profile to an image. For instance, you could use this action to create a workflow that assigns an sRGB profile to all the images in a specified folder.

Figure 15  Automator Action to apply a selected ColorSync profile to an image.

SIPS Tool (Scriptable Image Processing System)

The sips tool is used to query or modify raster image files and ColorSync ICC profiles. It also allows you to perform batch processing. This means if you have a whole library of thousands of images you want to tag you can easily do it as a batch using the sips tool. In this example, all images in a directory are color matched to the sRGB profile.

Listing 23  Convert all jpegs in directory to sRGB using the sips tool.

sips —matchto “/System/Library/ColorSync/Profiles/sRGB Profile.icc” *.jpg

See the sips man page to learn about the many different things you can do with this very capable tool.

Evaluating Results

How do you evaluate the results of any image editing to make sure the colors are correct? One very powerful technique is to use what is called a “trick” profile. Here’s an explanation:

Content with Embedded Trick Profile

This is special content with an embedded “trick” profile. A “trick” profile is not a regular profile you would expect to see in an image file. Instead, it is a profile specially made to allow you to easily tell whether or not ColorSync color management is being performed when the image is drawn or printed. If you view this special content in a non color managed application you can see it is clearly wrong.

Figure 16  Special content looks wrong when viewed in a non color managed application.

If you look at it in a color managed application such as Preview you can see it is correct.

Figure 17  Color managed applications display the special content correctly.

You can use this content in your own applications too. It is part of the ImageApp. See also the Image Color Management for more information.

Document Revision History

New document that describes best practices for color management in OS X and iOS


text:
Please create an account to participate in the Slashdot moderation system

Forgot your password?
Education Programming

The Value of BASIC As a First Programming Language 548

Mirk writes "Computer-science legend Edsger W. Dijkstra famously wrote: 'It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.' The Reinvigorated Programmer argues that the world is full of excellent programmers who cut their teeth on BASIC, and suggests it could even be because they started out with BASIC."
This discussion has been archived. No new comments can be posted.

The Value of BASIC As a First Programming Language

Comments Filter:
  • Fuck him. (Score:4, Informative)

    by OrangeCatholic ( 1495411 ) on Wednesday March 10, 2010 @03:28AM (#31423656)

    I was on Basic from 1986 to 1993, and it was the most meaningful years of my life.

  • Simplicity (Score:5, Informative)

    by azgard ( 461476 ) on Wednesday March 10, 2010 @03:31AM (#31423664)

    There's something to it. I recently downloaded a ZX Spectrum+ manual from (the colorful one), and was amazed by how simple the language is. The complete reference takes like 10 pages? And it can draw lines and circles..

    Now compare it with any modern language, such as Java or Python. The language description itself takes 10x more than that, and the libraries available are vast. I am not arguing it's a bad thing; I am just arguing that simplicity may be a key here.

  • by jpmorgan ( 517966 ) on Wednesday March 10, 2010 @03:45AM (#31423768) Homepage

    Indeed. Dijkstra was frequently wrong, especially when he made grand sweeping statements.

    GOTO is a good example, 'GOTO considered harmful' is practically biblical law amongst many programmers, but it's worth remembering that he made that statement in the context of an argument with Donald Knuth. Knuth won: (

  • Re:Time heals (Score:3, Informative)

    by julesh ( 229690 ) on Wednesday March 10, 2010 @03:46AM (#31423772)

    Depends on the BASIC. I use RealBasic at work as an alternative to LabView.

    RTFA. The author is quite clearly talking about non-block structured BASICs of the MS-BASIC kind.

    Am I the only person on the Earth who just writes off hysterical, panty-wetting stuff like this?

    Again, read for context. Dijkstra was being intentionally hyperbolic in a joke article when he wrote this. He did intend the point behind it, though.

  • by phantomfive ( 622387 ) on Wednesday March 10, 2010 @04:00AM (#31423836) Journal
    If you had read the article, you would know that you had just written a fairly decent summary of the author's main point.
  • by mccalli ( 323026 ) on Wednesday March 10, 2010 @04:05AM (#31423864) Homepage
    Yeah, there were no 'else' constructs. If you wanted an else, you had to do it yourself with a couple GOTOs. Also, the worst part about line numbers was when you decided to add something later, and there weren't enough lines. A program that had been refactored this way a few times could literally move randomly through the source code.

    I never owned a Beeb, though I had several friends that did. I used them at school a lot too, and their BASIC was extraordinarily advanced. The ELSE statement was there, as was the standar(ish) GOSUB, but you could also define true procedures which returned values etc. (DIM PROC), and there was a clean way of dropping down to the 'OS' proper (OSCLI statements).

    In addition, it also solved the line number problem you mentioned. It had a renumber command so that everything would become properly spaced out again. I remember the style of coding you're describing from my C64 efforts - the C64 was actually MS BASIC and it was dreadful, anyone wanting to do decent high-levle coding used to get the Simon's BASIC [] cartridge.

    As a whole though, the BBC simply had the best BASIC of any 8-bit I encountered. That's not too surprising given its background and use as a teaching tool, but they did it very well indeed.

  • Dijkstra ? Legend ? (Score:4, Informative)

    by vikingpower ( 768921 ) on Wednesday March 10, 2010 @04:12AM (#31423902) Homepage Journal

    Dijkstra, who taught at Eindhoven Technical University - which is how I superficially came to know him - was mostly a self-declared legend. He cultivated his own myth, even going as far as publishing a little book with his own quotes.

  • by AVee ( 557523 ) <<slashdot> <at> <>> on Wednesday March 10, 2010 @05:04AM (#31424122) Homepage
    If, and only if, you're programming in a language which doesn't provide any constructs to do error handling. Dijkstra was right, goto's are a bad idea and should not exist in a language. Knuth was right, in the absence of something replacing goto you're better of using it then not using (if done properly).

    All of that discussion is passed us now, most of us have been writing software without using goto for the last two decades, goto has been replaced with try/catch constructs, labeled breaks, switch statements etc. None of the examples Knuth provides in that paper are still relevant in any modern language. By that measure, Dijkstra won.

    It's not surprising either, Dijkstra was always in utopia, talking about how things would be if he build the world himself (which doesn't mean he's wrong). Knuth has always been about how to deal with the current reality (including the state of programming languages), and not so much about changing that reality.
  • by geminidomino ( 614729 ) on Wednesday March 10, 2010 @05:12AM (#31424158) Journal

    What intro-level courses use C or C++?

    Florida State University -- COP3330, "Intro to Computer Programming". 100% C++

  • by Anonymous Coward on Wednesday March 10, 2010 @05:22AM (#31424210)
    Well it IS done with jump instructions, but as few as possible because the branch penalty is usually high (especially on an x86). If you don't use the goto statement then your program is more abstract, and structures like loops can be more easily optimised by the compiler to use as few branches as possible. Not to mention things architecture-specific like ARM's condition codes which can turn a loop with multiple if-else statements into a block of code with only one branch instruction.
  • by tepples ( 727027 ) <> on Wednesday March 10, 2010 @10:38AM (#31425892) Homepage Journal

    Sometimes I wished `break` could take argument of how many levels it should break out of

    It can in PHP []. Java [] and Perl [] have a different solution: label the start of a loop and then use that label as the argument of break. In C, it's just a matter of discipline to use goto only to replace a throw or labeled break.

Yet magic and hierarchy arise from the same source, and this source has a null pointer.


text:
• Sourcing Solutions
  • Services & Membership
  • Help & Community

Quick Details

  • Condition: New
  • Place of Origin: Guangdong, China (Mainland)
  • Brand Name: CHENQUAN
  • Model Number: CQ-65TLHJPCK
  • Voltage: 380V
  • Power(W): 15KW
  • Dimension(L*W*H): 1650*1100*1400MM
  • Weight: 1.5T-2T
  • Certification: ISO
  • Warranty: 1 Year
  • After-sales Service Provided: Engineers available to service machinery overseas

Packaging & Delivery

Packaging Details Wood packaging

Product characteristics:

1, clamping force 65T.

2, the pressure is stable, automatic pressure up, energy saving.

3, using Japanese OMRON programmable PLC automatic hydraulic control. Progressive die, die back, front opening, exhaust, sulfur, integration, security, energy saving. To minimize the air bubble and other adverse factors.

4, man-machine interface, touch screen input required production instructions.

5, power 15KW.

6, solid silicone products and special equipment.

7, up and down mode intelligent PID temperature control.

Total pressure65T100T
Max. Hydraulic Pressure20MPa20MPa
Plunger Stroke150mm150mm
Plunger Diameter200mm250mm
Speed of Closing80mm/s80mm/s
Speed of Opening90mm/s90mm/s
Angle of Mold Plate Turnover60°60°
Platen Size400×400mm500×500mm
Daylight Opening150mm150mm
Total heating power9kw12kw
Max. Temperature≤200℃≤200℃
Pump Power3.75kw5.5kw
Overall Dimension (L×W×H)1540×1200×1600mm1600×1620×1600mm
Transaction History of the Supplier

Below is the information about the supplier's transactions conducted via Alibaba.com. If you require further details regarding the transaction data, please contact the supplier directly.

Transaction Overview

Transaction Details

This supplier has completedtransactions with buyers from .

Shipping Destination
Transaction Value
Transaction Date
Email to this supplier
China (Mainland) | Manufacturer, Trading Company
Supplier Assessments:
The supplier supports Trade Assurance – A free service that protects your orders from payment to delivery.
Supplier's Trade Assurance Limit: US $25,000
Learn More


text:
Silver Cute Cat Kitten Design Ring For Fashion Women - FREE WORLDWIDE SHIPPING | eBay

I don’t know about you, but this little cat ring is a staff favorite, and so easy to adjust. You just need to very slowly stretch the paws a little for a perfect fit. This ring is like a little kitty-cat hug that you can savor and never have to let go of. | eBay!"

Vantage Theme, business directory software, powered by WordPress.


text:
Welcome Guest [ Login | Register ]

Shop by Category
Featured Product
Products: 471
Categories: 28
Prices: US Dollars
Product Information
Store Home > Collectable Golf Disc

Collectable Golf Disc

30th Anniversary Roc
30th Anniversary Roc

30 Years & Soaring. Introduced in 1987, the Roc was among the first discs to give players unprecedented control and distance. This legendary bird remains a classic and, as illustrated in the commemorative stamp, soars high above the rest. A limited quantity of San Marino Rocs in Luster Champion plastic. They’re majestic, in flight and on the wall. All are max weight at 180g. Assorted disc and stamp colors.

Price: $17.95

Product Code: 30thRoc In Stock: 4  Quantity: Add to Basket

Shopping Basket
Your basket is empty.
0:
Popular Products
Sale Items
  1. F2 Super Sport
    Save $100.00
  2. !Mystery Box
    Save $50.00
  3. Discatcher Traveler
    Save $30.00
  4. JFA/AWI
    Save $20.05
  5. HeroPack - Red
    Save $20.00
  6. HeroPack - Blue
    Save $20.00
  7. Champion Dominator First Run Stamp
    Save $20.00
  8. Discatcher Sport
    Save $15.00
  9. Hammer Sports
    Save $15.00
  10. DISCarrier
    Save $11.00
Powered by CubeCart
Copyright Devellion Limited 2006. All rights reserved.


text:
Tag Archives | coupon

Groupon Buenos Aires Launches

Groupon, the popular US-based group buying site, has just launched in Buenos Aires.

Groupon is one of the hottest new startups in recent years and offers specials and discounts based on a certain number of people collectively buying the “deal of the day.”

Here’s how it works: each day Groupon offers one special local promotion. If a certain number of people sign up for the offer, then everyone gets the deal. If the minimum number of people is not met, no one gets the deal that day. Groupon makes money by getting a percentage from the retailers. The retailers make out because it brings business and not everyone will redeem the offer they purchased.

Here are some of the recent offers they have had for Buenos Aires since launching on June 24, 2010:

  • Pay $50 and get $100 of food at Kansas restaurant
  • Get a massage for two at Experiencia Nirvana for $100, a 50% discount
  • Two golf classes at the  Costanera Golf Driving Range for $1
  • Pay $50 and get $100 of food at Donde restaurant on Gorritti

It’s a strong business model that has seen them generate significant revenue as well as venture capital in the US.  The interesting thing for the Buenos Aires site will be the reluctance of many Argentines to shop with credit cards online.  There is a very low percentage of e-commerce transactions across Argentina,with people preferring to pay in cash or at RapiPago.  Still, if the offers are compelling enough, they may be able to entice people to buy online.

Sign up for their daily email and take advantage of some of these discounts now. I’m looking forward to seeing what else they will have.


text:
Tag Archives | street level maps

Expat Tech: Google Maps Coming to Argentina

As of Monday, November 17, 2008, that big blank space on the photo at the right should be a bit more filled in like our neighbors in Brazil.  That’s right, after a long wait, Google Maps is finally coming to Argentina.

When I was back in NYC, I pretty much used  Google Maps on a weekly basis. So, I was fairly disappointed when I came here and discovered that Google Maps did not cover Argentina.  They had a satellite view, but absolutely no street level maps. This seemed a bit surprising given that Buenos Aires is one of the 10 largest cities in the world.

After doing some initial research, it appeared that Google did not yet have what it considers to be high quality data for geocoding positions in Argentina. In an exclusive February 2008 interview with infobaeprofesional.com (es | en), Google’s Director of Communications and Public Affairs for Latin America, Alberto Arébalos, stated this very reason and also mentioned that gathering that data was a very time consuming manual process. He said that he expected to have maps for Argentina in the first half of 2008.  Well, it took a bit longer than that…  (An interesting point he also mentioned in the article was that Google was tackling issues of low Internet penetration and fighting for increased ad spending as against more traditional forms of media in South America.)

Luckily, several others were filling the map void, including a goverment run site built on open-source software – the Buenos Aires Interactive Map. This interactive map of the city is a public service from the city government that allows you to geographically locate adresses, find relevant information about each building including its photograph, find the shortest path to go from one place to another on foot or obtain driving directions, access a considerable set of useful information regarding the city including satellite photographs, historical flights and much more.  While it’s only in Spanish, it’s pretty easy to figure out. The major problem with it is that it seems to be down frequently and is sometimes slow to respond.

With Google Maps now coming, I think it’s going to be time to say good-bye to that site though. Google just always seems to do things so much better than anyone else. The initial launch will include road maps of major cities, tourist destinations, and national parks. Point to point directions will not initially be available though and may take several additional months to launch (one reason to still use the government site). Business listings will also come at a later point.

Google Maps also includes their powerful API which allows other web sites to create mashups showing different data displayed on their maps.  It will be interesting to see what new mashup sites launch for the area as well. It will also be interesting to see if other sites, like Guia Oleo drop their existing maps and go with Google.

We’ll report back on Monday and see if it’s all that it’s promised to be.

Desde el lunes, Google se suma a la competencia argentina de los mapas online  (english) [Clarin]


text:
Tag Archives: San Francisco

Relaxing soundscape

Nonagon, a San Francisco based producer, has made a nice Goyopod remix. What I like about the track are the goa-vocals and a mellow beat which make it an easy listen and a relaxing experience. You can also find Goyopod – incidentally also a San Francisco inhabitant – at soundcloud and he hosts a wide array of remixes from this very track: Ashra. If you like the sound why not go and see which remix is your favourite. Comment if you like one!

Tagged , , , , , , , , , , , ,
%d bloggers like this:


text:
Red Double Sided Adhesive Tape - 2mm

Red Double Sided Adhesive Tape - 2mm
Our Price:

If you want to have a long lasting repair on your device this roll of 2mm Red Double Sided Adhesive tape is essential.  The best option for securely mounting screens and batteries on electronic devices is this good quality, premium adhesive. This tape dries clear - something not may adhesives will do.  It provides the strongest grip in the market.  If you reuse the old adhesive it can lead to poor or loose fit over time. A full roll is very economical because it ensures you have enough adhesive for multiple repairs.  FREE pry tool included.

Do not worry about damaging your phone or tablet any further by doing this repair.  We have the solution for you - our qualified repair technicians can do the repair for you.  Give us a call at 702-800-5991 to find out the details on the  repair.  Or read all about it here on the Repair Services PageOnce we complete the repair your phone will be as good as new.

 Available as a DIY Kit.  Included in this 14 pc. tool kit are all the tools you require for a successful repair and maintenance of your smart phone or tablet.

Our DIY Kit Includes:

Compatible with:

  • All cell phones and tablets

  • Brand new Double Sided Adhesive Tape - 2mm Red
  • Professional Repair Services available
  • Material: PET
  • Acrylic adhesive
  • 2mm width
  • Adhesion to Steel: 88 oz/in.
  • Tape Thickness: 5.0 mils
  • Tensile Strength: 15 lbs/in
  • Elongation: 50%
  • Moisture Resistance: Good
  • Conformability: Excellent
  • Quick Stick: Excellent
  • Adhesion to a Variety of Substrates: Excellent
  • Shelf Life: 1 year
  • Temperature Resistant 100-150C
  • For questions about this part please feel free to contact us by phone at 702-800-5991 between 9:00 am-5:00 pm (PST), Monday through Friday
  • Or use the LIVE CHAT button found on the upper center of every page to ask about your part Monday through Friday 5:30 am-9 pm (PST).
  • Reach us directly for more information on the 2mm Red Double Sided Adhesive Tape through our Contact Page.
  • Please visit our FAQs page for answers to commonly asked questions.

All orders of this part will ship the same business day if placed by 4 pm PST, Monday-Friday.

Repair Guides