text:
#pragma once

#include "map/api_mark_point.hpp"
#include "map/bookmark.hpp"
#include "map/bookmark_manager.hpp"
#include "map/city_finder.hpp"
#include "map/displacement_mode_manager.hpp"
#include "map/feature_vec_model.hpp"
#include "map/local_ads_manager.hpp"
#include "map/mwm_url.hpp"
#include "map/place_page_info.hpp"
#include "map/track.hpp"
#include "map/traffic_manager.hpp"

#include "drape_frontend/gui/skin.hpp"
#include "drape_frontend/drape_api.hpp"
#include "drape_frontend/drape_engine.hpp"
#include "drape_frontend/user_event_stream.hpp"
#include "drape_frontend/watch/frame_image.hpp"

#include "drape/oglcontextfactory.hpp"

#include "indexer/data_header.hpp"
#include "indexer/index_helpers.hpp"
#include "indexer/map_style.hpp"
#include "indexer/new_feature_categories.hpp"

#include "editor/user_stats.hpp"

#include "search/displayed_categories.hpp"
#include "search/downloader_search_callback.hpp"
#include "search/engine.hpp"
#include "search/everywhere_search_callback.hpp"
#include "search/mode.hpp"
#include "search/query_saver.hpp"
#include "search/result.hpp"
#include "search/viewport_search_callback.hpp"

#include "storage/downloading_policy.hpp"
#include "storage/storage.hpp"

#include "tracking/reporter.hpp"

#include "partners_api/booking_api.hpp"
#include "partners_api/uber_api.hpp"

#include "platform/country_defines.hpp"
#include "platform/location.hpp"
#include "platform/platform.hpp"

#include "routing/router.hpp"
#include "routing/routing_session.hpp"

#include "geometry/rect2d.hpp"
#include "geometry/screenbase.hpp"

#include "base/deferred_task.hpp"
#include "base/macros.hpp"
#include "base/strings_bundle.hpp"
#include "base/thread_checker.hpp"

#include "std/list.hpp"
#include "std/target_os.hpp"
#include "std/unique_ptr.hpp"
#include "std/vector.hpp"
#include "std/weak_ptr.hpp"

namespace osm
{
class EditableMapObject;
}

namespace search
{
struct EverywhereSearchParams;
struct ViewportSearchParams;
}

namespace storage
{
class CountryInfoGetter;
struct DownloaderSearchParams;
}

namespace routing { namespace turns{ class Settings; } }

namespace df
{
  namespace watch
  {
    class CPUDrawer;
  }
}

namespace platform
{
class NetworkPolicy;
}

namespace ads
{
class Engine;
}

/// Uncomment line to make fixed position settings and
/// build version for screenshots.
//#define FIXED_LOCATION

struct FrameworkParams
{
  bool m_disableLocalAds = false;
};

