text:
This is the second part in a series of three that explains how you can add series to Silverlight Charts. We'll look at how Silverlight Chart's rich hierarchy of interfaces allow developers to create series that can play well with all the built-in series and axes, as well as custom series and axes written by other parties. Once again...
Beware: Silverlight charts is still in preview mode and there may be breaking changes in the future despite our best efforts to avoid them.
Last time we learn how to structure our series in such a way that designers can customize its appearance. Now we can get down to the business of implementing our stock series. The StockSeries class is responsible for the following:
- Acquiring a data point style
- Adding a legend item
- Binding data points to a data source
- Acquiring axes
- Plotting the Data Points
Acquiring a Data Point Style
When we plot multiple series in the same Chart we want each of them to have different colors so that we can tell them apart.
To ensure that our StockSeries uses a different color than the other series in the chart it must retrieve the next available style from its series host. A series host contains series and provides them with various services. Currently the only object that implements the ISeriesHost interface in Silverlight Charts is the Chart object. Let's take a look at the Chart hierarchy.
When a series is inserted into a Chart the SeriesHost property of the series is set to that Chart. Conversely when a series is removed from a chart its SeriesHost property is set to null. When the SeriesHost property changes a protected method OnSeriesHostPropertyChanged is invoked. We can override this method in our StockSeries class if we want to do something when the series is added or removed from a Chart.
We should acquire a style from our series host when...
1. The series host changes
2. The RefreshStyles method of the base "Series" class is called
public class StockSeries : Series, IRequireGlobalSeriesIndex { private Style DataPointStyle { get; set; } protected override void OnSeriesHostPropertyChanged(ISeriesHost oldValue, ISeriesHost newValue) { AcquireDataPointStyle(); base.OnSeriesHostPropertyChanged(oldValue, newValue); } public override void RefreshStyles() { AcquireDataPointStyle(); Refresh(); } private void AcquireDataPointStyle() { if (SeriesHost != null) { using (IEnumerator<Style> styleEnumerator = SeriesHost.GetStylesWithTargetType(typeof(StockDataPoint), true)) { if (styleEnumerator.MoveNext()) { DataPointStyle = styleEnumerator.Current; } } } } // snip... }
In the example above we're using the IStyleDispenser's extension method GetStylesWithTargetType (in System.Windows.Controls.DataVisualization) to retrieve an IEnumerator of styles appropriate for our data point type.
newValue.GetStylesWithTargetType(typeof(StockDataPoint), true))
The "true" indicates that we are willing to accept styles with a target type that is an ancestor of our data point's type. Due to the fact that all of the styles in the Chart's default style palette target Control - which StockDataPoint inherits from - we can be sure our series will get a style when we insert it into a Chart.
Adding a Legend Item
Now that we've acquired a style we can use for our data points the time is right to insert a legend item into the Legend. We'll add a private property to store an instance of the LegendItem class and initialize it in the constructor. In order to ensure that it is inserted into the Legend we'll add it to the series LegendItems collection (inherited from base class Series). UI elements inserted into the legend items collection of a series are automatically inserted into the legend by the series host.
public class StockSeries : Series { // snip... private LegendItem LegendItem { get; set; } public StockSeries() { this.DefaultStyleKey = typeof(StockSeries); this.LegendItem = new LegendItem(); this.LegendItems.Add(LegendItem); } }
A well-behaved series ensures the following:
- If it does not have a title its legend item should display the series index
- If it has a title the legend item should display it
- Its legend item should have a visual appearance similar to its data points
Displaying the Series Index
If the series does not have a title it should display its series index in the LegendItem. Therefore we must determine what the index of our series is. We can try and figure out our index by counting the series in our series host collection, but this approach is complicated because we would also have to monitor the series collection of our series host for any changes.
Thankfully we can let the series host do the work for us by implementing IRequireGlobalSeriesIndex. This is our way of signaling to the series host that this series uses an index and needs to be informed when that index changes. In addition to implementing this interface we'll also add a property to store the global series index value.
public class StockSeries : Series, IRequireGlobalSeriesIndex { private int GlobalSeriesIndex { get; set; } private LegendItem LegendItem { get; set; } public void GlobalSeriesIndexChanged(int globalIndex) { GlobalSeriesIndex = globalIndex; UpdateLegendItem(); } private void UpdateLegendItem() { if (GlobalSeriesIndex != -1) { LegendItem.Content = string.Format("Series {0}", GlobalSeriesIndex + 1); } } // snip... }
Now if we add our series to a chart we should be able to see our legend item!
Displaying the Series Title in the Legend Item
If a series title is set it's good practice to display it in the legend item instead of the index. We could set the content of our legend item to the series Title property when we create the legend item, but we also need to update our legend item if the title changes. We can listen for changes to the title property by overriding the protected OnTitleChanged method. Let's also modify our private UpdateLegendItem method to check if the Title property is set before resorting to using the series index.
public class StockSeries : Series, IRequireGlobalSeriesIndex { private void UpdateLegendItem() { if (Title != null) { LegendItem.Content = this.Title; } else if (GlobalSeriesIndex != -1) { LegendItem.Content = string.Format("Series {0}", GlobalSeriesIndex+1); } } protected override void OnTitleChanged(object oldValue, object newValue) { UpdateLegendItem(); base.OnTitleChanged(oldValue, newValue); } // snip... }
Now if we specify a custom series title we can see it in the Legend!
<charting:Chart> <local:StockSeries Title="My First Series" /> </charting:Chart>
Styling the Legend Item
Ideally we'd like our legend item to be the same color as our data points. We can accomplish this by creating an instance of StockSeriesDataPoint, applying the data point style we retrieved from the series host, and setting the data point to be the data context of our legend item. The best place to do this is in our AcquireDataPointStyle method.
private void AcquireDataPointStyle() { if (SeriesHost != null) { using (IEnumerator<Style> styleEnumerator = SeriesHost.GetStylesWithTargetType(typeof(StockDataPoint), true)) { if (styleEnumerator.MoveNext()) { DataPointStyle = styleEnumerator.Current; this.LegendItem.DataContext = new StockDataPoint { Style = DataPointStyle }; } } } }
Now we can see that the legend item has a color.
So how does this work? The default template for the LegendItem binds to the background color and border brush properties of its DataContext. This approach means that we can expose a LegendItemStyle property and give designers the ability to replace our legend item's template while still retaining certain aspects of the data point style (such as the color). I'll leave that as an exercise for the reader.
Binding Data Points to a Data Source
We'd like to be able to bind our series directly to objects in our data source. Let's add string properties for the DatePath, HighPath, LowPath, and ClosePath to our series. We'll store the path's in binding objects which we'll use to bind the properties in our data points to the properties in our data source objects. We expose string properties for our paths instead of bindings because strings are easier to work with in Blend.
private Binding dateBinding = new Binding(); public string DateBinding { get { return dateBinding.Path.Path; } set { dateBinding.Path = new PropertyPath(value); } } private Binding lowBinding = new Binding(); public string LowPath { get { return lowBinding.Path.Path; } set { lowBinding.Path = new PropertyPath(value); } } private Binding highBinding = new Binding(); public string HighPath { get { return highBinding.Path.Path; } set { highBinding.Path = new PropertyPath(value); } } private Binding closeBinding = new Binding(); public string ClosePath { get { return closeBinding.Path.Path; } set { closeBinding.Path = new PropertyPath(value); } }
Let's follow the ItemsControl model and add an ItemsSource dependency property of type IEnumerable. When the ItemsSource property changes we'll create a data point for each object and add the data points to a dictionary using the object as the key. We'll use a helper method called CreateStockDataPoint to create the data point, apply our data point style, and add the bindings to it.
private StockDataPoint CreateStockDataPoint(object value) { var stockDataPoint = new StockDataPoint { DataContext = value }; stockDataPoint.Style = DataPointStyle; stockDataPoint.SetBinding(StockDataPoint.DateProperty, dateBinding); stockDataPoint.SetBinding(StockDataPoint.HighProperty, highBinding); stockDataPoint.SetBinding(StockDataPoint.LowProperty, lowBinding); stockDataPoint.SetBinding(StockDataPoint.CloseProperty, closeBinding); return stockDataPoint; } private Dictionary<object, StockDataPoint> _dataPoints = new Dictionary<object, StockDataPoint>(); public IEnumerable ItemsSource { get { return GetValue(ItemsSourceProperty) as IEnumerable; } set { SetValue(ItemsSourceProperty, value); } } public static readonly DependencyProperty ItemsSourceProperty = DependencyProperty.Register( "ItemsSource", typeof(IEnumerable), typeof(StockSeries), new PropertyMetadata(null, OnItemsSourcePropertyChanged)); private static void OnItemsSourcePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { StockSeries source = (StockSeries)d; IEnumerable oldValue = (IEnumerable)e.OldValue; IEnumerable newValue = (IEnumerable)e.NewValue; source.OnItemsSourcePropertyChanged(oldValue, newValue); } protected virtual void OnItemsSourcePropertyChanged(IEnumerable oldValue, IEnumerable newValue) { Refresh(); } public override void Refresh() { if (ItemsSource != null) { this.PlotArea.Children.Clear(); _dataPoints = ItemsSource .Cast<object>() .Select(obj => CreateStockDataPoint(obj)) .ToDictionary(dataPoint => dataPoint.DataContext); foreach (StockDataPoint dataPoint in _dataPoints.Values) { this.PlotArea.Children.Add(dataPoint); } } }
That's all it takes to create our data points and bind them to an underlying data source!
Creating Some Sample Data To Plot
We'll need some sample data if we want to see our series in action. First we'll need a class to hold our sample data.
public class HighLowClose { public DateTime Date { get; set; } public double High { get; set; } public double Low { get; set; } public double Close { get; set; } }
That was easy. Thanks automatic properties! Now let's create a set of data and set it to the ItemsSource property of our series.
var date = new DateTime(2008, 1, 1); StockSeries stockSeries = chart.Series[0] as StockSeries; stockSeries.DatePath = "Date"; stockSeries.HighPath = "High"; stockSeries.LowPath = "Low"; stockSeries.ClosePath = "Close"; stockSeries.ItemsSource = new[] { new HighLowClose { Date = date, High = 23.0, Low = 18.0, Close = 22.0 }, new HighLowClose { Date = date.AddDays(1), High = 26.0, Low = 22.0, Close = 22.0 }, new HighLowClose { Date = date.AddDays(2), High = 33.0, Low = 30.0, Close = 32.0 }, new HighLowClose { Date = date.AddDays(3), High = 44.0, Low = 42.0, Close = 43.0 }, new HighLowClose { Date = date.AddDays(4), High = 37.0, Low = 35.0, Close = 36.0 }, new HighLowClose { Date = date.AddDays(5), High = 49.0, Low = 43.0, Close = 48.0 }, };
Now we're ready to starting plotting our data points.
Acquiring Axes
Listening for Changes
To plot our data points we'll need axes, but first we need to ensure that our series can receive messages from them. The series needs to be able to listen for changes in the axes such as a change in the range or size. This way it can respond to these changes by updating the positions of its data points accordingly. A series can listen for axis changes by implementing the IAxisListener interface.
[TemplatePart(Name = "PlotArea", Type = typeof(Canvas))] public class StockSeries : Series, IAxisListener, IRequireGlobalSeriesIndex { // snip... public void AxisInvalidated(IAxis axis) { } }
The AxisInvalidated method is called by an axis when it changes. Eventually we will add some code to update our data points to this method. For the time being we'll leave it empty though.
Acquiring Axes
Now that we can listen for changes in an axis we want to acquire axes that we can use. Where do get them from though?
A well-behaved series does the following when it is added to a series host:
- Looks for suitable axes in its series host's axes collection
- If no axes are found it creates the axes it needs and adds them to its series host's collection of axes
- Adds itself to each axes' collection of registered listeners
A well-behaved series does the following when it is removed from a series host:
- Removes itself from each axes' collection of registered listeners
If we follow the steps above our stock series can share the same axes with other series. We will also ensure that developers won't have to explicitly add appropriate axes to the chart's axes collection before they can use our series.
There are three axes available in Silverlight Charts:
- LinearAxis
- DateTimeAxis
- CategoryAxis
One approach would be too look for a horizontal DateTimeAxis and a vertical LinearAxis in the series host's axes collection when the SeriesHost property changes. While this approach would work it would be sub-optimal. In addition to allowing custom series, Silverlight Charts also allows custom axes. We'd like our series to be able to use any axes added in the future (ex. LogarithmicAxis) as well as axes added by third-parties. Let's take a look at the axis hierarchy.
You might be feeling a little overwhelmed but don't worry :-). We're primarily interested in the interfaces and I'll explain those one by one.
Let's take a look at the axes acquisition code in our StockSeries class.
private IAxis IndependentAxis { get; set; } private IRangeAxis DependentAxis { get; set; } protected override void OnSeriesHostPropertyChanged(ISeriesHost oldValue, ISeriesHost newValue) { if (newValue != null) { this.IndependentAxis = newValue.Axes .OfType<IAxis>() .Where(axis => axis.CanPlot(DateTime.Now) && axis.Orientation == AxisOrientation.X) .FirstOrDefault(); if (this.IndependentAxis == null) { IndependentAxis = new DateTimeAxis { Orientation = AxisOrientation.X }; newValue.Axes.Add(IndependentAxis); } this.IndependentAxis.RegisteredListeners.Add(this); this.DependentAxis = newValue.Axes .OfType<IRangeAxis>() .Where(rangeAxis => rangeAxis.CanPlot(0.0) && rangeAxis.Orientation == AxisOrientation.Y) .FirstOrDefault(); if (this.DependentAxis == null) { DependentAxis = new LinearAxis { Orientation = AxisOrientation.Y }; newValue.Axes.Add(DependentAxis); } this.DependentAxis.RegisteredListeners.Add(this); } else { if (this.IndependentAxis != null) { this.IndependentAxis.RegisteredListeners.Remove(this); } if (this.DependentAxis != null) { this.DependentAxis.RegisteredListeners.Remove(this); } } AcquireDataPointStyle(); base.OnSeriesHostPropertyChanged(oldValue, newValue); }
One immediate side-effect of this general approach is that we can use a CategoryAxis on the horizontal in addition to a DateTimeAxis because category axes can plot dates as well.
When we acquire an axis we add ourselves to its registered listeners collection. When the axis changes it will call the AxisInvalidated method on all its registered and we'll get the opportunity to update our data points. Now we're ready for the main event...
Plotting the Data Points
When the "Refresh" method of the base Series class is called our series is expected to retrieve data from its data source and plot its data points. Let's create an "UpdateDataPoints" method which will plot a sequence of data points and invoke it in the "Refresh" method.
public override void Refresh() { if (IndependentAxis != null && DependentAxis != null && PlotArea != null && ItemsSource != null) { this.PlotArea.Children.Clear(); _dataPoints = ItemsSource .Cast<object>() .Select(obj => CreateStockDataPoint(obj)) .ToDictionary(dataPoint => dataPoint.DataContext); foreach (StockDataPoint dataPoint in _dataPoints.Values) { this.PlotArea.Children.Add(dataPoint); } this.Dispatcher.BeginInvoke(() => UpdateDataPoints(_dataPoints.Values)); } }
Notice that instead of updating the data points synchronously we use BeginInvoke. This will delay the process until after a layout pass has occurred. This gives Silverlight/WPF the opportunity to apply the template to our data point controls. This is important as we will need to know the final width of the data points in order to center them along the X axis. Now let's write the methods that do the important work of positioning the data points.
private void UpdateDataPoints(IEnumerable<StockDataPoint> dataPoints) { foreach (var dataPoint in dataPoints) { UpdateDataPoint(dataPoint); } } private void UpdateDataPoint(StockDataPoint dataPoint) { // GetPlotAreaCoordinate returns a nullable value because the value // may or may not be present on the axis. var dateCoordinateUnitValue = IndependentAxis.GetPlotAreaCoordinate(dataPoint.Date); if (dateCoordinateUnitValue != null && dateCoordinateUnitValue.Value.Unit == Unit.Pixels) { var nullableHighCoordinateUnitValue = DependentAxis.GetPlotAreaCoordinate(dataPoint.High); var nullableLowCoordinateUnitValue = DependentAxis.GetPlotAreaCoordinate(dataPoint.Low); var nullableCloseCoordinateUnitValue = DependentAxis.GetPlotAreaCoordinate(dataPoint.Close); if (nullableHighCoordinateUnitValue != null && nullableHighCoordinateUnitValue.Value.Unit == Unit.Pixels && nullableLowCoordinateUnitValue != null && nullableLowCoordinateUnitValue.Value.Unit == Unit.Pixels && nullableCloseCoordinateUnitValue != null && nullableCloseCoordinateUnitValue.Value.Unit == Unit.Pixels) { // Subtract all Y coordinates from the height of the plot // area canvas to invert the Y axis. The ensures that // larger values appear higher than smaller ones. var highPixelValue = PlotArea.ActualHeight - nullableHighCoordinateUnitValue.Value.Value; var lowPixelValue = PlotArea.ActualHeight - nullableLowCoordinateUnitValue.Value.Value; var closePixelValue = PlotArea.ActualHeight - nullableCloseCoordinateUnitValue.Value.Value; var dataPointHeight = lowPixelValue - highPixelValue; var closeCoordinate = closePixelValue - highPixelValue; dataPoint.CloseCoordinate = closeCoordinate; dataPoint.Height = dataPointHeight; // center our stock data point on the X point Canvas.SetLeft(dataPoint, dateCoordinateUnitValue.Value.Value - (dataPoint.ActualWidth / 2.0)); Canvas.SetTop(dataPoint, highPixelValue); } }
The GetPlotAreaCoordinate method of the IAxis type is important to understand. Rather than a double this method returns a nullable UnitValue object. This value is nullable because a given value may not exist on an axis. For example negative values cannot exist on a logarithmic axis. Also certain values may or may not be present on a category axis.
The UnitValue object is composed of a double Value property and an enum Unit property value which can be either Pixels or Degrees. Although there aren't current any axes in Silverlight Charts that return Degree values this may change in the future to support radial axes. For the time being our series will only render pixel values.
Now we're ready to implement our AxisInvalidated method. All we need to do is call UpdateDataPoints!
public void AxisInvalidated(IAxis axis) { //Refresh(); UpdateDataPoints(_dataPoints.Values); }
Given the following XAML...
<charting:Chart x:Name="chart"> <charting:Chart.Axes> <charting:DateTimeAxis Orientation="X" /> <charting:LinearAxis Orientation="Y" /> </charting:Chart.Axes> <local:StockSeries Title="My First Series" /> </charting:Chart>
...we should be able to see our series. Drumroll please...
Oops. So what went wrong? Why didn't our data points get plotted?
In fact our data points were plotted, it's just that they are outside of the visible range of the Y axis. Notice that the range on the Y axis is 0 to 1. Turns out that just as an axis needs to communicate with a series when it changes, a series must also communicate information to its axes. In this case the series must communicate its data range to the axes so that the axes can select an appropriate range.
Helping the Axis Pick a Better Range
In order to get the axis to choose a range that is appropriate for our data we'll implement IRangeProvider. Let's take a look at how an IRangeProvider interacts with an IRangeAxis.
We implement the IRangeProvider.GetRange method so the axis can query the series to determine an appropriate range to display. When a range consumer requests a range it passes itself to the GetRange method. This allows us to determine which axis is requesting the range, the dependent axis or the independent axis.
public class StockSeries : Series, IRequireGlobalSeriesIndex, IAxisListener, IRangeProvider { //snip... public Range<IComparable> GetRange(IRangeConsumer rangeConsumer) { if (_dataPoints.Any()) { if (rangeConsumer == IndependentAxis) { DateTime minimum = _dataPoints.Values.Select(dataPoint => dataPoint.Date).Min(); DateTime maximum = _dataPoints.Values.Select(dataPoint => dataPoint.Date).Max(); return new Range<IComparable>(minimum, maximum); } else if (rangeConsumer == DependentAxis) { double minimum = _dataPoints.Values.Select(dataPoint => dataPoint.Low).Min(); double maximum = _dataPoints.Values.Select(dataPoint => dataPoint.High).Max(); return new Range<IComparable>(minimum, maximum); } } return new Range<IComparable>(); } }
Now the range axis can determine the best range to use to display our series data. That's only half of the equation though. The series also needs to be able to inform the axis that its range has changed. The best time to do this is in the Refresh method after we load our data.
public override void Refresh() { if (IndependentAxis != null && DependentAxis != null && PlotArea != null && ItemsSource != null) { // snip... this.Dispatcher.BeginInvoke( () => { UpdateDataPoints(_dataPoints.Values); { { IRangeConsumer rangeConsumer = IndependentAxis as IRangeConsumer; if (rangeConsumer != null) { rangeConsumer.RangeChanged(this, GetRange(rangeConsumer)); } } { IRangeConsumer rangeConsumer = DependentAxis as IRangeConsumer; if (rangeConsumer != null) { rangeConsumer.RangeChanged(this, GetRange(rangeConsumer)); } } } }); } }
Now we should be able to see our series in action...
Hmmm, looks okay. Our data points have got a nice looking gradient and they've been plotted properly.
The problem is that our far left and far right data points stretch outside of the chart. The axis is doing its job and picking a range that encompasses all our data. The problem is that our data points have a display width in addition to a data value.
What we'd really like is for the axis to pick a range large enough so that both our data and our visual objects will fit inside of the series. So how do we do that?
Making Room With ValueMargins
In order to help an axis balance display concerns and data concerns Silverlight Charts provides a ValueMargin object. A value margin is a data value with a high and low margin value in pixels. When an axis is provided with value margins in addition to a range it will try and find a range large enough such that a series data and its graphical objects can be displayed inside of the Chart.
The IValueMarginProvider and IValueMarginConsumer interfaces work in a way very similar to the IRangeProvider and IRangeConsumer interfaces:
Let's implement IValueMarginProvider.
public class StockSeries : Series, IRequireGlobalSeriesIndex, IAxisListener, IRangeProvider, IValueMarginProvider { //snip... public IEnumerable<ValueMargin> GetValueMargins(IValueMarginConsumer consumer) { // We only need to worry about value margins on the X axis. // On the Y axis the top and bottom of the data point always // correspond to the value location on the axis. if (consumer == IndependentAxis && consumer is IRangeAxis) { if (_dataPoints.Values.Any()) { // We return the width of only minimum and maximum data // points. The other information is unnecessary. StockDataPoint minimumStockDataPoint = EnumerableFunctions.Min(_dataPoints.Values, dataPoint => dataPoint.Date); StockDataPoint maximumStockDataPoint = EnumerableFunctions.Max(_dataPoints.Values, dataPoint => dataPoint.Date); var halfWidth = minimumStockDataPoint.Width / 2.0; return new[] { new ValueMargin(minimumStockDataPoint.Date, halfWidth, halfWidth), new ValueMargin(maximumStockDataPoint.Date, halfWidth, halfWidth), }; } } return new ValueMargin[] { }; } }
Notice that we're only worried about returning value margins to the independent (X) axis. That's because the top and bottom of a data point on a stock chart always line up with a value on the axis (lest they be misleading).
To make life easier I've written some helper functions: Min and Max. These functions work by accepting a function that they apply to each data point. The function returns a value which is used to compare the data points. The data point with the largest or smallest computed value is returned.
That wasn't too tough. Now let's take a look at our series...
Success! There's only one more thing to do...
Supporting a Category Axis
Remember that we accept any axis on the horizontal, not just a DateTimeAxis. This means that we can use an instance of the CategoryAxis class for our independent axis. A category axis is similar to a range axis in that it needs to know what values to include. As a result our series must inform the category axis which discrete values it intends to plot. Predictably this is accomplished using the familiar Provider/Consumer model.
Let's implement IDataProvider...
public class StockSeries : Series, IRequireGlobalSeriesIndex, IAxisListener, IRangeProvider, IValueMarginProvider, IDataProvider { public IEnumerable<object> GetData(IDataConsumer axis) { if (axis == IndependentAxis) { return _dataPoints.Values.Select(dataPoint => dataPoint.Date).Cast<object>(); } else if (axis == DependentAxis) { return _dataPoints.Values .SelectMany(dataPoint => new[] { dataPoint.Close, dataPoint.High, dataPoint.Low }).Cast<object>(); } return new object[] { }; } //snip... }
Just as we must inform the range axes we're using that the range has changed after loading new data we must also inform any axes that implement IDataConsumer (such as axes that implement ICategoryAxis) that our data has changed. Let's revisit our Refresh method one last time.
public override void Refresh() { // snip... this.Dispatcher.BeginInvoke( () => { UpdateDataPoints(_dataPoints.Values); { { IRangeConsumer rangeConsumer = IndependentAxis as IRangeConsumer; if (rangeConsumer != null) { rangeConsumer.RangeChanged(this, GetRange(rangeConsumer)); } IDataConsumer dataConsumer = IndependentAxis as IDataConsumer; if (dataConsumer != null) { dataConsumer.DataChanged(this, GetData(dataConsumer)); } } { IRangeConsumer rangeConsumer = DependentAxis as IRangeConsumer; if (rangeConsumer != null) { rangeConsumer.RangeChanged(this, GetRange(rangeConsumer)); } IDataConsumer dataConsumer = DependentAxis as IDataConsumer; if (dataConsumer != null) { dataConsumer.DataChanged(this, GetData(dataConsumer)); } } } }); }
Now let's try and use a category axis with our stock series. To make things interesting let's reverse the order of the dates on the axis (something a DateTimeAxis doesn't support).
<charting:Chart x:Name="chart"> <charting:Chart.Axes> <charting:CategoryAxis Orientation="X" SortOrder="Descending"> <charting:CategoryAxis.AxisLabelStyle> <Style TargetType="charting:AxisLabel"> <Setter Property="StringFormat" Value="{}{0:MM/dd/yy}" /> </Style> </charting:CategoryAxis.AxisLabelStyle> </charting:CategoryAxis> <charting:LinearAxis Orientation="Y" /> </charting:Chart.Axes> <local:StockSeries Title="My First Series" /> </charting:Chart>
Now let's take a look at our Series...
A New Series For Silverlight Charts
As you can see Silverlight Charts has a very rich set of interfaces you can use to smoothly integrate custom series and axes. With roughly 450 lines of code we just added the last series missing from Excel to Silverlight Charts. The ball's in your court. We're eager to see what the community comes up with.
Next Time: Making our Stock Series dynamic!


text:
Initiated in December 1985 for the purpose of ensuring that securities are traded in a secure and stable environment, capital market in its modern form has a history of twenty-seven years in Turkey.
Borsa İstanbul markets are organized under four main categories: Equity Market, Debt Securities Market, Precious Metals and Diamond Market and Derivatives Market.
Borsa İstanbul designs different types of indices so as to enable investors to track Borsa İstanbul markets.
Market data, IPO data, monthly consolidated data, market records and information on data dissemination.
Investor Relations refers to the activities aimed at sustaining investor interest in a company through establishing effective communication channels. Investor Relations builds a bridge between the company and the current and potential shareholders; and such bridge has its pillars on providing information on a regular basis and confidence.
Borsa İstanbul Members consist of the intermediary institutions authorized to operate in the capital market.
There are two markets for trading equities on Borsa İstanbul Equity Market and Emerging Companies Market.
The personnel is offered a comfortable and secure working environment parallel with the importance of the task he/she undertakes.
The personnel is encouraged to achieve success, provided with opportunities to improve his/her knowledge, opinions and professional qualifications, and those who achieve superior success are rewarded.
Managers of every level strive to create a working environment enhancing the personnel's motivation and to build good human relations.
Through the training programs organized, the personnel are prepared for new tasks.
To maintain the dynamism of the personnel and to improve their experience, departmental rotation is applied.
Each personnel is considered as an important ring of the corporate chain.

subset: commoncrawl


text:
Hi all. I have written a card game using Swing and wanted to use a few small animations here and there to clarify what is going on in a few cases where cards are hidden or revealed. We're talking very simple animations, nothing more than some cards sliding together into one stack or sliding back apart.
The problem is, I can't seem to get any sort of animation working because my GUI isn't repainted until the entirety of the animation is finished. That is, if I animate a card sliding to the right by calling setBounds with increasing X coordinates, all that I SEE happening is that the card suddenly jumps to the right after all of the setBounds calls have finished.
As follows is a simplified mockup that should replicate the structure of my game. The container for a single object may seem unnecessary but there is more going on in the real thing. Same goes for the AnimatedThing class that's little more than a JLabel.
This is my first Swing GUI ever, so if I'm doing something that doesn't make sense, it's because I've cobbled together several examples to get the thing up and running. Please do let me know if there is a more sensible way to do any of this.
The main class...
public class AnimationExample { public AnimationExample() {} public static void main(String[] args) { final AnimationExample example = new AnimationExample(); javax.swing.SwingUtilities.invokeLater(new Runnable() {public void run(){AnimationViewer.disp();}}); } }
A viewer class that sets up a pane and listens for a mouse click before starting the animation...
import javax.swing.*; import java.awt.*; import java.awt.event.*; public class AnimationViewer extends JPanel implements MouseListener { public JLayeredPane pane; private AnimatedThingsContainer animatedThingsContainer; public AnimationViewer() { setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); pane = new JLayeredPane(); pane.setPreferredSize(new Dimension(200, 200)); add(pane); pane.addMouseListener(this); AnimatedThing thing = new AnimatedThing(); pane.add(thing); animatedThingsContainer = new AnimatedThingsContainer(thing); } public static void disp() { //Create and set up the window. JFrame frame = new JFrame("Test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Create and set up the content pane. AnimationViewer view = new AnimationViewer(); JScrollPane scrollPane = new JScrollPane(view.pane); frame.setContentPane(scrollPane); //Display the window. frame.pack(); frame.setVisible(true); } public void mouseClicked(MouseEvent e) { System.out.println("animating..."); animatedThingsContainer.animate(); } public void mouseExited(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mousePressed(MouseEvent e){} }
A container for an AnimatedThing that handles the logic of where the AnimatedThing should go.
public class AnimatedThingsContainer { private AnimatedThing animatedThing; public AnimatedThingsContainer(AnimatedThing thing) { animatedThing = thing; } public void animate() { int currentX = 0; int currentY = 0; for(int i = 0; i < 50; ++i) { System.out.println("moving one pixel..."); animatedThing.setBounds(currentX, currentY, AnimatedThing.width, AnimatedThing.height); currentX++; animatedThing.validate(); animatedThing.repaint(); try{Thread.sleep(50);}catch(Exception e){System.out.println("oh noes");} } System.out.println("done."); } }
Finally, the AnimatedThing itself.
import javax.swing.*; public class AnimatedThing extends JLabel { public static int width = 50; public static int height = 50; public AnimatedThing() { setIcon(createImageIcon("test.gif")); setVerticalAlignment(JLabel.BOTTOM); setOpaque(false); setBounds(0, 0, width, height); } /* createImaceIcon() method taken from The Java Tutorials: How to Use Icons.*/ public static ImageIcon createImageIcon(String path) { java.net.URL imgURL = AnimatedThing.class.getResource(path); if (imgURL != null) { return new ImageIcon(imgURL); } else { System.err.println("Couldn't find file: " + path); return null; } } }
As you can see, I am calling validate and repaint after moving the AnimatedThing, and I am sleeping to give the user time to see the animation and hopefully to give the drawing thread time to repaint, but nothing seems to work. All I see when I click is the AnimatedThing jumping suddenly to the right after all of the movements are done.
Thanks for any help you can offer!
Edit: I am using Java version 1.6, if that is relevant.


text:
Boston: Shakshuka at Sofra Bakery and Café
A weekly profile on a favorite New England dish.
I spent about 10 days in Israel when I was 13, but the only two dishes I remember eating are falafel and turkey schnitzel. (I wasn't the most svelte of teenagers.) At that point, my obsession with food was in relatively nascent stages, so I can't feel too remorseful about all the local delicacies that I missed out on—but the one dish I do regret not trying in the homeland is shakshuka.
As far as I can tell, shakshuka is sort of the eggs Benedict of the Middle East—a hugely popular breakfast dish that consists of sautéed tomatoes and bell peppers with eggs cracked over the top to poach in the vegetables' heat. More enhanced versions might add onions, garlic, fresh chiles, and spices (cumin, paprika) to the pan, and top the finished dish with chopped parsley and a fistful of crumbled feta. The final product, usually served with a swatch of soft pita for dipping, is pretty unbeatable: hearty, complex, vegetarian-friendly, and cheap.
The first—and still the best—version I've ever had is one of the signature breakfast items at Sofra ($7), the Mediterranean bakery/café from chef duo Ana Sortun and Maura Kilpatrick that sits on the Watertown edge of Cambridge. (Egg lovers should also try the stellar Turkish Breakfast—a phyllo-coated soft-boiled egg, cucumber, tomato, olives, batter-fried feta cubes, thick yogurt, and seasonal "spoon sweets"—and the house take on migas.) There, the particularly tangy tomato mixture is seasoned with a savory Yemenite spice mixture called hawaj and puréed into a smooth sauce that's pooled around a pair of runny eggs. The garnishes—crispy pita crumbs and a dollop of verdant zhoug (a fiery yet refreshing chile paste made from Hungarian wax peppers, cilantro, parsley, garlic, extra-virgin olive oil, sherry vinegar, and toasted pumpkin seeds)—and the gorgeous shallow copper dish in which it is served make this particular version stand out.
The brilliant interplay of the silky tomato sauce and piquant zhoug is addictive in its own right, but crack open one of the eggs so that its ruddy yolk spills into the mix and rest assured there's no more divine breakfast (or dinner—I make the Saveur version on a regular basis) between here and Jerusalem.
Sofra Bakery and Cafe
1 Belmont Street, Cambridge MA 02138 (map) 617-661-3161; sofrabakery.com
All products linked here have been independently selected by our editors. We may earn a commission on purchases, as described in our affiliate policy.


text:
On Wednesday, the Federal Communications Commission made good on its September promise to free up 100 MHz of spectrum in the 3.5 GHz band, mainly to be used for "small cell" sites.
The range, between 3550 and 3650 MHz, is currently used for United States Navy radar operations and covers approximately 60 percent of the American population. The new plan will let mobile phone companies share that spectrum with federal users.
The FCC says that the 100 MHz swath will be divided into three tiers, the top for incumbent government and military users. The second and third, meanwhile, will be divvied up amongst "critical use facilities," and "General Authorized Access," respectively.
"A spectrum access system, incorporating a geo-location enabled dynamic database, would govern access to the 3.5 GHz band," the FCC said in a statement.
As we reported three months ago, mobile carriers are generally reluctant to share this spectrum, but now they at least seem willing to go along.
"We look forward to working with the Commission on the 3.5 GHz proceeding," said Chris Guttman-McCabe, a vice president at CTIA, the wireless industry's trade group, in a statement. "While this spectrum is not part of the 300 MHz that the FCC has identified for allocation for mobile flexible use before 2015, we are interested to see how the proceeding develops, and how the band ultimately can be used to support the provision of mobile broadband."


text:
IBM P2090-047 Practice Exams + PDF
Error-free and Updated Q&As to deliver you the best available Information & Guidance
- Practice Exams Software
- Questions & Answers Dumps
- IBM P2090-047 Study Guide
- Last Updated: Jul 8, 2020
- Total Questions: 132
Passing Assurance with 100% Money Back Guarantee
With our unique products, your Success is assured absolutely with a few days exam preparation! No worries to lose exam because we offer you a money back guarantee to achieve IBM IBM Information Management P2090-047 in very first exam attempt!
Price: $76
IBM Related Exams
100% Money Back Passing Assurance
TRUEBRAINDUMPS' products impart you the best confidence to ace exam, having learnt the most relevant information. This preparation ends with a remarkable success in exam and also a fabulous score. Truebraindumps.com ensures you success with 100% Money Back Guarantee!
Innovative Questions & Answers Format
Designed on the original format of the real IBM IBM Information Management P2090-047 exam, our products introduce you to an easier and innovative exam preparation methodology. You need no assistance from any other source.
Superbly Engaging Preparatory Content
Being the easiest to learn content, the well-curated Q&As of TRUEBRAINDUMPS do not let you feel bored or fatigued. The interactive content is engaging and abridged in volume to learn it in no time.
Learning through Practice
Nothing can be more effective than to learn things with practice. This is the idea behind generating TRUEBRAINDUMPS' Practice Exams. They also help your learn real exam format, know your weak points and revise and update your knowledge.
Verified by Industry Professionals
TRUEBRAINDUMPS' study material bears the stamp of authenticity and perfection. It is absolutely error-free and contains the latest information. For these merits, it is approved by all industry experts.
Best Opportunity to Validate your Professional Skills
Getting IBM IBM Information Management P2090-047 credential leads you to several career opportunities in medium and large enterprises. This industry-demanding certification fulfills the pre-requisite for other equally important professional exams too and thus helps you build your career. Truebraindumps.com is your ultimate career booster by providing you with the state of the art Questions and Answers, Practice Exams and Study Guide to make a thorough exam preparation and obtain the IBM IBM Information Management P2090-047 in first go!
Evaluate your Skills and Exposure before Taking the Actual Exam
To makes sure success in IBM IBM Information Management P2090-047, we provide you Practice Exams to assess your level of learning and hands-on exposure of the syllabus contents. If you rely on these real exam-like tests, you come to know your weak points. You can improve your deficiency by consulting the answer keys attached with each practice exam.
Guarantee to Succeed Exam
Truebraindumps.com's support is utmost reliable to win your targeted certification within a few days. The study material it offers is unique and enjoys the credit of approval by a great majority of IT professionals and experts. All products of truebraindumps.com are designed on an interactive format and strictly in line with the real exam. Therefore, they don't take much time to get prepared and award you a brilliant success.


text:
With Apple's 3.0 version of the iPhone quickly approaching, one of the most widely anticipated features is the "Push" functionality. This allows developers to send alerts, notifications, and other communications to the phone without the application actively being run.
While one can see the obvious utility in the feature, the part of me that manages my email inbox is dreading the feature. I am not as bad (or efficient, you pick the term) as those who manage to a "zero inbox", but I do try and make an effort to have no unread emails every few days. With this new Push feature, I'm envisioning throngs of app developers desirous of keeping me engaged with their app sending daily, hourly, and minutely notificifations. I'm imagining paging across the screens in my iPhone and seeing 40+ apps each claiming I have 30+ new notifications. And I'm thinking the Email manager in me will start to feel very behind….
So what will happen? I'd bet the following:
- I will find exceptional utility from the few apps that I use regularly that provide me with notifications, and will try to stay as current as possible with them. The Push feature will enhance my productivity.
- I will no longer feel comfortable looking at screen after screen of apps I barely recognize indicating I have a bunch of missed messages. I will start deleting apps that I currently dont use but keep on my phone in the background.
- I would bet my reaction will not be dissimilar to others, and notification "spam" will eventually hit a tipping point. Apple will step in to regulate the push feature. They will ensure all notifications are explicitly opt-in and customizable, not simply by virtue of agreeing to download the app.
All of the above is with the caveat that I dont have the details for how Apple will make the feature available to developers. But I'm hoping I don't have a new stack of attention draining activities to manage….


text:
Our Women2Women Ministry seeks to foster bonds between the women of the church, to encourage and guide one another in our walk with Christ and in our knowledge of Christ and His Word, and to reach out to one another and our community in love and service. Our guiding Bible verse is Hebrews 10:24-25:
… Let us consider how to stir up one another to love and good deeds, not neglecting to meet together … but encouraging one another, and all the more as you see the Day drawing near.
We put emphasis on cultivating relationships, and we meet together for Bible study, fellowship activities, and service projects. We also have a Helping Hands committee to serve those in our church and community who are in need.
We welcome all women and their friends to participate in Women2Women activities. Please see the Calendar of Events for the dates and times of upcoming event


text:
When we last saw The Good Wife, things were looking good—the firm had raked in a big new settlement, Nick was shown the door, Nathan Lane hadn't shown up for a couple episodes, and while Peter's campaign was under investigation, it was just for campaign finance misdeeds, a piddling matter for the great Eli Gold. It was a surprising place to leave off for a few weeks, but it also suggested that the show was going to try and shake the rust off its existing season arcs, which had never really taken off in this middling fourth season.
But we're back, and while Nick is still gone (may that be true forever and ever, amen), everything else remains the same, even if a couple of recurring thorns in Lockhart/Gardner's side are trotted out to spice things up. Clarke Hayden (Lane) rears his head again, trying to kick Will and Diane out of the firm for blocking his planned merger. Louis Canning (Michael J. Fox) is back, too, and we find out at the end of the episode that he's bought up some of the firm's debt and is now a creditor with a seat at the table of its looming bankruptcy. And Wendy Scott-Carr (Anika Noni Rose) is revived again, even with her reputation surely in tatters after her last witch-hunt against Will and her blown campaign against Peter. She's here to head up the Department of Justice probe into Eli, because why use an accomplished and funny actor like Hamish Linklater (who appeared in the same role in the last episode) for that job?
I enjoy Fox's performance on the show, and he'll likely have a fun time playing mind games with everyone in his future appearances, but the show already tried this stuff once before in the season three finale, and Louis' vendetta is beginning to feel a little stale. Is he just a jerk at this point? I like him being portrayed as a morally unscrupulous man who's always after the bottom line, first and foremost, but at this point, he's just willfully fucking with Alicia and company, at one point making her talk about her dead dad through some base trickery. I don't really get his motivation for doing so, and I hope the show either sheds light on it or stops leaning on Fox as a villain to deploy when plots need some star power.
Now, the case of the week was a good time: Canning's battle of wills with Alicia out in the Minnesotan wilderness was expertly portrayed, and Alicia's final gambit was both clever and shockingly venal. She basically blackmails a bank CEO (played by a subdued James Rebhorn) into settling a convoluted foreclosure/stagnant swimming pools/West Nile case by threatening to reveal that he has cancer, which would spoil an upcoming merger. Sure, he's bad for not revealing his cancer, breaking the law himself, but that's still pretty cold-blooded for Alicia.
My only real complaint about the Minnesota scenes is that Kalinda shows up late in the episode to help Alicia out, and that development should have come an act break sooner. There's one brief (and well-staged) conversation on the hotel beds, wine glasses in hands, but this could have been the perfect opportunity to explore the pair's new, cooler chemistry, and instead, Kalinda just wasn't used much this week at all. A shame, because it's so nice to have her back, free of Nick's grasp.
Over in Chicago, Diane and Will do battle with Clarke's efforts to remove them, arguing before a mediator (Tamara Tunie) and deposing Cary to make Clarke look like a bit of a self-important chump. We find out that Cary has been tutoring him to take the bar exam; it's a nice, sad little moment for Clarke, who's been the most successful of the new characters this year, although the Lockhart/Gardner bankruptcy storyline is beginning to outstay its welcome. I audibly groaned when Tunie said Will and Diane had five more weeks to figure out a way to get the money together. Five weeks! This better get solved a lot more quickly than five weeks. I'm happy for some change in the status quo, but we also know the shake-up isn't going to be that drastic, so why drag it out so much longer?
Eli's battle with the Department of Justice is even more convoluted, and the introduction of Wendy is a wrinkle we don't really need, an even more naked example of this show dredging up old characters to gussy up failing new plotlines. Every time Wendy walks into the room, everyone's pointing out how unsuitable she is for this new job—she's had nasty interactions with pretty much every character on the show, and she's way too close to everything to possibly be acceptable as the lead DOJ lawyer on the case.
But no matter, she has some legal mumbo-jumbo for why it's acceptable, and she quickly plays hardball when Diane tries to ward her off by talking to an old fundraiser of hers—she drags Lockhart/Gardner into the investigation, ensuring that this whole thing is going to be headache-inducingly complicated before it gets wrapped up. Wendy has been one-dimensional for a while, so every attempt to make her seem ambiguous is just a miserable failure.
More interesting is the introduction of T.R. Knight as Jordan, a young-gun campaign manager brought in to shadow Eli in case the investigation takes him off Peter's campaign. I haven't seen Knight in anything in quite a while, but I always enjoyed him on Grey's Anatomy (I only watched the early seasons), and he seems well-suited to this role. Hopefully he's more than an arrogant upstart and can have a real rapport with Eli, instead of just calling him "old man" behind his back. Because if I'm putting up with this campaign for the rest of the year, it had better get interesting soon.
Stray observations:
- Alicia says the firm is doing fine. "That which doesn't kill us makes us stronger." "Then you're gonna be pretty strong," snarks Canning.
- "No one disappears! They all come back, like zombies!" Eli screams at the sight of Wendy. Indeed!
- Liked the introduction of Canning's lovely wife, a new pal for Alicia. "How does a bastard like you end up with such a wonderful wife?" "Women like bastards. It's like a challenge!"


text:
The following problem in elementary geometry was proposed to me. As a mathematical analyst, I confess that I can't solve it. And I have no idea of what I could do. Here it is: pick a triangle, and draw the three mediana (i.e. the segments that join a vertex with the midpoint of the opposite side). Use the three segments to construct a second triangle, and prove that the area of this triangle is $3/4$ times the area of the original triangle.
Any help is welcome.


text:
Yeah I read this......I do believe the author has a point.....most of the league games really do lack any excitement because the groups are so big and more than half of them will go through
And smalishah's avatar is the most classy one by far Jan certainly echoes the sentiments of CW
Yeah we don't crap in the first world; most of us would actually have no idea what that was emanating from Ajmal's backside. Why isn't it roses and rainbows like what happens here? PEWS's retort to Ganeshran on Daemon's picture depicting Ajmal's excreta
I like that we have quarterfinals, so I can't make an unbiased comment on this. I do think World Cups could be scheduled better with 2 concurrent matches every day in the league phase, which the terms of TV rights sale by the ICC don't seem to allow for. The '96 WC was the first one I followed with any seriousness, and part of the festive charm was the concept of being able to switch over to watching another match if one wasn't interesting enough.
Last edited by G.I.Joe; 19-01-2011 at 11:53 AM.
'You will look very silly said Mr Salteena with a dry laugh.
Well so will you said Ethel in a snappy tone and she ran out of the room with a very superier run throwing out her legs behind and her arms swinging in rithum.
Well said the owner of the house she has a most idiotick run.'
The group stages have the potential for tedium, but at least the rest of the tournament follows a knockout format, rather than the mind numbing boredom of the "Super Eights".
Plus, I like the fact that the associates who have qualified get 6 games. Makes the competition far more worthwhile for them, and gets their players a bit of exposure.
Cricket Web's current Premier League Tipping Champion
- As featured in The Independent.
"Theres only one head bigger than Geoffrey Boycotts and thats Birkenhead." -FS Trueman
About the league stages being long, I do not care as I think that gives slow starters like India a chance to play themselves in. Wouldn't want a cold start meaning the end of the world cup.
Hope it'll be a better tournament than 2007 but if it is I think it'll be in spite of the format rather than because of it.
I love cricket, holding it close as I do to my bossom.
However, having been through the schedule, I will only be watching 14 of the 42 pool games.
It's meant to be cricket's showpiece, but only one-third of the games are worth a look.
- Winner of the 2011 and 2012 CricketWeb AFL tipping competition
- Winner of the 2011, 2012 and 2013 CricketWeb NRL tipping competition
marc71178 - President and founding member of AAAS - we don't only appreciate when he does well, but also when he's not quite so good!
Anyone want to join the Society?
Beware the evils of Kit-Kats - they're immoral apparently.
How many more matches are played in this world cup as compared to previous ones?
The Super six would have been better for my liking,but then the groups would have to be shortened and there would be more room for one bad game and your out.
There are currently 1 users browsing this thread. (0 members and 1 guests)


text:
ST. PAUL, Minn. (AP) — A quarter of the Minnesota Legislature has submitted economic disclosure statements that offer the public few or no details about the source of their outside income.
The forms are intended to offer hints of potential conflicts of interest when legislators craft or vote on bills. All 201 legislators and key officials in the executive branch are required to periodically update their forms.
Minnesota Public Radio News analyzed the forms for a story Monday. It identified lawmakers who call themselves consultants but refuse to say who pays them. Same goes for attorneys who won't divulge client lists, arguing their professional codes of conduct bar it.
Minnesota Campaign Finance and Public Disclosure Board executive director Gary Goldsmith says the only way to get more details is to change the law. Some lawmakers say they'll push for that in the session that begins Tuesday.
(© Copyright 2012 The Associated Press. All Rights Reserved. This material may not be published, broadcast, rewritten or redistributed.)
You must log in to post a comment.


text:
Got a few questions that I can't see answered elsewhere or in the readme file:
What is the path for script - should it be the full file name or the directory, eg ending ...cgi-bin/subscriber.cgi ? or just .../cgi-bin/
Any tips about what sort of things can go in the header and footer variables? Eg. Can I add text in here about going to the website to download an html version of an email in the header, or put how to unsubscribe in the footer so it's there on every email?
If I want to change anything later should I reload firstrun.cgi and reset the variables?
If I want to set up a second newsletter on the same site, can I put the files in another directory and they wil act independently?


text:
"A Nationalist Party"Comments
Michael Savage is thinking just as hard as he can:
"We need a nationalist party in the United States of America," said Savage on Aaron Klein's WABC radio show.
"You have the rudiments of a new party in this country called a Tea Party. They need to restructure their party. They need a charismatic leader, which they don't have," he said. "When you say Tea Party no one knows who the leader is because there is no leader. No man has stepped forward who can lead that party."
Savage is the third-most widely heard radio talker in the country, and a leading voice among conservatives seeking an alternative to the Beltway Republican Party.
"The Tea Party is the rudiment of the new nationalist party," he said. "Somebody has to bring them all together, unite them like King David did the ancient tribes of Israel. And there is no King David out there. Who's the King David? Tell me who is going to do it?"
Sounds fabulous. If it helps make this happen, I'm prepared to take the lead in repudiating every LGM post pointing out that 3rd parties in the American political context are suicidal. Also, RAND 2016!


text: The luscious Lizzy London got her start at the ripe age of nineteen, as revenge on her ex-boyfriend. With her all natural 34D tits, the fans came, and came quickly. Getting her start in 2011, she's now on her way to becoming one of Brazzers' hottest new starlets. Miss London has a sweet, honest, American-girl feel to her. But when you get her in the sack, the sex comes as hard and fast as she likes her music. Nothing is quite as fun as a good girl with a dirty edge, and she has it in spades. An Honor Roll student, she means to be branching off into Research Psychology someday, before spending her down time in Bali. Until then, be sure to keep your eye on this Cali-babe. We bet her ex is.


text:
Getty Images
The Jaguars needed a major upgrade in the secondary, and drafted to fill that need.
Tuesday, they signed a pair of them, announcing deals for second-round safety Jonathan Cyprien and third-round cornerback Dwayne Gratz.
The team tweeted out photos of the players signing their contracts, and Cyprien in particular seemed excited about his.
Early returns out of minicamps and OTAs were positive for both of them, and they should end up starting for the Jaguars this year.


text:
Here is Danika and her friend all dressed up in their princess outfits! Aren't they adorable?
Here is a video of our Princess Party!
We all had a blast and it was such a special time for us Moms to spend with our daughters. I would highly recommend doing your own Princess Party with your daughters! You can buy the Princess Party To Go products right on their site. They have a large variety of packages to choose from and have products that include boys in the fun too. All of the products were great quality and super adorable!
Win! My Princess Party To Go is giving one very lucky reader a Tutus and Tiaras Party Package pictured above. It is the same package we reviewed and enough for 4 princesses! RV $59.99
This giveaway has ended. Congrats to the winner:
Comment #269
Jeanette Huston


text:
Facial Massage: The Definitive Collection Dvd
Facial Massage: The Definitive Collection DVD
Aesthetic VideoSource presents the definitive collection of the best facial massages featured in our instructional facial and massage videos. Four renowned experts bring their own distinctive facial massages to their treatments, including European facials, stone massage, chair massage, and lymphatic drainage massage. CIDESCO diplomat, Rita Page, demonstrated a detailed cleansing massage. Meade Steadman, LMT, demonstrates three facial massages: one incorporating hot and cold stones to help stimulate circulation and relax musculature, one showing how to restore natural beauty from the inside-out by following the musculature and vascular system, and a facial massage in the chair. Eva Mileski, aesthetician and LMT, walks you through an extensive facial massage that is part of her facials. Jennifer Bryant, LMT, instructs how to stimulate lymphatic drainage on the face using massage techniques (1 hour and 23 minutes).
Sort By:


text:
MWC 15 Special
is a very special day for me because since today, all four German mobile
operators are offering flat Internet access for their UMTS and HSDPA networks. I
cannot believe that we finally reached this - after years of waiting. When I
bought my first Windows CE PDA back in 1997, one reason I bought it was the
possibility to access my E-Mails, and maybe the Internet wireless, from my PDA
through my IrDA connected mobile phone. At these early days of wireless
Internet, we used Circuit Switched Connections with an amazing fast up- and
downlink of 9.6 Kbps and the use was charged per minute - at a time you better
didn't staid connected too long!
Now, 11 years later, we have UMTS and HSDPA in place which offers downlinks
up to 7.2 Mbps and uplinks up to 384 Kbps with HSUPA just around the corner
which will offers uplinks up to 2 Mbps. And while some carriers already offered
flat Internet access (E-Plus was the first in Germany), not all operators
offered it so far but today, O2 Germany followed T-Mobile and Vodafone by adding
a fair-use flat plan as well. While E-Plus is still the only one of the four
carriers which offers a payable and real flat Internet access (25 Euro per
month), E-Plus doesn't have HSDPA (not to talk about HSUPA) launched yet but
only offers UMTS. T-Mobile, Vodafone and O2 are offering HSDPA and while
T-Mobile finalized its EDGE roll-out already, the two others are currently
rolling-out EDGE as well.
Okay, I have to admit that I'm biased in terms of O2 since I was working for its
forerunner for a couple of years and therefore, O2 is the carrier of my choice.
So far, they only offered a 5 GB pack for 25 Euro and if you came over the 5 GB,
you was again charged per KB. Since today, O2 Germany is also offering a 10 GB
fair-use Internet flat which gets a bandwidth throttling, back to GPRS for the
rest of the month, if you reach the 10 GB limit. Not yet the optimum, it's
better then nothing and a fair deal for both sides. As a customer, you will stay
connected, without paying anything in addition and as a carrier, you prevent
But there's another reason for me to use O2 Germany's flat offer now; it's
the reason that the smallest (and youngest) carrier offers a product called "Multicard"
which means you get up to 3 SIM cards and while only one SIM can used for voice,
O2 allows to use all 3 SIM cards for data. At the end it means you can have a
smartphone, a let's say UMPC and a Notebooks connected to HSDPA at the same
time. That's convenient and one reason for me why I staid with O2. I enjoy their
Multicard product and the fact that you are allowed to use all 3 SIM cards in
parallel for mobile data. For me it means that 3 devices (in this case my
Windows Mobile Mobile smartphone, my UMPC and my Tablet PC) will be able to get
Internet access, whenever and wherever I need it, without switching the SIM
cards or disabling one of the devices.
I couldn't imagine this, 11 years ago - that there would come a time where we
are talking about Mbps instead of Kbps and flat fees instead of minute charges.
Bright new wireless Internet world.
Cheers ~ Arne
Related Articles THOUGHT:
No items available


text:
In an IaaS, PaaS or SaaS environment that isn't built with the proper security, a malicious insider such as a system administrator can gain access to sensitive information, according to the report.
Systems that depend solely on the cloud service provider for security are at great risk, the CSA said. "Even if encryption is implemented, if the keys are not kept with the customer, and only available at data-usage time, then the system is still vulnerable to malicious insider attack," the CSA said in its report.


text:
Unique Pens
Sort By:
Unique pens are cool tools to connect with people who are young at heart and spirit. These distinctive items aren't just great stress busters, they also convey your brand message in a light-hearted way by imprinting your logo on these fun products. Prospective customers will also react more positively if your message is presented in this innovative manner, and they will enjoy writing with your functional and useful writing instruments. Set your brand apart from the ordinary with these unforgettable pen styles featuring fun bobblehead characters on their ends, or in the case of one particular writing utensil in this category, a solvable puzzle! Classic yet innovative, no matter what industry your organization is a part of, your clients and employees will take comfort in knowing that you not only have a serious side, but emphasize humor as one of your core values, as demonstrated by the unique pen that you have given them.


text:
Celebrating illustration, design, cartoon and comic art of the mid-20th century.
Friday, July 14, 2006
"I work for a group of artists."
"By the early 60's, an era was drawing to a close. 'Basically,' says [Cooper artist] Murry Tinkelman, "I think the boy-girl business that was the heart and soul of the studio, was becoming obsolete. And the nature of the studio business was becoming obsolete: the idea of three floors in some of the most expensive real estate in the world was just too much.'
The studio closed its doors in the mid-60's, after which Cooper started a smaller operation. He made attempts at using his former artist, such as Bob Jones... but as Jones puts it, 'Nothing ever materialized.' Murray Tinkelman's last memory of Charles Cooper was 'seeing him in a one-room office, thinking how sad it was that such an innovative and powerful force in the business ended up that way.'
Charles E. Cooper died in 1974, at age 73. Bob Jones says, 'I think Chuck died from having nothing to do.'
According to Joe Bowler, 'The most important thing you could write about Chuck Cooper is what I heard when I first started out. Someone asked Chuck what he did, and he said, 'I work for a group of artists.' At that time, every other studio head, when asked what they did, said, 'I have a bunch of artists working for me' Chuck always had the idea that the artist was number one. It was what made him unique in the business.'"
*You can read the entire article by author Neil Shapiro in the 16th issue of Illustration magazine.
1 comment:
Subscribe to: Post Comments (Atom)


text:
I'm standing in Treasure Chest, a watering hole deep in the bowels of Shibuya. An old-school Jamaican-style sound system blasts cumbia and rock-en-Español while patrons trickle in, buy drinks and start shaking handmade rattles to the beat. In an hour or so, the band EKD (above) will set up behind the bar and play a free set of Latin-inflected surf-rock. They are relatively unknown so far, but if Japanese tastes continue on the same trajectory, EKD will be playing much larger venues soon enough.
Whether it be salsa, flamenco, samba or mambo, the Latin musical spectrum has a long and storied history in Japan, but in recent years more eclectic and subversive sounds have gained traction with the twentysomething set. These bands frequently mix traditional musical elements with punk ethos or political predilections. Sometimes both.
Read the full piece at Japan Pulse.


text:
[First published October 17, 2005] A study has just been published by the Human Security Center, War and Peace In The 21St Century (pdf here). I recommend reading it for the comprehensiveness of its data and analysis.
The reports conclusions are:
Over the past dozen years, the global security climate has changed in dramatic, positive, but largely unheralded ways. Civil wars, genocides and international crises have all declined sharply. International wars, now only a small minority of all conflicts, have been in steady decline for a much longer period, as have military coups and the average number of people killed per conflict per year. The wars that dominated the headlines of the 1990s were real—and brutal—enough. But the global media have largely ignored the 100-odd conflicts that have quietly ended since 1988. During this period, more wars stopped than started. The extent of the change in global security following the end of the Cold War has been remarkable:
°The number of armed conflicts around the world has declined by more than 40% since the early 1990s. [See the igure below from the report]
°Between 1991 (the high point for the post–World War II period) and 2004, 28 armed struggles for self-determination started or restarted, while 43 were contained or ended. There were just 25 armed secessionist conflicts under way in 2004, the lowest number since 1976.
°Notwithstanding the horrors of Rwanda, Srebrenica and elsewhere, the number of genocides and politicides plummeted by 80% between the 1988 high point and 2001.
°International crises, often harbingers of war, declined by more than 70% between 1981 and 2001.
°The dollar value of major international arms transfers fell by 33% between 1990 and 2003 (Figure 1.10). Global military expenditure and troop numbers declined sharply in the 1990s as well.
°The number of refugees dropped by some 45% between 1992 and 2003, as more and more wars came to an end.
°Five out of six regions in the developing world saw a net decrease in core human rights abuses between 1994 and 2003.
The positive changes noted above date from the end of the Cold War. Other changes can be traced back to the 1950s:
°The average number of battle-deaths per conflict per year—the best measure of the deadliness of warfare— has been falling dramatically but unevenly since the 1950s. In 1950, for example, the average armed conflict killed 38,000 people; in 2002 the figure was 600, a 98% decline.
°The period since the end of World War II is the longest interval of uninterrupted peace between the major powers in hundreds of years.
°The number of actual and attempted military coups has been declining for more than 40 years. In 1963 there were 25 coups and attempted coups around the world, the highest number in the post–World War II period. In 2004 there were only 10 coup attempts—a 60% decline. All of them failed.
How do they explain this great decrease in warfare and its severity?
A dramatic increase in the number of democracies. In 1946, there were 20 democracies in the world; in 2005, there were 88.10 Many scholars argue that this trend has reduced the likelihood of international war because democratic states almost never fight each other.
An increase in economic interdependence . Greater global economic interdependence has increased the costs of cross-border aggression while reducing its benefits.
A decline in the economic utility of war . The most effective path to prosperity in modern economies is through increasing productivity and international trade, not through seizing land and raw materials. In addition, the existence of an open global trading regime means it is nearly always cheaper to buy resources from overseas than to use force to acquire them.
Growth in international institutions . The greatly increased involvement by governments in international institutions can help reduce the incidence of conflict. Such institutions play an important direct role in building global norms that encourage the peaceful settlement of disputes. They can also benefit security indirectly by helping promote democratisation and interdependence.
There you have it. The first empirical anslysis to note the sharp decrease in violence other than my own, and to attribute it to the democractic peace. My only disagreement is that I would consider the democracies achieving a critical mass to be the major cause, and the others to be minor. The other causes existed before the decrease in violence, and it is only that growth in democracies that is the factor that significantly changed — that along with the end of the Cold War, which be it recalled, was predicted at the time to lead to a leap in violence, since the Soviet Union (having disappeared) and U.S. were no longer concerned to cap any violence that might draw them into a major war with each other.
Link of Day
"Final Report of the Commission on Human Security" A UN Report different from the above
The report proposes a new security framework that centers directly and specifically on people. Human security focuses on shielding people from critical and pervasive threats and empowering them to take charge of their lives. It demands creating genuine opportunities for people to live in safety and dignity and earn their livelihood.
RJR: Note this policy conclusion: "Clarifying the need for a global human identity while respecting the freedom of individuals to have diverse identities and affiliations."
Links I Must Share
A controversial new work says French school textbooks are just plain anti-American.
RJR: Is there any doubt?
"Rice: No presidential ambitions"
RJR: This is politicospeech for, "I'll run if people show enough interest."
The cultural left has a new tool for enforcing political conformity in schools of education. It is called dispositions theory, and it was set forth five years ago by the National Council for Accreditation of Teacher Education: Future teachers should be judged by their "knowledge, skills, and dispositions."
RJR: By dispositions, or what in my academic experience was called "political sensitivety," which was used to evaluate faculty and graduate student applicants, means bowing before the left's holy icons. Five degrees is no good. It has to be a full forty-five degrees.
The chief of mission for Sudan in Washington, Ambassador Khidir Haroun Ahmed, assures the world in a Sept. 28 Op-Ed in The Washington Times that since "Every reliable report coming our of Darfur indicates that the situation has stabilized and the mortality rate has returned to pre-war levels," at last there is "the beginning of a new era in Sudan." Despite this exercise in public relations, the facts on the ground in Darfur are savagely different.
RJR: This is the UN, you know. It could not be otherwise.


text:
¡¡¡¡BEIJING, Oct. 21 (Xinhua) -- China attaches great importance to educational development of the whole nation and lifelong learning, said Vice Premier Liu Yandong here on Monday.
¡¡¡¡Liu made the remarks at the opening ceremony of the International Conference on Learning Cities, organized by the United Nations Educational, Scientific and Cultural Organization (UNESCO) from Oct. 21 to 23 in Beijing.
¡¡¡¡"In the 21st century, the country emphasizes lifelong learning, with the formation of a learning society as an important objective in the construction of a moderately prosperous society," Liu said.
¡¡¡¡Based on the access to Internet by a population of 570 million, as Liu put it, one sixth of Chinese cities have proposed the construction of learning cities and more than 400 cities have organized reading festivals, reading months and other activities.
¡¡¡¡"We will emphasize the link between construction of learning cities and new urbanization," Liu said.
¡¡¡¡Vice Minister of Education Lu Xin said China should strengthen international cooperation and promote exchanges between learning cities.
¡¡¡¡In the 1960s, UNESCO proposed the concept of "lifelong learning", and emphasized lifelong education as the cornerstone of a learning society.
¡¡¡¡Irina Bokova, Director-General of UNESCO, also attended the opening ceremony and delivered a speech.
¡¡¡¡More than 500 representatives from 102 member states of UNESCO participated in the conference.


text:
The fastest and easiest way to get what you want!
July 13, 2020
Sorry...No results found. Please try another word.
Siren Ringtones
Police Siren
Siren WI
Warning Siren
Siren Sound
Paging Speaker
Siren MP3 Player
Siren Hotel
Siren Speaker
Emergency Vehicle
Alarm Siren
Emergency Siren
Emergency Light
Light Bar
Siren MP3
©2020 sirens.com


text:
End User Management Portfolio
|1. A group or collection of End User Items, including any related data and information artifacts, that all combine to form a specific context of relevance which is related to the Discipline known as End User Management.
Read More
|1) The Semantic Root Noun for this term is: End User
2) Semantically Related Terms: The "End User Management Glossary"
3) The End User Management Home Page covers much more about other related terms and concepts associated with this term or phrase.


text:
Germany has been a democratic parliamentary federal republic since 1949. Following reunification in 1990 it now consists of 16 federal states. The Federal President is the head of state and the government is led by the Federal Chancellor.
Germany covers an area of 357,022 square kilometres. It is 876 kilometres from its northernmost tip to the southernmost point as the crow flies, and 640 kilometres from east to west.
The capital Berlin is also Germany's largest city, with a population of 3.4 million. Other cities with more than one million residents are Hamburg (1.8 million) and Munich (1.3 million). Cologne is just below the one-million mark. Frankfurt am Main (pop. 662,000) is a centre of international finance.
Germany is a country rich in natural beauty. Between the North Sea and Baltic coasts in the north and the peaks of the Alps in the south lie extremely diverse landscapes, with everything from wide expanses of river and lakeland scenery, hilly uplands and densely wooded regions to agricultural plains and industrial conurbations. The Zugspitze is the highest mountain in Germany at 2,963 metres. Germany's longest river is the Rhine, which flows through the country for a total of 865 kilometres. Germany has 16 national parks, 104 nature reserves and 15 biosphere reserves.
Germany has the largest population of any European country, around 82 million – a density of 230 people per square kilometre.
Today, life in Germany is subject to a great diversity of cultural influences. It can generally be described as modern and cosmopolitan. The people of Germany love nothing more than getting together and celebrating, in traditional style during carnival season, at wine festivals, at the Oktoberfest and other beer festivals, or during music festivals from classical to rock – all helped along by great food and fine wines from the 13 vineyard regions.
Germany is home to great writers and famous composers. Names like Goethe and Günther Grass or Bach and Beethoven are part of a long, distinguished cultural tradition. Its legacy is the exceptional choice of culture on offer in Germany today, from ancient to ultra-modern. There are around 300 theatres, 130 professional orchestras and 630 art museums with internationally acclaimed collections. German artists also produce a large amount of creative work in the fields of film and literature.
Academic excellence and research are also firmly established in Germany. Around 370 universities and other higher education establishments are held in high regard, not least by international students.
Source: www.tatsachen-ueber-deutschland.de


text:
How long before the description below comes true?
The Royal Navy is proud of its new fleet of Type 45 destroyers.
Having initially named the first two ships HMS Daring and HMS Dauntless.
The Naming Committee has, after intensive pressure from EU headquarters in Brussels, renamed them HMS Cautious and HMS Prudence.
The next five ships are to be named
HMS Empathy,
HMS Circumspect,
HMS Nervous,
HMS Timorous
HMS Apologist.
Costing £850 million each, they meet the needs of the 21st century and comply with the very latest employment, equality, health & safety and human rights laws. The new user-friendly crow's nest comes equipped with wheelchair access.
Live ammunition has been replaced with paintballs to reduce the risk of anyone getting hurt and to cut down on the number of compensation claims.
Stress counsellors and lawyers will be on duty 24hrs a day and each ship will have its on-board industrial tribunal.
The crew will be 50/50 men and women, and balanced in accordance with the latest Home Office directives on race, gender, sexuality and disability.
Sailors will only have to work a maximum of 37hrs per week in line with Brussels Health & Safety rules, even in wartime!
All the vessels will come equipped with a maternity ward and nursery, situated on the same deck as the Gay Disco.
Tobacco will be banned throughout the ship, but cannabis will be allowed in.
Also out has gone the occasional rum ration which is to be replaced by sparkling water.*
Condoms can be obtained from the Boatswain in a variety of flavours.
Saluting officers has been abolished because it is deemed elitist and is to be replaced by the more informal "Hello Sailor".
All information on notices boards will be printed in 37 different languages and Braille.
Crew members will now no longer be required to ask permission to grow beards or moustaches - this applies equally to women crew members.
The MoD is working on a new "non-specific" flag because the White Ensign is considered to be offensive to minorities.
The Union Flag has already been discarded.
The newly re-named HMS Cautious is due to be commissioned soon in a ceremony conducted by Captain Hook from the Finsbury Park Mosque who will break a petrol bomb over the hull.
She will gently slide into the water as the Royal Marines Band plays "In the Navy" by the Village People.
Her first deployment will be to escort boat loads of illegal
immigrants across the channel to ports on England's south coast.
The Prime Minister said, "While these ships reflect the very latest in modern thinking, they are also capable of being up-graded to comply with any new legislation coming out of Brussels."
His final words were, "Britannia waives the rules.
*The start of the slippery slope.


text:
Iz guys open by using Seventy eight
ballots upon weed shopsGlacier Issue Highway trailheads49ersRaidersGiantsA'sWarriorsSharksQuake sNFLMLBNBANHLCollegePrepsGolfOutdoorsOtherOn TVTicketsShopVideoMoviesMusic NightlifePerformanceArtEventsBooksTV RadioHoroscopeComicsGamesThings To DoHome GardenStyleOutdoorsSki SnowHealthGreenLGBTHouzzDatingMomsPetsSponsored ContentThe only two combined intended for 44 items because Contains tipped off of the 201213 season with a 7865 achievement through California State Bakersfield in Sunday day for Haas Pavilion, in the operation outrunning your pandora Roadrunners.
Crabbe received Twenty-seven elements 20 in the first fifty percent of on 11for17 shooting, plus Cobbs was initially 8for11 regarding 21 items.
"I'm convinced us plus Bieber don't have a challenge agreeing to which part,Inch Crabbe explained. "We get (some other) males who definitely are competent at rating. They want the ability.In .
Cobbs, who actually played either guard places, reported he's got pumped up about the season and what this individual louis vuitton outlet online in addition to Crabbe will be able to carry out, specified the amount of example of the program.
"I enjoy using this kind of man,Inch Cobbs explained. "We nourish away from one. We have been lucky with natural talent. I will be ecstatic to experiment with using . Allen Crabbe.In .
Mind trainer knows he could depend on the above.
"They're two established gamers,In . Montgomery said. "I have no idea after we should expect Allen to get that sort of half continuously although he's unquestionably competent.Inch
Any fastbreak layup by means of Cobbs created a credit score 5333 using 16:Walk remaining. Memories later on, christian louboutin shoes forward Mark Kravish obtained using a pleasantly pleasing onehanded layin down a strong alleyoop offer your separate out of Crabbe with regard to 5735.
Certainly, the actual Offers stood a very little interesting in their first appearance.
Not pleasurable had been your rebounding information in which revealed Cal Point out Bakersfield has a 1913 edge over the particular bothersome tumbler. That's the first thing Montgomery brought up christian louboutin shoes on sale so that you can his particular christian louboutin shoes australia gamers next.
"We have got to mysteriously obtain that shored way up," the instructor stated. "We have any large individuals exactly who just simply stay tiffany and co sydney australia and you should not behave. We've got to wardrobe settled. Which is a anxiety."
Crabbe were built with a discourage late in the initial 50 % when he decreased inside a tangle christian louboutin outlet online discount with systems in the road and harmed his / her kept foot. He or she limped journey courtroom along with Just one:30 other designed for procedure however could come back during the loved one.
Beginner safeguard proved finest amongst Cal's stocks as they contributed some points, 5 various gets back together with a few will help within Twenty three units..


text:
Catfish and taste: Imagine a big swimming tongue; in a way, that's what a catfish is. The smooth scaleless skin of this fish is completely covered with taste buds – 250,000 cover a 6-inch-long catfish. (Humans, by contrast, have only 10,000!)
Most fish that have taste buds have only a few located in or near the mouth, but a catfish has dense concentrations of them in its mouth, as well as on its fins, back, belly, sides, and tail. Those covering the body detect chemicals to help locate food, even in dark, muddy water. The highest concentrations on the outside of the body are on its long, tapered whiskers, or barbels, which it uses as feelers to cautiously sample food before eating.


text:
Uganda: UPC Calls for Economic Reforms (05.04.2017)
Share this:
Posted in Africa, Business, Civil Service, Development, Economic Measures, Economy, Ethics, Governance, Government, Law, Leadership, Politics, Tax, Trade, Transparency and tagged 10th Parliament, 10th Parliament of Uganda, Adjumani, Amelia Kyambadde, Amuru, Annual Core Inflation, Apac, B-Rated Country, B1 Country, B2 Country, Bank of Uganda, Bishop Jamari Luwum, BOU, Cattle Disease, CBR, Central Bank, Consumer Price Index, Core Inflation, CPI, Crops Inflation, Danton Nlwampagra, Ddumba Ssentamu, Deadly Cattle Diseace, Debt Affordability, Debt Burden, Debt Levels, Democratic Gains, Denis Mkesru, Domestic Demand, Dr. Michael Bukenya, Dr. Olara Otunnu, East Arica, Economic Activity, Economic Growth, Edward Kale Kayihura, Electoral Commission, Emerging Market Economies, Emmanuel Kato, Emmanuel Tumusiime-Mutebile, Eng. Dr. Charles Wana-Etyem, Exchange Rate Depreciation, External Debt, External Economic Enviroment, External Weakness, Food Crop Prices, Foot and Mouth Disease, FY 2015/2016, Gen Salim Saleh, Gen. Kale Kayihura, Global Economic Conditions, Global Economic Outlook, GoU, Government of Uganda, Gulu, H. E. Yoweri Kaguta Museveni, H.E. Yoweri Museveni, Highenyi Kemba, Hon. Amelia Kyambadde, Hon. Janet Museveni, Hon. Matia Kasaija, Hon. Onesmus Twinamastiko, IGP Gen Kale Kayihura, IGP Kale Kayihura, Import Prices, Incitment to Violence, Independent Electoral Commission, Indirectly, Inflation, Inter Party Organisation for Dialogue, Inter Party Organisation for Dialogue Council, International Economic Activity, Ipod, Janet Museveni, Jovan Mulumba, Julius Ochen, Kainerugba Muhoozi, Kale Kayihura, Kampala, Lango, LC1, LC1 Election, LC2, LC2 Election, Lira, Local Government, Louis Teresphorus Kakinda, Lt. Gen. Yoweri Kaguta Museveni., Maj.Gen. Muhoozi Keinerugaba, Makerere, Makerere University, Makerere University Council, Makerere University Students Guild, Matia Kasaija, Matia Kasija, Michael Osinde Orach, Ministry of Education and Sports, Ministry of Finance Economic Planning and Development, Ministry of Gender Labour and Social Development, MoFED, Monetary Policy Statement, Moody's, Moses Kemba Higheny, MPS, MUASA, Muhammad Kiggundu-Musoke, MUK Students Guild, National Resistance Movement, New Vision, NRM, NRM Regime, NRM Village Program, Nwoya, Okello Lucima, Olara A. Otunnu, Olara Otunnu, Onesmus Twinamastiko, PAC, Parliament of Uganda, President Museveni, PriceWaterhouseCoopers, PricewaterhouseCoopers limited, Prof Emmanuel Tumusiime-Mutebile, Prof. John Ddumba-Ssentamu, Public Accounts Committee, Public Infrastructure, PWC, Republic of Uganda, Rev. Yokoyardi Opolo Apelo, Rising Debt Levels, Roy Ssembogga, Salim Selah, School Fees, SGR, Standard Gauge Railway, Standard Gauge Railway Development, Suspend, Uganda, Uganda Parliament, Uganda Peoples Congress, Uganda Police Force, Uganda Revenue Authority, Ugandan Government, UOC, UPC, UPC Government, UPF, URA, VC Ddumba Ssentamu, YEA, Youth Employment Scheme, Youth Livelihood Programme, Yoweri Kaguta Museveni, Yoweri Museveni, Yumbe | Leave a comment


text:
Wiz Khalifa Day Declared In Pittsburgh!
"Hometown rapper Wiz Khalifa, joined by his family and fiancee Amber Rose, receives an official proclamation from the Pittsburgh City Council for promoting the city through his music."
Please click the "Report" button below if the video on this page is not working properly.
Comments will only be displayed by verified emails. No Spamming or Racism.


text:
Today in What the Hell Happened To we go all the way back to the 1948-49 season to remember John Bach. Yep, that same John Bach who patrolled the sidelines under Whistling Phil during his Chicago days. When Bach signed a contract worth $5,000 to play for the Celtics in 1948, he figured he'd give basketball a try for a couple of years and then enter the business world. "But basketball never managed to find a way to get rid of me" Bach says.
John attended Fordham University (making him one of their more famous alumni, right there with Denzel and Smush). He'd become a naval officer in WWII, serving in Okinawa.
When he got to the Celtics, John wore #17, long before John Havlicek would wear it and be retired. It was back in the days of John Ezersky and the BAA. Bach played in 34 games that season, coming off the bench, shooting 29% from the field and 68% from the foul line. He averaged 3.5 ppg.
John would be cut the next season in Boston, losing out on the final roster spot to Joe Mullaney. John would go onto play for Hartford in the Eastern Basketball League:
We got $100 a game and usually played between 3 and 4 games a week. The competition was excellent. One team, the NY Rens, were an all-black team who could've been excellent NBA players had it not been for the league's racial discrimination.
John makes a good point about the early days of the NBA. That is, how many of those records should be taken seriously until integration took place? Part of me feels everything prior to Chuck Cooper playing for the Celtics should be thrown out the window. That includes the Flakers 1949 and 1950 titles. Seriously how does the 1949 title count towards their 16 NBA championships, when it was called the BAA?
After that season John's playing career came to and end. He was offered the head coaching job at Fordham and decided to take it. John would leave Fordham in 1967 to take an offer at Penn State, where he was offered more money to support his wife and five children. He'd remain at Penn State until 1977 when he asked for a leave of absence. All the recruiting in college had burnt him out. John had his pilot's license and began flying planes for the Piper Corporation.
That was until the Golden State Warriors general manager and legendary big-man coach Pete Newell asked Bach to become the top assistant coach in 1979.
Pete and Al (Attles, head coach) were both people I knew and respected. I had only been away from the game for a year, but I really missed coaching. Now I'd be back- and on the pro level, something I hadn't done yet. It was the challenge I was looking for.
John would get his break to become head coach for the Warriors at the start of the 1984 campaign, when Attles accepted a front office position. But those Warrior teams were putrid and John would be dismissed in 1986. He figured he'd be better served in an assistant's role rather than wait for a head-coaching vacancy to open-up, so he joined on with Whistling Phil's staff and was a part of the Bulls teams that won the titles in 1991, 92 and 93. In 1994 Bach would head to Charlotte to coach, where he'd stay for 2 years, then it was on to Detroit for 2 and Washington for 3, including coaching MJ in his final return. He was planning on retiring but was coerced back into an assistant's roll on Scott Skiles Bulls teams up until 2006.
He may have left the NBA but amazingly enough, even today, John is still involved with basketball at the age of 86! He volunteers with the sophomore basketball program at St. Ignatius High School in Chicago. He's also an avid painter, even submitting 32 of his water-colors to be put on display at the Sevan Gallery in Skokie, IL.
**1/19/16**: John has passed away at the age of 91. Everyone at CelticsLife wishes him and his family the best.
For a list of all the "What the Hell Happened To" Series please click here.
tb727 5/18/2011 09:26:00 AM Tweet Edit


text:
LWR - Leeuwarden Airport Limo & Car Service
Compare free quotes from the best LWR airport limo services.
Welcome to the most respected source for affordable ground transportation to and from Leeuwarden Airport. A few clicks and you'll receive instant price quotes for the best limo services for Leeuwarden Airport.


text:
"Building a reliable IT infrastructure is a necessary component that gives businesses specific advantages. It enables the effective introduction of new functions and services and rapid adjustments to changes in the marketplace. Thanks to the implementation of Fujitsu solutions, we have managed to update our server infrastructure and this means we can focus on IT tasks more efficiently"
Evgeniy Bonin, Chief Executive Officer, Technostroyproyekt
Technostroyproyekt, founded in 2000, first specialized in designing retail and public catering sites. Over time the company entered the market for the construction of residential housing, industrial facilities and social sites. Today, Technostroyproyekt is a mobile company that is capable of delivering a full range of services in the design of major and non-standard sites. Its main advantage over the competition lies in its highly qualified personnel and leading specialists who have been working at the company since its creation. Technostroyproyekt is well placed to provide construction services to its clients, from the exploratory study of locating sites and outline design, to high-quality fulfillment of work and the commissioning of the project.
As Technostroyproyekt has grown and developed, the need has risen to build a reliable infrastructure, capable of working without interruption and achieving increased productivity and higher profits.
The existing infrastructure based on Fujitsu equipment was built back in 2007. In 2013 a scheduled upgrade of workstations and network infrastructure was performed. As part of this project Fujitsu PRIMERGY RX300 servers, desktop solutions, Fujitsu ESPRIMO P910 workstations, E series LIFEBOOK laptop computers and Fujitsu monitors were purchased and installed.
Download the full Technostroyproyekt case study (165 KB/A4, 2 pages)
Dela med andra