text:
Learn how to use the Flickr app for iOS and Android to shoot and enhance photos, share them, and explore photos taken by other community members.
All Courses
- Photography (45)
- Sharing Photos
- Photo Management (18)
- Printing Photos (12)
- Raw Processing (7)
- Business (6)
- iPhone, iPod, iPad (6)
- Social Networks (4)
- Projects (3)
- Retouching (3)
- video2brain (3)
- Design (2)
- Social Media Marketing (2)
- Creative Spark (1)
- Developer (1)
- Home + Small Office (1)
- Productivity (1)
- Web (1)
- Web Design (1)
- Web Development (1)
Skill level
- Beginner (8)
- Intermediate (4)
- Advanced (2)
- Appropriate for all (4)
More options
Get a guided tour of the popular photo-sharing site Flickr, from posting and organizing photos and videos to participating in the Flickr community through contacts, comments, and groups.
Get the most out of Apple's Photos for OS X software and its features for managing, enhancing, and sharing photos.
Learn how to use the Dropbox cloud-storage service to access images on the go and back up important work, and use the companion app Carousel to share image galleries with clients.
Get up to speed with Apple's Photos software for OS X Yosemite. Learn to convert Aperture and iPhoto libraries and use all of the Photos editing and sharing features.
Learn how to manage, enhance, and share your photos with iPhoto.
Photographer Derrick Story shows how to back up and store your mobile photos and videos easily and automatically.
Explore the basics of Flickr, from posting, organizing, and editing photos to participating in the Flickr community.
Learn how to combine the simplicity of iPhoto with the power of Aperture and get the best of both worlds.
Covers the entire photographic workflow in Aperture, from import to enhancement to output, plus special 3.3 features like Retina display support and iPhoto integration.
"You guys have helped change my life forever. I'm so very grateful." —Donni R.
more from our members »


text: London 2012 'I Believe' Olympic anthem returns Add to ... The Globe and Mail Published Thursday, Jul. 26, 2012 6:34PM EDT Last updated Thursday, Jul. 26, 2012 6:46PM EDT A new version of CTV's ubiquitous Olympic anthem "I Believe" will be heard during the broadcast of the 2012 Games. Operatic pop group the Tenors, formerly the Canadian Tenors, lend their voices to the updated rendition. Watch More Video: For these sisters, Junior Olympics could be path out of homelessness Video: Sports fans can be virtually in the game Video: Meet some of the athletes on the Refugee Olympic Team New Blue Jays outfielder 'complements' team: GM Canadian teen says defeating Kyrgios at Rogers Cup was a 'miracle' Don Cherry, Ron MacLean make mark on Walk of Fame A quick look at Rio flagbearer Rosie MacLennan Usain Bolt says 'good to send strong message' against Russian doping Canada sending biggest beach volleyball team yet to Rio Sidney Crosby shows off Stanley Cup to hometown fans Sidney Crosby senses 'excitement' in hometown over Cup arrival James Hinchcliffe looks for season's first victory at Indy Toronto 'Rogue Tenor' Romigio Pereira breaks his silence 'Lone wolf' member of the Tenors inserts 'All Lives Matter' into O Canada China seeks private approach to gymnastics Golfer Alena Sharp on joining Brooke Henderson at Rio Games Fans celebrate arrival of team Portugal and Euro trophy 'Wait till next year': Fans react to Raonic's Wimbledon loss Faces of battle: A look at the contorted faces of tennis titans Raonic and Federer Maple Leafs legends on hand for centennial season launch Comments AA More Related to this Story The Globe and Mail's complete coverage of the London Olympics LONDON 2012 Canada's Mr. Olympic TV London 2012 A viewers guide to London 2012 Follow us on Twitter: @Globe_Sports

subset: commoncrawl


text:
Reading mode: Light Dark
Forum indexPentax SLR TalkChange forum
Voigtländer APO-Lanthar 90mm SLII...just received my lens
Started May 13, 2011 | Discussions thread
Shop cameras & lenses ▾
Success • Regular Member • Posts: 218
Re: Voigtländer APO-Lanthar 90mm SLII...just received my lens
In reply to DrewE • May 13, 2011
Very nice. This and the 125 are the only 2 Voigtlanders that have ever really tempted me.
Reply Reply with quote Complain
|Post (hide subjects)
|Posted by
|May 13, 2011
|May 13, 2011
|May 13, 2011
|May 13, 2011
|May 13, 2011
Keyboard shortcuts:
FForum PPrevious NNext WNext unread UUpvote SSubscribe RReply QQuote BBookmark MMy threads
Color scheme? Blue / Yellow
Latest reviews
Finished challenges
Most popular cameras
In-depth testingLatest Camera ReviewsBeyond the studio testsFeature Articles and VideosPIX VideosTalks, demos and panels691The Canon that canCanon EOS 80D Review364Touchscreen street shooterFujifilm X70 Review2137Upwardly mobileSony a6300 Review327Power ZoomPanasonic Lumix ZS100/TZ100 Review2481Retro through-and-throughFujifilm X-Pro2 Review
Top threads in this forum
Most bookmarked in this forum
Top posters in this forum
Follow us
All content, design, and layout are Copyright © 1998 - 2016 Digital Photography Review All Rights Reserved. Reproduction in whole or part in any form or medium without specific written permission is prohibited.


text:
bruh wot da fuk.
you're too fat you fat fuk, your legs are too huge for those jeans, dem quads. Trust me, this is coming from a guy who lives in london, I see this chit all the time, you don't...
Type: Posts; User: Angelus6
Search: Search took 0.10 seconds.
Results 1 to 20 of 87


text:
Citrus Shrimp Salsa
Total Time
Prep 10 mins
Cook 0 mins
Easy and yummy dip with shrimp, lime and fresh cilantro! Serve with tortilla chips, great for game day!
Ingredients Nutrition
- 16 ounces salsa
- 9 -12 ounces shrimp, fully cooked and peeled (2 cans whole baby shrimp or 1 1/2 cups medium shrimp chopped up)
- 3 tablespoons orange juice
- 2 tablespoons lime juice
- 1 tablespoon fresh cilantro, chopped
- 1 dash cayenne pepper (optional)
- Combine all ingredients in a large mixing bowl.
- Chill for 30 minutes or until ready to serve.
- Serve with tortilla chips and additional lime wedges.
Most Helpful
Just extemely fantastic! DH loved it and we will absolutely make again and again. Scraped the serving bowl clean during the Denver game. Thanks, Brooke!
This stuff is FANTASTIC! I used a medium salsa and added several generous dashes of cayenne. The heat was a perfect match to the citrus flavor and the shrimp went great with these flavors. I served with Tostitos scoops and it was just wonderful - thanks for sharing this recipe!
I used chunky mild salsa & omitted the cayenne pepper, & it was a great tasting dip, though it didn't last long [& that's a bad thing?]! I served it with both tortilla chips & flat slices of jicama ~ the jicama was gone in no time at all! Thanks for the posting! [Made for Please Review My Recipe Cooking Game]


text:
Lindiwe Schubart won a booking to the value of R2125 at Protea Ridge Guest Cottages
I am feeling blessed and grateful. Thank you so much
See all winners | How can you Win Free Accommodation?
We found some more establishments that you may be interested in. These establishments may not match the accommodation type or location that you requested.
Get your stay free!
From R850* unit
Areena Riverside Resort is nestled in a peaceful valley in the Eastern Cape along the border for the Wild Coast. Whether you prefer to stay in 4-star self-catering accommodation, camp or caravan, we h... More Info
1 Person is currently making an enquiry at this establishment.
From R650* unit
Dolphins' View is everything the name says. Situated within a stone's throw of the breakers, at one of East London's most sort after coastal villages, Glengariff. This fully furnished, self-catering f... More Info
From R1000* unit
Glengarriff Lodge, situated just 25 km from East London, at the southern end of the Wild Coast, offers unsurpassed business and holiday accommodation.
Nestled in the lee of the dune, only 50 paces ... More Info
From R4000* unit
"On the Rocks" is a newly built home in a modern contemporary style. The house is uniquely positioned less than 40meters from the high water mark providing an intimate ocean living experience.
The ... More Info
From R600* unit
Situated less than 50m from the sea, Makulu Manzi has stunning uninterrupted 180 degree sea views. A few minutes walk to beautiful bathing beach and river. With only a hiking path separating you from... More Info
From R750* unit
Relax in one of two hand-built cottages equipped to a high standard and located in the grounds of Driftwood Sculpture Studios, facing the Kwelera Coastal Nature Reserve, with the secluded beach and co... More Info
From R450* unit
Inkwenkwezi is situated in the malaria free Eastern Cape, only a 30 minute drive from East London at the start of the Wild Coast. Here one can view the magnificent Big Five or the predators housed wit... More Info
From R502 pps
This upmarket, fully equipped self-catering cottages is located on the beautiful Wild Coast, a mere 20 kilometers from East London.
These 2-bedroom cottages are nestled between the Kwesani River a... More Info
From R250 pps
200 meters from Gonubie main beach/river
Close to all main amenities
... More Info
From R620 pps
Ocean Dreams is situated just 300 metres from Gonubie's Beach & Boardwalk. We are also within 2km of Gonubie's Bird Sanctuary & Golf Course. One of the largest Shopping Malls, Hemingways & the city i... More Info
Broadcast your accommodation requirements to our database of hotels and lodges.
Price Range comparison
In order to provide meaningful price comparisons this website compares the Per Person Sharing Rate or, where this is not available, the Average Price Per Person for a unit, based on its maximum occupancy.When Homes and Villas are selected as the search criteria, the full daily rate for the unit is used for price comparison and display irrespective of the number of people the unit sleeps.* This accommodation is only available as a unit. It has been included in these search results as the average price per person based on maximum occupancy falls within the selected price range. However, the price displayed is the full unit price.
KweleraLovely, peaceful surroundings - theresa els