class Framework : public search::ViewportSearchCallback::Delegate,
                  public search::DownloaderSearchCallback::Delegate,
                  public search::EverywhereSearchCallback::Delegate
{
  DISALLOW_COPY(Framework);

#ifdef FIXED_LOCATION
  class FixedPosition
  {
    pair<double, double> m_latlon;
    double m_dirFromNorth;
    bool m_fixedLatLon, m_fixedDir;

  public:
    FixedPosition();

    void GetLat(double & l) const { if (m_fixedLatLon) l = m_latlon.first; }
    void GetLon(double & l) const { if (m_fixedLatLon) l = m_latlon.second; }

    void GetNorth(double & n) const { if (m_fixedDir) n = m_dirFromNorth; }
    bool HasNorth() const { return m_fixedDir; }

  } m_fixedPos;
#endif

protected:
  using TDrapeFunction = function<void (df::DrapeEngine *)>;

  StringsBundle m_stringsBundle;

  model::FeaturesFetcher m_model;

  // The order matters here: DisplayedCategories may be used only
  // after classificator is loaded by |m_model|.
  unique_ptr<search::DisplayedCategories> m_displayedCategories;

  // The order matters here: storage::CountryInfoGetter and
  // m_model::FeaturesFetcher must be initialized before
  // search::Engine and, therefore, destroyed after search::Engine.
  unique_ptr<storage::CountryInfoGetter> m_infoGetter;

  unique_ptr<search::Engine> m_searchEngine;

  search::QuerySaver m_searchQuerySaver;

  ScreenBase m_currentModelView;
  m2::RectD m_visibleViewport;

  using TViewportChanged = df::DrapeEngine::TModelViewListenerFn;
  TViewportChanged m_viewportChanged;

  routing::RoutingSession m_routingSession;

  drape_ptr<df::DrapeEngine> m_drapeEngine;
  drape_ptr<df::watch::CPUDrawer> m_cpuDrawer;

  double m_startForegroundTime;
  double m_startBackgroundTime;

  StorageDownloadingPolicy m_storageDownloadingPolicy;
  storage::Storage m_storage;

  location::TMyPositionModeChanged m_myPositionListener;

  BookmarkManager m_bmManager;

  unique_ptr<booking::Api> m_bookingApi = make_unique<booking::Api>();
  unique_ptr<uber::Api> m_uberApi = make_unique<uber::Api>();

  df::DrapeApi m_drapeApi;

  bool m_isRenderingEnabled;
  tracking::Reporter m_trackingReporter;

  TrafficManager m_trafficManager;

  LocalAdsManager m_localAdsManager;

  /// This function will be called by m_storage when latest local files
  /// is downloaded.
  void OnCountryFileDownloaded(storage::TCountryId const & countryId, storage::Storage::TLocalFilePtr const localFile);

  /// This function will be called by m_storage before latest local files
  /// is deleted.
  bool OnCountryFileDelete(storage::TCountryId const & countryId, storage::Storage::TLocalFilePtr const localFile);

  /// This function is called by m_model when the map file is deregistered.
  void OnMapDeregistered(platform::LocalCountryFile const & localFile);

  void ClearAllCaches();

  void StopLocationFollow();

  void OnViewportChanged(ScreenBase const & screen);

  void CallDrapeFunction(TDrapeFunction const & fn) const;

  void InitTransliteration();

public:
  Framework(FrameworkParams const & params = {});
  virtual ~Framework();

  /// Get access to booking api helpers
  booking::Api * GetBookingApi(platform::NetworkPolicy const & policy);
  booking::Api const * GetBookingApi(platform::NetworkPolicy const & policy) const;
  uber::Api * GetUberApi(platform::NetworkPolicy const & policy);

  df::DrapeApi & GetDrapeApi() { return m_drapeApi; }

  /// Migrate to new version of very different data.
  bool IsEnoughSpaceForMigrate() const;
  storage::TCountryId PreMigrate(ms::LatLon const & position, storage::Storage::TChangeCountryFunction const & change,
                  storage::Storage::TProgressFunction const & progress);
  void Migrate(bool keepDownloaded = true);

  void InitWatchFrameRenderer(float visualScale);

  /// @param center - map center in Mercator
  /// @param zoomModifier - result zoom calculate like "base zoom" + zoomModifier
  ///                       if we are have search result "base zoom" calculate that my position and search result
  ///                       will be see with some bottom clamp.
  ///                       if we are't have search result "base zoom" == scales::GetUpperComfortScale() - 1
  /// @param pxWidth - result image width.
  ///                  It must be equal render buffer width. For retina it's equal 2.0 * displayWidth
  /// @param pxHeight - result image height.
  ///                   It must be equal render buffer height. For retina it's equal 2.0 * displayHeight
  /// @param symbols - configuration for symbols on the frame
  /// @param image [out] - result image
  void DrawWatchFrame(m2::PointD const & center, int zoomModifier,
                      uint32_t pxWidth, uint32_t pxHeight,
                      df::watch::FrameSymbols const & symbols,
                      df::watch::FrameImage & image);
  void ReleaseWatchFrameRenderer();
  bool IsWatchFrameRendererInited() const;

  /// \returns true if there're unsaved changes in map with |countryId| and false otherwise.
  /// \note It works for group and leaf node.
  bool HasUnsavedEdits(storage::TCountryId const & countryId);

  /// Registers all local map files in internal indexes.
  void RegisterAllMaps();

  /// Deregisters all registered map files.
  void DeregisterAllMaps();

  /// Registers a local map file in internal indexes.
  pair<MwmSet::MwmId, MwmSet::RegResult> RegisterMap(
      platform::LocalCountryFile const & localFile);
  //@}

  /// Shows group or leaf mwm on the map.
  void ShowNode(storage::TCountryId const & countryId);

  /// Checks, whether the country which contains the specified point is loaded.
  bool IsCountryLoaded(m2::PointD const & pt) const;
  /// Checks, whether the country is loaded.
  bool IsCountryLoadedByName(string const & name) const;
  //@}

  void InvalidateRect(m2::RectD const & rect);

  /// @name Get any country info by point.
  //@{
  storage::TCountryId GetCountryIndex(m2::PointD const & pt) const;

  string GetCountryName(m2::PointD const & pt) const;
  //@}

  enum class DoAfterUpdate
  {
    Nothing,
    AutoupdateMaps,
    AskForUpdateMaps,
    Migrate
  };

  DoAfterUpdate ToDoAfterUpdate() const;

  storage::Storage & GetStorage() { return m_storage; }
  storage::Storage const & GetStorage() const { return m_storage; }
  search::DisplayedCategories const & GetDisplayedCategories() const
  {
    return *m_displayedCategories;
  }
  storage::CountryInfoGetter & GetCountryInfoGetter() { return *m_infoGetter; }
  StorageDownloadingPolicy & GetDownloadingPolicy() { return m_storageDownloadingPolicy; }

  Index const & GetIndex() const { return m_model.GetIndex(); }

  search::Engine & GetSearchEngine() { return *m_searchEngine; }
  search::Engine const & GetSearchEngine() const { return *m_searchEngine; }

  /// @name Bookmarks, Tracks and other UserMarks
  //@{
  /// Scans and loads all kml files with bookmarks in WritableDir.
  void LoadBookmarks();

  /// @return Created bookmark index in category.
  size_t AddBookmark(size_t categoryIndex, m2::PointD const & ptOrg, BookmarkData & bm);
  /// @return New moved bookmark index in category.
  size_t MoveBookmark(size_t bmIndex, size_t curCatIndex, size_t newCatIndex);
  void ReplaceBookmark(size_t catIndex, size_t bmIndex, BookmarkData const & bm);
  /// @return Created bookmark category index.
  size_t AddCategory(string const & categoryName);

  inline size_t GetBmCategoriesCount() const { return m_bmManager.GetBmCategoriesCount(); }
  /// @returns 0 if category is not found
  BookmarkCategory * GetBmCategory(size_t index) const;

  size_t LastEditedBMCategory() { return m_bmManager.LastEditedBMCategory(); }
  string LastEditedBMType() const { return m_bmManager.LastEditedBMType(); }

  /// Delete bookmarks category with all bookmarks.
  /// @return true if category was deleted
  bool DeleteBmCategory(size_t index);

  void ShowBookmark(BookmarkAndCategory const & bnc);
  void ShowTrack(Track const & track);

  void ClearBookmarks();

  bool AddBookmarksFile(string const & filePath);

  BookmarkAndCategory FindBookmark(UserMark const * mark) const;
  BookmarkManager & GetBookmarkManager() { return m_bmManager; }

  m2::PointD GetSearchMarkSize(SearchMarkType searchMarkType);

  // Utilities
  void VisualizeRoadsInRect(m2::RectD const & rect);

  ads::Engine const & GetAdsEngine() const;

protected:
  // search::ViewportSearchCallback::Delegate overrides:
  void RunUITask(function<void()> fn) override { GetPlatform().RunOnGuiThread(move(fn)); }

  void SetHotelDisplacementMode() override
  {
    SetDisplacementMode(DisplacementModeManager::SLOT_INTERACTIVE_SEARCH, true /* show */);
  }

  bool IsViewportSearchActive() const override
  {
    return !m_searchIntents[static_cast<size_t>(search::Mode::Viewport)].m_params.m_query.empty();
  }

  void ShowViewportSearchResults(search::Results const & results) override
  {
    FillSearchResultsMarks(results);
  }

  void ClearViewportSearchResults() override { ClearSearchResultsMarks(); }

  // EverywhereSearchCallback::Delegate overrides:
  bool IsLocalAdsCustomer(search::Result const & result) const override;

private:
  void ActivateMapSelection(bool needAnimation,
                            df::SelectionShape::ESelectedObject selectionType,
                            place_page::Info const & info);
  void InvalidateUserMarks();
public:
  void DeactivateMapSelection(bool notifyUI);
  /// Used to "refresh" UI in some cases (e.g. feature editing).
  void UpdatePlacePageInfoForCurrentSelection();

  /// Called to notify UI that object on a map was selected (UI should show Place Page, for example).
  using TActivateMapSelectionFn = function<void (place_page::Info const &)>;
  /// Called to notify UI that object on a map was deselected (UI should hide Place Page).
  /// If switchFullScreenMode is true, ui can [optionally] enter or exit full screen mode.
  using TDeactivateMapSelectionFn = function<void (bool /*switchFullScreenMode*/)>;
  void SetMapSelectionListeners(TActivateMapSelectionFn const & activator,
                                TDeactivateMapSelectionFn const & deactivator);

  void ResetLastTapEvent();

  void InvalidateRendering();

  void EnableChoosePositionMode(bool enable, bool enableBounds, bool applyPosition, m2::PointD const & position);
  void BlockTapEvents(bool block);

  using TCurrentCountryChanged = function<void(storage::TCountryId const &)>;
  storage::TCountryId const & GetLastReportedCountry() { return m_lastReportedCountry; }
  /// Guarantees that listener is called in the main thread context.
  void SetCurrentCountryChangedListener(TCurrentCountryChanged const & listener);

  vector<MwmSet::MwmId> GetMwmsByRect(m2::RectD const & rect, bool rough) const;
  MwmSet::MwmId GetMwmIdByName(std::string const & name) const;

private:
  struct TapEvent
  {
    enum class Source
    {
      User,
      Search,
      Other
    };

    TapEvent(df::TapInfo const & info, Source source) : m_info(info), m_source(source) {}

    df::TapInfo const m_info;
    Source const m_source;
  };

  unique_ptr<TapEvent> m_lastTapEvent;
  bool m_isViewportInitialized = false;

  void OnTapEvent(TapEvent const & tapEvent);
  /// outInfo is valid only if return value is not df::SelectionShape::OBJECT_EMPTY.
  df::SelectionShape::ESelectedObject OnTapEventImpl(TapEvent const & tapEvent,
                                                     place_page::Info & outInfo) const;
  unique_ptr<TapEvent> MakeTapEvent(m2::PointD const & center, FeatureID const & fid,
                                    TapEvent::Source source) const;
  FeatureID FindBuildingAtPoint(m2::PointD const & mercator) const;
  void UpdateMinBuildingsTapZoom();

  int m_minBuildingsTapZoom;

  TActivateMapSelectionFn m_activateMapSelectionFn;
  TDeactivateMapSelectionFn m_deactivateMapSelectionFn;

  /// Here we store last selected feature to get its polygons in case of adding organization.
  mutable FeatureID m_selectedFeature;

  vector<m2::PointF> m_searchMarksSizes;

private:
  vector<m2::TriangleD> GetSelectedFeatureTriangles() const;

public:

  /// @name GPS location updates routine.
  //@{
  void OnLocationError(location::TLocationError error);
  void OnLocationUpdate(location::GpsInfo const & info);
  void OnCompassUpdate(location::CompassInfo const & info);
  void SwitchMyPositionNextMode();
  /// Should be set before Drape initialization. Guarantees that fn is called in main thread context.
  void SetMyPositionModeListener(location::TMyPositionModeChanged && fn);

private:
  bool IsTrackingReporterEnabled() const;
  void OnUserPositionChanged(m2::PointD const & position);
  //@}

public:
  struct DrapeCreationParams
  {
    dp::ApiVersion m_apiVersion = dp::ApiVersion::OpenGLES2;
    float m_visualScale = 1.0f;
    int m_surfaceWidth = 0;
    int m_surfaceHeight = 0;
    gui::TWidgetsInitInfo m_widgetsInitInfo;

    bool m_hasMyPositionState = false;
    location::EMyPositionMode m_initialMyPositionState = location::PendingPosition;

    bool m_isChoosePositionMode = false;
    df::Hints m_hints;
  };

  void CreateDrapeEngine(ref_ptr<dp::OGLContextFactory> contextFactory, DrapeCreationParams && params);
  ref_ptr<df::DrapeEngine> GetDrapeEngine();
  bool IsDrapeEngineCreated() const { return m_drapeEngine != nullptr; }
  void DestroyDrapeEngine();
  /// Called when graphics engine should be temporarily paused and then resumed.
  void SetRenderingEnabled(ref_ptr<dp::OGLContextFactory> contextFactory = nullptr);
  void SetRenderingDisabled(bool destroyContext);

  void OnRecoverGLContext(int width, int height);
  void OnDestroyGLContext();

private:
  /// Depends on initialized Drape engine.
  void SaveViewport();
  /// Depends on initialized Drape engine.
  void LoadViewport();

public:
  void ConnectToGpsTracker();
  void DisconnectFromGpsTracker();

  void SetMapStyle(MapStyle mapStyle);
  void MarkMapStyle(MapStyle mapStyle);
  MapStyle GetMapStyle() const;

  void SetupMeasurementSystem();

  void SetWidgetLayout(gui::TWidgetsLayoutInfo && layout);

  void PrepareToShutdown();

  void SetDisplacementMode(DisplacementModeManager::Slot slot, bool show);

private:
  struct SearchIntent
  {
    search::SearchParams m_params;
    weak_ptr<search::ProcessorHandle> m_handle;
    m2::RectD m_viewport;
    bool m_isDelayed = false;
  };

  void InitCountryInfoGetter();
  void InitSearchEngine();

  DisplacementModeManager m_displacementModeManager;

  bool m_connectToGpsTrack; // need to connect to tracker when Drape is being constructed

  void SetCurrentPositionIfPossible(search::SearchParams & params);

  void OnUpdateCurrentCountry(m2::PointF const & pt, int zoomLevel);

  storage::TCountryId m_lastReportedCountry;
  TCurrentCountryChanged m_currentCountryChanged;

  // Descriptions of last search queries for different modes. May be
  // used for search requests skipping. This field is not guarded
  // because it must be used from the UI thread only.
  SearchIntent m_searchIntents[static_cast<size_t>(search::Mode::Count)];

  bool Search(search::SearchParams const & params);
  void Search(SearchIntent & intent) const;

  // Returns true when |params| and |viewport| are almost the same as
  // the latest search query's params and viewport in the |intent|.
  bool QueryMayBeSkipped(SearchIntent const & intent, search::SearchParams const & params,
                         m2::RectD const & viewport) const;

  void OnUpdateGpsTrackPointsCallback(vector<pair<size_t, location::GpsTrackInfo>> && toAdd,
                                      pair<size_t, size_t> const & toRemove);

public:
  using TSearchRequest = search::QuerySaver::TSearchRequest;

  void UpdateUserViewportChanged();

  /// Search everywhere.
  bool SearchEverywhere(search::EverywhereSearchParams const & params);

  /// Search in the viewport.
  bool SearchInViewport(search::ViewportSearchParams const & params);

  /// Search for maps by countries or cities.
  bool SearchInDownloader(storage::DownloaderSearchParams const & params);

  void CancelSearch(search::Mode mode);
  void CancelAllSearches();

  bool GetCurrentPosition(double & lat, double & lon) const;

  // Moves viewport to the search result and taps on it.
  void SelectSearchResult(search::Result const & res, bool animation);

  // Cancels all searches, stops location follow and then selects
  // search result.
  void ShowSearchResult(search::Result const & res, bool animation = true);

  size_t ShowSearchResults(search::Results const & results);

  void FillSearchResultsMarks(search::Results const & results);
  void FillSearchResultsMarks(search::Results::ConstIter begin, search::Results::ConstIter end);
  void ClearSearchResultsMarks();

  list<TSearchRequest> const & GetLastSearchQueries() const { return m_searchQuerySaver.Get(); }
  void SaveSearchQuery(TSearchRequest const & query) { m_searchQuerySaver.Add(query); }
  void ClearSearchHistory() { m_searchQuerySaver.Clear(); }

  /// Calculate distance and direction to POI for the given position.
  /// @param[in]  point             POI's position;
  /// @param[in]  lat, lon, north   Current position and heading from north;
  /// @param[out] distance          Formatted distance string;
  /// @param[out] azimut            Azimut to point from (lat, lon);
  /// @return true  If the POI is near the current position (distance < 25 km);
  bool GetDistanceAndAzimut(m2::PointD const & point,
                            double lat, double lon, double north,
                            string & distance, double & azimut);

  /// @name Manipulating with model view
  //@{
  inline m2::PointD PtoG(m2::PointD const & p) const { return m_currentModelView.PtoG(p); }
  inline m2::PointD GtoP(m2::PointD const & p) const { return m_currentModelView.GtoP(p); }
  inline m2::PointD GtoP3d(m2::PointD const & p) const { return m_currentModelView.PtoP3d(m_currentModelView.GtoP(p)); }

  /// Show all model by it's world rect.
  void ShowAll();

  m2::PointD GetPixelCenter() const;
  m2::PointD GetVisiblePixelCenter() const;

  m2::PointD const & GetViewportCenter() const;
  void SetViewportCenter(m2::PointD const & pt);
  void SetViewportCenter(m2::PointD const & pt, int zoomLevel);

  m2::RectD GetCurrentViewport() const;
  void SetVisibleViewport(m2::RectD const & rect);

  /// - Check minimal visible scale according to downloaded countries.
  void ShowRect(m2::RectD const & rect, int maxScale = -1, bool animation = true);
  void ShowRect(m2::AnyRectD const & rect);

  void GetTouchRect(m2::PointD const & center, uint32_t pxRadius, m2::AnyRectD & rect);

  void SetViewportListener(TViewportChanged const & fn);

  /// Resize event from window.
  void OnSize(int w, int h);

  enum EScaleMode
  {
    SCALE_MAG,
    SCALE_MAG_LIGHT,
    SCALE_MIN,
    SCALE_MIN_LIGHT
  };

  void Scale(EScaleMode mode, bool isAnim);
  void Scale(EScaleMode mode, m2::PointD const & pxPoint, bool isAnim);
  void Scale(double factor, bool isAnim);
  void Scale(double factor, m2::PointD const & pxPoint, bool isAnim);

  void TouchEvent(df::TouchEvent const & touch);
  //@}

  int GetDrawScale() const;

  /// Set correct viewport, parse API, show balloon.
  bool ShowMapForURL(string const & url);
  url_scheme::ParsedMapApi::ParsingResult ParseAndSetApiURL(string const & url);

  struct ParsedRoutingData
  {
    ParsedRoutingData(vector<url_scheme::RoutePoint> const & points, routing::RouterType type)
      : m_points(points), m_type(type)
    {
    }
    vector<url_scheme::RoutePoint> m_points;
    routing::RouterType m_type;
  };

  ParsedRoutingData GetParsedRoutingData() const;
  url_scheme::SearchRequest GetParsedSearchRequest() const;

private:
  // TODO(vng): Uncomment when needed.
  //void GetLocality(m2::PointD const & pt, search::AddressInfo & info) const;
  /// @returns true if command was handled by editor.
  bool ParseEditorDebugCommand(search::SearchParams const & params);
  /// @returns true if command was handled by drape.
  bool ParseDrapeDebugCommand(std::string const & query);

  void FillFeatureInfo(FeatureID const & fid, place_page::Info & info) const;
  /// @param customTitle, if not empty, overrides any other calculated name.
  void FillPointInfo(m2::PointD const & mercator, string const & customTitle, place_page::Info & info) const;
  void FillInfoFromFeatureType(FeatureType const & ft, place_page::Info & info) const;
  void FillApiMarkInfo(ApiMarkPoint const & api, place_page::Info & info) const;
  void FillSearchResultInfo(SearchMarkPoint const & smp, place_page::Info & info) const;
  void FillMyPositionInfo(place_page::Info & info) const;

public:
  void FillBookmarkInfo(Bookmark const & bmk, BookmarkAndCategory const & bac, place_page::Info & info) const;

  /// @returns address of nearby building with house number in approx 1km distance.
  search::AddressInfo GetAddressInfoAtPoint(m2::PointD const & pt) const;

  /// @returns Valid street address only if it was specified in OSM for given feature;
  /// @todo This functions are used in desktop app only. Should we really need them?
  //@{
  search::AddressInfo GetFeatureAddressInfo(FeatureType & ft) const;
  search::AddressInfo GetFeatureAddressInfo(FeatureID const & fid) const;
  //@}

  vector<string> GetPrintableFeatureTypes(FeatureType const & ft) const;
  /// Get "best for the user" feature at given point even if it's invisible on the screen.
  /// Ignores coastlines and prefers buildings over other area features.
  /// @returns nullptr if no feature was found at the given mercator point.
  unique_ptr<FeatureType> GetFeatureAtPoint(m2::PointD const & mercator) const;
  template <typename TFn>
  void ForEachFeatureAtPoint(TFn && fn, m2::PointD const & mercator) const
  {
    indexer::ForEachFeatureAtPoint(m_model.GetIndex(), fn, mercator, 0.0);
  }
  /// Set parse to false if you don't need all feature fields ready.
  /// TODO(AlexZ): Refactor code which uses this method to get rid of it.
  /// FeatureType instances should not be used outside ForEach* core methods.
  WARN_UNUSED_RESULT bool GetFeatureByID(FeatureID const & fid, FeatureType & ft) const;

  void MemoryWarning();
  void EnterBackground();
  void EnterForeground();

  /// Set the localized strings bundle
  inline void AddString(string const & name, string const & value)
  {
    m_stringsBundle.SetString(name, value);
  }

  StringsBundle const & GetStringsBundle();

  /// [in] lat, lon - last known location
  /// [out] lat, lon - predicted location
  static void PredictLocation(double & lat, double & lon, double accuracy,
                              double bearing, double speed, double elapsedSeconds);

public:
  string CodeGe0url(Bookmark const * bmk, bool addName);
  string CodeGe0url(double lat, double lon, double zoomLevel, string const & name);

  /// @name Api
  //@{
  string GenerateApiBackUrl(ApiMarkPoint const & point) const;
  url_scheme::ParsedMapApi const & GetApiDataHolder() const { return m_ParsedMapApi; }

private:
  url_scheme::ParsedMapApi m_ParsedMapApi;

public:
  //@}

  /// @name Data versions
  //@{
  bool IsDataVersionUpdated();
  void UpdateSavedDataVersion();
  int64_t GetCurrentDataVersion() const;
  //@}

public:
  using TRouteBuildingCallback = function<void(routing::IRouter::ResultCode,
                                               storage::TCountriesVec const &)>;
  using TRouteProgressCallback = function<void(float)>;

  /// @name Routing mode
  //@{
  void SetRouter(routing::RouterType type);
  routing::RouterType GetRouter() const;
  bool IsRoutingActive() const { return m_routingSession.IsActive(); }
  bool IsRouteBuilt() const { return m_routingSession.IsBuilt(); }
  bool IsRouteBuilding() const { return m_routingSession.IsBuilding(); }
  bool IsRouteBuildingOnly() const { return m_routingSession.IsBuildingOnly(); }
  bool IsRouteRebuildingOnly() const { return m_routingSession.IsRebuildingOnly(); }
  bool IsRouteNotReady() const { return m_routingSession.IsNotReady(); }
  bool IsRouteFinished() const { return m_routingSession.IsFinished(); }
  bool IsRouteNoFollowing() const { return m_routingSession.IsNoFollowing(); }
  bool IsOnRoute() const { return m_routingSession.IsOnRoute(); }
  bool IsRouteNavigable() const { return m_routingSession.IsNavigable(); }

  void BuildRoute(m2::PointD const & finish, uint32_t timeoutSec);
  void BuildRoute(m2::PointD const & start, m2::PointD const & finish, bool isP2P, uint32_t timeoutSec);
  // FollowRoute has a bug where the router follows the route even if the method hads't been called.
  // This method was added because we do not want to break the behaviour that is familiar to our users.
  bool DisableFollowMode();
  /// @TODO(AlexZ): Warning! These two routing callbacks are the only callbacks which are not called in the main thread context.
  /// UI code should take it into an account. This is a result of current implementation, that can be improved:
  /// Drape core calls some RunOnGuiThread with "this" pointers, and it causes crashes on Android, when Drape engine is destroyed
  /// while switching between activities. Current workaround cleans all callbacks when destroying Drape engine
  /// (@see MwmApplication.clearFunctorsOnUiThread on Android). Better soulution can be fair copying of all needed information into
  /// lambdas/functors before calling RunOnGuiThread.
  void SetRouteBuildingListener(TRouteBuildingCallback const & buildingCallback) { m_routingCallback = buildingCallback; }
  /// See warning above.
  void SetRouteProgressListener(TRouteProgressCallback const & progressCallback) { m_routingSession.SetProgressCallback(progressCallback); }
  void FollowRoute();
  void CloseRouting();
  void GetRouteFollowingInfo(location::FollowingInfo & info) const { m_routingSession.GetRouteFollowingInfo(info); }
  m2::PointD GetRouteEndPoint() const { return m_routingSession.GetEndPoint(); }
  /// Returns the most situable router engine type.
  routing::RouterType GetBestRouter(m2::PointD const & startPoint, m2::PointD const & finalPoint) const;
  routing::RouterType GetLastUsedRouter() const;
  void SetLastUsedRouter(routing::RouterType type);
  // Sound notifications for turn instructions.
  inline void EnableTurnNotifications(bool enable) { m_routingSession.EnableTurnNotifications(enable); }
  inline bool AreTurnNotificationsEnabled() const { return m_routingSession.AreTurnNotificationsEnabled(); }
  /// \brief Sets a locale for TTS.
  /// \param locale is a string with locale code. For example "en", "ru", "zh-Hant" and so on.
  /// \note See sound/tts/languages.txt for the full list of available locales.
  inline void SetTurnNotificationsLocale(string const & locale) { m_routingSession.SetTurnNotificationsLocale(locale); }
  /// @return current TTS locale. For example "en", "ru", "zh-Hant" and so on.
  /// In case of error returns an empty string.
  /// \note The method returns correct locale after SetTurnNotificationsLocale has been called.
  /// If not, it returns an empty string.
  inline string GetTurnNotificationsLocale() const { return m_routingSession.GetTurnNotificationsLocale(); }
  /// \brief When an end user is going to a turn he gets sound turn instructions.
  /// If C++ part wants the client to pronounce an instruction GenerateTurnNotifications (in
  /// turnNotifications) returns
  /// an array of one of more strings. C++ part assumes that all these strings shall be pronounced
  /// by the client's TTS.
  /// For example if C++ part wants the client to pronounce "Make a right turn." this method returns
  /// an array with one string "Make a right turn.". The next call of the method returns nothing.
  /// GenerateTurnNotifications shall be called by the client when a new position is available.
  inline void GenerateTurnNotifications(vector<string> & turnNotifications)
  {
    if (m_currentRouterType == routing::RouterType::Taxi)
      return;

    return m_routingSession.GenerateTurnNotifications(turnNotifications);
  }

  void SetRouteStartPoint(m2::PointD const & pt, bool isValid);
  void SetRouteFinishPoint(m2::PointD const & pt, bool isValid);

  void AllowTransliteration(bool allowTranslit);
  bool LoadTransliteration();
  void SaveTransliteration(bool allowTranslit);

  void Allow3dMode(bool allow3d, bool allow3dBuildings);
  void Save3dMode(bool allow3d, bool allow3dBuildings);
  void Load3dMode(bool & allow3d, bool & allow3dBuildings);

  void SetLargeFontsSize(bool isLargeSize);
  void SaveLargeFontsSize(bool isLargeSize);
  bool LoadLargeFontsSize();

  bool LoadAutoZoom();
  void AllowAutoZoom(bool allowAutoZoom);
  void SaveAutoZoom(bool allowAutoZoom);

  TrafficManager & GetTrafficManager();

  LocalAdsManager & GetLocalAdsManager();

  bool LoadTrafficEnabled();
  void SaveTrafficEnabled(bool trafficEnabled);

  bool LoadTrafficSimplifiedColors();
  void SaveTrafficSimplifiedColors(bool simplified);

  /// \returns true if altitude information along |m_route| is available and
  /// false otherwise.
  bool HasRouteAltitude() const;
  /// \brief Generates 4 bytes per point image (RGBA) and put the data to |imageRGBAData|.
  /// \param width is width of chart shall be generated in pixels.
  /// \param height is height of chart shall be generated in pixels.
  /// \param imageRGBAData is bits of result image in RGBA.
  /// \param minRouteAltitude is min altitude along the route in altitudeUnits.
  /// \param maxRouteAltitude is max altitude along the route in altitudeUnits.
  /// \param altitudeUnits is units (meters or feet) which is used to pass min and max altitudes.
  /// \returns If there is valid route info and the chart was generated returns true
  /// and false otherwise. If the method returns true it is guaranteed that the size of
  /// |imageRGBAData| is not zero.
  /// \note If HasRouteAltitude() method returns true, GenerateRouteAltitudeChart(...)
  /// could return false if route was deleted or rebuilt between the calls.
  bool GenerateRouteAltitudeChart(uint32_t width, uint32_t height,
                                  vector<uint8_t> & imageRGBAData,
                                  int32_t & minRouteAltitude, int32_t & maxRouteAltitude,
                                  measurement_utils::Units & altitudeUnits) const;

public:
  /// @name Editor interface.
  //@{
  /// Initializes feature for Create Object UI.
  /// @returns false in case when coordinate is in the ocean or mwm is not downloaded.
  bool CanEditMap() const;

  bool CreateMapObject(m2::PointD const & mercator, uint32_t const featureType, osm::EditableMapObject & emo) const;
  /// @returns false if feature is invalid or can't be edited.
  bool GetEditableMapObject(FeatureID const & fid, osm:: EditableMapObject & emo) const;
  osm::Editor::SaveResult SaveEditedMapObject(osm::EditableMapObject emo);
  void DeleteFeature(FeatureID const & fid) const;
  osm::NewFeatureCategories GetEditorCategories() const;
  bool RollBackChanges(FeatureID const & fid);
  void CreateNote(osm::MapObject const & mapObject, osm::Editor::NoteProblemType const type,
                  string const & note);

  //@}

private:
  void SetRouterImpl(routing::RouterType type);
  void RemoveRoute(bool deactivateFollowing);

  void InsertRoute(routing::Route const & route);
  void CheckLocationForRouting(location::GpsInfo const & info);
  void CallRouteBuilded(routing::IRouter::ResultCode code,
                        storage::TCountriesVec const & absentCountries);
  void MatchLocationToRoute(location::GpsInfo & info, location::RouteMatchingInfo & routeMatchingInfo) const;
  string GetRoutingErrorMessage(routing::IRouter::ResultCode code);
  void OnBuildRouteReady(routing::Route const & route, routing::IRouter::ResultCode code);
  void OnRebuildRouteReady(routing::Route const & route, routing::IRouter::ResultCode code);

  TRouteBuildingCallback m_routingCallback;
  routing::RouterType m_currentRouterType;
  //@}

public:
  //@{
  // User statistics.

  editor::UserStats GetUserStats(string const & userName) const
  {
    return m_userStatsLoader.GetStats(userName);
  }

  // Reads user stats from server or gets it from cache calls |fn| on success.
  void UpdateUserStats(string const & userName, editor::UserStatsLoader::UpdatePolicy policy,
                       editor::UserStatsLoader::TOnUpdateCallback fn)
  {
    m_userStatsLoader.Update(userName, policy, fn);
  }

  void DropUserStats(string const & userName) { m_userStatsLoader.DropStats(userName); }

private:
  editor::UserStatsLoader m_userStatsLoader;
  //@}

public:
  bool OriginalFeatureHasDefaultName(FeatureID const & fid) const;

private:
  std::unique_ptr<CityFinder> m_cityFinder;
  unique_ptr<ads::Engine> m_adsEngine;

  DECLARE_THREAD_CHECKER(m_threadChecker);
};

