public async Task init(String tag, DateTime start)
        {
            hashtag   = tag;
            startTime = start;

            twitter = new TwitterDataSource(tag, start);
            await twitter.init();

            // make sure we have a network connection and some data:
            if ((noNetwork = twitter.noNetwork) || (noData = twitter.noData))
            {
                return;
            }

            // start timer:
            timer = new TwitterTimer(start);

            // start clock display:
            dispatcherTimer          = new DispatcherTimer();
            dispatcherTimer.Tick    += dispatcherTimer_Tick;
            dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
            dispatcherTimer.Start();

            listView.ItemsSource = twitter;

            lastRefresh = DateTime.Now;
        }
        public async Task findStartID(DateTime date)
        {
            // var lowerBound = date.ToUniversalTime().Date;
            // var upperBound = lowerBound.AddDays(1);

            var upperBound = DateTime.UtcNow.Date;
            var lowerBound = upperBound.AddDays(-1);
            var dayStart   = date.ToUniversalTime().Date;

            var httpClient = new HttpClient(new HttpClientHandler
            {
                AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
            });

            // lower bound:
            var request = new HttpRequestMessage(HttpMethod.Get, String.Format(
                                                     "https://api.twitter.com/1.1/search/tweets.json?q=a&count=1&until={0:yyyy-MM-dd}&include_entities=false", lowerBound));

            request.Headers.Add("Authorization", "Bearer " + accessToken);
            HttpResponseMessage response = await httpClient.SendAsync(request);

            var json = await response.Content.ReadAsStringAsync();

            var      results      = JsonConvert.DeserializeObject <TwitterSearchResults>(json);
            var      lowerBoundID = results.statuses[0].id;
            DateTime lowerDate    = DateTime.ParseExact(results.statuses[0].created_at, "ddd MMM dd HH:mm:ss zzz yyyy", CultureInfo.InvariantCulture);

            // upper bound:
            request = new HttpRequestMessage(HttpMethod.Get, String.Format(
                                                 "https://api.twitter.com/1.1/search/tweets.json?q=a&count=1&until={0:yyyy-MM-dd}&include_entities=false", upperBound));
            request.Headers.Add("Authorization", "Bearer " + accessToken);
            response = await httpClient.SendAsync(request);

            json = await response.Content.ReadAsStringAsync();

            results = JsonConvert.DeserializeObject <TwitterSearchResults>(json);
            var      upperBoundID = results.statuses[0].id;
            DateTime upperDate    = DateTime.ParseExact(results.statuses[0].created_at, "ddd MMM dd HH:mm:ss zzz yyyy", CultureInfo.InvariantCulture);

            // calculate Tweet rate:
            long seconds = (upperDate.Ticks - lowerDate.Ticks) / 10000000;

            tweetRate = (upperBoundID - lowerBoundID) / seconds;

            // start of day:
            request = new HttpRequestMessage(HttpMethod.Get, String.Format(
                                                 "https://api.twitter.com/1.1/search/tweets.json?q=a&count=1&until={0:yyyy-MM-dd}&include_entities=false", dayStart));
            request.Headers.Add("Authorization", "Bearer " + accessToken);
            response = await httpClient.SendAsync(request);

            json = await response.Content.ReadAsStringAsync();

            results = JsonConvert.DeserializeObject <TwitterSearchResults>(json);
            var dayStartID = results.statuses[0].id;

            long offset = Convert.ToInt64(date.ToUniversalTime().TimeOfDay.TotalSeconds);

            startID = dayStartID + (offset * tweetRate);

            // start timer:
            timer = new TwitterTimer(date);
        }