text:
I just love when I have morings off and I can come outside and sit and start the morning this way. Its a little chilly this morning here in small-town Argos indiana. 495 more words
Tags » Synthroid
What My Thyroid Cancer Diagnosis Taught Me
This past weekend, April 2nd, marked the three-year anniversary of my thyroid cancer diagnosis (you can read the full story here). It's not something I choose to commemorate, but rather something my mind never lets me forget. 384 more words
The Frustration That Is Hypothyroid
It was just one of those times where you go into your doctor for something totally unrelated and they send you in for a full work up and BOOM, there it is those ugly high TSH levels. 526 more words
The Humpday Thankful Three
Thought I'd use this as an opportunity to reflect on three things I'm immensely thankful for right now. I could sure do more than 3 but for brevity's sake, here we go… 367 more words
The Doctor Will See You Now...
Three years after my thyroid surgery, the struggle to find a good endocrinologist is real. If you are a fellow thyroid patient, perhaps you can relate. 468 more words
Synthroid : What it did to me.
I've been dealing with nerve pain for about six months now, and it has been just getting worse, including headaches, light sensitivity in my eyes, and confusion at times. 180 more words
Wellness Wednesday: Uh-Oh
I finally went to the eye doctor last Friday. I had been putting it off long enough, so I just walked over to the nearest eye place — MyEyeDr… 288 more words


text:
Good Will Home Association
Rating: 0 stars 0 0 review 29
16 Prescott Dr Hinckley ME 04944 USA
Good Will-Hinckley provides a home and helping hand to boys and girls ages 11 to 21 For over 115 years, we have supported youth in development by providing a home, education, recreation, spiritual and cultural development on our 2,450 acre campus Family counseling and clinical services are also available Since our founding by Reverend George Walter Hinckley in 1889, Good Will-Hinckley has served over 6,000 children from Maine and beyond
Filter Reviews by Role
Promote This Nonprofit
GreatNonprofits badges allow you to raise awareness of your favorite nonprofits on your own web sites!
Reviews for Good Will Home Association
Get discovered. Invite people to share their experiences about this nonprofit!


text:
Vous voulez voir cette page en français ? Cliquez ici.
Have one to sell?
Firkusny Plays Brahms Import
Only 5 left in stock - order soon.
Ships from and sold by @ ALLBRIGHT SALES @.
Product Details
Would you like to update product info, give feedback on images, or tell us about a lower price?
Track Listings
|1. Rhap in g, Op.79 No.2
|2. Intermezzo in b flat, Op.117 No.2
|3. Capriccio in f #, Op.76 No.1
|4. Intermezzo in A flat, Op.76 No.3
|5. Capriccio in d, Op.116 No.1
|6. Intermezzo in e flat, Op.118 No.6
|7. Intermezzo in b, Op.119 No.1
|8. Intermezzo in e, Op.119 No.2
|9. Intermezzo in C, Op.119 No.3
|10. Rhap in E flat, Op.119 No.4
|11. Son No.2 in E flat, Op.120: Allegro Amabile
|12. Son No.2 in E flat, Op.120: Allegro Appassionato
|13. Son No.2 in E flat, Op.120: Andante Con Moto
|14. Son No.1 in f, Op.120: Allegro Appassionato
|15. Son No.1 in f, Op.120: Andante Un Poco Adagio
|16. Son No.1 in f, Op.120: Allegretto Grazioso
|17. Son No.1 in f, Op.120: Rondo: Vivace
Customer Reviews
There are no customer reviews yet.
|5 star
|4 star
|3 star
|2 star
|1 star
Look for similar items by category
Would you like to update product info or give feedback on images?


