{"action":"created","comment":{"url":"https://api.github.com/repos/mapsme/omim/pulls/comments/75489587","id":75489587,"diff_hunk":"@@ -84,109 +117,187 @@ struct Emitter : public EmitterBase\n   bool Finish() override\n   {\n     LOG_SHORT(LINFO, (\"Num of tourism elements:\", m_features.size()));\n-    vector<size_t> elementIndexes(m_features.size());\n-    iota(elementIndexes.begin(), elementIndexes.end(), 0);\n+    return true;\n+  }\n \n-    shuffle(elementIndexes.begin(), elementIndexes.end(), minstd_rand(FLAGS_seed));\n-    if (FLAGS_selection_size < elementIndexes.size())\n-      elementIndexes.resize(FLAGS_selection_size);\n+private:\n+  BookingDataset const & m_bookingDataset;\n+  map<osm::Id, FeatureBuilder1> & m_features;\n+};\n \n-    stringstream outStream;\n+feature::GenerateInfo GetGenerateInfo()\n+{\n+  feature::GenerateInfo info;\n+  info.m_bookingDatafileName = FLAGS_booking;\n+  info.m_osmFileName = FLAGS_osm;\n+  info.SetNodeStorageType(\"map\");\n+  info.SetOsmFileType(\"o5m\");\n \n-    for (size_t i : elementIndexes)\n-    {\n-      auto const & fb = m_features[i];\n-      auto const bookingIndexes = m_bookingDataset.GetNearestHotels(\n-          MercatorBounds::ToLatLon(fb.GetKeyPoint()),\n-          BookingDataset::kMaxSelectedElements,\n-          BookingDataset::kDistanceLimitInMeters);\n-\n-      for (size_t const j : bookingIndexes)\n-      {\n-        auto const & hotel = m_bookingDataset.GetHotel(j);\n-        auto const score = booking_scoring::Match(hotel, fb);\n-\n-        auto const center = MercatorBounds::ToLatLon(fb.GetKeyPoint());\n-        double const distanceMeters = ms::DistanceOnEarth(center.lat, center.lon,\n-                                                          hotel.lat, hotel.lon);\n-        auto const matched = score.IsMatched();\n-\n-        outStream << \"# ------------------------------------------\" << fixed << setprecision(6)\n-                  << endl;\n-        outStream << (matched ? 'y' : 'n') << \" \\t\" << i << \"\\t \" << j\n-                  << \"\\tdistance: \" << distanceMeters\n-                  << \"\\tdistance score: \" << score.m_linearNormDistanceScore\n-                  << \"\\tname score: \" << score.m_nameSimilarityScore\n-                  << \"\\tresult score: \" << score.GetMatchingScore()\n-                  << endl;\n-        outStream << \"# \" << PrintBuilder(fb) << endl;\n-        outStream << \"# \" << hotel << endl;\n-        outStream << \"# URL: https://www.openstreetmap.org/?mlat=\" << hotel.lat\n-                  << \"&mlon=\" << hotel.lon << \"#map=18/\" << hotel.lat << \"/\" << hotel.lon << endl;\n-      }\n-      if (!bookingIndexes.empty())\n-        outStream << endl << endl;\n-    }\n+  info.m_intermediateDir = my::GetDirectory(FLAGS_factors);\n \n-    if (FLAGS_sample_data.empty())\n-    {\n-      cout << outStream.str();\n-    }\n-    else\n-    {\n-      ofstream file(FLAGS_sample_data);\n-      if (file.is_open())\n-      {\n-        file << outStream.str();\n-      }\n-      else\n-      {\n-        LOG(LERROR, (\"Can't output into\", FLAGS_sample_data));\n-        return false;\n-      }\n-    }\n+  // Set other info params here.\n \n-    return true;\n+  return info;\n+}\n+\n+struct SampleItem\n+{\n+  enum MatchStatus {Uninitialized, Yes, No};\n+\n+  SampleItem() = default;\n+\n+  SampleItem(osm::Id const & osmId, uint32_t const bookingId, MatchStatus const match = Uninitialized)\n+   : m_osmId(osmId)\n+   , m_bookingId(bookingId)\n+   , m_match(match)\n+  {\n   }\n \n-  BookingDataset m_bookingDataset;\n-  vector<FeatureBuilder1> m_features;\n+  osm::Id m_osmId;\n+  uint32_t m_bookingId = BookingDataset::kInvalidHotelIndex;\n+\n+  MatchStatus m_match = Uninitialized;\n };\n \n-unique_ptr<Emitter> GetEmitter(feature::GenerateInfo const & info)\n+ostream & operator<<(ostream & ost, SampleItem::MatchStatus const status)\n {\n-  LOG_SHORT(LINFO, (\"Booking data:\", FLAGS_booking_data));\n-  return make_unique<Emitter>(info);\n+  switch (status)\n+  {\n+  case SampleItem::Yes: ost << \"Yes\"; break;\n+  case SampleItem::No: ost << \"No\"; break;\n+  case SampleItem::Uninitialized: ost << \"Uninitialized\"; break;\n+  }\n+  return ost;\n }\n \n-feature::GenerateInfo GetGenerateInfo()\n+SampleItem::MatchStatus ReadMatchStatus(string const & str)\n {\n-  feature::GenerateInfo info;\n-  info.m_bookingDatafileName = FLAGS_booking_data;\n-  info.m_osmFileName = FLAGS_osm_file_name;\n-  info.SetNodeStorageType(\"map\");\n-  info.SetOsmFileType(\"o5m\");\n+  if (str == \"Yes\")\n+    return SampleItem::Yes;\n \n-  info.m_intermediateDir =  my::GetDirectory(FLAGS_sample_data);\n+  if (str == \"No\")\n+    return SampleItem::No;\n \n-  // ...\n+  if (str == \"Uninitialized\")\n+    return SampleItem::Uninitialized;\n \n-  return info;\n+  MYTHROW(ParseError, (\"Can't make SampleItem::MatchStatus from string:\", str));\n+}\n+\n+SampleItem ReadSampleItem(string const & str)\n+{\n+  SampleItem item;\n+\n+  auto const parts = strings::Tokenize(str, \"\\t\");\n+\n+  item.m_osmId = ReadDebuggedPrintedOsmId(parts[0]);\n+  if (!strings::to_uint(parts[1], item.m_bookingId))\n+    MYTHROW(ParseError, (\"Can't make uint32 from string:\", parts[1]));\n+  item.m_match = ReadMatchStatus(parts[2]);\n+\n+  return item;\n+}\n+\n+vector<SampleItem> ReadSample(istream & ist)\n+{\n+  vector<SampleItem> result;\n+\n+  size_t lineNumber = 1;\n+  try\n+  {\n+    for (string line; getline(ist, line); ++lineNumber)\n+    {\n+      result.emplace_back(ReadSampleItem(line.data()));\n+    }\n+  }\n+  catch (ParseError const & e)\n+  {\n+    LOG(LERROR, (\"Wrong format: line\", lineNumber, e.Msg()));\n+    exit(1);\n+  }\n+\n+  return result;\n+}\n+\n+vector<SampleItem> ReadSampleFromFile(string const & name)\n+{\n+  ifstream ist(name);\n+  CHECK(ist.is_open(), (\"Stream is not opened.\"));\n+  return ReadSample(ist);\n+}\n+\n+void GenerateFactors(BookingDataset const & booking, map<osm::Id, FeatureBuilder1> const & features,\n+                     vector<SampleItem> const & sampleItems, ostream & ost)\n+{\n+  for (auto const & item : sampleItems)\n+  {\n+    auto const & hotel = booking.GetHotelById(item.m_bookingId);\n+    auto const & feature = features.at(item.m_osmId);\n+\n+    auto const score = booking_scoring::Match(hotel, feature);\n+\n+    auto const center = MercatorBounds::ToLatLon(feature.GetKeyPoint());\n+    double const distanceMeters = ms::DistanceOnEarth(center.lat, center.lon,\n+                                                      hotel.lat, hotel.lon);\n+    auto const matched = score.IsMatched();\n+\n+    ost << \"# ------------------------------------------\" << fixed << setprecision(6)\n+        << endl;\n+    ost << (matched ? 'y' : 'n') << \" \\t\" << DebugPrint(feature.GetMostGenericOsmId())\n+        << \"\\t \" << hotel.id\n+        << \"\\tdistance: \" << distanceMeters\n+        << \"\\tdistance score: \" << score.m_linearNormDistanceScore\n+        << \"\\tname score: \" << score.m_nameSimilarityScore\n+        << \"\\tresult score: \" << score.GetMatchingScore()\n+        << endl;\n+    ost << \"# \" << PrintBuilder(feature) << endl;\n+    ost << \"# \" << hotel << endl;\n+    ost << \"# URL: https://www.openstreetmap.org/?mlat=\" << hotel.lat\n+        << \"&mlon=\" << hotel.lon << \"#map=18/\" << hotel.lat << \"/\" << hotel.lon << endl;\n+  }\n }\n }  // namespace\n \n int main(int argc, char * argv[])\n {\n+  if (argc == 1)\n+  {\n+    google::ShowUsageWithFlags(argv[0]);\n+    exit(0);\n+  }\n+\n   google::SetUsageMessage(\n       \"Takes OSM XML data from stdin and creates\"\n       \" data and index files in several passes.\");\n   google::ParseCommandLineFlags(&argc, &argv, true);\n \n+  CHECK(!FLAGS_sample.empty(), (\"Please specify sample path.\"));\n+  CHECK(!FLAGS_osm.empty(), (\"Please specify osm path.\"));\n+  CHECK(!FLAGS_booking.empty(), (\"Please specify booking path.\"));\n+  CHECK(!FLAGS_factors.empty(), (\"Please specify factors path.\"));\n+\n   classificator::Load();\n \n   auto info = GetGenerateInfo();\n   GenerateIntermediateData(info);\n-  GenerateFeatures(info, GetEmitter);\n+\n+  LOG_SHORT(LINFO, (\"Booking data:\", FLAGS_booking));\n+  BookingDataset booking(info.m_bookingDatafileName);\n+  LOG_SHORT(LINFO, (booking.Size(), \"hotels are loaded from Booking.\"));\n+\n+  map<osm::Id, FeatureBuilder1> features;\n+  GenerateFeatures(info, [&booking, &features](feature::GenerateInfo const & /* info */)\n+  {\n+    return make_unique<Emitter>(booking, features);\n+  });\n+\n+  auto const sample = ReadSampleFromFile(FLAGS_sample);\n+  LOG(LINFO, (\"Sample size is\", sample.size()));\n+  {\n+    ofstream ost(FLAGS_factors);\n+    CHECK(ost.is_open(), (\"Can't open file\", FLAGS_factors));","path":"generator/booking_quality_check/booking_quality_check.cpp","position":null,"original_position":343,"commit_id":"d71e23c61102d86776d6a9cb079ef0cd1b7cabf9","original_commit_id":"3fe8fc56371dedc9308716054d544d560ab17577","user":{"login":"mgsergio","id":6658987,"avatar_url":"https://avatars.githubusercontent.com/u/6658987?v=3","gravatar_id":"","url":"https://api.github.com/users/mgsergio","html_url":"https://github.com/mgsergio","followers_url":"https://api.github.com/users/mgsergio/followers","following_url":"https://api.github.com/users/mgsergio/following{/other_user}","gists_url":"https://api.github.com/users/mgsergio/gists{/gist_id}","starred_url":"https://api.github.com/users/mgsergio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mgsergio/subscriptions","organizations_url":"https://api.github.com/users/mgsergio/orgs","repos_url":"https://api.github.com/users/mgsergio/repos","events_url":"https://api.github.com/users/mgsergio/events{/privacy}","received_events_url":"https://api.github.com/users/mgsergio/received_events","type":"User","site_admin":false},"body":"Done.","created_at":"2016-08-19T14:20:31Z","updated_at":"2016-08-19T14:20:31Z","html_url":"https://github.com/mapsme/omim/pull/4083#discussion_r75489587","pull_request_url":"https://api.github.com/repos/mapsme/omim/pulls/4083","_links":{"self":{"href":"https://api.github.com/repos/mapsme/omim/pulls/comments/75489587"},"html":{"href":"https://github.com/mapsme/omim/pull/4083#discussion_r75489587"},"pull_request":{"href":"https://api.github.com/repos/mapsme/omim/pulls/4083"}}},"pull_request":{"url":"https://api.github.com/repos/mapsme/omim/pulls/4083","id":81650498,"html_url":"https://github.com/mapsme/omim/pull/4083","diff_url":"https://github.com/mapsme/omim/pull/4083.diff","patch_url":"https://github.com/mapsme/omim/pull/4083.patch","issue_url":"https://api.github.com/repos/mapsme/omim/issues/4083","number":4083,"state":"open","locked":false,"title":"[booking] Booking workflow","user":{"login":"mgsergio","id":6658987,"avatar_url":"https://avatars.githubusercontent.com/u/6658987?v=3","gravatar_id":"","url":"https://api.github.com/users/mgsergio","html_url":"https://github.com/mgsergio","followers_url":"https://api.github.com/users/mgsergio/followers","following_url":"https://api.github.com/users/mgsergio/following{/other_user}","gists_url":"https://api.github.com/users/mgsergio/gists{/gist_id}","starred_url":"https://api.github.com/users/mgsergio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mgsergio/subscriptions","organizations_url":"https://api.github.com/users/mgsergio/orgs","repos_url":"https://api.github.com/users/mgsergio/repos","events_url":"https://api.github.com/users/mgsergio/events{/privacy}","received_events_url":"https://api.github.com/users/mgsergio/received_events","type":"User","site_admin":false},"body":"@ygorshenin \r\n@mpimenov \r\n@milchakov ","created_at":"2016-08-17T14:15:27Z","updated_at":"2016-08-19T14:20:31Z","closed_at":null,"merged_at":null,"merge_commit_sha":"878c0be0c7b5289491d432310bc56449c25a753b","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/mapsme/omim/pulls/4083/commits","review_comments_url":"https://api.github.com/repos/mapsme/omim/pulls/4083/comments","review_comment_url":"https://api.github.com/repos/mapsme/omim/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mapsme/omim/issues/4083/comments","statuses_url":"https://api.github.com/repos/mapsme/omim/statuses/d71e23c61102d86776d6a9cb079ef0cd1b7cabf9","head":{"label":"mgsergio:booking-workflow","ref":"booking-workflow","sha":"d71e23c61102d86776d6a9cb079ef0cd1b7cabf9","user":{"login":"mgsergio","id":6658987,"avatar_url":"https://avatars.githubusercontent.com/u/6658987?v=3","gravatar_id":"","url":"https://api.github.com/users/mgsergio","html_url":"https://github.com/mgsergio","followers_url":"https://api.github.com/users/mgsergio/followers","following_url":"https://api.github.com/users/mgsergio/following{/other_user}","gists_url":"https://api.github.com/users/mgsergio/gists{/gist_id}","starred_url":"https://api.github.com/users/mgsergio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mgsergio/subscriptions","organizations_url":"https://api.github.com/users/mgsergio/orgs","repos_url":"https://api.github.com/users/mgsergio/repos","events_url":"https://api.github.com/users/mgsergio/events{/privacy}","received_events_url":"https://api.github.com/users/mgsergio/received_events","type":"User","site_admin":false},"repo":{"id":43430406,"name":"omim","full_name":"mgsergio/omim","owner":{"login":"mgsergio","id":6658987,"avatar_url":"https://avatars.githubusercontent.com/u/6658987?v=3","gravatar_id":"","url":"https://api.github.com/users/mgsergio","html_url":"https://github.com/mgsergio","followers_url":"https://api.github.com/users/mgsergio/followers","following_url":"https://api.github.com/users/mgsergio/following{/other_user}","gists_url":"https://api.github.com/users/mgsergio/gists{/gist_id}","starred_url":"https://api.github.com/users/mgsergio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mgsergio/subscriptions","organizations_url":"https://api.github.com/users/mgsergio/orgs","repos_url":"https://api.github.com/users/mgsergio/repos","events_url":"https://api.github.com/users/mgsergio/events{/privacy}","received_events_url":"https://api.github.com/users/mgsergio/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mgsergio/omim","description":"MAPS.ME - Offline OpenStreetMap maps for iOS/Android/Mac/Linux/Windows","fork":true,"url":"https://api.github.com/repos/mgsergio/omim","forks_url":"https://api.github.com/repos/mgsergio/omim/forks","keys_url":"https://api.github.com/repos/mgsergio/omim/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mgsergio/omim/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mgsergio/omim/teams","hooks_url":"https://api.github.com/repos/mgsergio/omim/hooks","issue_events_url":"https://api.github.com/repos/mgsergio/omim/issues/events{/number}","events_url":"https://api.github.com/repos/mgsergio/omim/events","assignees_url":"https://api.github.com/repos/mgsergio/omim/assignees{/user}","branches_url":"https://api.github.com/repos/mgsergio/omim/branches{/branch}","tags_url":"https://api.github.com/repos/mgsergio/omim/tags","blobs_url":"https://api.github.com/repos/mgsergio/omim/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mgsergio/omim/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mgsergio/omim/git/refs{/sha}","trees_url":"https://api.github.com/repos/mgsergio/omim/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mgsergio/omim/statuses/{sha}","languages_url":"https://api.github.com/repos/mgsergio/omim/languages","stargazers_url":"https://api.github.com/repos/mgsergio/omim/stargazers","contributors_url":"https://api.github.com/repos/mgsergio/omim/contributors","subscribers_url":"https://api.github.com/repos/mgsergio/omim/subscribers","subscription_url":"https://api.github.com/repos/mgsergio/omim/subscription","commits_url":"https://api.github.com/repos/mgsergio/omim/commits{/sha}","git_commits_url":"https://api.github.com/repos/mgsergio/omim/git/commits{/sha}","comments_url":"https://api.github.com/repos/mgsergio/omim/comments{/number}","issue_comment_url":"https://api.github.com/repos/mgsergio/omim/issues/comments{/number}","contents_url":"https://api.github.com/repos/mgsergio/omim/contents/{+path}","compare_url":"https://api.github.com/repos/mgsergio/omim/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mgsergio/omim/merges","archive_url":"https://api.github.com/repos/mgsergio/omim/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mgsergio/omim/downloads","issues_url":"https://api.github.com/repos/mgsergio/omim/issues{/number}","pulls_url":"https://api.github.com/repos/mgsergio/omim/pulls{/number}","milestones_url":"https://api.github.com/repos/mgsergio/omim/milestones{/number}","notifications_url":"https://api.github.com/repos/mgsergio/omim/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mgsergio/omim/labels{/name}","releases_url":"https://api.github.com/repos/mgsergio/omim/releases{/id}","deployments_url":"https://api.github.com/repos/mgsergio/omim/deployments","created_at":"2015-09-30T11:59:31Z","updated_at":"2016-03-17T15:31:31Z","pushed_at":"2016-08-19T14:20:28Z","git_url":"git://github.com/mgsergio/omim.git","ssh_url":"git@github.com:mgsergio/omim.git","clone_url":"https://github.com/mgsergio/omim.git","svn_url":"https://github.com/mgsergio/omim","homepage":null,"size":2562035,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"mapsme:master","ref":"master","sha":"1fda4161d9a948847707a852ebad018c89faee1a","user":{"login":"mapsme","id":14185141,"avatar_url":"https://avatars.githubusercontent.com/u/14185141?v=3","gravatar_id":"","url":"https://api.github.com/users/mapsme","html_url":"https://github.com/mapsme","followers_url":"https://api.github.com/users/mapsme/followers","following_url":"https://api.github.com/users/mapsme/following{/other_user}","gists_url":"https://api.github.com/users/mapsme/gists{/gist_id}","starred_url":"https://api.github.com/users/mapsme/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mapsme/subscriptions","organizations_url":"https://api.github.com/users/mapsme/orgs","repos_url":"https://api.github.com/users/mapsme/repos","events_url":"https://api.github.com/users/mapsme/events{/privacy}","received_events_url":"https://api.github.com/users/mapsme/received_events","type":"Organization","site_admin":false},"repo":{"id":42798033,"name":"omim","full_name":"mapsme/omim","owner":{"login":"mapsme","id":14185141,"avatar_url":"https://avatars.githubusercontent.com/u/14185141?v=3","gravatar_id":"","url":"https://api.github.com/users/mapsme","html_url":"https://github.com/mapsme","followers_url":"https://api.github.com/users/mapsme/followers","following_url":"https://api.github.com/users/mapsme/following{/other_user}","gists_url":"https://api.github.com/users/mapsme/gists{/gist_id}","starred_url":"https://api.github.com/users/mapsme/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mapsme/subscriptions","organizations_url":"https://api.github.com/users/mapsme/orgs","repos_url":"https://api.github.com/users/mapsme/repos","events_url":"https://api.github.com/users/mapsme/events{/privacy}","received_events_url":"https://api.github.com/users/mapsme/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mapsme/omim","description":"MAPS.ME - Offline OpenStreetMap maps for iOS/Android/Mac/Linux/Windows","fork":false,"url":"https://api.github.com/repos/mapsme/omim","forks_url":"https://api.github.com/repos/mapsme/omim/forks","keys_url":"https://api.github.com/repos/mapsme/omim/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mapsme/omim/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mapsme/omim/teams","hooks_url":"https://api.github.com/repos/mapsme/omim/hooks","issue_events_url":"https://api.github.com/repos/mapsme/omim/issues/events{/number}","events_url":"https://api.github.com/repos/mapsme/omim/events","assignees_url":"https://api.github.com/repos/mapsme/omim/assignees{/user}","branches_url":"https://api.github.com/repos/mapsme/omim/branches{/branch}","tags_url":"https://api.github.com/repos/mapsme/omim/tags","blobs_url":"https://api.github.com/repos/mapsme/omim/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mapsme/omim/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mapsme/omim/git/refs{/sha}","trees_url":"https://api.github.com/repos/mapsme/omim/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mapsme/omim/statuses/{sha}","languages_url":"https://api.github.com/repos/mapsme/omim/languages","stargazers_url":"https://api.github.com/repos/mapsme/omim/stargazers","contributors_url":"https://api.github.com/repos/mapsme/omim/contributors","subscribers_url":"https://api.github.com/repos/mapsme/omim/subscribers","subscription_url":"https://api.github.com/repos/mapsme/omim/subscription","commits_url":"https://api.github.com/repos/mapsme/omim/commits{/sha}","git_commits_url":"https://api.github.com/repos/mapsme/omim/git/commits{/sha}","comments_url":"https://api.github.com/repos/mapsme/omim/comments{/number}","issue_comment_url":"https://api.github.com/repos/mapsme/omim/issues/comments{/number}","contents_url":"https://api.github.com/repos/mapsme/omim/contents/{+path}","compare_url":"https://api.github.com/repos/mapsme/omim/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mapsme/omim/merges","archive_url":"https://api.github.com/repos/mapsme/omim/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mapsme/omim/downloads","issues_url":"https://api.github.com/repos/mapsme/omim/issues{/number}","pulls_url":"https://api.github.com/repos/mapsme/omim/pulls{/number}","milestones_url":"https://api.github.com/repos/mapsme/omim/milestones{/number}","notifications_url":"https://api.github.com/repos/mapsme/omim/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mapsme/omim/labels{/name}","releases_url":"https://api.github.com/repos/mapsme/omim/releases{/id}","deployments_url":"https://api.github.com/repos/mapsme/omim/deployments","created_at":"2015-09-20T02:57:13Z","updated_at":"2016-08-19T11:10:14Z","pushed_at":"2016-08-19T14:20:29Z","git_url":"git://github.com/mapsme/omim.git","ssh_url":"git@github.com:mapsme/omim.git","clone_url":"https://github.com/mapsme/omim.git","svn_url":"https://github.com/mapsme/omim","homepage":null,"size":2730712,"stargazers_count":1924,"watchers_count":1924,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":331,"mirror_url":null,"open_issues_count":243,"forks":331,"open_issues":243,"watchers":1924,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mapsme/omim/pulls/4083"},"html":{"href":"https://github.com/mapsme/omim/pull/4083"},"issue":{"href":"https://api.github.com/repos/mapsme/omim/issues/4083"},"comments":{"href":"https://api.github.com/repos/mapsme/omim/issues/4083/comments"},"review_comments":{"href":"https://api.github.com/repos/mapsme/omim/pulls/4083/comments"},"review_comment":{"href":"https://api.github.com/repos/mapsme/omim/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mapsme/omim/pulls/4083/commits"},"statuses":{"href":"https://api.github.com/repos/mapsme/omim/statuses/d71e23c61102d86776d6a9cb079ef0cd1b7cabf9"}}}}
{"actor":{"display_login":"mgsergio"}}