redpajama_set_name: RedPajamaGithub


East Los Angeles venue, The Vex. Some pretty impressive line-ups; seemingly everyday occurrances in LA in those days. A punk kid was shot near the Vex around May 1982, a week before Conflict accompanied JFA out there (on what became their ill-fated broken-down-bus tour). I got assaulted on Overland Avenue a few hours before the gig. Pretty unnerving.


Well the weather has certainly cooled off in the Ottawa area. I've been a little under the weather as well for the last few days. Like Chris says though, we travel all the way to Alaska, down the west coast of the USA and across the south before coming back to Ottawa, and all without the hint of a cold. As soon as we get set up. in Ottawa…I get sick. What's with that?! No idea personally, but all things will pass.
We did manage a trip into downtown Ottawa this afternoon to run a few errands and we enjoyed a nice walk along the canal. How can you tell it is spring time in Ottawa? Road construction everywhere!
This entry was posted in Ontario, Photography.


text:
Grupo investigación
Mercedes García-Arenal coordinará un proyecto europeo Synergy dedicado a estudiar el papel del Corán en la cultura religiosa e intelectual europea.
DH expert for "The European Qur'an"
"The Qur'an in Western Europe," Journal of Qur'anic Studies
"The Qur'an in Western Europe," special issue of Journal of Qur'anic Studies 20, no. 3 (2018):
- "Introduction: The Qur'an in Europe—the European Qur'an" (Jan Loop)
- "The Byzantine Panoplia Tradition and Greek Qur'an Translation in the Latin West" (Christian Høgel)
- "Inspicientes—et non inspicientes—eius legem: Thirteenth-Century Dominicans, the Qur'an, and Islam" (Thomas E. Burman)
- "The Perennial Importance of Mary's Virginity and Jesus' Divinity: Qur'anic Quotations in Iberian Polemics After the Conquest of Granada (1492)" (Mercedes García-Arenal, Katarzyna K. Starczewska and Ryan Szpiech)
- "Two Hungarian Jesuits and the Qur'an: Understanding, Misunderstanding, and Polemic" (Paul Shore)
- "Bulghaith al-Darawi and Barthélemy d'Herbelot: Readers of the Qur'an in Seventeenth-Century Tuscany" (Pier Mattia Tommasino)
- "Sleeping in the Cave: Zechendorff's 1632 Latin Translation of the Qur'an" (Reinhold F. Glei)
- "The Qur'an of Johann Zechendorff: Features and Sources of the Arabic Text of Sūrat al-Kahf (Q. 18)" (Roberto Tottoli)
- "The Qur'an in Comparison, and the Birth of 'scriptures'" (Alexander Bevilacqua and Jan Loop)
- "After Marracci: The Reception of Ludovico Marracci's Edition of The Qur'an in Northern Europe from the Late Seventeenth to the Early Nineteenth Centuries" (Alastair Hamilton)
- "The Philological Uncanny: Nineteenth-Century Jewish Readings of the Qur'an" (Susannah Heschel)
Read here the abstracts.