text:
This action might not be possible to undo. Are you sure you want to continue?
Jim Waldo Geoff Wyant Ann Wollrath Sam Kendall
November 1994
We argue that objects that interact in a distributed system need to be dealt with in ways that are intrinsically different from objects that interact in a single address space. These differences are required because distributed systems require that the programmer be aware of latency, have a different model of memory access, and take into account issues of concurrency and partial failure. We look at a number of distributed systems that have attempted to paper over the distinction between local and remote objects, and show that such systems fail to support basic requirements of robustness and reliability. These failures have been masked in the past by the small size of the distributed systems that have been built. In the enterprise-wide distributed systems foreseen in the near future, however, such a masking will be impossible. We conclude by discussing what is required of both systems-level and application-level programmers and designers if one is to take distribution seriously.
A Sun Microsystems, Inc. Business
M/S 29-01 2550 Garcia Avenue Mountain View, CA 94043
email addresses: firstname.lastname@example.com firstname.lastname@example.com firstname.lastname@example.com firstname.lastname@example.com
A Note on Distributed Computing
Jim Waldo, Geoff Wyant, Ann Wollrath, and Sam Kendall
Sun Microsystems Laboratories 2550 Garcia Avenue Mountain View, CA 94043
Much of the current work in distributed, object-oriented systems is based on the assumption that objects form a single ontological class. This class consists of all entities that can be fully described by the specification of the set of interfaces supported by the object and the semantics of the operations in those interfaces. The class includes objects that share a single address space, objects that are in separate address spaces on the same machine, and objects that are in separate address spaces on different machines (with, perhaps, different architectures). On the view that all objects are essentially the same kind of entity, these differences in relative location are merely an aspect of the implementation of the object. Indeed, the location of an object may change over time, as an object migrates from one machine to another or the implementation of the object changes. It is the thesis of this note that this unified view of objects is mistaken. There are fundamental differences between the interactions of distributed objects and the interactions of non-distributed objects. Further, work in distributed object-oriented systems that is based on a model that ignores or denies these differences is doomed to failure, and could easily lead to an industry-wide rejection of the notion of distributed object-based systems.
In what follows, we will talk about local and distributed computing. By local computing (local object invocation, etc.), we mean programs that are confined to a single address space. In contrast, we will use the term distributed computing (remote object invocation, etc.) to refer to programs that make calls to other address spaces, possibly on another machine. In the case of distributed computing, nothing is known about the recipient of the call (other than that it supports a particular interface). For example, the client of such a distributed object does not know the hardware architecture on which the recipient of the call is running, or the language in which the recipient was implemented. Given the above characterizations of "local" and "distributed" computing, the categories are not exhaustive. There is a middle ground, in which calls are made from one address space to another but in which some characteristics of the called object are known. An important class of this sort consists of calls from one address space to another on the same machine; we will discuss these later in the paper.
The Vision of Unified Objects
There is an overall vision of distributed object-oriented computing in which, from the programmer's point of view, there is no essential distinction between objects that share an address space and objects that are on two machines with different architectures located on different continents. While this view can most recently be seen in such works as the Object Management Group's Common Object Request Broker Architecture (CORBA) [1], it has a history that includes such research systems as Arjuna [2], Emerald [3], and Clouds [4]. In such systems, an object, whether local or remote, is defined in terms of a set of interfaces declared in an interface definition language. The implementation of the object is independent of the interface and hidden from other objects. While the underlying mechanisms used to make a method call may differ depending on the location of the object, those mechanisms are hidden from the programmer who writes exactly the same code for either type of call, and the system takes care of delivery. This vision can be seen as an extension of the goal of remote procedure call (RPC) systems to the object-oriented paradigm. RPC systems attempt to make crossaddress space function calls look (to the client programmer) like local function calls. Extending this to the objectoriented programming paradigm allows papering over not just the marshalling of parameters and the unmarshalling of results (as is done in RPC systems) but also the locating and connecting to the target objects. Given the isolation of an object's implementation from clients of the object, the use of objects for distributed computing seems natural. Whether a given object invocation is local or remote is a function of the implementation of the objects being used, and could possibly change from one method invocation to another on any given object. Implicit in this vision is that the system will be "objects all the way down"; that is, that all current invocations or calls for system services will be eventually converted into calls that might be to an object residing on some other machine. There is a single paradigm of object use and communication used no matter what the location of the object might be. In actual practice, of course, a local member function call and a cross-continent object invocation are not the same
thing. The vision is that developers write their applications so that the objects within the application are joined using the same programmatic glue as objects between applications, but it does not require that the two kinds of glue be implemented the same way. What is needed is a variety of implementation techniques, ranging from same-addressspace implementations like Microsoft's Object Linking and Embedding [5] to typical network RPC; different needs for speed, security, reliability, and object co-location can be met by using the right "glue" implementation. Writing a distributed application in this model proceeds in three phases. The first phase is to write the application without worrying about where objects are located and how their communication is implemented. The developer will simply strive for the natural and correct interface between objects. The system will choose reasonable defaults for object location, and depending on how performance-critical the application is, it may be possible to alpha test it with no further work. Such an approach will enforce a desirable separation between the abstract architecture of the application and any needed performance tuning. The second phase is to tune performance by "concretizing" object locations and communication methods. At this stage, it may be necessary to use as yet unavailable tools to allow analysis of the communication patterns between objects, but it is certainly conceivable that such tools could be produced. Also during the second phase, the right set of interfaces to export to various clients—such as other applications—can be chosen. There is obviously tremendous flexibility here for the application developer. This seems to be the sort of development scenario that is being advocated in systems like Fresco [6], which claim that the decision to make an object local or remote can be put off until after initial system implementation. The final phase is to test with "real bullets" (e.g., networks being partitioned, machines going down). Interfaces between carefully selected objects can be beefed up as necessary to deal with these sorts of partial failures introduced by distribution by adding replication, transactions, or whatever else is needed. The exact set of these services can be determined only by experience that will be gained during the development of the system and the first applications that will work on the system. A central part of the vision is that if an application is built using objects all the way down, in a proper object-oriented
fashion, the right "fault points" at which to insert process or machine boundaries will emerge naturally. But if you initially make the wrong choices, they are very easy to change. One conceptual justification for this vision is that whether a call is local or remote has no impact on the correctness of a program. If an object supports a particular interface, and the support of that interface is semantically correct, it makes no difference to the correctness of the program whether the operation is carried out within the same address space, on some other machine, or off-line by some other piece of equipment. Indeed, seeing location as a part of the implementation of an object and therefore as part of the state that an object hides from the outside world appears to be a natural extension of the object-oriented paradigm. Such a system would enjoy many advantages. It would allow the task of software maintenance to be changed in a fundamental way. The granularity of change, and therefore of upgrade, could be changed from the level of the entire system (the current model) to the level of the individual object. As long as the interfaces between objects remain constant, the implementations of those objects can be altered at will. Remote services can be moved into an address space, and objects that share an address space can be split and moved to different machines, as local requirements and needs dictate. An object can be repaired and the repair installed without worry that the change will impact the other objects that make up the system. Indeed, this model appears to be the best way to get away from the "Big Wad of Software" model that currently is causing so much trouble. This vision is centered around the following principles that may, at first, appear plausible:
Unfortunately, all of these principles are false. In what follows, we will show why these principles are mistaken, and why it is important to recognize the fundamental differences between distributed computing and local computing.
Déjà Vu All Over Again
For those of us either old enough to have experienced it or interested enough in the history of computing to have learned about it, the vision of unified objects is quite familiar. The desire to merge the programming and computational models of local and remote computing is not new. Communications protocol development has tended to follow two paths. One path has emphasized integration with the current language model. The other path has emphasized solving the problems inherent in distributed computing. Both are necessary, and successful advances in distributed computing synthesize elements from both camps. Historically, the language approach has been the less influential of the two camps. Every ten years (approximately), members of the language camp notice that the number of distributed applications is relatively small. They look at the programming interfaces and decide that the problem is that the programming model is not close enough to whatever programming model is currently in vogue (messages in the 1970s [7], [8], procedure calls in the 1980s [9], [10], [11], and objects in the 1990s [1], [2]). A furious bout of language and protocol design takes place and a new distributed computing paradigm is announced that is compliant with the latest programming model. After several years, the percentage of distributed applications is discovered not to have increased significantly, and the cycle begins anew. A possible explanation for this cycle is that each round is an evolutionary stage for both the local and the distributed programming paradigm. The repetition of the pattern is a result of neither model being sufficient to encompass both activities at any previous stage. However, (this explanation continues) each iteration has brought us closer to a unification of the local and distributed computing models. The current iteration, based on the object-oriented approach to both local and distributed programming, will
• there is a single natural object-oriented design for a
given application, regardless of the context in which that application will be deployed; • failure and performance issues are tied to the implementation of the components of an application, and consideration of these issues should be left out of an initial design; and • the interface of an object is independent of the context in which that object is used.
be the one that produces a single computational model that will suffice for both. A less optimistic explanation of the failure of each attempt at unification holds that any such attempt will fail for the simple reason that programming distributed applications is not the same as programming non-distributed applications. Just making the communications paradigm the same as the language paradigm is insufficient to make programming distributed programs easier, because communicating between the parts of a distributed application is not the difficult part of that application. The hard problems in distributed computing are not the problems of how to get things on and off the wire. The hard problems in distributed computing concern dealing with partial failure and the lack of a central resource manager. The hard problems in distributed computing concern insuring adequate performance and dealing with problems of concurrency. The hard problems have to do with differences in memory access paradigms between local and distributed entities. People attempting to write distributed applications quickly discover that they are spending all of their efforts in these areas and not on the communications protocol programming interface. This is not to argue against pleasant programming interfaces. However, the law of diminishing returns comes into play rather quickly. Even with a perfect programming model of complete transparency between "fine-grained" language-level objects and "larger-grained" distributed objects, the number of distributed applications would not be noticeably larger if these other problems have not been addressed. All of this suggests that there is interesting and profitable work to be done in distributed computing, but it needs to be done at a much higher-level than that of "fine-grained" object integration. Providing developers with tools that help manage the complexity of handling the problems of distributed application development as opposed to the generic application development is an area that has been poorly addressed.
failure, and concurrency.1 The difference in latency is the most obvious, but in many ways is the least fundamental. The often overlooked differences concerning memory access, partial failure, and concurrency are far more difficult to explain away, and the differences concerning partial failure and concurrency make unifying the local and remote computing models impossible without making unacceptable compromises. 4.1 Latency
The most obvious difference between a local object invocation and the invocation of an operation on a remote (or possibly remote) object has to do with the latency of the two calls. The difference between the two is currently between four and five orders of magnitude, and given the relative rates at which processor speed and network latency speeds are changing, the difference in the future promises to be at best no better, and will likely be worse. It is this disparity in efficiency that is often seen as the essential difference between local and distributed computing. Ignoring the difference between the performance of local and remote invocations can lead to designs whose implementations are virtually assured of having performance problems because the design requires a large amount of communication between components that are in different address spaces and on different machines. Ignoring the difference in the time it takes to make a remote object invocation and the time it takes to make a local object invocation is to ignore one of the major design areas of an application. A properly designed application will require determining, by understanding the application being designed, what objects can be made remote and what objects must be clustered together. The vision outlined earlier, however, has an answer to this objection. The answer is two-pronged. The first prong is to rely on the steadily increasing speed of the underlying hardware to make the difference in latency irrelevant. This, it is often argued, is what has happened to efficiency concerns having to do with everything from high level languages to virtual memory. Designing at the cutting edge has always required that the hardware catch up before the design is efficient enough for the real world. Arguments from efficiency seem to have gone out of style in software
1. We are not the first to notice these differences; indeed, they are clearly stated in [12].
Local and Distributed Computing
The major differences between local and distributed computing concern the areas of latency, memory access, partial
engineering, since in the past such concerns have always been answered by speed increases in the underlying hardware. The second prong of the reply is to admit to the need for tools that will allow one to see what the pattern of communication is between the objects that make up an application. Once such tools are available, it will be a matter of tuning to bring objects that are in constant contact to the same address space, while moving those that are in relatively infrequent contact to wherever is most convenient. Since the vision allows all objects to communicate using the same underlying mechanism, such tuning will be possible by simply altering the implementation details (such as object location) of the relevant objects. However, it is important to get the application correct first, and after that one can worry about efficiency. Whether or not it will ever become possible to mask the efficiency difference between a local object invocation and a distributed object invocation is not answerable a priori. Fully masking the distinction would require not only advances in the technology underlying remote object invocation, but would also require changes to the general programming model used by developers. If the only difference between local and distributed object invocations was the difference in the amount of time it took to make the call, one could strive for a future in which the two kinds of calls would be conceptually indistinguishable. Whether the technology of distributed computing has moved far enough along to allow one to plan products based on such technology would be a matter of judgement, and rational people could disagree as to the wisdom of such an approach. However, the difference in latency between the two kinds of calls is only the most obvious difference. Indeed, this difference is not really the fundamental difference between the two kinds of calls, and that even if it were possible to develop the technology of distributed calls to an extent that the difference in latency between the two sorts of calls was minimal, it would be unwise to construct a programming paradigm that treated the two calls as essentially similar. In fact, the difference in latency between local and remote calls, because it is so obvious, has been the only difference most see between the two, and has tended to mask the more irreconcilable differences.
Memory access
A more fundamental (but still obvious) difference between local and remote computing concerns the access to memory in the two cases—specifically in the use of pointers. Simply put, pointers in a local address space are not valid in another (remote) address space. The system can paper over this difference, but for such an approach to be successful, the transparency must be complete. Two choices exist: either all memory access must be controlled by the underlying system, or the programmer must be aware of the different types of access—local and remote. There is no inbetween. If the desire is to completely unify the programming model—to make remote accesses behave as if they were in fact local—the underlying mechanism must totally control all memory access. Providing distributed shared memory is one way of completely relieving the programmer from worrying about remote memory access (or the difference between local and remote). Using the object-oriented paradigm to the fullest, and requiring the programmer to build an application with "objects all the way down," (that is, only object references or values are passed as method arguments) is another way to eliminate the boundary between local and remote computing. The layer underneath can exploit this approach by marshalling and unmarshalling method arguments and return values for intraaddress space transmission. But adding a layer that allows the replacement of all pointers to objects with object references only permits the developer to adopt a unified model of object interaction. Such a unified model cannot be enforced unless one also removes the ability to get address-space-relative pointers from the language used by the developer. Such an approach erects a barrier to programmers who want to start writing distributed applications, in that it requires that those programmers learn a new style of programming which does not use address-space-relative pointers. In requiring that programmers learn such a language, moreover, one gives up the complete transparency between local and distributed computing. Even if one were to provide a language that did not allow obtaining address-space-relative pointers to objects (or returned an object reference whenever such a pointer was requested), one would need to provide an equivalent way of making cross-address space reference to entities other
than objects. Most programmers use pointers as references for many different kinds of entities. These pointers must either be replaced with something that can be used in cross-address space calls or the programmer will need to be aware of the difference between such calls (which will either not allow pointers to such entities, or do something special with those pointers) and local calls. Again, while this could be done, it does violate the doctrine of complete unity between local and remote calls. Because of memory access constraints, the two have to differ. The danger lies in promoting the myth that "remote access and local access are exactly the same" and not enforcing the myth. An underlying mechanism that does not unify all memory accesses while still promoting this myth is both misleading and prone to error. Programmers buying into the myth may believe that they do not have to change the way they think about programming. The programmer is therefore quite likely to make the mistake of using a pointer in the wrong context, producing incorrect results. "Remote is just like local," such programmers think, "so we have just one unified programming model." Seemingly, programmers need not change their style of programming. In an incomplete implementation of the underlying mechanism, or one that allows an implementation language that in turn allows direct access to local memory, the system does not take care of all memory accesses, and errors are bound to occur. These errors occur because the programmer is not aware of the difference between local and remote access and what is actually happening "under the covers." The alternative is to explain the difference between local and remote access, making the programmer aware that remote address space access is very different from local access. Even if some of the pain is taken away by using an interface definition language like that specified in [1] and having it generate an intelligent language mapping for operation invocation on distributed objects, the programmer aware of the difference will not make the mistake of using pointers for cross-address space access. The programmer will know it is incorrect. By not masking the difference, the programmer is able to learn when to use one method of access and when to use the other. Just as with latency, it is logically possible that the difference between local and remote memory access could be completely papered over and a single model of both presented to the programmer. When we turn to the problems
introduced to distributed computing by partial failure and concurrency, however, it is not clear that such a unification is even conceptually possible. 4.3 Partial failure and concurrency
While unlikely, it is at least logically possible that the differences in latency and memory access between local computing and distributed computing could be masked. It is not clear that such a masking could be done in such a way that the local computing paradigm could be used to produce distributed applications, but it might still be possible to allow some new programming technique to be used for both activities. Such a masking does not even seem to be logically possible, however, in the case of partial failure and concurrency. These aspects appear to be different in kind in the case of distributed and local computing.2 Partial failure is a central reality of distributed computing. Both the local and the distributed world contain components that are subject to periodic failure. In the case of local computing, such failures are either total, affecting all of the entities that are working together in an application, or detectable by some central resource allocator (such as the operating system on the local machine). This is not the case in distributed computing, where one component (machine, network link) can fail while the others continue. Not only is the failure of the distributed components independent, but there is no common agent that is able to determine what component has failed and inform the other components of that failure, no global state that can be examined that allows determination of exactly what error has occurred. In a distributed system, the failure of a network link is indistinguishable from the failure of a processor on the other side of that link. These sorts of failures are not the same as mere exception raising or the inability to complete a task, which can occur in the case of local computing. This type of failure is caused when a machine crashes during the execution of an object invocation or a network link goes down, occurrences that cause the target object to simply disappear rather than return control to the caller. A central problem in distributed computing is insuring that the state of the
2. In fact, authors such as Schroeder [12] and Hadzilacos and Toueg [13] take partial failure and concurrency to be the defining problems of distributed computing.
whole system is consistent after such a failure; this is a problem that simply does not occur in local computing. The reality of partial failure has a profound effect on how one designs interfaces and on the semantics of the operations in an interface. Partial failure requires that programs deal with indeterminacy. When a local component fails, it is possible to know the state of the system that caused the failure and the state of the system after the failure. No such determination can be made in the case of a distributed system. Instead, the interfaces that are used for the communication must be designed in such a way that it is possible for the objects to react in a consistent way to possible partial failures. Being robust in the face of partial failure requires some expression at the interface level. Merely improving the implementation of one component is not sufficient. The interfaces that connect the components must be able to state whenever possible the cause of failure, and there must be interfaces that allow reconstruction of a reasonable state when failure occurs and the cause cannot be determined. If an object is coresident in an address space with its caller, partial failure is not possible. A function may not complete normally, but it always completes. There is no indeterminism about how much of the computation completed. Partial completion can occur only as a result of circumstances that will cause the other components to fail. The addition of partial failure as a possibility in the case of distributed computing does not mean that a single object model cannot be used for both distributed computing and local computing. The question is not "can you make remote method invocation look like local method invocation?" but rather "what is the price of making remote method invocation identical to local method invocation?" One of two paths must be chosen if one is going to have a unified model. The first path is to treat all objects as if they were local and design all interfaces as if the objects calling them, and being called by them, were local. The result of choosing this path is that the resulting model, when used to produce distributed systems, is essentially indeterministic in the face of partial failure and consequently fragile and nonrobust. This path essentially requires ignoring the extra failure modes of distributed computing. Since one can't
get rid of those failures, the price of adopting the model is to require that such failures are unhandled and catastrophic. The other path is to design all interfaces as if they were remote. That is, the semantics and operations are all designed to be deterministic in the face of failure, both total and partial. However, this introduces unnecessary guarantees and semantics for objects that are never intended to be used remotely. Like the approach to memory access that attempts to require that all access is through system-defined references instead of pointers, this approach must also either rely on the discipline of the programmers using the system or change the implementation language so that all of the forms of distributed indeterminacy are forced to be dealt with on all object invocations. This approach would also defeat the overall purpose of unifying the object models. The real reason for attempting such a unification is to make distributed computing more like local computing and thus make distributed computing easier. This second approach to unifying the models makes local computing as complex as distributed computing. Rather than encouraging the production of distributed applications, such a model will discourage its own adoption by making all object-based computing more difficult. Similar arguments hold for concurrency. Distributed objects by their nature must handle concurrent method invocations. The same dichotomy applies if one insists on a unified programming model. Either all objects must bear the weight of concurrency semantics, or all objects must ignore the problem and hope for the best when distributed. Again, this is an interface issue and not solely an implementation issue, since dealing with concurrency can take place only by passing information from one object to another through the agency of the interface. So either the overall programming model must ignore significant modes of failure, resulting in a fragile system; or the overall programming model must assume a worst-case complexity model for all objects within a program, making the production of any program, distributed or not, more difficult. One might argue that a multi-threaded application needs to deal with these same issues. However, there is a subtle difference. In a multi-threaded application, there is no real source of indeterminacy of invocations of operations. The application programmer has complete control over invocation order when desired. A distributed system by its nature
introduces truly asynchronous operation invocations. Further, a non-distributed system, even when multi-threaded, is layered on top of a single operating system that can aid the communication between objects and can be used to determine and aid in synchronization and in the recovery of failure. A distributed system, on the other hand, has no single point of resource allocation, synchronization, or failure recovery, and thus is conceptually very different.
my handling of partial failures (which in my naiveté, I had thought to be total), I have been enqueuing work requests multiple times. Well, I yell at the vendor that it is still their fault. Their queue should be detecting the duplicate entry and removing it. I'm not going to continue using this software unless this is fixed. But, since the entities being enqueued are just values, there is no way to do duplicate elimination. The only way to fix this is to change the protocol to add request IDs. But since this is a standardized interface, there is no way to do this. The moral of this tale is that robustness is not simply a function of the implementations of the interfaces that make up the system. While robustness of the individual components has some effect on the robustness of the overall systems, it is not the sole factor determining system robustness. Many aspects of robustness can be reflected only at the protocol/interface level. Similar situations can be found throughout the standard set of interfaces. Suppose I want to reliably remove a name from a context. I would be tempted to write code that looks like:
while (true) { try { context->remove(name); break; } catch (NotFoundInContext) { break; } catch (NetworkServerFaliure) { continue; } }
The Myth of "Quality of Service"
One could take the position that the way an object deals with latency, memory access, partial failure, and concurrency control is really an aspect of the implementation of that object, and is best described as part of the "quality of service" provided by that implementation. Different implementations of an interface may provide different levels of reliability, scalability, or performance. If one wants to build a more reliable system, one merely needs to choose more reliable implementations of the interfaces making up the system. On the surface, this seems quite reasonable. If I want a more robust system, I go to my catalog of component vendors. I quiz them about their test methods. I see if they have ISO9000 certification, and I buy my components from the one I trust the most. The components all comply with the defined interfaces, so I can plug them right in; my system is robust and reliable, and I'm happy. Let us imagine that I build an application that uses the (mythical) queue interface to enqueue work for some component. My application dutifully enqueues records that represent work to be done. Another application dutifully dequeues them and performs the work. After a while, I notice that my application crashes due to time-outs. I find this extremely annoying, but realize that it's my fault. My application just isn't robust enough. It gives up too easily on a time-out. So I change my application to retry the operation until it succeeds. Now I'm happy. I almost never see a time-out. Unfortunately, I now have another problem. Some of the requests seem to get processed two, three, four, or more times. How can this be? The component I bought which implements the queue has allegedly been rigorously tested. It shouldn't be doing this. I'm angry. I call the vendor and yell at him. After much fingerpointing and research, the culprit is found. The problem turns out to be the way I'm using the queue. Because of
That is, I keep trying the operation until it succeeds (or until I crash). The problem is that my connection to the name server may have gone down, but another client's may have stayed up. I may have, in fact, successfully removed the name but not discovered it because of a network disconnection. The other client then adds the same name, which I then remove. Unless the naming interface includes an operation to lock a naming context, there is no way that I can make this operation completely robust. Again, we see that robustness/reliability needs to be expressed at the interface level. In the design of any opera-
tion, the question has to be asked: what happens if the client chooses to repeat this operation with the exact same parameters as previously? What mechanisms are needed to ensure that they get the desired semantics? These are things that can be expressed only at the interface level. These are issues that can't be answered by supplying a "more robust implementation" because the lack of robustness is inherent in the interface and not something that can be changed by altering the implementation. Similar arguments can be made about performance. Suppose an interface describes an object which maintains sets of other objects. A defining property of sets is that there are no duplicates. Thus, the implementation of this object needs to do duplicate elimination. If the interfaces in the system do not provide a way of testing equality of reference, the objects in the set must be queried to determine equality. Thus, duplicate elimination can be done only by interacting with the objects in the set. It doesn't matter how fast the objects in the set implement the equality operation. The overall performance of eliminating duplicates is going to be governed by the latency in communicating over the slowest communications link involved. There is no change in the set implementations that can overcome this. An interface design issue has put an upper bound on the performance of this operation.
ble file server: soft mounting and hard mounting. But since the designers of NFS were unwilling (for easily understandable reasons) to change the interface to the file system to reflect the new, distributed nature of file access, neither option is particularly robust. Soft mounts expose network or server failure to the client program. Read and write operations return a failure status much more often than in the single-system case, and programs written with no allowance for these failures can easily corrupt the files used by the program. In the early days of NFS, system administrators tried to tune various parameters (time-out length, number of retries) to avoid these problems. These efforts failed. Today, soft mounts are seldom used, and when they are used, their use is generally restricted to read-only file systems or special applications. Hard mounts mean that the application hangs until the server comes back up. This generally prevents a client program from seeing partial failure, but it leads to a malady familiar to users of workstation networks: one server crashes, and many workstations—even those apparently having nothing to do with that server—freeze. Figuring out the chain of causality is very difficult, and even when the cause of the failure can be determined, the individual user can rarely do anything about it but wait. This kind of brittleness can be reduced only with strong policies and network administration aimed at reducing interdependencies. Nonetheless, hard mounts are now almost universal. Note that because the NFS protocol is stateless, it assumes clients contain no state of interest with respect to the protocol; in other words, the server doesn't care what happens to the client. NFS is also a "pure" client-server protocol, which means that failure can be limited to three parties: the client, the server, or the network. This combination of features means that failure modes are simpler than in the more general case of peer-to-peer distributed object-oriented applications where no such limitation on shared state can be made and where servers are themselves clients of other servers. Such peer-to-peer distributed applications can and will fail in far more intricate ways than are currently possible with NFS. The limitations on the reliability and robustness of NFS have nothing to do with the implementation of the parts of that system. There is no "quality of service" that can be improved to eliminate the need for hard mounting NFS volumes. The problem can be traced to the interface upon
Lessons from NFS
We do not need to look far to see the consequences of ignoring the distinction between local and distributed computing at the interface level. NFS®, Sun's distributed computing file system [14], [15] is an example of a nondistributed application programer interface (API) (open, read, write, close, etc.) re-implemented in a distributed way. Before NFS and other network file systems, an error status returned from one of these calls indicated something rare: a full disk, or a catastrophe such as a disk crash. Most failures simply crashed the application along with the file system. Further, these errors generally reflected a situation that was either catastrophic for the program receiving the error or one that the user running the program could do something about. NFS opened the door to partial failure within a file system. It has essentially two modes for dealing with an inaccessi-
which NFS is built, an interface that was designed for nondistributed computing where partial failure was not possible. The reliability of NFS cannot be changed without a change to that interface, a change that will reflect the distributed nature of the application. This is not to say that NFS has not been successful. In fact, NFS is arguably the most successful distributed application that has been produced. But the limitations on the robustness have set a limitation on the scalability of NFS. Because of the intrinsic unreliability of the NFS protocol, use of NFS is limited to fairly small numbers of machines, geographically co-located and centrally administered. The way NFS has dealt with partial failure has been to informally require a centralized resource manager (a system administrator) who can detect system failure, initiate resource reclamation and insure system consistency. But by introducing this central resource manager, one could argue that NFS is no longer a genuinely distributed application.
Accepting the fundamental difference between local and remote objects does not mean that either sort of object will require its interface to be defined differently. An interface definition language such as IDL can still be used to specify the set of interfaces that define objects. However, an additional part of the definition of a class of objects will be the specification of whether those objects are meant to be used locally or remotely. This decision will need to consider what the anticipated message frequency is for the object, and whether clients of the object can accept the indeterminacy implied by remote access. The decision will be reflected in the interface to the object indirectly, in that the interface for objects that are meant to be accessed remotely will contain operations that allow reliability in the face of partial failure. It is entirely possible that a given object will often need to be accessed by some objects in ways that cannot allow indeterminacy, and by other objects relatively rarely and in a way that does allow indeterminacy. Such cases should be split into two objects (which might share an implementation) with one having an interface that is best for local access and the other having an interface that is best for remote access. A compiler for the interface definition language used to specify classes of objects will need to alter its output based on whether the class definition being compiled is for a class to be used locally or a class being used remotely. For interfaces meant for distributed objects, the code produced might be very much like that generated by RPC stub compilers today. Code for a local interface, however, could be much simpler, probably requiring little more than a class definition in the target language. While writing code, engineers will have to know whether they are sending messages to local or remote objects, and access those objects differently. While this might seem to add to the programming difficulty, it will in fact aid the programmer by providing a framework under which he or she can learn what to expect from the different kinds of calls. To program completely in the local environment, according to this model, will not require any changes from the programmer's point of view. The discipline of defining classes of objects using an interface definition language will insure the desired separation of interface from implementation, but the actual process of implementing an interface will be no different than what is done today in an object-oriented language.
Taking the Difference Seriously
Differences in latency, memory access, partial failure, and concurrency make merging of the computational models of local and distributed computing both unwise to attempt and unable to succeed. Merging the models by making local computing follow the model of distributed computing would require major changes in implementation languages (or in how those languages are used) and make local computing far more complex than is otherwise necessary. Merging the models by attempting to make distributed computing follow the model of local computing requires ignoring the different failure modes and basic indeterminacy inherent in distributed computing, leading to systems that are unreliable and incapable of scaling beyond small groups of machines that are geographically co-located and centrally administered. A better approach is to accept that there are irreconcilable differences between local and distributed computing, and to be conscious of those differences at all stages of the design and implementation of distributed applications. Rather than trying to merge local and remote objects, engineers need to be constantly reminded of the differences between the two, and know when it is appropriate to use each kind of object.
Programming a distributed application will require the use of different techniques than those used for non-distributed applications. Programming a distributed application will require thinking about the problem in a different way than before it was thought about when the solution was a nondistributed application. But that is only to be expected. Distributed objects are different from local objects, and keeping that difference visible will keep the programmer from forgetting the difference and making mistakes. Knowing that an object is outside of the local address space, and perhaps on a different machine, will remind the programmer that he or she needs to program in a way that reflects the kinds of failures, indeterminacy, and concurrency constraints inherent in the use of such objects. Making the difference visible will aid in making the difference part of the design of the system. Accepting that local and distributed computing are different in an irreconcilable way will also allow an organization to allocate its research and engineering resources more wisely. Rather than using those resources in attempts to paper over the differences between the two kinds of computing, resources can be directed at improving the performance and reliability of each. One consequence of the view espoused here is that it is a mistake to attempt to construct a system that is "objects all the way down" if one understands the goal as a distributed system constructed of the same kind of objects all the way down. There will be a line where the object model changes; on one side of the line will be distributed objects, and on the other side of the line there will (perhaps) be local objects. On either side of the line, entities on the other side of the line will be opaque; thus one distributed object will not know (or care) if the implementation of another distributed object with which it communicates is made up of objects or is implemented in some other way. Objects on different sides of the line will differ in kind and not just in degree; in particular, the objects will differ in the kinds of failure modes with which they must deal.
of objects, for example, that appear to be the basis of systems such as Spring [16] or Clouds [4]. These objects have some of the characteristics of distributed objects, such as increased latency in comparison to local objects and the need for a different model of memory access. However, these objects also share characteristics of local objects, including sharing underlying resource management and failure modes that are more nearly deterministic. It is possible to make the programming model for such "local-remote" objects more similar to the programming model for local objects than can be done for the general case of distributed objects. Even though the objects are in different address spaces, they are managed by a single resource manager. Because of this, partial failure and the indeterminacy that it brings can be avoided. The programming model for such objects will still differ from that used for objects in the same address space with respect to latency, but the added latency can be reduced to generally acceptable levels. The programming models will still necessarily differ on methods of memory access and concurrency, but these do not have as great an effect on the construction of interfaces as additional failure modes. The other reason for treating this class of objects separately from either local objects or generally distributed objects is that a compiler for an interface definition language can be significantly optimized for such cases. Parameter and result passing can be done via shared memory if it is known that the objects communicating are on the same machine. At the very least, marshalling of parameters and the unmarshalling of results can be avoided. The class of locally distributed objects also forms a group that can lead to significant gains in software modularity. Applications made up of collections of such objects would have the advantage of forced and guaranteed separation between the interface to an object and the implementation of that object, and would allow the replacement of one implementation with another without affecting other parts of the system. Because of this, it might be advantageous to investigate the uses of such a system. However, this activity should not be confused with the unification of local objects with the kinds of distributed objects we have been discussing.
A Middle Ground
As noted in Section 2, the distinction between local and distributed objects as we are using the terms is not exhaustive. In particular, there is a third category of objects made up of those that are in different address spaces but are guaranteed to be on the same machine. These are the sorts
[1] The Object Management Group. "Common Object Request Broker: Architecture and Specification." OMG Document Number 91.12.1 (1991). [2] [Parrington, Graham D. "Reliable Distributed Programming in C++: The Arjuna Approach." USENIX 1990 C++ Conference Proceedings (1991). [3] Black, A., N. Hutchinson, E. Jul, H. Levy, and L. Carter. "Distribution and Abstract Types in Emerald." IEEE Transactions on Software Engineering SE-13, no. 1, (January 1987). [4] Dasgupta, P., R. J. Leblanc, and E. Spafford. "The Clouds Project: Designing and Implementing a Fault Tolerant Distributed Operating System." Georgia Institute of Technology Technical Report GIT-ICS-85/29. (1985). [5] Microsoft Corporation. Object Linking and Embedding Programmers Reference. version 1. Microsoft Press, 1992. [6] Linton, Mark. "A Taste of Fresco." Tutorial given at the 8th Annual X Technical Conference (January 1994). [7] Jaayeri, M., C. Ghezzi, D. Hoffman, D. Middleton, and M. Smotherman. "CSP/80: A Language for Communicating Sequential Processes." Proceedings: Distributed Computing CompCon (Fall 1980). [8] Cook, Robert. "MOD- A Language for Distributed Processing." Proceedings of the 1st International Conference on Distributed Computing Systems (October 1979). [9] Birrell, A. D. and B. J. Nelson. "Implementing Remote Procedure Calls." ACM Transactions on Computer Systems 2 (1978). [10] Hutchinson, N. C., L. L. Peterson, M. B. Abott, and S. O'Malley. "RPC in the x-Kernel: Evaluating New Design Techniques." Proceedings of the Twelfth Symposium on Operating Systems Principles 23, no. 5 (1989). [11] Zahn, L., T. Dineen, P. Leach, E. Martin, N. Mishkin, J. Pato, and G. Wyant. Network Computing Architecture. Prentice Hall, 1990. [12] Schroeder, Michael D. "A State-of-the-Art Distributed System: Computing with BOB." In Distributed Systems, 2nd ed., S. Mullender, ed., ACM Press, 1993.
[13] Hadzilacos, Vassos and Sam Toueg. "Fault-Tolerant Broadcasts and Related Problems." In Distributed Systems, 2nd ed., S. Mullendar, ed., ACM Press, 1993. [14] Walsh, D., B. Lyon, G. Sager, J. M. Chang, D. Goldberg, S. Kleiman, T. Lyon, R. Sandberg, and P. Weiss. "Overview of the SUN Network File System." Proceedings of the Winter Usenix Conference (1985). [15] Sandberg, R., D. Goldberg, S. Kleiman, D. Walsh, and B. Lyon. "Design and Implementation of the SUN Network File System." Proceedings of the Summer Usenix Conference (1985). [16] Khalidi, Yousef A. and Michael N. Nelson. "An Implementation of UNIX on an Object-Oriented Operating System." Proceedings of the Winter USENIX Conference (1993). Also Sun Microsystems Laboratories, Inc. Technical Report SMLI TR-92-3 (December 1992).
© Copyright 1994 Sun Microsystems, Inc. The SML Technical Report Series is published by Sun Microsystems Laboratories, a division of Sun Microsystems, Inc. Printed in U.S.A. Unlimited copying without fee is permitted provided that the copies are not made nor distributed for direct commercial advantage, and credit to the source is given. Otherwise, no part of this work covered by copyright hereon may be reproduced in any form or by any means graphic, electronic, or mechanical, including photocopying, recording, taping, or storage in an information retrieval system, without the prior written permission of the copyright owner. TRADEMARKS Sun, Sun Microsystems, and the Sun logo are trademarks or registered trademarks of Sun Microsystems, Inc. UNIX and OPEN LOOK are registered trademarks of UNIX System Laboratories, Inc. All SPARC trademarks, including the SCD Compliant Logo, are trademarks or registered trademarks of SPARC International, Inc. SPARCstation, SPARCserver, SPARCengine, SPARCworks, and SPARCompiler are licensed exclusively to Sun Microsystems, Inc. NFS is a registered trademark of Sun Microsystems, Inc. All other product names mentioned herein are the trademarks of their respective owners. For information regarding the SML Technical Report Series, contact Jeanie Treichel, Editor-in-Chief <firstname.lastname@example.com>. For distribution issues, contact Amy Tashbook, Assistant Editor <email@example.com>.
This action might not be possible to undo. Are you sure you want to continue?
We've moved you to where you read on your other device.
Get the full title to continue listening from where you left off, or restart the preview.


text:
Sep 5
Paper Phoenix (formerly The Kaleidoscope) is a modern day fairy tale about a group of adolescents growing up in suburbia along side a magical forest which is home to the Great Tree. It's a story about good and evil, friendship and love, told through a number of unique characters both human and magical.
Dec 20
Sounds Like: Justin Bieber, Ross Lynch, Bruno Mars, Adam Levine, Cody Simpson
Bio: What I want to be when I grow up is a pop star. Most kids my age would rather be an author or a famous type of athlete. Not Me! When I was about three years old my sister would put on the radio channel Q102. That is when we discovered I like to sing.
I would sing everywhere; in the car, on plan...See Full Bio
Colin Crest


text:
Join Our
List Today!
How to
Are you part of a business or
organization that wants to reach out to the Transgender community or has
resources we should be aware of?
Do you know of a
resource that you found to be helpful and think
others will benefit from it as well?
TransCentralPA is happy to list businesses,
organizations and resources that cater to and support the
Transgender community. Please send us an email with
the organization's information, website and description to:
Upcoming Events
Central Pennsylvania
Pride Festival
Saturday, July 30th
Harrisburg, PA
York Equality Fest
Sunday, August 7th, 2016
Penn Park, York, PA
Dinner & Meeting
August 13th, 2016
Harrisburg, PA
Nightlife, Clubs & Bars
891 Eisenhower Blvd
Harrisburg, PA 17111
36 West 11th Avenue
York, PA 17404
(717) 846-6969
706 North Third St
Harrisburg, PA 17102
(717) 232-3060
120 Swedesford Rd
Devon, PA 19333
321 Pine Street
Williamsport, PA 17701
(570) 322-6900
555 Klinger Rd.
Sunbury PA 17801
(570) 286-6022
All the documents and
information accessible from the links above are in the
public domain and a matter of public record. Though we considered
these resources to be helpful to the transgendered community when we
posted the links, neither TransCentralPA nor its officers or members
warrants or assumes any legal liability or responsibility for the
accuracy, completeness, or usefulness of any information, apparatus,
product, or processes disclosed or provided on these sites, or for
updated information or changes made to these sites. Various content
on these sites may also be subject to copyright by authors, journals
and publishers. Use of the copyrighted material is subject to the
terms and conditions of use established by that author, journal or
Our Next Dinner & Meeting is Saturday, August 13th
Dinner at 5:30 pm
Carley's Ristorante
204 Locust Street
Harrisburg, PA 17101
(717) 909-9191
Traditional rustic Italian specialties, including
homemade pastas, pizzas, veal and whole fish dishes.
Priced $10 to $24. Musical entertainment.
RSVP if you are
joining for dinner.
Transmen Dinner at 5:30 pm
El Sol
18 South
3rd Street
Harrisburg, PA 17101
(717) 901-5050
Tucked away from the hustle and bustle of
downtown and the newly expanding area of
South 3rd Street, is authentic Mexican
cuisine at it's best--El Sol Mexican
Prices range from $10 to $22. Average
price for entrees is about $15.
Meeting at 8:00 pm
MCC of the Spirit
2973 Jefferson Street
Harrisburg, PA 17110
Join us for our group meeting at 8:30 pm.
Doors open at approximately 8:00 pm for those
needing to change. For directions
to the MCC of the Spirit or if you would
like more information, about the group, please
send us an
email. For directions, use
Google Maps.
For more event
information, visit our
Events page
TransCentralPA is a 501(c)(3) nonprofit organization -
contributions to which are tax deductible to the fullest extent permitted by
June 2007 by TransCentralPA. All rights reserved.


text:
Stylish Design. Innovative Technology. Affordable Price.
Discover our capsule loyalty club. Join today and receive 2 free stamps on us!
For coffee-shop quality tea and coffee, with new, dedicated tea function
Enjoy a healthier lifestyle with fast, nutrient-rich juices
This gorgeous crust prevents the fish from drying out, and makes the meal more substantial.
Place the crumbs, herbs and a knob of butter in the chopper and whiz until the mixture goes green. Add salt and
pepper to taste.
Pat the fish dry with kitchen paper, dust with flour.
Fry the fish for 2-3 minutes each side in the oil and remaining butter. press herb topping over fish, one side only.
Place at the top of a hot oven, 220C/425F/M7, or under a preheated grill, until the crust starts to colour.
Serve straight away.


text:
Note: You clicked on an external link, which has been disabled in order to keep your shopping session open.
Muc1 is a heavily O-glycosylated transmembrane protein expressed on most secretory epithelium, including mammary gland and some hematopoietic cells. It is expressed abundantly in lactating mammary glands and overexpressed in >90% breast carcinomas and metastases. In normal mammary gland it is expressed in apical surface of glandular epithelium. In breast cancer Muc1 is overexpressed; is underglycosylated and the apical localization is lost. Muc1 is transcribed as a larger precursor which is cleaved to form a larger mucin like subunit (265-400kDa) and a smaller subunit (14-28kDa) noncovalently associated with each other. Transgenic Muc1 has been shown to associate with all four erbB receptors and localize with erbB1 (EGFR) in lactating glands1. Muc1 can act as a ligand for ICAM-1 on HUVEC cells; it can bind beta-catenin, GSK3beta and it associates with Grb2-SOS upon phosphorylation.
KL-6, MCKD1, RP11-263K19.2, MUC-1/X, Muc-1, CA 15-3, PEM, MUC-1, EMA, PEMT, PUM, MAM6, MUC1/ZD, CD227, MUC-1/SEC, H23AG
Please enter the information below and press OK to send your cart to Core Services for purchase.


text:
2012 is off to a fabulous start, with the rare event of no one being able to buy at last year's prices so far. As you can see, the year is actually tracking our fast start in 2011:
Click to enlarge
Click to enlarge
I am not expecting the same time of action that we saw in each of the past two years, when the market peaked at the end of April and weakened during the summer. In fact, as I shared in late October, I expect that the S&P 500 will move to an all-time high this year, specifically forecasting 1600.
While 1600 may sound incredibly unrealistic to some, it would represent a one-year return of 27.6%. Of course, that's a two-year return of 27.6% as well. Perhaps an even better way of looking at it is that it would represent a five-year return of 9% - not exactly a barn-burner, especially in light of the fact that earnings for the S&P 500 are projected (at $105) to be 17% or so higher than in 2007.
Quickly reviewing "The case for 1600", I had mentioned that the forecast was predicated on modest earnings growth with some multiple expansion. Specifically, I am expecting that the market multiple will move to 14 on projected year-end 2013 earnings of 115 (actually 1610).
I also cited improving technicals at the time, which continues to be the case. The recent run in Small-Caps is an early harbinger that the retail investor may be re-entering the market after years of absence. For those who don't recall, Small-Caps diverged horribly last year, actually declining in January as the rest of the market got off to a great start. I had discussed my expectations that the 2012 experience would differ in when I predicted that Small-Caps would Outperform in January for the first time since 2006. Indeed they did, with the Russell 2000 (NYSEARCA:IWM) returning over 7% compared to the 4.5% return for the S&P 500 (NYSEARCA:SPY). As of February 17, the advantage has widened to 3.4%.
While many think that the market doesn't look healthy due to a misconception of narrow leadership, this isn't the case at all. A few days ago I dispelled this myth of narrow leadership. Even in some of the weaker sectors so far in 2012, the breadth is excellent.
While the closing high of the S&P 500 on Friday was the highest since the market bottomed in 2009, many parts of the market had already blown through the levels at the prior highs last April. While certain parts of the market are still well below their values last April (Financials, Materials, Energy), others are well beyond (Technology, Consumer Discretionary, Utilities, Staples). Here is the complete list of price returns by sector since the end of April:
- Technology: +7%
- Consumer Discretionary: +6%
- Utilities: +6%
- Consumer Staples: +5%
- Health: +3%
- Industrials: -3%
- Energy: -7%
- Telecom Services: -8%
- Materials: -9%
- Financials: -10%
I am encouraged by the recent strong moves in Tech and Consumer Discretionary, both of which have cleared their October highs too, but it's the action of the laggards that encourages me the most: All 5 sectors that are below their levels from last April are above their October highs.
A final technical indicator that signals better times ahead for equities is the performance of international stocks this year. In case you haven't been paying attention, Emerging Markets (NYSEARCA:VWO) / (NYSEARCA:EEM) are flying. Europe, the genesis of global contagion fears, is doing fine. In fact, during all the consternation this fall (as we were making new lows in early October), the bourses didn't brush their summer lows. Now, they are off to the races. Not to mention the debt of the PIIGS.
Let me tell you what really encourages me most: Early signs that the number one challenge the market has faced is ending. The headwinds of retail redemptions from stocks have been blowing furiously for five years now. Take a look:
According to the Investment Company Institute data, almost $500 billion has come out of domestic equity mutual funds. Now, I know retail chases performance, so the outflows from the second half of 2007 through early 2009 weren't surprising, but the divergence between market direction and retail participation since then has been stunning. In late 2009, they redeemed as the market recovery began. As soon as the market stalled in 2010 and in 2011, the redemptions kicked in again. It's no wonder that valuations are so puny these days!
Now, on the flip-side, look at where the money has been going:
Almost $900 billion has flowed into bond funds! It reminds me of the flows into stocks at the end of 1999. While it's way too early to call it a trend, recent data has shown an uptick in equity inflows. In the most recent week reported (2/8), flows were $1.8 billion, which was the best week in quite some time. Total equity inflows, including foreign, were $3.6 billion. They haven't released January yet, but here are the past several weeks for domestic equity:
- 1/4: -$6.9bln (bonds +$3.3bln)
- 1/11: +$736mm (bonds +$7.9bln)
- 1/18: -$801mm (bonds +$6.1bln)
- 1/25: +$850mm (bonds +7.7bln)
- 2/1: -$1.8bln (bonds +$7.5bln)
- 2/8: +$1.9bln (bonds +$7.1bln)
So, money is continuing to pour into bonds at a torrid pace, but, after an initial withdrawal, it looks like net flows have been slightly positive for domestic equities.
Bonds are at historically low prices, with investor hopes perhaps buoyed by Chairman Bernanke's irresponsible proclamation, in my view, that rates will remain low for the intermediate-term. There is an incredible amount of firepower ahead as investors rebalance. Sadly, it will take a torrid market to make this happen, but we are in a torrid market that I expect will force mutual fund investors to reverse their infatuation with an asset class that has limited upside, low base case returns and potentially lots of downside.
I had a bullish forecast in 2011 that didn't pan out, but it was predicated on modest economic growth that would result in expectations of $100 earnings for the S&P 500 for 2012, along with some multiple expansion. I got the earnings part and the growth part right, but multiples actually contracted as investors continued to shun stocks. For my forecast to work out this year, I believe that the retail investor must come back to stocks. We are already seeing signs in my view with the strong performance of Small-Cap. So, I am sticking with my 1600 forecast. We have good technicals, a low valuation still and improving fundamentals.
Disclosure: I have no positions in any stocks mentioned, and no plans to initiate any positions within the next 72 hours.


text:
Book your room at Le Sereno
Get an overview of this hotelHotel with private beach, full-service spa
Nestled on the beach, this Quartier Lorient hotel is within 1 mi (2 km) of Marigot Beach and Petit Cul de Sac Beach. Lorient Beach and St. Jean Beach are also within 3 mi (5 km).
Hotel Features
Catch some rays on Le Sereno's private sand beach, pamper yourself at the full-service spa, or enjoy snorkeling.
Room Amenities
All 36 rooms feature thoughtful touches like minibars (stocked with some free items) and bathrobes, plus free WiFi and LCD TVs with satellite channels. Other amenities available to guests include furnished lanais, 24-hour room service, and DVD players.Would you like to give us feedback? Share it! Opens in a new window
Renovations & Closures
Hotel Amenities
Hotel Amenities
Simply walk outside to feel the sun on your face at the sand beach. At Le Sereno, pamper yourself with a treatment at the full-service spa or have fun in the sun with activities like snorkeling and scuba diving.
Guests can enjoy a complimentary breakfast each morning. The hotel offers a restaurant. Guests can unwind with a drink at one of the hotel's bars, which include a poolside bar and a bar/lounge. Public areas are equipped with complimentary high-speed wireless Internet access. This luxury hotel also offers an outdoor pool, a fitness center, and a garden. Complimentary self parking is available on site.
- 24-hour front desk
- Free airport transportation
- Babysitting or childcare (surcharge)
- Bar/lounge
- Beach towels
- Beach umbrellas
- Concierge services
- Fitness facilities
- Free breakfast
- Free self parking
- Free WiFi
- Full-service spa
- Garden
- Multilingual staff
- On private beach
- Outdoor pool
- Pool sun loungers
- Poolside bar
- Restaurant
- Safe-deposit box at front desk
- Tennis on site
- Total number of rooms - 36
- Free use of nearby fitness center
- Wedding services
Family Friendly Amenities
- Babysitting or childcare (surcharge)
- DVD player
- Free Wi-Fi
- On private beach
- Outdoor pool
Available in all rooms: Free WiFi
Available in some public areas: Free WiFi
Free self parking
Room Amenities
- Air conditioning
- Bathrobes
- Ceiling fan
- Free bottled water
- Connecting/adjoining rooms available
- Daily housekeeping
- Designer toiletries
- Desk
- DVD player
- Free WiFi
- Furnished lanai
- Hair dryer
- In-room massage available
- In-room safe
- Minibar (stocked, some free items)
- Phone
- Premium bedding
- Private bathroom
- Room service (24 hours)
- Satellite TV service
- Slippers
- Turndown service
Where to Eat
A complimentary full breakfast is served each morning between 7 AM and 10 AM.
Le Sereno Restaurant - This beachfront restaurant specializes in local cuisine and serves breakfast, lunch, and dinner. Guests can enjoy alfresco dining (weather permitting). A children's menu is available.
Bar Sereno - Onsite cocktail bar.
Late night fare is available from 24-hour room service.
Nearby Things to Do
Recreational amenities at the hotel include a private beach, an outdoor pool, and a fitness center.
The recreational activities listed below are available either on site or nearby; fees may apply.
- Surfing/boogie boarding nearby
- Sailing nearby
- Horse riding/rental on site
- Scuba diving on site
- Snorkeling on site
- Tennis lessons on site
Spa Services
Guests can indulge in a pampering treatment at the hotel's full-service spa, The Spa at Le Sereno. Services include deep-tissue massages, Swedish massages, massages, and facials. A variety of treatment therapies are provided, including reflexology.
- Deep tissue massage
- Swedish massage
- Reflexology
- Manicures and pedicures
- Body wraps
- Massages
- Facial treatments
Hotel Policies
Check-in time starts at 3 PM
Minimum check-in age is 18
Check-out time is noon
Payment types
- Pets stay free
- Dogs and cats only
- 1 per room (up to 5 kg)
- Restrictions apply
- For more information contact the property at the number on the booking confirmation
You need to know
Extra-person charges may apply and vary depending on hotel policy.
Government-issued photo identification and a credit card or cash deposit are required at check-in for incidental charges.
Special requests are subject to availability upon check-in and may incur additional charges. Special requests cannot be guaranteed.
Pets allowed (no fees)
- Deposit: EUR 100 per stay
- A 5.00 percent city/local tax will be charged
Optional extras
- Cribs (infant beds) are available for an additional fee
- Rollaway beds are available for an additional fee
Hotel Name
- Sereno Hotel Villas Spa
- Sereno Hotel Villas Spa St. Barthelemy
- Sereno Villas Spa
- Sereno Villas Spa St. Barthelemy
- Sereno Hotel St. Barthelemy
- Sereno Hotel
- Sereno St. Barthelemy
- Hotel Le Sereno
- Le Sereno Hotel St. Barthelemy/Grand Cul-De-Sac
We should mention
Reservations are required for spa treatments. Reservations can be made by contacting the hotel prior to arrival, using the contact information on the booking confirmation. The property has connecting/adjoining rooms, which are subject to availability and can be requested by contacting the property using the number on the booking confirmation. Guests can arrange to bring pets by contacting the property directly, using the contact information on the booking confirmation.


text:
Maritime Today
The Maritime Industry's original and most viewed E-News Service
The 65-foot commercial passenger vessel Spirit of Kona ran aground on the island of Hawaii, Sunday, the U.S. Coast Guard reported.
Coast Guard Sector Honolulu
Eiltank Schiffart GmbH & Co KG has placed the order for the repair of the inland waterway tanker vessel Julius Rütgers Shipyard with the shipyard Gerb. Kooiman B.
Being followed by an albatross is considered to bring good luck to mariners but the birds themselves aren't always so lucky when trying to pick up a free feed from fishing boats.
GTT Training, a GTT subsidiary dedicated to training liquefied natural gas (LNG) professionals and to the development of associated simulation tools, has obtained
Record U.S. LPG exports to Asia flip market into a glut.
Last year, liquefied petroleum gas (LPG) supplied to Asia was being snapped up by petrochemical makers.
Indian Oil Corporation (IOC), the country's largest oil company, is in talks to buy debt-laden Gujarat State Petroleum Corp's (GSPC) stake in the under-construction Rs.


text:
Do My Admission Essay Cheap You have declined cookies. This decision can be reversed.
go Development Dissertation You have allowed cookies to be placed on your computer. These are recommended for the best browsing experience. This decision can however be reversed.
http://www.ardanradio.com/phd-economics-thesis-proposal/ Phd Economics Thesis Proposal
Online Personal Statement Writing
http://www.theirishriviera.com/?lowering-drinking-age-essay Lowering Drinking Age Essay
http://www.vnjh.cz/?dissertation-problem-statement-education Dissertation Problem Statement Education
http://www.texaschristmastrees.com/?writers-world-essays Writers World Essays
http://planetside.co.uk/?content-writing-services-chennai Content Writing Services Chennai


text:
Qin Bailan Art Exhibition
"Chinese Women and Children from History and Folklore": Qin Bailan Art Exhibition
The University of Idaho Confucius Institute wants to thank everyone who attended the Qin Bailan Silk Scroll Paintings Exhibition at the UI Boise Water Center campus.
Qin Bailan is a world renowned painter who was named one of China's "Ten Major Art Masters" in 2005. She has served as a deputy to the National People's Congress and as China's representative to the United Nations' World Conference on Women. Over the past forty years, Qin has created thousands of paintings of women and children from Chinese history using traditional methods and tools.
An opening night reception was be hosted by the UI Confucius Institute and forty pieces of Qin's artwork will be on display to the people of Idaho. Through the week, Qin will present two special seminars on "The Brief Introduction to Chinese Classic Drawing and Painting" and also do 1-3 "on the spot" drawings or paintings during gallery hours.
Qin and her art exhibition was at the UI Boise Idaho Water Center from Feb. 15-19, 2016.
Two seminars were presented by Qin on "The Brief Introduction to Chinese Classic Drawing and Painting."
All of the Qin Bailan Art Exhibition events were free and open to the public.
Additional information on Qin and her artwork may be found at her personal website.
Parking for the event may be found at the Idaho Water Center and the Ada County Courthouse Parking Garages.
- First hour of parking is free
- $1 per hour for additional hours
- Parking is free after 4:30 p.m.
To learn more about this event or others offered by the University of Idaho Confucius Institute, please call our main office at 208-885-7110 or email us.
Follow us on Facebook for the latest information on what we've got going on around the State of Idaho.


text:
Why Choose Crutchfield?
Great gear and expert advice
Our experts help you pick the ideal gear for your needs.Meet our advisors
Supported forever
Free tech support for the life of your gear.Read about our one-on-one expert help
60-day returns
You may return items that are complete and like new for any reason within 60 days.See the details of our return policy
Crutchfield Rewards
Earn one point for every dollar you spend and use those points to save on future purchases.Get full details on Crutchfield Rewards
Deep discounts on car installation gear
We offer vehicle-specific installation instructions, dash kits, wiring harnesses, and speaker accessories at deeply discounted prices with car stereo and speaker purchases. Available for most vehicles.Learn more
Trusted since 1974
Our customers have trusted us with their business, and they've helped us win awards for our service.Check out our most recent awards
Factory-authorized dealer
The manufacturer's warranty always applies.See more details
Your search for cable management sale returned the following:
Sanus ELM302-W1 Cable Tunnel Accessory Kit
Easily conceal A/V cables below your wall-mounted TV
In Stock$9.99Special Purchase, Save $15.00$24.99
Sanus SA304 Countoured Cable Cover
Conceal your wall-mounted TV's audio/video and power cables
In Stock$21.49Price Break, Save $3.50$24.99
Sanus ELM301-W1 Cable Tunnel Kit
Easily hide A/V cables below your wall-mounted TV
In Stock$14.99Special Purchase, Save $10.00$24.99
Install Bay Cable Ties
100-pack (11")
In Stock$4.99Price Break, Save $3.00$7.99
Install Bay Cable Ties
100-pack (4")
In Stock$1.99Price Break, Save $3.00$4.99
Install Bay Cable Ties
100-pack (8")
In Stock$3.99Price Break, Save $2.00$5.99
Install Bay Cable Ties
100-pack (6")
In Stock$2.99Price Break, Save $2.00$4.99
Sanus ELM806 PowerBridge®
In-wall power management extender system
In Stock$84.99Price Break, Save $15.00$99.99
Metra ethereal CS-WRAPBLK
8" reusable Velcro® cable wraps (50-pack)
In Stock$9.99Price Break, Save $5.00$14.99
Install Bay BCC1
1" cable clamps (100-pack)
In Stock$6.99Price Break, Save $2.00$8.99
A/V Receiver Premium Connect and Protect Kit
Includes an HDMI cable, Panamax component-style surge protector, and Logitech® Harmony® Ultimate One remote
In Stock$474.97


text:
business analyst jobs
Refine your searchClear Filters
Date Added
More Filters
Business Analyst
Pernod Ricard - New South Wales
To join our Commercial Finance team, reporting to the Senior Business Analyst. In this busy and varied role you will work closely with the Coles and Woolworths...
Business Analyst
International SOS - New South Wales
The Business Analyst key responsibilities include:. Working with a team of Business Analyst in their engagement with site-based staff to drive improved...
Business Analyst
Salmat - Queensland
The Business Analyst retrieves data, analyses data, makes comments and recommendations in consultation with the Leadership Team....
Business Analyst
Glencore - Australia
We are seeking an experienced Business Analyst to implement effective cost control solutions to maximise the business' margin....
Business Analyst
Fusion5 - Australia
Ideally, you'll have around a minimum of two years' postgraduate experience working as a business analyst within an IT software or web development environment...
Graduate Business Analyst (Brisbane)
CGI - New South Wales
CGI Brisbane is seeking Graduate Business Analysts interested in fast tracking their career in the ICT Consulting industry....
Business Analyst - Customer Experience
Metro Trains Melbourne - Melbourne VIC
Metro Trains is seeking a Business Analyst – Customer Experience to support the Head of Customer Experience Program and Planning in the analysis of customer...
Senior Business Analyst
Woolworths Supermarkets - New South Wales
Our Retail Analytics team aim to be valued commercial business partners and advisors who understand the business' strategic direction and needs....
Business Analyst
Clare & Gilbert Valleys Council - Australia
Friend's email address Your name Your email address Comments Max 300 characters I thought you would be interested in this job. For further information
Junior Business Analyst
The Customer Experience Company - Sydney NSW
We are looking for recent graduates of business, IT or related areas who are interested in gaining business analyst and consulting skills within the dynamic...


text:
Latest News
Vodafone continues to lose millions
ANZ Bank wants to sell off its online broker platform
Telcos forced to open up high-speed broadband networks
Qld pays $300k to build an app already available for free
Microsoft to axe thousands in new job cuts round
Follow Us
Log In
Benchmark Awards
CXO Challenge
What's On
Log In
Remember me
Forgot password?
Don't have an account? Register now!
Benchmark Awards
CXO Challenge
What's On
Vodafone continues to lose millions
But the bleed is slowing.
Jul 29 2016 5:06PM
Telcos forced to open up high-speed broadband networks
ACCC introduces new regulation.
Jul 29 2016 11:59AM
NBN Co sends first Telstra HFC site live
WA suburb becomes second HFC location after Redcliffe.
Jul 29 2016 6:30AM
Will Australia's broadband probe expose bottlenecks or just raise prices?
ACCC begins internet speed bake-off.
Jul 27 2016 10:30AM
ISPs, telcos pressured to talk 'real' internet speeds
And to be upfront on how they manage traffic.
Jul 26 2016 11:28AM
Are telcos still terrible at IT acquisitions?
Telstra and Optus' M&A adventures, from Kaz and Alphawest to Ensyst, Kloud and Readify.
Jul 26 2016 10:00AM
Ericsson boss booted after dire results
Time is up for telco tech supplier chief.
Jul 25 2016 6:20PM
Telstra's COO is leaving the telco after 12 years
Kate McKenzie to "change direction".
Jul 25 2016 9:46AM
Music industry facing unexpected windfall in Aussie site blocking case
Site takedown in US could negate local battle.
Jul 22 2016 11:13AM
Govt flags IT infrastructure investment for research
Compute, network and big data spend on the agenda.
Jul 21 2016 7:06AM
Telstra recruits into beleaguered Defence networks team
Batch of jobs up for grabs on billion-dollar contract.
Jul 21 2016 6:01AM
Optus says Telstra's USO costs should drop to one-tenth
Not $290 million a year, but $23 million.
Jul 20 2016 11:32AM
Australia gets an industry body for IoT
Government, tech giants, telcos on board.
Jul 19 2016 5:00PM
Amaysim buys AusBBS to enter fixed broadband market
Deal worth $4 million will be completed in late August.
Jul 19 2016 10:24AM
US frees up spectrum bands for 5G
Racing South Korea, Japan to be first with next generation wireless.
Jul 15 2016 4:01PM
Telstra buys up Aussie mobile management specialist
Keeps acquisition price under wraps.
Jul 14 2016 2:02PM
NBN Co signs billion-dollar HFC build deal
Construction contract goes to six firms.
Jul 14 2016 8:44AM
Optus to refund overcharged customers $2.4m after ASIC slap
Around 175k mobile phone insurance users impacted.
Jul 12 2016 1:29PM
Australia Japan Cable awaits repairs after April break
Traffic rerouted via ring architecture.
Jul 12 2016 6:55AM
Woolworths wants to become a 'full service' telco
Exclusive: Reveals fixed-line, content ambitions.
Jul 12 2016 6:50AM
Most popular tech stories
10 hottest products for SMBs
The 10 biggest cloud outages of 2016
Brennan IT mourns Robert Tinning
Do telcos still suck at IT acquisitions?
Online reseller pays ACCC penalty for misleading customers
7 accounting packages for Australian small businesses compared: including MYOB, QuickBooks Online, Reckon, Xero
How long will a UPS keep your computers on if the lights go out?
How do I make sure my email is properly synced between all my computers?
Tip: Your shop can use a smartphone instead of an EFTPOS terminal
Xero releases major reporting overhaul
Top 25 fantasy games of all time
How to: How much RAM do you really need?
Windows 10 Anniversary Update: What's changed, what's new and what you need to know
Investigator: The NBN nightmare
Head-to-Head: Synology DS216+ versus QNAP TS-251+ 2-bay NAS
PSA: You can play Red Dead Redemption on PC… kinda
Hands-on Preview: Mafia III goes south
Review: Nvidia GeForce GTX 1060 Founder's Edition
20 key tips for succeeding at Rainbow Six Siege
Review: Battleborn is just a let down
Using Watson IoT to predict natural disasters
The four fundamentals of IoT value
IoT network reaches 25 percent of A/NZ population
Using LoRa to build a 'Fitbit for Sydney'
Why IoT devices need a 'digital twin'
Log In
Don't have an account? Register now!
Remember me
Forgot your password?