redpajama_set_name: RedPajamaCommonCrawl


If you are going to add 2nd generation device to BioStar 1.93 SW, please consider two parts.
BioStar 1.93 doesn't support the most recent version of 2nd generation device. And, you can't add the devices to BioStar 1.93 with an error message.
Those FW can be not connected to BioStar 1.93.
If you receive recently BioStation A2 product and you want to downgrade the version of A2, you can't downgrade the device successfully because of the sensor(OP6) compatibility.
To distinguish the sensor type, you can prevent the issue if you confirm the serial number below.
Please do not downgrade for the below list. The downgraded device will be malfunction and you should proceed it as RMA.
A2-OIPW : Not produced with OP6 yet. The schedule is not fixed.
You can downgrade W2 and BS2 without a HW problem, but please be aware that we can't ensure the compatibility between BioStar 1.93 and recent firmware except the below information.
In conclusion, we highly recommend to use BioStar2 SW if you have 2nd generation device.
To support the DB migration from BioStar 1 to BioStar 2, we are going to release a DB converter tool.
If you have any inquiry about the above information, please create new ticket.


1000pcs/sleeve box or as the client's requested.
Color:Pink logo+Beige Backgound, any colors as you like, but Donot beyond 8.
3 Customers' designs are welcomed.
4 Different sizes and styles are available.
5 OEM orders and custom-made artworks are welcome.
Logo: Avaiable in various logo color and shape, customized design are welcomed.
1. Avaiable in various logo color and shape, customized design are welcomed.


The Big Picture has put together another amazing collection of photographs – this time from various electronic microscope photographs of various alien looking things but when you read their descriptions you'll be amazed to see that they're just your everyday objects or organisms. Take a look for yourself.
This entry was posted on Saturday, 15 November 2008 at 09:55 and is filed under General, Photography with tags big picture, boston.com, electron microscope, Photography.	You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.


I scream, you scream, we all cream for ICE CREAM!!! Nothing says summer like ice cream and with this heat it is all we are craving. National Ice Cream Day is Sunday July 15, 2018 and we know all the great spots you can get a freebee.
Free ice cream for the first 50 customers! Milk & Cream Cereal Bar is a modern spin on a timeless favorite. A place where the old reconnects with the new and we strive to bring back your fondest memories and to help create new ones.
Not free but still a great deal: $1 wowfulls for their first 50 customers and $5 wowfulls afterwards. Authentic 1950's-style Hong Kong egg waffles with ice cream! The taste and texture of our waffles (Gai Dàn Jai) are crispy on the outside, soft and sweet on the inside.
They are giving away scoops to the first 50 customers at their pop-up Arlo Hotel location in Soho starting at noon! Plus they are are offering $1 scoops to the first 50 customers at their Barlour on 26th St, also starting at noon. This place is better than regular ice cream…. it's liquor-infused ice cream flavors are all inspired by classic and contemporary cocktails! And, they're made with local and seasonal ingredients.
Starting at 1:00pm on Nat'l Ice Cream Day, OddFellows Coffee & Cream (55 E. Houston) will be giving out 50 cones for $1! They pasteurize their own ice cream base — using locally-sourced, hormone-free and additive-free dairy — in their Brooklyn kitchen. While more time consuming, pasteurizing on location allows them to add more nuance and depth into their ice cream flavors. The result? Distinctive, creamy, and scrumptious flavors ranging from inventive renditions of the classics to the delectably unconventional.
What is a Cruff and why that name? A perfectly toasted, glazed donut stuffed with your ice cream flavor & toppings of choice. On National Ice Cream Day they are having buy one get one free deals!


Interviews and commentaries that uplift and inspire everyday people with extraordinary challenges.
On this podcast episode we give you our Final thoughts on How to be Happy. Tune in and get the secret strategy.
Laughter is one of the best ways to make people happy and it doesn't cost anything. Find out how laughter is like medicine to the soul.
Balance Due Makes The Happy You!


text:
Toy maker Alex Brands names industry Hall of Famer its new CEO
By: Eric Strauss
Neil Friedman, new CEO and president of Alex Brands.-(ALEX BRANDS)
Neil Friedman, who joined Alex Brands in September as a member of the board of directors and an adviser to senior leadership, has been named the toy maker's chief executive officer and president, the company said Wednesday.Friedman, previously president of the U.S. division at Toys R Us, now will lead the maker of products such as Alex Toys, Slinky and others.
"Neil Friedman is unparalleled in this industry for his vision, experience and track record of success," Michael Cornell, chairman of Alex Brands, said in a prepared statement. "With our newly opened worldwide headquarters, expansion into Europe and rapid growth to date, there truly is no one better suited to lead this company into the next phase of its evolution."
RELATED: Toy maker Alex Brands moves HQ to Fairfield, opens new Woodbridge distribution center
According to a report in The Record, Fred Keller, who became president in May 2013 after Alex Toys was acquired by Connecticut-based private equity firm Propel Equity Partners, has left the company.
Friedman is a member of the Toy Industry Hall of Fame and International Licensing Industry Merchandiser's Assocation Hall of Fame, and has served in leadership roles at Mattel Brands and Fisher-Price Brands, among others.
"This is a unique opportunity to work with some of the most iconic and highly recognizable brands in the industry," Friedman said in a prepared statement. "In the time that I have been associated with Alex Brands, I have been extremely impressed by the company's accomplishments, vision and growth plans. I am most looking forward to using my experience and expertise to help this company realize the incredible opportunities that lie before it."
The company also announced in September that it had moved its headquarters from Northvale to Fairfield.
ALSO ON NJBIZ:
N.J. company finds itself on front lines of Ebola cleanup
N.J.'s hospitals move up to 4th in safety, according to Leapfrog score
Wells Fargo veteran Michelle Lee to run community banking operations for Eastern Region
9:59 am Thu, October 30, 2014 NJBIZ
Eric Strauss


text:
Yellow Vester Cult
Conspiracy-mongers, Trudeau-haters and Islamophobes aren't at the pro‑oil movement's fringe, they're its beating heart
Province | by Paul Dechene
You know all those pro-pipeline/anti-carbon tax protests cropping up on the Prairies the last few months like dandelions?
Have you noticed how they seem, maybe, a little shot-through with the looney tunes?
Sure, the protests include a lot of people who are out of work and worried about drops in the global price of oil. It's easy to sympathize with that.
But there's also a lot of other … stuff.
"Climate change is a hoax."
"The UN took control of the Canadian border."
"Trudeau's purchase of the Trans Mountain pipeline is a complicated double-bluff to screw over Alberta. The guy should be hung [sic]."
"George Soros, something something."
The standard line from the pro-pipeline/anti-carbon tax spokespeople — and many a stuffy pundit soon to be collecting a bailout-augmented cheque from a corporate media outlet — is that this is all coming from some bad eggs. Get enough people together, and a few representatives from the tinfoil hat brigade are bound to get past the bouncers.
Reassuring! But is it true? That it's just a few bad eggs, I mean.
On March 15, for instance, hundreds of Saskatchewan students participated in a protest representing the other side of the carbon tax/pipeline/climate change debate — the side that accepts the science and demands immediate action to stave off catastrophe. They were part of the Global School Strike 4 Climate, which itself was part of the larger Fridays For Future movement started by teenaged climate activist Greta Thunberg.
There were over 200 students gathered on the steps of the Saskatchewan legislature. It was a big, happy crowd. Nary a tinfoil hat to be seen.
Or wait… no… one member of the tinfoil hat brigade sneaked in: an apparent holdover from earlier Yellow Vest and pro-pipeline rallies. The interloper was a big guy with a shaggy grey moustache and a chip on his shoulder wading through a sea of cheerful elementary school kids.
Nothing intimidating about that.
He was carrying a sign. On one side it read, "GREENPEACE Co-founder GLOBAL WARMING IS HOAX SCAM." Considering the subject of the Strike 4 Climate, that was, at least on topic.
The other side, on the other hand, read, "MCGA / Q / WWG1WGA."
That will take some explaining.
The internet tells me that MCGA is "Make Canada Great Again", while WWG1WGA stands for "Where We Go One We Go All." The latter is the common sign-off of an infamous 4chan poster identified as "Q" (hence the giant "Q" on our moustachioed counter-protester's sign).
Q is typically considered the main source of the QAnon family of conspiracy theories from which springs slanderous tales of George Soros' influence, false allegations that prominent Democrats hired MS-13 to murder Seth Rich and — QAnon's most successful lie so far — Pizzagate.
Bottom line: QAnon represents the worst of right-wing internet paranoia. Yet here was a big man spouting its propaganda at a rally of children.
It's just a short little side-step from there to the wild and woolly world of World Government conspiracies. In that fantasy land, Canada ceded control of our borders to the United Nations when we signed on to the Global Compact for Migration, and now ISIS terrorists are flooding into the country.
None of it is true. The Compact for Migration just makes sure that migrants to our country are treated humanely and can, for instance, access basic services. And it's non-binding, to boot. All the fear mongering is nonsense.
But show up to a Yellow Vest Canada rally and in amongst the "No Carbon Tax" signs you'll spot things like "No UN immigration pact," "Open borders breed CHAOS" and "Keep Canada Canadian."
It's almost as if maybe there's a deeper connection between the pro-pipeline position and the anti-immigration, climate denial rhetoric.
That could have something to do with the fact that paranoid, nationalist conspiracy theories have been central to Canada's Yellow Vest movement from the very beginning.
Yellow Vests Canada Exposed (@VestsCanada) is a Twitter feed run by an anonymous trio concerned about the Yellow Vest movement's racist and violent message. YVCE has been tracking the Yellow Vest's racist leanings since their protests emerged.
"The anti-immigration message is even more core than oil and gas. Oil and gas is a cover used to appeal to a broader base," says YVCE's "Liz" (not their real name) by direct message.
Liz points to the United We Roll convoy in February. The media narrative at the time was that it had largely purged its anti-immigrant, Yellow Vest elements.
"The day the convoy was over, the rhetoric on the convoy Facebook page shifted dramatically to mostly anti-immigrant narratives," says Liz. "It's primarily about immigration.
"It was always there — that's how it began."
Liz believes that while there were people who participated in the United We Roll convoy who were motivated by legitimate economic concerns, the anti-immigration messaging remained a central tenant of the convoy all the way through.
"The [convoy] GoFundMe referenced the UN Migration Compact, and key organizers within the convoy are heavily involved with Yellow Vest Canada [YVC]," says Liz. "At the rally in Ottawa, organizers referenced immigration. In pieces from the [Toronto Star's Edmonton page], convoy participants are cited as being disappointed that the Yellow Vests are 'running the show.'"
And, most infamously, noted white-supremacist media figure and former Rebel personality, Faith Goldy was welcomed to speak at the convoy gathering in Ottawa. On Twitter, Goldy reported "Lying SNAKES in the MSM are pretending 'United We Roll Convoy For Canada' is only about pipelines! Have received emails and calls from organizers desperately trying to get the word out: they're protesting GLOBALISM & the UN IMMIGRATION PACT too!"
So why is it that these pipeline advocates can't seem to stop themselves from veering into the land of disturbing conspiracy mongering?
Joshua Stein, a doctoral candidate in philosophy at the University of Calgary who's been following the more toxic side of Alberta's United Conservative Party, says the Yellow Vesters might be more like the Tea Party in the States — another group that promotes racism-tinged conspiracies, such as Obama's birth certificate being fake.
"It is conventional to characterize contemporary 'nationalist/populist' movements in terms of either the economic issues (e.g. the pipeline) or socio-cultural issues (e.g. anti-immigrant views, 'cultural anxiety')," says Stein. "But the two are not exclusive; they're both functions of the same social outlook. They hang together under a conspiratorial narrative about existing institutional power: that government power is corrupted by malicious, external influences.
"That view takes both economic issues and racist socio-cultural protectionism and runs them together against the existing government, the political face of the boogeyman," he says by e-mail. "These can also result in attacks on other groups (including religious and ethnic minorities) seen as the tendrils of the malicious, anti-national agenda."
Translation: the Yellow Vesters and their fellow travellers think the government is out to get them.
No wonder, then, that another of their favourite messages is a callback to Trudeau the Elder's National Energy Program of the 1980s.
As far as the pro-pipeline protesters are concerned, the Carbon Tax is NEP2: Electric Boogaloo. It's treated with the same level of distrust. And, by extension, anything associated with the Carbon Tax — like climate science — is lumped into the grand, diabolical conspiracy to rob the west of its resource wealth.
Meanwhile, immigration policy represents an economic assault of a different sort.
The oil-rich west has been a comfortable place for, to use Stephen Harper's term, "Old Stock" Prairie folk. White dudes especially have done very well by the tarsands. Average household incomes in Alberta are consistently near the top in North America. When resource prices are high, unemployment craters throughout oil country.
Who needs a university education if you can get a high five-figure salary up at Fort Mac? Hell, who needs high school? There are jobs for everybody.
But when governments are seen taking climate policy seriously, it does not bode well for oil's future. It says the good times have a limit. It presages the end of the old order.
Similarly, welcoming immigration policy — even one as minimally welcoming as a signature on a non-binding migration compact — also represents a potential shift in the make-up of Canada's cultural mosaic. That's why you'll hear the Faith Goldys stoke fears of "real Canadians" being replaced by an influx of immigrants from Islamic nations.
It's the tie that binds the carbon tax to immigration: both are seen as a threat to the current order. New immigration and climate-friendly policy both threaten to upend the predominantly white, dude-heavy hegemony that has reigned so happily in oil country. They say the Canada you find familiar is about to change … and you might not get to keep your first-class seats as we jet into the future.
That's why you'll see "Climate Change Is A Hoax" signs alongside "Protect Our Borders" signs at pro-pipeline rallies. Hell, sometimes you'll see those slogans on the same damn sign. They're all part of the same package of fear and paranoia.
And that's why, no matter how hard Canada's oil boosters try to distance themselves from the yellow-vested conspiracy-mongers, racists and science deniers, they'll be marching together right to the bitter end. ❧
Where Moe Goes
Yes, the Sask. Party is responsible for its choices in allies
According to organizers of the March 15 Strike 4 Climate in Regina, invitations were sent to both the Saskatchewan Party and the NDP caucuses. Only two MLAs attended the rally — the NDP's Carla Beck and Yens Pedersen.
The invites were sent out on short notice but the legislature wasn't sitting that day, so you'd think it might not be too hard for Premier Scott Moe to put in a brief appearance to listen to some kids share concerns for their planet's future.
But Moe was happy in February to speak before a gathering of pro-pipeline/anti-carbon tax protesters on the front steps of the legislature.
And Sask. Party MLAs Greg Ottenbreit and Lori Carr both made it out to explicitly Yellow Vest Brand™ rallies.
Why are the Sask. Party and other conservative movements comfortable being seen cozying up to movements with such so much radical baggage?
"As far as the Sask. Party and United Conservative Party 'cozying up' to Yellow Vest groups, I think getting the causal ordering of this is more difficult than punditry sometimes makes it appear," says the University of Calgary's Joshua Stein. "Are Yellow Vest groups already strongly inclined to support these parties, due to policy and demographic considerations? That's certainly true to some extent; the policies and political rhetoric of the UCP are already closely aligned with the values of Yellow Vest protesters."
"I suspect the answer is a banal one," says Stein. "It's partly convenience, partly genuine ideological agreement and partly political calculus."
Let's give them the benefit of the doubt. Let's say our politicians aren't racist xenophobes. Let's say they're giving time to groups with anti-immigrant leanings or white supremacist ties strictly because they know the electoral calculus works in their favour.
Can we forgive them for that?
"It does not remotely absolve politicians of guilt for associating with, seeking the political support of, and creating political policies sympathetic to white supremacist groups," says Stein.
"Whatever the motivations of the politicians may be, they should know better," Stein says. "They should consider the consequences of their actions. Political alliances and associations matter."
—Paul Dechene
One thought on "Yellow Vester Cult"
My name is Chris Stadnichuk I am a former hairstylist , and salon owner. There is no way in hell I would ever advertise in a planet S magazine !editorial but not remotely factual . We're not agree with the carbon tax and I am a yellow vest person my wife to be as a black woman from Africa and has no racism going to yellow jacket events !What are you talking about! You sound like a crazy Christian evangelist !


text:
Q: lisse sheaf on complex varieties Let $X$ be a complex algebraic variety, and let $F=(F_n)$ be a lisse $\mathbb Z_{\ell}$-sheaf on $X.$ Does there exist an analytic open covering of $X(\mathbb C),$ such that $F$ is "(locally) constant" on each open subset?

A: Dear Shenghao, If you really do mean a lisse sheaf on the etale site of $X$, then it doesn't make sense a priori to evaluate it on analytic open subsets of $X(\mathbb C)$, since these are not in the etale site of the algebraic variety $X$.  However, $F$ corresponds to  a representation of the (profinite) etale $\pi_1$ of $X$, which in turn is the profinite completion of the
topological $\pi_1$ of $X(\mathbb C)$.  So there is a corresponding locally constant (in the analytic topology) $\mathbb Z_{\ell}$
sheaf on $X(\mathbb C)$, which, being locally constant, will be constant on sufficiently small analytic open subsets.

redpajama_set_name: RedPajamaStackExchange


Contrary to how things were not that long ago, dining out on an accessible, high quality supper can be cheap. But offering a good value menu can be expensive – without staff trained to know what they're doing, an optimised floor plan, and a bit of extra customer-facing nous, one might find it is more the fault of the business, rather than the customer, when tables aren't turning (and the cash isn't lining the till) fast enough.
The important thing is to control the dining room, without the guest being aware of it. Here are a few tips on how.
Might sound ridiculous at first, but putting on faster paced music has a significant effect on eating and loitering time. Without wanting to cause anyone indigestion, of course. Not only this, studies have shown that music high in tempo also influences guests to spend more during their visit. Conversely, during off-peak times, consider lowering the tempo (Barry White, anyone?) to encourage guests to relax and take their time.
A chef consultant in the industry once told me that Claridge's employ choreographers to help staff get food out efficiently, smoothly, and elegantly. For restaurants not the ilk of Claridge's, this takes things a little too far, but you get the point: when service has a good rhythm (even if it's simply making sure servers attend to guests' tables as soon as they're seated, coming back shortly with water to take their drinks order), the time between first contact to paying the bill comes off as natural, fluid, and not rushed. However speedy it happens to be.
While point of sale systems give customers the option to pay as soon as their bill arrives, or when they're ready to leave, other, quicker, strategies provide increasingly acceptable ways to settle the score. Take 'dropping the cheque' for example – a reasonable move at ultra-casual joints. Or, depending on your demographic's tech-savviness, how about going paperless and utilising pay-at-the-table apps such as Velocity, Zapper, and Cake, which reduce billing times from an average of ten minutes to a few seconds. After all, guests are often in a rush too, especially during lunch hours.
Let's face it, no one's going to understand your menu as well as you do. No matter how well you train your staff to explain it. Even the seemingly simple things, like asking how thick you like your chips cut, guests get overwhelmed by. Let alone which toppings and what softness of noodle they want for their ramen. The fact guests want an abundance of choice has always been a myth – the less guests have to read, the quicker and the more hassle-free they can decide.
Generally, restaurants allow diners to have one to two hours at their table. Which in most cases, and ignoring lengthy tasting menus, is more than enough. But now and then, there'll be a table who forget this benign little request. Such situations call for utmost delicacy, and confidence in your staff – consider politely saying that the table is needed, before softening the blow by offering a free drink at the bar.
What does eating out look like in the future?


What are the benefits of using the web app?
Which functions are not available?
Will I lose all my data if I'm not set up for offline mode and my device crashes while typing into an activity?
How do I find RCPCH Approved activities?
I was using the web app whilst my device was offline and I added and reflected on some activities but the Summary screen did not update – why is this?
I selected the 'Mobile/Tablet' option from my device but I then got a blank screen – what should I do?
I tried going to the full ('desktop') version of the CPD Online Diary from the web app and received an error message that my windows limit had been reached. What should I do?
I tried to download my certificate/revalidation domains summary from the More page but got an error message that the file could not be opened.
I've deleted an activity by accident. How do I recover them?
Information I added to the web app has not saved or synched across. Why?
The Web App will be your access to your CPD diary on the go. It is intended to complement and be used in conjunction with the current desktop version of the CPD Diary.
It gives you a just-in-time way to add and edit CPD activities.
Once you have added the web app to your home screen, you can use it even if you do not have cellular or Wi-Fi connection, as long as you do not log out of your CPD diary account.
This will allow you to use functions of the web app, such as adding activities, while offline. These will sync and upload at a later time when a Wi-Fi connection is re-established.
If you log out of your CPD web app, you cannot use the offline mode.
Once you have added the Web App to your home screen, you can use the app in the normal way.
Be sure to save any entries that you have made before navigating away from the Web App. Then, re-open the Web App once you have re-established a cellular or Wi-Fi connection - this make sure you can sync the data added when offline.
You will not be able to use the offline mode if you log out of your Web App.
An emergency save function is built into the web app (and desktop) which retains a copy of your typed information even if you haven't manually saved it and your device crashes or you lose Wi-Fi connection.
The activity saves as Incomplete on your local device until you go back into it to manually save it. Until manually saved, the activity cannot synch across to your desktop site.
If you are writing an extensive entry, we still recommend that you periodically save this, and then re-open to continue writing.
You can find a list of approved activities under the "More" option.
This depends on the device that you are using. If you are using an iOS device (iPhone, iPad) you will only be able to attach photo files, such as posters or programmes that you have taken pictures of and that appear in the camera roll.
If you are using an Android device, you can do the above, but can also save documents such as PDFs directly to the phone. These documents can then be uploaded to an Activity as a resource.
If your device does not allow this and you use a cloud system such as Dropbox or One Drive and have documents uploaded, you can alternatively paste the URL for the document in the references section when you create a new resource and then link this resource to an Activity.
Refer to the instructions available for your cloud service in relation to creating a URL for saved documents.
This is expected behaviour – the Summary screen links up with your information in the full version of the CPD Online Diary.
It can only update when there is a Wi-Fi signal for your device to allow the new activities to synch to your Diary and update your Summary screen in the full version, thereby updating the web app summary screen.
Please check that your device is not set to the 'private browsing' mode. Deselect the private or incognito option in your browser and repeat the steps to set-up.
Some mobile devices have tab limits which vary between operating systems. If you get this error message please close some of your open windows/tabs and try again.
In order to view your certificate/revalidation domain summary you may need to install a program (such as Adobe) which allows your device to open PDFs.
Unfortunately you can't. When you delete an activity, you receive a prompt asking you to confirm if you are sure you want to delete the record, before you delete the record altogether. But once you have chosen to delete it, there's no way of recovering it on the app or via the main CPD diary.
A bug in the web app caused by a September 2015 Apple iOS upgrade resulted in Apple device web app users adding activities to the web app which appeared to save, but did not appear in the Activities list. The bug was fixed in October 2015. From then until January 2016, we notified users and told them to delete the affected home screen icon to resolve this. Some users were still unaware of the issue and so have lost data. As information does not save, there is no way for the College to retrieve the data.
Remember to check your records have saved. On the web app, check the informatiohas saved in the Activities tab. On the desktop version, check the information has synched across - go to the More tab, select Synchronise now, and access Full version CPD Diary.


I'm doing a quick audit on what the Trump victory means to me and our industry.
First of all, there are the unknowns. Who the heck knows what platitudes like "make America great again" (isn't it doing pretty well already ?) mean. Who knows. We will find out in the new year.
The markets will fall and so will my ISA investments and many millions will be wiped off share prices in the short term. The British pound will appreciate a bit and the dollar will fall. But this makes American exports more competitive, so, as with Brexit, it's an immediate win.
Trump's policy to enable US multinationals to bring their billions back onshore through massive tax cuts makes sense and will be very bad for Ireland and the EU. It should stimulate M&A within the US. Good for the VC industry.
Rights and the content market will probably be OK and remain highly protected. There's little doubt that Burnett and his production company protected Trump from embarrassing out takes during the hustings and that Trump would have launched his own production company or channel as a hedge had he lost. So he's aligned with the content industry, although I suspect he may want revenge on Springsteen, Bon Jovi and Gaga.
Perhaps most seriously, protectionism and Brexit will make it more difficult for US multinationals to operate globally. There may be serious trade wars between the US and China and the US and the EU. We recently saw Microsoft raise their prices 22% in the UK and US tech will get more and more expensive. And the EU will wonder why three US companies have a virtual monopoly on IT and why two others have a monopoly on the internet.
Ironically, the lack of a Trump TV will see Fox drift to the left, whilst other media will be forced to reflect their viewership and drift to the right. The media may instinctively lean left, but at the end of the day it is controlled by a very few very big businesses which are naturally conservative.
Whether these will be allowed to merge, such as AT&T and Time Warner, is questionable, but since Comcast was allowed to acquire NBCU it would seem to be difficult to object.
And there is little doubt that the media will be clamped down upon.
All this said. Who knows? We have a self-professed maverick in charge of all of our futures now.


Seth Rollins is going to paint exactly half of his Money In The Bank briefcase black.
WWE is looking to bring back Corporate Kane as a way to highlight the new Road To The White House mode in WWE 2K15 where you will role play as Kane's campaign manager.
There are talks of starting a "Freaky Friday" tag team gimmick where Big Show wears a fruit roll-up mask and Kane dresses like Andre The Giant.
Despite the former Drew McIntyre stating he will be back in WWE one day, Drew Galloway will be on a soon-to-be announced TNA PPV special called One Night Only: Entertainment Superstars Unleashed.
The first of the Impacts taped in NYC that you were excited for but have since completely forgotten about will air this Thursday.
Taryn Terrell vs. Terrence & Terrell is currently planned for Bound For Glory.
KENTA's WWE Manager Revealed! CLICK HERE TO FIND OUT WHO IT IS!
If you're a shady person and/or a seedy business, advertising space is available on ROHWrestling.com.
Shannon Moore has announced that he has pretty much retired from pro wrestling. Instead, he will now focus on raising awareness of the social injustices people with tattoos have to endure.
Lance Storm burned a LeBron James jersey because he strongly dislikes the concept of capitalizing two letters in one first name.
This entry was posted in ScoopZone Elite and tagged Lance Storm, roh, TNA, WWE on July 14, 2014 by Joey.
as I am not even a casual basketball fan, I only just realized LeBron's name got TWO capital litters!!!


Can I Give Fish Oil to My Baby?
The question is can EFAs be supplemented to younger children so that verbal apraxia/dyspraxia can be prevented?
infant formula. The purpose is to make infant formulas more like breast milk. So, giving the content of one ProEFA to an eight months old would provide about the same amount of DHA and half the ARA. Since some of the linoleic acid from the borage oil will be transformed by body into ARA, the total ARA will be close to the 100 mg/day dose. The 140 mg of EPA will be welcomed by the body.
happy to answer your pediatrician's questions on the above. I would like to hear from all those who want to try supplementing siblings with EFA for preventive purposes BEFORE STARTING THE SUPPLEMENTATION. It would be great if we could follow the changes in the supplemented sibling as they happen.
Best wishes and have a Happy Thanksgiving!
Are there any concerns of vitamin A or D toxicity (overdose) if I give proEFA to my 18 month old boy who is speech delayed and is undergoing evaluations to qualify for Early Intervention? Thank you.
Hi Monika! Only fish oils made from the liver of the fish (like cod liver oil) contain the vitamin A naturally. Fish oils not made from the liver do not contain vitamin A. CLO also contains the vitamin D which is not the type of oil we found success with in our group.
While pregnant and during breast feeding you provide your baby with "essential fatty acids" which are essential to our bodies, but we can't produce them so we need to consume them and yet they are virtually lacking in our diets today. The fish oils formula most of us found success with, one capsule is about equivalent to the dosage the FDA approved for infant formula. It's understandable but puts it into perspective that as a society we are more concerned over something that is essential and needed by the body then something that comes in a fast food wrapper. You can find more about fish oils in The Late Talker book, on this website and here's a "Fish Oil 101" page If after reading a bit you have any questions ask away -and don't be overwhelmed. You can also join our apraxia.org facebook page Fish oils seem easy enough to understand but the more you learn about them the more you'll be aware you don't know! But bottom line in my opinion just about everyone should be on them for health reasons alone -and that includes 18 month old late talkers for sure! For most of the children in the group we found success with the oils not made from the liver where the EPA is slightly higher than the DHA with a bit of GLA like ProEFA but for infants a formula higher in DHA may be better.Why not check with your child's pediatrician -I have found the better doctors are aware of the research linking good nutrition to improved neuro function.


Take the Bing Search Engine Optimization (SEO) Jump Start training course online at MVA and drive more traffic to your website.
Want to learn SEO and advance your career? These are the 25 best SEO resources you need to be reading for strategies, tactics, tips, insights, and ideas.
ClickMinded is an SEO training course for startups that want to grow their organic traffic and sales as quickly as possible.


High precision grinding wheel balancing machine - JP .
Consistent grinding and balancing of rolls is necessary for efficient . The correct way to measure concentricity on a grinding machine is 180º from wheel .
Drastically reduce grinder vibration with our Precision Balancing System. Your grinding wheels can now be accurately balanced in your . your machine will make less .
Nov 22, 2012 · rail wheel truing machine 1ak200 price ~ 33 000 . INDIAN RAILWAYS RAIL GRINDING MACHINE . 2:00. Railway Bogie Wheel Balancing - .
Toolroom Solutions - Grinding Wheel Company - Your online source for Tool Grinding Wheels, Grinding Wheel Adapters, Arbors, Chucks and Workholding. Toolroom Solutions specializes in WALTER service and WALTER parts for Walter grinding machines.
Grinding Wheel Balancing Machines | Products & .
Find Grinding Wheel Balancing Machines related suppliers, manufacturers, products and specifications on GlobalSpec - a trusted source of Grinding Wheel Balancing Machines information.
Grinding wheel balancing machine - All industrial .
Find your grinding wheel balancing machine easily amongst the 4 products from the leading brands (SCHENCK RoTec, .) on DirectIndustry, the industry specialist for your professional purchases.
Grinding train wheel balancing machines Rush Machinery | Wheel Truing and Dressing- Grinding train wheel balancing machines,Black Diamond Drill Grinder Parts Cut-Off Machines Drill and Tool Grinders Dynamic Balancing Machine Grinding Fixtures Grinding Fluid Filtration - FC 300 Series PCD Tool Grinding Wheel Truing .
Grinding wheel balancer Mcgyver . I didn't know much about balancing grinding wheels so thought . causing noticeable vibration in the machine and on the cut .
Nov 22, 2012 · rail wheel truing machine 1ak200 price ~ 33 000 . INDIAN RAILWAYS RAIL GRINDING MACHINE . 2:00. Railway Bogie Wheel Balancing - Duration: 9:33 .
Wheel Truing and Dressing. Cut-Off Machines. Balancing Machine. PCD Tool Grinding. Drill and Tool Grinders. Grinding Fixtures. Grinding Oil Filtration.
Tool & Cutter Grinding Wheels. . tools including milling cutters and drill bits. They can be used in portable and stationary equipment including CNC machines. .
GUIDE FOR RAIL TRACK MAINTENANCE & REPAIR CUTTING-OFF . Before mounting cutting-off or grinding wheels on the machine, . of rail track where grinding wheels .
Fully automatic operation means you no longer need to pre-balance grinding wheels, . to fit machines with wheel diameters . through a precision gear train.
Balancing Machines, Balancing Equipment | Precision .
We offer dynamic balancing machines and balancing equipment for rotating parts and components. . Grinding wheel balancing, wheel balancing; Turbine Balancing .
KURE GRINDING WHEEL offers a wide range of grinding wheels and related products and materials. . True wheel before balancing . (Warm up grinding machine .
grinding train wheel balancing machines - greencast .
Balancing machines All industrial manufacturers Videos. Find all the manufacturers of balancing machines and contact them directly on vertical balancing machine / dynamic / for trains / automatic CMT750 FW . vertical balancing machine / dynamic / hydraulic / for grinding wheels Schmitt Europe.
Grinding Wheel Balancing Machine, Grinding Wheel . .
Clamps & Grinding Wheels . camshaft use grinding machine; grinding train wheel balancing machines; rotor stump-grinder; butterfly wet grinder how much cost; Contact .
Single or double column machines are available with adjustable leveling rail machines with . grinding wheel machinery. Types of grinding . wheel, balancing .
Static Balancing Machines - Hines Industries, Inc.
Static Balancing Machines Non-Rotating Vertical Balancing Machine (HVS) The vertical, non-rotating or static balancer is used for single plane balancing where only force unbalance exists. Static balancing can be applied to grinding wheels, propellers, refinery plates, tires, and wheels.
Grinding Wheel Balancing Machines - Hines Industries, .
Grinding Wheel Balancing Machines. The Hines Grinding Wheel balancer is an HVS. This machine is just one example of the .
Harsco Rail's Transit Grinder, . The machine can effectively grind switches, . Accommodates grinding wheels of 102 mm ( 4 in.), 127 mm .
Balancing Plants / Rail Vehicles - Balancing Machines .
Grinding Wheel Balancing Devices; . Balancing Plants / Rail Vehicles 1 Plane Measuring and Balancing Machine for Railway Carriage Wheels Type BVW-F.


text:
Q: Fluent validation not work on kendo dropdown hi  i am using a Kendo drop down control and i used Fluent validation in it but when i run it . validation not work on kendo drop down.
This Is Kendo drop down which bind by Parent_Category_ID
@(Html.Kendo().DropDownListFor(model=>model.Parent_Category_ID)
          .Name("Parent_Category_ID")
          .OptionLabel("-----------Select Parent Category-----------")
          .DataTextField("CategoryName")
          .DataValueField("ID")
          .HtmlAttributes(new { style = "width:300px", })
          .Filter(FilterType.StartsWith)
          .DataSource(source =>
          {
              source.Read(read =>
              {
                  read.Action("GetCategory", "Category");
              })
              .ServerFiltering(true);
          })
    )
    @Html.ValidationMessageFor(model => model.Parent_Category_ID)

and That is my fluent Control ModelValidator
public CategoryValidator()
        {
            RuleFor(x => x.Category_Name).NotNull().WithMessage("Category Must Not be Empty !").Length(6).WithMessage("Category Name should be 6 character Long !");
            RuleFor(x => x.Parent_Category_ID).NotNull().WithMessage("Parent Category must Not be empty !");
            RuleFor(x => x.Category_Desc).NotNull().WithMessage("Please Write Some Description !");
        }

and This Category Models
 public class CategoryModel
    {
        [Key]
        public int Category_ID { get; set; }
        public int Parent_Category_ID { get; set; }
        public string Category_Name { get; set; }
        public string Category_Desc { get; set; }
        public bool IsGenderApplicable { get; set; }
        public bool IsAgeApplicable { get; set; }
        public bool IsActive { get; set; }
    }

A: In your CategorValidator, you have a duplicate rule for Parent_Category_ID. Based on the validation message, looks like it is not intentional.


Nigerian authorities are taking steps to prevent a possible humanitarian disaster ahead of the flooding that would result if a dike failed in a crater lake in neighboring Cameroon. There are new warnings that a natural barrier hemming in the lake waters is on the brink of collapse. The Cameroon government has said there is nothing to fear. From Doula, Cameroon, Voice of America English to Africa Service reporter Ntaryike Divine, Jr. says Nigerians are concerned about a new report that says the dam in Lake Nyos may soon collapse.
The report was issued by the U.N. Office for the Coordination of Humanitarian Affairs [OCHA] and the U.N. Environment Program [UNEP].
If the dam did fail, lake waters would rush downstream, flooding several villages in Cameroon and Nigeria. Hundreds of thousands of people would be killed, and livestock and farmlands would be destroyed.
The large lake lies high on the flank of an inactive volcano. Its water is hemmed in by a natural dike of volcanic rock that geologists say has weakened considerably over time. Experts at Cameroon's Institute of Mining and Geological Research have downplayed these fears. They acknowledge the dam has weakened but deny there's an immediate threat of collapse.
But a U.N. team inspecting the dam three years ago said it had sagged seriously and would not last another two decades. They said the slightest tremor would cause it to crumble and recommended that the dam be reinforced or some of the water be released to curb pressure on the dike. But the Cameroon government said those measures were too expensive.
Officials in Nigeria's Benue State are taking preemptive measures. They're building resettlement camps with a $500,000 allotment from the Federal Government.
At least 11 settlements in the state have been identified as high-risk zones. The governor, Gabriel Tor-Suswan, has urged the Nigerian National Assembly to authorize the purchase of relief equipment, including helicopters.
He told the Nigerian Daily Trust newspaper the U.N. report recommended the Federal Government spend $15 million over the next two years to prepare for the humanitarian help that might be necessary. The Benue State Executive Council has ruled that the threat is real.
Lake Nyos hit the headlines in August 1986 when it suddenly emitted large clouds of carbon dioxide. The gas killed 1,700 people and 3,500 livestock in surrounding villages in Cameroon. Scientists rushed to the area to study the event. They said it was the first-known large-scale asphyxiation brought about by natural causes. They suspected that pockets of magma - molton rock beneath the earth's surface - lying beneath the lake leaked carbon dioxide into the water, causing it to change into toxic carbonic oxide.
To prevent a repeat, American scientists installed a degassing tube in the lake in 2001. It regularly siphons water saturated with carbon dioxide, taking the gas from the lake bottom to the surface and releasing it gradually in safe quantities. The same process is used at another Cameroonian lake at Mounoun. Experts say more tubes are needed. The government hopes relief and humanitarian groups will help.
Meanwhile, Cameroon continues its preparations for the current threat from Lake Nyos – the possible failure of the dam.


The 2019 Lexus GX 460 is a mid-size luxury SUV that seats up to seven passengers across three rows. It competes with the Lincoln MKT, BMW X6, and Acura MDX. Powering the GX 460 is a 301-hp, 4.6-liter V-8 engine mated to a six-speed automatic transmission and four-wheel drive. Maximum cargo capacity is 64.7 cubic feet with the rear seats folded down.
Three trims are available: the base model, Premium, and Luxury.


Back pain is one of the top causes of missed workdays. When it's a challenge to get out of bed or simply walk, it's hard to imagine getting through an 8-10-hour day. Many sufferers of back pain consult with surgeons to solve their problems.
Unfortunately, back surgery is not always successful. A non-invasive alternative is chiropractic care for back pain. One chiropractic technique for back pain is spinal decompression therapy.
Spinal decompression therapy is just what it sounds like – a treatment intended to stretch out the spine. Chiropractors who practice spinal decompression therapy do so using a table or specialized instrument.
The goal of spinal decompression therapy is to decrease the pressure in the spine, as the name suggests. The way chiropractors typically manipulate patients' spines is called spinal traction and is a form of spinal decompression therapy.
The theory holds that by decreasing pressure between the discs of the spine, chiropractors can coax the irritated spinal tissue to relax. This therapy decreases pressure not only between discs but also inside individual discs. Lower pressure inside spinal discs encourages healing by promoting the uptake of nutrients back into the discs.
Spinal decompression therapy addresses the umbrella of "back pain." But back pain often affects more than just the patient's back. Disc problems, sciatica, and neck pain can be alleviated with spinal decompression. Whether discs are bulging, degenerating, or herniated, relieving spinal pressure can return them to normal. The pain of sciatica can radiate down the legs and backside, and these struggles can be eased via spinal decompression.
Older spinal decompression treatments involved being strapped into a harness on a table. The patient would be manually stretched, or the table under them would move around in such a way that the patient's spine would be shifted, allowing pressure to release.
Now, spinal decompression tables are connected to powerful computers and are motorized. Chiropractors can change the pressure, angle, and other settings with the touch of a button to customize the patient experience. These computerized tables alternate between stretching and relaxing specific segments of the spine, depending on where the patient's issues are localized.
Gradual improvements are made during each short spinal decompression session. Over a period of a few weeks, or however long is prescribed by a chiropractor, the spinal pressure will decrease to mitigate back pain.
Despite requiring anywhere from 15 to 30 sessions, spinal decompression therapy is usually far more affordable than back surgery. Additionally, spinal decompression therapy is lower risk than back surgery. Patients are not placed under anesthesia and do not require drugs.
A knowledgeable chiropractor will encourage spinal decompression therapy graduates to enhance their results with additional therapy. This involves exercises which will strengthen the back muscles. When the back muscles are strong and balanced, the spine is less likely to accumulate pressure again, thus preventing or minimizing future back pain.
Patients get the most out of a treatment when it is the last one that they need. Trying spinal decompression therapy and following through on rehab exercises can mean eliminating back pain for good. Chiropractic care in Garden City, MI may be the answer for those suffering from back pain.


text:
Q: Getting push reject when trying to push to a remote branch After getting changes from a different branch using rebase when, I'm trying push the new changes to a remote private branch I'm getting the following message

Push of the current branch XXXX was rejected.
      Remotes changes needs to be merged before pushing.
      In this case merge is highly recommended, because there are non pushed
      merge commits. Rebasing them can lead to problems.

Can you please explain more about this problem?
If I'm using my own personal branch can I force push to it without a worry?


George Washington Papers, Series 4, General Correspondence: George Washington to Henry Knox . 1778. Manuscript/Mixed Material. https://www.loc.gov/item/mgw449284/.
(1778) George Washington Papers, Series 4, General Correspondence: George Washington to Henry Knox . [Manuscript/Mixed Material] Retrieved from the Library of Congress, https://www.loc.gov/item/mgw449284/.
George Washington Papers, Series 4, General Correspondence: George Washington to Henry Knox . 1778. Manuscript/Mixed Material. Retrieved from the Library of Congress, <www.loc.gov/item/mgw449284/>.


text:
Notions - John Kelly on his new poetry collection
Updated / Saturday, 27 Oct 2018 19:05
By John Kelly
Writer & Broadcaster
The publication of my first poetry collection Notions has provoked, in the main, the following responses from my friends. Some say they had no idea that I wrote poetry at all and others, those who have known me for thirty years or more, are asking why it has taken me so long? And that's not a question I can answer easily.
Back in the late eighties I was one of a bunch of undergraduate poets at Queen's University in Belfast. I say 'bunch' because the world 'group' refers specifically to Heaney, Mahon and Longley who were, of course, the hardest imaginable act to follow. That said, the poets of my generation were published in all the journals and gathered together in the best anthologies. To the outsider, some of us might have appeared to be up and running.
I was studying law at the time, but I also used to hang around the English department, sneaking into some of the lectures, and attending readings organized by the English Society. It was there that I met poets like John Hewitt, Padraic Fiacc, Ciaran Carson, James Simmons and Frank Ormsby. Medbh McGuckian ran a weekly get-together (again I avoid the word group) where young writers could read and discuss their work and I was generously allowed to attend. I started reading at events and soon found myself sharing a stage with established poets – including Heaney – and, in America, with the likes of Thom Gunn and James Liddy.
As I approached the age of 50, certain life experiences, good and bad, were beginning to insist on clarification, expression and preservation.
So why stop? Basically I came to a point when I no longer trusted what I was doing. My poems in those days were often humorous and tended to go down well at readings. This, of course, is no bad thing in itself, but I eventually came to realise that I was writing with that live audience in mind, and was employing the strategies of stand-up comic to deliver it.
As a result, much of what I wrote was constantly undercut by the persona I presented at readings. It was also undercut by a general lack of experience and, of course, ability. Certainly, many writers produce great work in their early twenties but such people tend to be touched by genius, and I was not in that ballpark. And while I would never stop believing in the poetry of others, I just decided to try other things for myself and, with that, the impulse appeared to depart. I came to the conclusion, and doubtless there were others who agreed, that while I had written a few poems, I wasn't a poet. As Liam O'Flynn used to say, "there's a huge difference in playing the pipes and being a piper."
As I approached the age of 50, however, certain life experiences, good and bad, were beginning to insist on clarification, expression and preservation. I also felt the need to steady myself in the face of mental messiness, and so whenever lines came into my head, I wrote them down in the notes app of my phone.
Then I noticed that rhythms and rhymes were starting to impose themselves, and also that memories and glimpses of memories were beginning to connect. I tried to tune in and eventually I chanced a few actual poems. I wrote secretly and constantly and found a whole new satisfaction in trying to construct something with words. But this was in the shed. To move from there to a first collection is a big step, and I'm very grateful to Dedalus Press for stepping out with me.
Winter's Blessing
Unexpected birdsong
in the brief sun
of Sundays after Christmas
when you drink too much
and most miss the dead.
When you bow your head
to the soloing thrush,
lit like an old friend's soul
in the bones of a silver birch.
Notions by John Kelly is published by Dedalus Press.
Writing The Quick: Jessica Traynor on her new poetry collection Poetry
More by John Kelly
'My job is simply to facilitate great artists in communicating something about their art'
Culture | 09 Nov 19
John Kelly on Aretha Franklin's gospel classic Amazing Grace
Music | 16 Aug 18
John Kelly on The Joshua Tree: 'an album that defined the era'
Music | 19 Jan 18


一無所有(進口)There is nothing left ..
Foo Fighters is an American alternative rock band originally formed in 1994 by drummer Dave Grohl as a one-man project following the dissolution of his previous band Nirvana. The band got its name from the UFOs and various aerial phenomena that were reported by Allied aircraft pilots in World War II, which were known collectively as foo fighters.
Prior to the release of the Foo Fighters`1995 debut album Foo Fighters, which featured Grohl as the only official member, Grohl recruited bassist Nate Mendel and drummer William Goldsmith, both formerly of Sunny Day Real Estate, as well as fellow Nirvana touring bandmate Pat Smear as guitarist to complete the lineup. Goldsmith quit during the recording of the group`s second album, The Colour and the Shape in 1997 when most of the drum parts were re-recorded by Grohl himself. Smear`s departure followed soon afterward. They were replaced by Taylor Hawkins and Franz Stahl, respectively, although Stahl was fired before the recording of the group`s third album, There Is Nothing Left to Lose. The band briefly continued as a trio until Chris Shiflett joined as the band`s lead guitarist after the completion of this album. The band released its fourth album, One by One, in 2002. The group followed that release with the two-disc In Your Honor (2005), which was split between acoustic songs and heavier material. Foo Fighters released its sixth album, Echoes, Silence, Patience & Grace, in 2007 and in 2010, it was confirmed that Smear had officially rejoined the band after touring with the Foo Fighters as an unofficial member between 2006 and 2009. Over the course of the band`s career, three of its albums have won Grammy Awards for Best Rock Album, and all seven albums have been nominated. The band`s seventh studio album, Wasting Light, was released in 2011. Here's the full 100 minute performance by the Foos at New York Cities most iconic stage – Ed Sullivan Theatre. Kudos to the Foo Fighters for recognizing the Rock`n`Roll landmark by using the Beatles font on Taylor`s kick drum and wearing the classic Beatle suits from their historic Ed Sullivan Show appearance in 1964. Therefore half of the show was filmed in black and white in honor of The Fab F.


text:
What is to Come of the #YoSoy132 Movement?
By Jacob Ertel
The #YoSoy132 movement (coined by sensationalist pundits as "the Mexican Spring") was a crucial news story in the month of June. With Mexico's presidential election drawing near, the movement's criticism of Enrique Peña Nieto and unjust media coverage garnered much attention over the past month, attracting comparisons to both the Arab Spring and the Occupy Wall Street movement. Of course, these are hyperbolic comparisons, but the use of social media (most notably, Twitter) in the #YoSoy132 movement follows the trend of young people using the internet as a means for organizing rallies and protests against government hypocrisy and media censorship.
The #YoSoy132 movement began on May 11th in response to Enrique Peña Nieto's speaking at the Ibero-American University in Santa Fe, Mexico City. Many students from the university protested Peña Nieto's defending his actions regarding the 2006 Atenco incident, in which the then-governor of the State of Mexico ordered state police to break up a local protest. Two protestors were killed by the police, who violated numerous human rights and were later challenged in court. Peña Nieto's attitude during his latest speech ignited a large anti-PRI sentiment, and students heckled him to the point where he had to leave the premises. Later, Peña Nieto claimed that the protestors at the Ibero-American University were not actually students, but rather "intolerant, inconsiderate 'stooges' paid to protest against Peña Nieto by the leftist PRD party," reports thenation.com. In response to this, 131 students posted videos on youtube showing their student IDs and speaking out against both Peña Nieto and the way politics are portrayed in the mass media. As thenation.com points out, "In particular, students have expressed frustration with the 'monopolization' of Mexican politics and media. The example New America Media provides is a company named Televisa, which along with TV Azteca, controls 95 percent of Mexico's TV market." Thus, the #YoSoy132 movement was born, as people took to Twitter and Facebook to show their solidarity as the "132nd student."
Though the movement gained massive coverage in June, its direction remains to be seen now that Peña Nieto has won Mexico's presidency. It is important to note that the movement, like Occupy Wall Street, is grassroots and does not affiliate itself with any party. Perhaps this will provide it with some longevity.
Click here for the whole story from thenation.com
One Response to " What is to Come of the #YoSoy132 Movement? "
Arlene Love on July 8, 2012 at 8:53 pm
It is interesting that of today, July 8, there seems to be no further news about Calderon's contesting Nieto's win.